diff --git a/.gitignore b/.gitignore index 5e4a3c5..cbb590b 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,8 @@ next-env.d.ts .idea .vscode +.cache + # Environment variables .env .env.local diff --git a/src/app/api/komga/cache/mode/route.ts b/src/app/api/komga/cache/mode/route.ts new file mode 100644 index 0000000..bd5b925 --- /dev/null +++ b/src/app/api/komga/cache/mode/route.ts @@ -0,0 +1,23 @@ +import { NextResponse } from "next/server"; +import { serverCacheService } from "@/lib/services/server-cache.service"; + +export async function GET() { + return NextResponse.json({ mode: serverCacheService.getCacheMode() }); +} + +export async function POST(request: Request) { + try { + const { mode } = await request.json(); + if (mode !== "file" && mode !== "memory") { + return NextResponse.json( + { error: "Invalid mode. Must be 'file' or 'memory'" }, + { status: 400 } + ); + } + + serverCacheService.setCacheMode(mode); + return NextResponse.json({ mode: serverCacheService.getCacheMode() }); + } catch (error) { + return NextResponse.json({ error: "Invalid request" }, { status: 400 }); + } +} diff --git a/src/components/settings/CacheModeSwitch.tsx b/src/components/settings/CacheModeSwitch.tsx new file mode 100644 index 0000000..9612c33 --- /dev/null +++ b/src/components/settings/CacheModeSwitch.tsx @@ -0,0 +1,59 @@ +"use client"; + +import { useState } from "react"; +import { Label } from "@/components/ui/label"; +import { Switch } from "@/components/ui/switch"; +import { useToast } from "@/components/ui/use-toast"; +import { usePreferences } from "@/contexts/PreferencesContext"; + +export function CacheModeSwitch() { + const [isLoading, setIsLoading] = useState(false); + const { toast } = useToast(); + const { preferences, updatePreferences } = usePreferences(); + + const handleToggle = async (checked: boolean) => { + setIsLoading(true); + try { + // Mettre à jour les préférences + await updatePreferences({ cacheMode: checked ? "memory" : "file" }); + + // Mettre à jour le mode de cache côté serveur + const res = await fetch("/api/komga/cache/mode", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ mode: checked ? "memory" : "file" }), + }); + + if (!res.ok) throw new Error(); + + toast({ + title: "Mode de cache modifié", + description: `Le cache est maintenant en mode ${checked ? "mémoire" : "fichier"}`, + }); + } catch (error) { + toast({ + variant: "destructive", + title: "Erreur", + description: "Impossible de modifier le mode de cache", + }); + } finally { + setIsLoading(false); + } + }; + + return ( +
+ Le cache en mémoire est plus rapide mais ne persiste pas entre les redémarrages +
+