diff --git a/messages/en.json b/messages/en.json index 871cd0a..8a08264 100644 --- a/messages/en.json +++ b/messages/en.json @@ -189,7 +189,15 @@ "total_size": "Total Size", "files_cached_label": "Files Cached", "cache_cleared": "Cache cleared successfully!", - "cache_clear_error": "Failed to clear cache." + "cache_clear_error": "Failed to clear cache.", + "site_data_title": "Site data management", + "site_data_description": "Clear all site data including settings and cached files, resetting VERT to its default state and reloading the page.", + "clear_all_data": "Clear all site data", + "clear_all_data_confirm_title": "Clear all site data?", + "clear_all_data_confirm": "This will reset all settings & cache, then reload the page. This action cannot be undone.", + "clear_all_data_cancel": "Cancel", + "all_data_cleared": "All site data cleared! Reloading page...", + "all_data_clear_error": "Failed to clear all site data." }, "language": { "title": "Language", diff --git a/src/lib/sections/settings/Privacy.svelte b/src/lib/sections/settings/Privacy.svelte index ff380f4..fb0a93f 100644 --- a/src/lib/sections/settings/Privacy.svelte +++ b/src/lib/sections/settings/Privacy.svelte @@ -16,6 +16,7 @@ import { error } from "$lib/logger"; import { ToastManager } from "$lib/toast/index.svelte"; import { DISABLE_ALL_EXTERNAL_REQUESTS } from "$lib/consts"; + import { addDialog } from "$lib/store/DialogProvider"; const { settings = $bindable() }: { settings: ISettings } = $props(); @@ -66,6 +67,57 @@ } } + async function clearAllData() { + if (isLoadingCache) return; + + addDialog( + m["settings.privacy.clear_all_data_confirm_title"](), + m["settings.privacy.clear_all_data_confirm"](), + [ + { + text: m["settings.privacy.clear_all_data_cancel"](), + action: () => {}, + }, + { + text: m["settings.privacy.clear_all_data"](), + action: async () => { + isLoadingCache = true; + try { + await swManager.clearCache(); + localStorage.clear(); + sessionStorage.clear(); + + ToastManager.add({ + type: "success", + message: + m["settings.privacy.all_data_cleared"](), + }); + + setTimeout(() => { + window.location.href = "/"; + }, 1500); + } catch (err) { + error( + ["privacy", "data"], + `Failed to clear all data: ${err}`, + ); + ToastManager.add({ + type: "error", + message: + m[ + "settings.privacy.all_data_clear_error" + ](), + }); + } finally { + isLoadingCache = false; + } + }, + }, + ], + "warning", + ); + } + onMount(() => { loadCacheInfo(); }); @@ -195,6 +247,28 @@ + +
+ {m["settings.privacy.site_data_title"]()} +
++ {m["settings.privacy.site_data_description"]()} +
+