bazarr/frontend/src/@modules/socketio/reducer.ts

159 lines
3.8 KiB
TypeScript
Raw Normal View History

import { ActionCreator } from "@reduxjs/toolkit";
import {
episodesMarkBlacklistDirty,
episodesMarkDirtyById,
episodesRemoveById,
2021-08-30 02:05:54 +00:00
episodesResetHistory,
movieMarkBlacklistDirty,
movieMarkDirtyById,
movieMarkWantedDirtyById,
movieRemoveById,
movieRemoveWantedById,
2021-08-30 02:05:54 +00:00
movieResetHistory,
movieResetWanted,
seriesMarkDirtyById,
seriesMarkWantedDirtyById,
seriesRemoveById,
seriesRemoveWantedById,
2021-08-30 02:05:54 +00:00
seriesResetWanted,
siteAddNotifications,
2021-05-09 13:23:58 +00:00
siteAddProgress,
siteBootstrap,
2021-05-11 02:54:33 +00:00
siteRemoveProgress,
siteUpdateBadges,
siteUpdateInitialization,
siteUpdateOffline,
systemMarkTasksDirty,
systemUpdateAllSettings,
systemUpdateLanguages,
} from "../../@redux/actions";
import reduxStore from "../../@redux/store";
function bindReduxAction<T extends ActionCreator<any>>(action: T) {
return (...args: Parameters<T>) => {
reduxStore.dispatch(action(...args));
};
}
function bindReduxActionWithParam<T extends ActionCreator<any>>(
action: T,
...param: Parameters<T>
) {
return () => {
reduxStore.dispatch(action(...param));
};
2021-05-09 13:23:58 +00:00
}
export function createDefaultReducer(): SocketIO.Reducer[] {
return [
{
key: "connect",
any: bindReduxActionWithParam(siteUpdateOffline, false),
},
{
key: "connect",
any: bindReduxAction(siteBootstrap),
},
{
key: "connect_error",
any: () => {
const initialized = reduxStore.getState().site.initialized;
if (initialized === true) {
reduxStore.dispatch(siteUpdateOffline(true));
} else {
reduxStore.dispatch(siteUpdateInitialization("Socket.IO Error"));
}
},
},
{
key: "disconnect",
any: bindReduxActionWithParam(siteUpdateOffline, true),
},
{
key: "message",
2021-05-09 13:23:58 +00:00
update: (msg) => {
if (msg) {
const notifications = msg.map<Server.Notification>((message) => ({
message,
type: "info",
2021-05-09 03:22:24 +00:00
id: "backend-message",
timeout: 5 * 1000,
}));
reduxStore.dispatch(siteAddNotifications(notifications));
}
},
},
2021-05-09 13:23:58 +00:00
{
key: "progress",
update: bindReduxAction(siteAddProgress),
delete: bindReduxAction(siteRemoveProgress),
2021-05-09 13:23:58 +00:00
},
{
key: "series",
update: bindReduxAction(seriesMarkDirtyById),
delete: bindReduxAction(seriesRemoveById),
},
{
key: "movie",
update: bindReduxAction(movieMarkDirtyById),
delete: bindReduxAction(movieRemoveById),
},
{
key: "episode",
update: bindReduxAction(episodesMarkDirtyById),
delete: bindReduxAction(episodesRemoveById),
},
{
key: "episode-wanted",
update: bindReduxAction(seriesMarkWantedDirtyById),
delete: bindReduxAction(seriesRemoveWantedById),
},
{
key: "movie-wanted",
update: bindReduxAction(movieMarkWantedDirtyById),
delete: bindReduxAction(movieRemoveWantedById),
},
{
key: "settings",
any: bindReduxAction(systemUpdateAllSettings),
},
{
key: "languages",
any: bindReduxAction(systemUpdateLanguages),
},
{
key: "badges",
any: bindReduxAction(siteUpdateBadges),
},
{
key: "movie-history",
2021-08-30 02:05:54 +00:00
any: bindReduxAction(movieResetHistory),
},
{
key: "movie-blacklist",
any: bindReduxAction(movieMarkBlacklistDirty),
},
{
key: "episode-history",
2021-08-30 02:05:54 +00:00
any: bindReduxAction(episodesResetHistory),
},
{
key: "episode-blacklist",
any: bindReduxAction(episodesMarkBlacklistDirty),
},
2021-08-30 02:05:54 +00:00
{
key: "reset-episode-wanted",
any: bindReduxAction(seriesResetWanted),
},
{
key: "reset-movie-wanted",
any: bindReduxAction(movieResetWanted),
},
{
key: "task",
any: bindReduxAction(systemMarkTasksDirty),
},
];
}