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