fix: logins now refresh on plugins load

feat: Added tar archive support
fix: Downloaded games and emulator execute permission now updated
fix: Fixed rclone for linux
fix: on screen keyaboard only now shows up when using a gamepad or touch
This commit is contained in:
Simeon Radivoev 2026-04-21 23:21:50 +03:00
parent 6aacec2c0d
commit 7bd0ebdcca
Signed by: simeonradivoev
GPG key ID: C16C2132A7660C8E
39 changed files with 523 additions and 275 deletions

View file

@ -1,6 +1,6 @@
import { DefaultRommStaleTime, GameListFilterType, RommLoginDataSchema } from "@/shared/constants";
import { rommApi, settingsApi } from "../clientApi";
import { InvalidateQueryFilters, mutationOptions, QueryFilters, queryOptions, useMutation } from "@tanstack/react-query";
import { InvalidateQueryFilters, mutationOptions, QueryClient, QueryFilters, queryOptions, useMutation } from "@tanstack/react-query";
import z from "zod";
import { statsApiStatsGetOptions } from "@/clients/romm/@tanstack/react-query.gen";
@ -23,6 +23,20 @@ export const gameQuery = (source: string, id: string) => queryOptions({
},
});
export const rommLogoutMutation = mutationOptions({ mutationKey: ["romm", "auth", "logout"], mutationFn: () => rommApi.api.romm.logout.romm.post() });
export const invalidateLogin = (client: QueryClient) =>
{
return client.invalidateQueries({
predicate (query)
{
return query.queryKey.includes('auth')
|| query.queryKey.includes('games')
|| query.queryKey.includes('game')
|| query.queryKey.includes('platform')
|| query.queryKey.includes('platforms')
|| query.queryKey.includes('collections');
},
});
};
export const rommQrLoginMutation = mutationOptions({
mutationKey: ['login', 'qr', 'cancel'],
mutationFn: async () =>
@ -30,7 +44,11 @@ export const rommQrLoginMutation = mutationOptions({
const { data, error } = await rommApi.api.romm.login.romm.qr.post();
if (error) throw error;
return data;
}
},
onSuccess: (d, v, r, c) =>
{
invalidateLogin(c.client);
},
});
export const rommLoginMutation = mutationOptions({
mutationKey: ["romm", "login"],
@ -41,7 +59,7 @@ export const rommLoginMutation = mutationOptions({
},
onSuccess: (d, v, r, c) =>
{
c.client.invalidateQueries({ queryKey: ['romm', 'auth'] });
invalidateLogin(c.client);
},
onError: (e) =>
{

View file

@ -2,6 +2,7 @@ import { mutationOptions, queryOptions } from "@tanstack/react-query";
import { getErrorMessage } from "react-error-boundary";
import toast from "react-hot-toast";
import { rommApi, settingsApi } from "../clientApi";
import { invalidateLogin } from "./romm";
export const changeDownloadsMutation = mutationOptions({
mutationKey: ["setting", "downloads"],
@ -29,21 +30,25 @@ export const autoEmulatorsQuery = queryOptions({
}
});
export const twitchLogoutMutation = mutationOptions({
mutationKey: ['twitch', 'logout'],
mutationKey: ['twitch', 'auth', 'logout'],
mutationFn: () =>
{
return rommApi.api.romm.logout.twitch.post();
}
});
export const twitchLoginMutation = mutationOptions({
mutationKey: ['twitch', 'login'],
mutationKey: ['twitch', 'auth', 'login'],
mutationFn: (openInBrowser: boolean) =>
{
return rommApi.api.romm.login.twitch.post({ openInBrowser });
}
},
onSuccess (data, variables, onMutateResult, context)
{
invalidateLogin(context.client);
},
});
export const twitchLoginVerificationQuery = queryOptions({
queryKey: ['twitch', 'login', 'status'],
queryKey: ['twitch', 'login', 'status', 'auth'],
retry (failureCount, error)
{
if ((error as any).status === 404)