From aed35ce2b9bd2ce3aff3f13eec40c5adc29707a2 Mon Sep 17 00:00:00 2001
From: Julien Froidefond
Date: Wed, 19 Feb 2025 16:33:21 +0100
Subject: [PATCH] feat : File caching option
---
.gitignore | 2 +
src/app/api/komga/cache/mode/route.ts | 23 ++
src/components/settings/CacheModeSwitch.tsx | 59 ++++
src/components/settings/ClientSettings.tsx | 11 +
src/components/ui/separator.tsx | 25 ++
src/contexts/PreferencesContext.tsx | 17 +-
src/lib/models/preferences.model.ts | 5 +
src/lib/services/preferences.service.ts | 69 +++--
src/lib/services/server-cache.service.ts | 289 ++++++++++++++++++--
9 files changed, 445 insertions(+), 55 deletions(-)
create mode 100644 src/app/api/komga/cache/mode/route.ts
create mode 100644 src/components/settings/CacheModeSwitch.tsx
create mode 100644 src/components/ui/separator.tsx
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 (
+
+
+
+
+ );
+}
diff --git a/src/components/settings/ClientSettings.tsx b/src/components/settings/ClientSettings.tsx
index 228caf8..5da6692 100644
--- a/src/components/settings/ClientSettings.tsx
+++ b/src/components/settings/ClientSettings.tsx
@@ -8,6 +8,7 @@ import { useToast } from "@/components/ui/use-toast";
import { usePreferences } from "@/contexts/PreferencesContext";
import { Switch } from "@/components/ui/switch";
import { Label } from "@/components/ui/label";
+import { CacheModeSwitch } from "@/components/settings/CacheModeSwitch";
interface KomgaConfig {
url: string;
@@ -416,6 +417,16 @@ export function ClientSettings({ initialConfig, initialTTLConfig }: ClientSettin
+
+
+
+
+ Le cache en mémoire est plus rapide mais ne persiste pas entre les redémarrages
+
+
+
+
+
{/* Formulaire TTL */}