mirror of https://github.com/morpheus65535/bazarr
189 lines
5.0 KiB
TypeScript
189 lines
5.0 KiB
TypeScript
import queryClient from "@/apis/queries";
|
|
import { QueryKeys } from "@/apis/queries/keys";
|
|
import { LOG } from "@/utilities/console";
|
|
import { setCriticalError, setOnlineStatus } from "@/utilities/event";
|
|
import { cleanNotifications, showNotification } from "@mantine/notifications";
|
|
import { notification, task } from "../task";
|
|
|
|
export function createDefaultReducer(): SocketIO.Reducer[] {
|
|
return [
|
|
{
|
|
key: "connect",
|
|
any: () => setOnlineStatus(true),
|
|
},
|
|
{
|
|
key: "connect_error",
|
|
any: () => {
|
|
setCriticalError("Cannot connect to backend");
|
|
cleanNotifications();
|
|
},
|
|
},
|
|
{
|
|
key: "disconnect",
|
|
any: () => setOnlineStatus(false),
|
|
},
|
|
{
|
|
key: "message",
|
|
update: (msg) => {
|
|
msg
|
|
.map((message) => notification.info("Notification", message))
|
|
.forEach(showNotification);
|
|
},
|
|
},
|
|
{
|
|
key: "progress",
|
|
update: task.updateProgress.bind(task),
|
|
delete: task.removeProgress.bind(task),
|
|
},
|
|
{
|
|
key: "series",
|
|
update: (ids) => {
|
|
LOG("info", "Invalidating series", ids);
|
|
ids.forEach((id) => {
|
|
queryClient.invalidateQueries([QueryKeys.Series, id]);
|
|
});
|
|
},
|
|
delete: (ids) => {
|
|
LOG("info", "Invalidating series", ids);
|
|
ids.forEach((id) => {
|
|
queryClient.invalidateQueries([QueryKeys.Series, id]);
|
|
});
|
|
},
|
|
},
|
|
{
|
|
key: "movie",
|
|
update: (ids) => {
|
|
LOG("info", "Invalidating movies", ids);
|
|
ids.forEach((id) => {
|
|
queryClient.invalidateQueries([QueryKeys.Movies, id]);
|
|
});
|
|
},
|
|
delete: (ids) => {
|
|
LOG("info", "Invalidating movies", ids);
|
|
ids.forEach((id) => {
|
|
queryClient.invalidateQueries([QueryKeys.Movies, id]);
|
|
});
|
|
},
|
|
},
|
|
{
|
|
key: "episode",
|
|
update: (ids) => {
|
|
// Currently invalidate episodes is impossible because we don't directly fetch episodes (we fetch episodes by series id)
|
|
// So we need to invalidate series instead
|
|
// TODO: Make a query for episodes and invalidate that instead
|
|
LOG("info", "Invalidating episodes", ids);
|
|
ids.forEach((id) => {
|
|
const episode = queryClient.getQueryData<Item.Episode>([
|
|
QueryKeys.Episodes,
|
|
id,
|
|
]);
|
|
if (episode !== undefined) {
|
|
queryClient.invalidateQueries([
|
|
QueryKeys.Series,
|
|
episode.sonarrSeriesId,
|
|
]);
|
|
}
|
|
});
|
|
},
|
|
delete: (ids) => {
|
|
LOG("info", "Invalidating episodes", ids);
|
|
ids.forEach((id) => {
|
|
const episode = queryClient.getQueryData<Item.Episode>([
|
|
QueryKeys.Episodes,
|
|
id,
|
|
]);
|
|
if (episode !== undefined) {
|
|
queryClient.invalidateQueries([
|
|
QueryKeys.Series,
|
|
episode.sonarrSeriesId,
|
|
]);
|
|
}
|
|
});
|
|
},
|
|
},
|
|
{
|
|
key: "episode-wanted",
|
|
update: (ids) => {
|
|
// Find a better way to update wanted
|
|
queryClient.invalidateQueries([QueryKeys.Episodes, QueryKeys.Wanted]);
|
|
},
|
|
delete: () => {
|
|
queryClient.invalidateQueries([QueryKeys.Episodes, QueryKeys.Wanted]);
|
|
},
|
|
},
|
|
{
|
|
key: "movie-wanted",
|
|
update: (ids) => {
|
|
// Find a better way to update wanted
|
|
queryClient.invalidateQueries([QueryKeys.Movies, QueryKeys.Wanted]);
|
|
},
|
|
delete: () => {
|
|
queryClient.invalidateQueries([QueryKeys.Movies, QueryKeys.Wanted]);
|
|
},
|
|
},
|
|
{
|
|
key: "settings",
|
|
any: () => {
|
|
queryClient.invalidateQueries([QueryKeys.System]);
|
|
},
|
|
},
|
|
{
|
|
key: "languages",
|
|
any: () => {
|
|
queryClient.invalidateQueries([QueryKeys.System, QueryKeys.Languages]);
|
|
},
|
|
},
|
|
{
|
|
key: "badges",
|
|
any: () => {
|
|
queryClient.invalidateQueries([QueryKeys.System, QueryKeys.Badges]);
|
|
},
|
|
},
|
|
{
|
|
key: "movie-history",
|
|
any: () => {
|
|
queryClient.invalidateQueries([QueryKeys.Movies, QueryKeys.History]);
|
|
},
|
|
},
|
|
{
|
|
key: "movie-blacklist",
|
|
any: () => {
|
|
queryClient.invalidateQueries([QueryKeys.Movies, QueryKeys.Blacklist]);
|
|
},
|
|
},
|
|
{
|
|
key: "episode-history",
|
|
any: () => {
|
|
queryClient.invalidateQueries([QueryKeys.Episodes, QueryKeys.History]);
|
|
},
|
|
},
|
|
{
|
|
key: "episode-blacklist",
|
|
any: () => {
|
|
queryClient.invalidateQueries([
|
|
QueryKeys.Episodes,
|
|
QueryKeys.Blacklist,
|
|
]);
|
|
},
|
|
},
|
|
{
|
|
key: "reset-episode-wanted",
|
|
any: () => {
|
|
queryClient.invalidateQueries([QueryKeys.Episodes, QueryKeys.Wanted]);
|
|
},
|
|
},
|
|
{
|
|
key: "reset-movie-wanted",
|
|
any: () => {
|
|
queryClient.invalidateQueries([QueryKeys.Movies, QueryKeys.Wanted]);
|
|
},
|
|
},
|
|
{
|
|
key: "task",
|
|
any: () => {
|
|
queryClient.invalidateQueries([QueryKeys.System, QueryKeys.Tasks]);
|
|
},
|
|
},
|
|
];
|
|
}
|