lbry-desktop/ui/redux/reducers/settings.js

185 lines
6.2 KiB
JavaScript
Raw Normal View History

import * as ACTIONS from 'constants/action_types';
2019-08-16 16:57:15 +02:00
import moment from 'moment';
2019-12-02 23:57:10 +01:00
import SUPPORTED_LANGUAGES from 'constants/supported_languages';
import { ACTIONS as LBRY_REDUX_ACTIONS, SETTINGS, SHARED_PREFERENCES } from 'lbry-redux';
import { getSubsetFromKeysArray } from 'util/sync-settings';
import { UNSYNCED_SETTINGS } from 'config';
2020-11-09 01:26:42 +01:00
import homepages from 'homepages';
const homepageKeys = Object.keys(homepages);
const { CLIENT_SYNC_KEYS } = SHARED_PREFERENCES;
const settingsToIgnore = (UNSYNCED_SETTINGS && UNSYNCED_SETTINGS.trim().split(' ')) || [];
const clientSyncKeys = settingsToIgnore.length
? CLIENT_SYNC_KEYS.filter(k => !settingsToIgnore.includes(k))
: CLIENT_SYNC_KEYS;
2017-06-06 06:21:55 +02:00
const reducers = {};
let settingLanguage = [];
try {
let appLanguage = window.localStorage.getItem(SETTINGS.LANGUAGE);
settingLanguage.push(appLanguage);
} catch (e) {}
settingLanguage.push(window.navigator.language.slice(0, 2));
settingLanguage.push('en');
2017-06-28 09:12:01 +02:00
const defaultState = {
2019-09-17 20:49:03 +02:00
isNight: false,
findingFFmpeg: false,
loadedLanguages: [...Object.keys(window.i18n_messages), 'en'] || ['en'],
customWalletServers: [],
sharedPreferences: {},
2019-09-17 20:49:03 +02:00
daemonSettings: {},
daemonStatus: { ffmpeg_status: {} },
2017-06-28 09:12:01 +02:00
clientSettings: {
2019-09-17 20:49:03 +02:00
// UX
[SETTINGS.EMAIL_COLLECTION_ACKNOWLEDGED]: false,
[SETTINGS.FOLLOWING_ACKNOWLEDGED]: false,
[SETTINGS.TAGS_ACKNOWLEDGED]: false,
2020-08-20 07:37:55 +02:00
[SETTINGS.ENABLE_SYNC]: IS_WEB,
[SETTINGS.ENABLE_PUBLISH_PREVIEW]: true,
2019-09-17 20:49:03 +02:00
// UI
[SETTINGS.LANGUAGE]: settingLanguage.find(language => SUPPORTED_LANGUAGES[language]),
[SETTINGS.SEARCH_IN_LANGUAGE]: false,
2019-10-03 23:40:54 +02:00
[SETTINGS.THEME]: __('light'),
[SETTINGS.THEMES]: [__('light'), __('dark')],
2020-11-09 01:26:42 +01:00
[SETTINGS.HOMEPAGE]: settingLanguage.find(language => homepageKeys.includes(language)) || 'en',
2019-09-17 20:49:03 +02:00
[SETTINGS.HIDE_SPLASH_ANIMATION]: false,
[SETTINGS.HIDE_BALANCE]: false,
[SETTINGS.OS_NOTIFICATIONS_ENABLED]: true,
[SETTINGS.AUTOMATIC_DARK_MODE_ENABLED]: false,
2020-08-21 17:49:13 +02:00
[SETTINGS.TILE_LAYOUT]: true,
2019-11-18 19:30:15 +01:00
[SETTINGS.DARK_MODE_TIMES]: {
2019-08-18 18:54:55 +02:00
from: { hour: '21', min: '00', formattedTime: '21:00' },
to: { hour: '8', min: '00', formattedTime: '8:00' },
2019-09-17 20:49:03 +02:00
},
// Purchasing
[SETTINGS.INSTANT_PURCHASE_ENABLED]: false,
[SETTINGS.INSTANT_PURCHASE_MAX]: {
currency: 'LBC',
amount: 0.1,
},
// Content
[SETTINGS.SHOW_MATURE]: false,
[SETTINGS.AUTOPLAY]: true,
[SETTINGS.AUTOPLAY_NEXT]: true,
2019-09-17 20:49:03 +02:00
[SETTINGS.FLOATING_PLAYER]: true,
[SETTINGS.AUTO_DOWNLOAD]: true,
[SETTINGS.HIDE_REPOSTS]: false,
2019-11-18 19:30:15 +01:00
// OS
[SETTINGS.AUTO_LAUNCH]: true,
2020-08-13 18:57:00 +02:00
[SETTINGS.TO_TRAY_WHEN_CLOSED]: true,
2017-06-28 09:12:01 +02:00
},
};
reducers[ACTIONS.REHYDRATE] = (state, action) => {
const { clientSettings } = state;
if (action && action.payload && action.payload.settings) {
const persistedSettings = action.payload && action.payload.settings;
const persistedClientSettings = persistedSettings.clientSettings;
const newClientSettings = { ...clientSettings, ...persistedClientSettings };
return Object.assign({}, state, { ...persistedSettings, clientSettings: newClientSettings });
}
return Object.assign({}, state, { clientSettings });
};
reducers[ACTIONS.FINDING_FFMPEG_STARTED] = state =>
Object.assign({}, state, {
findingFFmpeg: true,
});
reducers[ACTIONS.FINDING_FFMPEG_COMPLETED] = state =>
Object.assign({}, state, {
findingFFmpeg: false,
});
2019-12-12 21:18:13 +01:00
reducers[LBRY_REDUX_ACTIONS.DAEMON_SETTINGS_RECEIVED] = (state, action) =>
Object.assign({}, state, {
2017-06-06 23:19:12 +02:00
daemonSettings: action.data.settings,
});
2019-12-12 21:18:13 +01:00
reducers[LBRY_REDUX_ACTIONS.DAEMON_STATUS_RECEIVED] = (state, action) =>
Object.assign({}, state, {
daemonStatus: action.data.status,
});
reducers[ACTIONS.CLIENT_SETTING_CHANGED] = (state, action) => {
2017-06-28 09:12:01 +02:00
const { key, value } = action.data;
const clientSettings = Object.assign({}, state.clientSettings);
clientSettings[key] = value;
return Object.assign({}, state, {
clientSettings,
});
};
2019-08-16 16:57:15 +02:00
reducers[ACTIONS.UPDATE_IS_NIGHT] = state => {
const { from, to } = state.clientSettings[SETTINGS.DARK_MODE_TIMES];
2019-08-16 16:57:15 +02:00
const momentNow = moment();
2019-08-18 18:54:55 +02:00
const startNightMoment = moment(from.formattedTime, 'HH:mm');
const endNightMoment = moment(to.formattedTime, 'HH:mm');
2019-08-16 16:57:15 +02:00
const isNight = !(momentNow.isAfter(endNightMoment) && momentNow.isBefore(startNightMoment));
return Object.assign({}, state, {
isNight,
2018-01-14 10:14:15 +01:00
});
2019-08-16 16:57:15 +02:00
};
2018-01-14 10:14:15 +01:00
2019-11-08 21:51:42 +01:00
reducers[ACTIONS.DOWNLOAD_LANGUAGE_SUCCESS] = (state, action) => {
const { loadedLanguages } = state;
const { language } = action.data;
2019-12-06 14:58:17 +01:00
if (language && loadedLanguages && !loadedLanguages.includes(language)) {
2019-11-08 21:51:42 +01:00
return Object.assign({}, state, {
loadedLanguages: [...loadedLanguages, language],
});
} else {
return state;
}
};
reducers[LBRY_REDUX_ACTIONS.SHARED_PREFERENCE_SET] = (state, action) => {
const { key, value } = action.data;
2019-12-12 21:18:13 +01:00
const sharedPreferences = Object.assign({}, state.sharedPreferences);
sharedPreferences[key] = value;
return Object.assign({}, state, {
2019-12-12 21:18:13 +01:00
sharedPreferences,
});
};
reducers[ACTIONS.SYNC_CLIENT_SETTINGS] = state => {
const { clientSettings } = state;
const sharedPreferences = Object.assign({}, state.sharedPreferences);
const selectedClientSettings = getSubsetFromKeysArray(clientSettings, clientSyncKeys);
const newSharedPreferences = { ...sharedPreferences, ...selectedClientSettings };
return Object.assign({}, state, { sharedPreferences: newSharedPreferences });
};
reducers[LBRY_REDUX_ACTIONS.USER_STATE_POPULATE] = (state, action) => {
const { clientSettings: currentClientSettings } = state;
2019-12-12 21:18:13 +01:00
const { settings: sharedPreferences } = action.data;
2020-08-28 17:25:47 +02:00
const selectedSettings = sharedPreferences ? getSubsetFromKeysArray(sharedPreferences, clientSyncKeys) : {};
const mergedClientSettings = { ...currentClientSettings, ...selectedSettings };
2020-08-28 17:25:47 +02:00
const newSharedPreferences = sharedPreferences || {};
2020-09-09 19:37:55 +02:00
return Object.assign({}, state, {
sharedPreferences: newSharedPreferences,
clientSettings: mergedClientSettings,
});
};
2019-12-12 21:18:13 +01:00
reducers[LBRY_REDUX_ACTIONS.SAVE_CUSTOM_WALLET_SERVERS] = (state, action) => {
return Object.assign({}, state, { customWalletServers: action.data });
};
export default function reducer(state = defaultState, action) {
const handler = reducers[action.type];
if (handler) return handler(state, action);
return state;
}