Persist settings in ${XDG_CONFIG_HOME}/flipper/settings

Summary:
Moves the settings state from electron local storage into a json file in the users configured config location.
Unless modified by the user, this will usually be `~/.config/flipper/settings.json`

Settings will now persist across re-installs, and can now be easily inspected and backed up.

Reviewed By: passy

Differential Revision: D17712687

fbshipit-source-id: 1e778063e41d0a1a86145817b9797bf0458121da
This commit is contained in:
John Knox
2019-10-07 08:49:05 -07:00
committed by Facebook Github Bot
parent 7775e82851
commit 85c0ec0d13
4 changed files with 36 additions and 26 deletions

View File

@@ -27,11 +27,14 @@ import plugins, {
Action as PluginsAction,
} from './plugins';
import settings, {
State as SettingsState,
Settings as SettingsState,
Action as SettingsAction,
} from './settings';
import user, {State as UserState, Action as UserAction} from './user';
import JsonFileStorage from '../utils/jsonFileReduxPersistStorage';
import os from 'os';
import {resolve} from 'path';
import xdg from 'xdg-basedir';
import {persistReducer, PersistPartial} from 'redux-persist';
import {Store as ReduxStore, MiddlewareAPI as ReduxMiddlewareAPI} from 'redux';
@@ -61,6 +64,14 @@ export type State = {
export type Store = ReduxStore<State, Actions>;
export type MiddlewareAPI = ReduxMiddlewareAPI<Dispatch<Actions>, State>;
const settingsStorage = new JsonFileStorage(
resolve(
...(xdg.config ? [xdg.config] : [os.homedir(), '.config']),
'flipper',
'settings.json',
),
);
export default combineReducers<State, Actions>({
application: persistReducer<ApplicationState, Actions>(
{
@@ -101,7 +112,7 @@ export default combineReducers<State, Actions>({
user,
),
settingsState: persistReducer(
{key: 'settings', storage, whitelist: ['settings']},
{key: 'settings', storage: settingsStorage},
settings,
),
});