You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
274 lines
9.8 KiB
274 lines
9.8 KiB
import _ from 'lodash';
|
|
import $ from 'jquery';
|
|
import { batchActions } from 'redux-batched-actions';
|
|
import * as types from './actionTypes';
|
|
import createFetchHandler from './Creators/createFetchHandler';
|
|
import createFetchSchemaHandler from './Creators/createFetchSchemaHandler';
|
|
import createSaveHandler from './Creators/createSaveHandler';
|
|
import createSaveProviderHandler, { createCancelSaveProviderHandler } from './Creators/createSaveProviderHandler';
|
|
import createRemoveItemHandler from './Creators/createRemoveItemHandler';
|
|
import createTestProviderHandler, { createCancelTestProviderHandler } from './Creators/createTestProviderHandler';
|
|
import { set, update, clearPendingChanges } from './baseActions';
|
|
|
|
const settingsActionHandlers = {
|
|
[types.FETCH_UI_SETTINGS]: createFetchHandler('ui', '/config/ui'),
|
|
[types.SAVE_UI_SETTINGS]: createSaveHandler('ui', '/config/ui', (state) => state.settings.ui),
|
|
|
|
[types.FETCH_MEDIA_MANAGEMENT_SETTINGS]: createFetchHandler('mediaManagement', '/config/mediamanagement'),
|
|
[types.SAVE_MEDIA_MANAGEMENT_SETTINGS]: createSaveHandler('mediaManagement', '/config/mediamanagement', (state) => state.settings.mediaManagement),
|
|
|
|
[types.FETCH_NAMING_SETTINGS]: createFetchHandler('naming', '/config/naming'),
|
|
[types.SAVE_NAMING_SETTINGS]: createSaveHandler('naming', '/config/naming', (state) => state.settings.naming),
|
|
|
|
[types.FETCH_NAMING_EXAMPLES]: function(payload) {
|
|
const section = 'namingExamples';
|
|
|
|
return function(dispatch, getState) {
|
|
dispatch(set({ section, isFetching: true }));
|
|
|
|
const naming = getState().settings.naming;
|
|
|
|
const promise = $.ajax({
|
|
url: '/config/naming/examples',
|
|
data: Object.assign({}, naming.item, naming.pendingChanges)
|
|
});
|
|
|
|
promise.done((data) => {
|
|
dispatch(batchActions([
|
|
update({ section, data }),
|
|
|
|
set({
|
|
section,
|
|
isFetching: false,
|
|
isPopulated: true,
|
|
error: null
|
|
})
|
|
]));
|
|
});
|
|
|
|
promise.fail((xhr) => {
|
|
dispatch(set({
|
|
section,
|
|
isFetching: false,
|
|
isPopulated: false,
|
|
error: xhr
|
|
}));
|
|
});
|
|
};
|
|
},
|
|
|
|
[types.REORDER_DELAY_PROFILE]: function(payload) {
|
|
const section = 'delayProfiles';
|
|
|
|
return function(dispatch, getState) {
|
|
const { id, moveIndex } = payload;
|
|
const moveOrder = moveIndex + 1;
|
|
const delayProfiles = getState().settings.delayProfiles.items;
|
|
const moving = _.find(delayProfiles, { id });
|
|
|
|
// Don't move if the order hasn't changed
|
|
if (moving.order === moveOrder) {
|
|
return;
|
|
}
|
|
|
|
const after = moveIndex > 0 ? _.find(delayProfiles, { order: moveIndex }) : null;
|
|
const afterQueryParam = after ? `after=${after.id}` : '';
|
|
|
|
const promise = $.ajax({
|
|
method: 'PUT',
|
|
url: `/delayprofile/reorder/${id}?${afterQueryParam}`
|
|
});
|
|
|
|
promise.done((data) => {
|
|
dispatch(update({ section, data }));
|
|
});
|
|
};
|
|
},
|
|
|
|
[types.FETCH_QUALITY_PROFILES]: createFetchHandler('qualityProfiles', '/qualityprofile'),
|
|
[types.FETCH_QUALITY_PROFILE_SCHEMA]: createFetchSchemaHandler('qualityProfiles', '/qualityprofile/schema'),
|
|
|
|
[types.SAVE_QUALITY_PROFILE]: createSaveProviderHandler(
|
|
'qualityProfiles',
|
|
'/qualityprofile',
|
|
(state) => state.settings.qualityProfiles),
|
|
|
|
[types.DELETE_QUALITY_PROFILE]: createRemoveItemHandler(
|
|
'qualityProfiles',
|
|
'/qualityprofile',
|
|
(state) => state.settings.qualityProfiles),
|
|
|
|
[types.FETCH_LANGUAGE_PROFILES]: createFetchHandler('languageProfiles', '/languageprofile'),
|
|
[types.FETCH_LANGUAGE_PROFILE_SCHEMA]: createFetchSchemaHandler('languageProfiles', '/languageprofile/schema'),
|
|
|
|
[types.SAVE_LANGUAGE_PROFILE]: createSaveProviderHandler(
|
|
'languageProfiles',
|
|
'/languageprofile',
|
|
(state) => state.settings.languageProfiles),
|
|
|
|
[types.DELETE_LANGUAGE_PROFILE]: createRemoveItemHandler(
|
|
'languageProfiles',
|
|
'/languageprofile',
|
|
(state) => state.settings.languageProfiles),
|
|
|
|
[types.FETCH_DELAY_PROFILES]: createFetchHandler('delayProfiles', '/delayprofile'),
|
|
|
|
[types.SAVE_DELAY_PROFILE]: createSaveProviderHandler(
|
|
'delayProfiles',
|
|
'/delayprofile',
|
|
(state) => state.settings.delayProfiles),
|
|
|
|
[types.DELETE_DELAY_PROFILE]: createRemoveItemHandler(
|
|
'delayProfiles',
|
|
'/delayprofile',
|
|
(state) => state.settings.delayProfiles),
|
|
|
|
[types.FETCH_QUALITY_DEFINITIONS]: createFetchHandler('qualityDefinitions', '/qualitydefinition'),
|
|
[types.SAVE_QUALITY_DEFINITIONS]: createSaveHandler('qualityDefinitions', '/qualitydefinition', (state) => state.settings.qualitydefinitions),
|
|
|
|
[types.SAVE_QUALITY_DEFINITIONS]: function() {
|
|
const section = 'qualityDefinitions';
|
|
|
|
return function(dispatch, getState) {
|
|
const qualityDefinitions = getState().settings.qualityDefinitions;
|
|
|
|
const upatedDefinitions = Object.keys(qualityDefinitions.pendingChanges).map((key) => {
|
|
const id = parseInt(key);
|
|
const pendingChanges = qualityDefinitions.pendingChanges[id] || {};
|
|
const item = _.find(qualityDefinitions.items, { id });
|
|
|
|
return Object.assign({}, item, pendingChanges);
|
|
});
|
|
|
|
// If there is nothing to save don't bother isSaving
|
|
if (!upatedDefinitions || !upatedDefinitions.length) {
|
|
return;
|
|
}
|
|
|
|
const promise = $.ajax({
|
|
method: 'PUT',
|
|
url: '/qualityDefinition/update',
|
|
data: JSON.stringify(upatedDefinitions)
|
|
});
|
|
|
|
promise.done((data) => {
|
|
dispatch(batchActions([
|
|
update({ section, data }),
|
|
clearPendingChanges({ section: 'qualityDefinitions' })
|
|
]));
|
|
});
|
|
};
|
|
},
|
|
|
|
[types.FETCH_INDEXERS]: createFetchHandler('indexers', '/indexer'),
|
|
[types.FETCH_INDEXER_SCHEMA]: createFetchSchemaHandler('indexers', '/indexer/schema'),
|
|
|
|
[types.SAVE_INDEXER]: createSaveProviderHandler(
|
|
'indexers',
|
|
'/indexer',
|
|
(state) => state.settings.indexers),
|
|
|
|
[types.CANCEL_SAVE_INDEXER]: createCancelSaveProviderHandler('indexers'),
|
|
|
|
[types.DELETE_INDEXER]: createRemoveItemHandler(
|
|
'indexers',
|
|
'/indexer',
|
|
(state) => state.settings.indexers),
|
|
|
|
[types.TEST_INDEXER]: createTestProviderHandler(
|
|
'indexers',
|
|
'/indexer',
|
|
(state) => state.settings.indexers),
|
|
|
|
[types.CANCEL_TEST_INDEXER]: createCancelTestProviderHandler('indexers'),
|
|
|
|
[types.FETCH_INDEXER_OPTIONS]: createFetchHandler('indexerOptions', '/config/indexer'),
|
|
[types.SAVE_INDEXER_OPTIONS]: createSaveHandler('indexerOptions', '/config/indexer', (state) => state.settings.indexerOptions),
|
|
|
|
[types.FETCH_RESTRICTIONS]: createFetchHandler('restrictions', '/restriction'),
|
|
|
|
[types.SAVE_RESTRICTION]: createSaveProviderHandler(
|
|
'restrictions',
|
|
'/restriction',
|
|
(state) => state.settings.restrictions),
|
|
|
|
[types.DELETE_RESTRICTION]: createRemoveItemHandler(
|
|
'restrictions',
|
|
'/restriction',
|
|
(state) => state.settings.restrictions),
|
|
|
|
[types.FETCH_DOWNLOAD_CLIENTS]: createFetchHandler('downloadClients', '/downloadclient'),
|
|
[types.FETCH_DOWNLOAD_CLIENT_SCHEMA]: createFetchSchemaHandler('downloadClients', '/downloadclient/schema'),
|
|
|
|
[types.SAVE_DOWNLOAD_CLIENT]: createSaveProviderHandler(
|
|
'downloadClients',
|
|
'/downloadclient',
|
|
(state) => state.settings.downloadClients),
|
|
|
|
[types.CANCEL_SAVE_DOWNLOAD_CLIENT]: createCancelSaveProviderHandler('downloadClients'),
|
|
|
|
[types.DELETE_DOWNLOAD_CLIENT]: createRemoveItemHandler(
|
|
'downloadClients',
|
|
'/downloadclient',
|
|
(state) => state.settings.downloadClients),
|
|
|
|
[types.TEST_DOWNLOAD_CLIENT]: createTestProviderHandler(
|
|
'downloadClients',
|
|
'/downloadclient',
|
|
(state) => state.settings.downloadClients),
|
|
|
|
[types.CANCEL_TEST_DOWNLOAD_CLIENT]: createCancelTestProviderHandler('downloadClients'),
|
|
|
|
[types.FETCH_DOWNLOAD_CLIENT_OPTIONS]: createFetchHandler('downloadClientOptions', '/config/downloadclient'),
|
|
[types.SAVE_DOWNLOAD_CLIENT_OPTIONS]: createSaveHandler('downloadClientOptions', '/config/downloadclient', (state) => state.settings.downloadClientOptions),
|
|
|
|
[types.FETCH_REMOTE_PATH_MAPPINGS]: createFetchHandler('remotePathMappings', '/remotepathmapping'),
|
|
|
|
[types.SAVE_REMOTE_PATH_MAPPING]: createSaveProviderHandler(
|
|
'remotePathMappings',
|
|
'/remotepathmapping',
|
|
(state) => state.settings.remotePathMappings),
|
|
|
|
[types.DELETE_REMOTE_PATH_MAPPING]: createRemoveItemHandler(
|
|
'remotePathMappings',
|
|
'/remotepathmapping',
|
|
(state) => state.settings.remotePathMappings),
|
|
|
|
[types.FETCH_NOTIFICATIONS]: createFetchHandler('notifications', '/notification'),
|
|
[types.FETCH_NOTIFICATION_SCHEMA]: createFetchSchemaHandler('notifications', '/notification/schema'),
|
|
|
|
[types.SAVE_NOTIFICATION]: createSaveProviderHandler(
|
|
'notifications',
|
|
'/notification',
|
|
(state) => state.settings.notifications),
|
|
|
|
[types.CANCEL_SAVE_NOTIFICATION]: createCancelSaveProviderHandler('notifications'),
|
|
|
|
[types.DELETE_NOTIFICATION]: createRemoveItemHandler(
|
|
'notifications',
|
|
'/notification',
|
|
(state) => state.settings.notifications),
|
|
|
|
[types.TEST_NOTIFICATION]: createTestProviderHandler(
|
|
'notifications',
|
|
'/notification',
|
|
(state) => state.settings.notifications),
|
|
|
|
[types.CANCEL_TEST_NOTIFICATION]: createCancelTestProviderHandler('notifications'),
|
|
|
|
[types.FETCH_METADATA]: createFetchHandler('metadata', '/metadata'),
|
|
|
|
[types.SAVE_METADATA]: createSaveProviderHandler(
|
|
'metadata',
|
|
'/metadata',
|
|
(state) => state.settings.metadata),
|
|
|
|
[types.FETCH_METADATA_PROVIDER]: createFetchHandler('metadataProvider', '/config/metadataProvider'),
|
|
[types.SAVE_METADATA_PROVIDER]: createSaveHandler('metadataProvider', '/config/metadataProvider', (state) => state.settings.metadataProvider),
|
|
|
|
[types.FETCH_GENERAL_SETTINGS]: createFetchHandler('general', '/config/host'),
|
|
[types.SAVE_GENERAL_SETTINGS]: createSaveHandler('general', '/config/host', (state) => state.settings.general)
|
|
};
|
|
|
|
export default settingsActionHandlers;
|