import { Iterable, fromJS } from 'immutable'; import { hydrateCompose } from './compose'; import { importFetchedAccounts } from './importer'; import { saveSettings } from './settings'; export const STORE_HYDRATE = 'STORE_HYDRATE'; export const STORE_HYDRATE_LAZY = 'STORE_HYDRATE_LAZY'; const convertState = rawState => fromJS(rawState, (k, v) => Iterable.isIndexed(v) ? v.toList() : v.toMap()); const applyMigrations = (state) => { return state.withMutations(state => { // Migrate glitch-soc local-only “Show unread marker” setting to Mastodon's setting if (state.getIn(['local_settings', 'notifications', 'show_unread']) !== undefined) { // Only change if the Mastodon setting does not deviate from default if (state.getIn(['settings', 'notifications', 'showUnread']) !== false) { state.setIn(['settings', 'notifications', 'showUnread'], state.getIn(['local_settings', 'notifications', 'show_unread'])); } state.removeIn(['local_settings', 'notifications', 'show_unread']) } }); }; export function hydrateStore(rawState) { return dispatch => { const state = applyMigrations(convertState(rawState)); dispatch({ type: STORE_HYDRATE, state, }); dispatch(hydrateCompose()); dispatch(importFetchedAccounts(Object.values(rawState.accounts))); dispatch(saveSettings()); }; };