From 43630ef72d8fe7a9118e0728a245b1910d2b2faa Mon Sep 17 00:00:00 2001 From: Youwes09 Date: Thu, 19 Mar 2026 22:53:51 -0500 Subject: [PATCH] Chore: Temporary Home-Page (Until Fixed with Rewrite) --- src/components/history/History.svelte | 283 ------------ src/components/layout/Layout.svelte | 6 +- .../{History.svelte => RecentActivity.svelte} | 0 src/components/pages/Discover.svelte | 2 +- .../{downloads => pages}/Downloads.svelte | 0 src/components/pages/History.svelte | 403 ++++++++++++++++++ src/components/pages/Home.svelte | 195 +++++---- src/components/pages/Library.svelte | 2 +- .../{search => pages}/Search.svelte | 0 src/components/settings/Settings.svelte | 11 +- .../{sources => shared}/SourceBrowse.svelte | 0 .../{sources => shared}/SourceList.svelte | 0 12 files changed, 522 insertions(+), 380 deletions(-) delete mode 100644 src/components/history/History.svelte rename src/components/layout/{History.svelte => RecentActivity.svelte} (100%) rename src/components/{downloads => pages}/Downloads.svelte (100%) create mode 100644 src/components/pages/History.svelte rename src/components/{search => pages}/Search.svelte (100%) rename src/components/{sources => shared}/SourceBrowse.svelte (100%) rename src/components/{sources => shared}/SourceList.svelte (100%) diff --git a/src/components/history/History.svelte b/src/components/history/History.svelte deleted file mode 100644 index cec9424..0000000 --- a/src/components/history/History.svelte +++ /dev/null @@ -1,283 +0,0 @@ - - -
-
-

History

-
-
- - - {#if search} - - {/if} -
- {#if $history.length > 0} - - {/if} -
-
- - {#if stats} -
- - {stats.uniqueChapters} - chapters read - - - - {stats.uniqueManga} - series - - - - {formatReadTime(stats.estimatedMinutes)} - est. read time - -
- {/if} - - {#if $history.length === 0} -
- -

No reading history yet

-

Chapters you read will appear here

-
- {:else if sessions.length === 0} -
- -

No results for "{search}"

-
- {:else} -
- {#each groups as { label, items }} -
-

{label}

- {#each items as session} - - {/each} -
- {/each} -
- {/if} -
- - diff --git a/src/components/layout/Layout.svelte b/src/components/layout/Layout.svelte index 0b84ef7..c78741f 100644 --- a/src/components/layout/Layout.svelte +++ b/src/components/layout/Layout.svelte @@ -4,10 +4,10 @@ import Home from "../pages/Home.svelte"; import Library from "../pages/Library.svelte"; import SeriesDetail from "../pages/SeriesDetail.svelte"; - import History from "../history/History.svelte"; - import Search from "../search/Search.svelte"; + import History from "../pages/History.svelte"; + import Search from "../pages/Search.svelte"; import Discover from "../pages/Discover.svelte"; - import Downloads from "../downloads/Downloads.svelte"; + import Downloads from "../pages/Downloads.svelte"; import Extensions from "../pages/Extensions.svelte"; diff --git a/src/components/layout/History.svelte b/src/components/layout/RecentActivity.svelte similarity index 100% rename from src/components/layout/History.svelte rename to src/components/layout/RecentActivity.svelte diff --git a/src/components/pages/Discover.svelte b/src/components/pages/Discover.svelte index b8f0cca..ac16691 100644 --- a/src/components/pages/Discover.svelte +++ b/src/components/pages/Discover.svelte @@ -9,7 +9,7 @@ import type { Manga, Source } from "../../lib/types"; import ContextMenu from "../shared/ContextMenu.svelte"; import type { MenuEntry } from "../shared/ContextMenu.svelte"; - import SourceBrowse from "../sources/SourceBrowse.svelte"; + import SourceBrowse from "../shared/SourceBrowse.svelte"; // ── Config ──────────────────────────────────────────────────────────────────── const GENRE_TABS = ["All", "Action", "Romance", "Fantasy", "Comedy", "Drama", "Horror", "Sci-Fi", "Adventure", "Thriller"]; diff --git a/src/components/downloads/Downloads.svelte b/src/components/pages/Downloads.svelte similarity index 100% rename from src/components/downloads/Downloads.svelte rename to src/components/pages/Downloads.svelte diff --git a/src/components/pages/History.svelte b/src/components/pages/History.svelte new file mode 100644 index 0000000..0314c21 --- /dev/null +++ b/src/components/pages/History.svelte @@ -0,0 +1,403 @@ + + +
+
+

History

+
+
+ + + {#if search} + + {/if} +
+ {#if $history.length > 0} + {#if confirmClearAll} +
+ Clear all activity? + + +
+ {:else} + + {/if} + {/if} +
+
+ +
+ + {stats.uniqueChapters} + chapters + + + + {stats.uniqueManga} + series + + + + {formatReadTime(stats.estimatedMinutes)} + est. time + + {#if $readingStats.currentStreakDays > 0} + + + {$readingStats.currentStreakDays}d + streak + + {/if} +
+ + {#if $history.length === 0} +
+ +

No reading history yet

+

Chapters you read will appear here

+
+ {:else if sessions.length === 0} +
+ +

No results for "{search}"

+
+ {:else} +
+ {#each groups as { label, items } (label)} +
+

+ {label} + {items.length} +

+ {#each items as session (session.latestChapterId + ":" + session.readAt)} +
+ + +
+ {/each} +
+ {/each} +
+ {/if} +
+ + diff --git a/src/components/pages/Home.svelte b/src/components/pages/Home.svelte index 3691eff..30df204 100644 --- a/src/components/pages/Home.svelte +++ b/src/components/pages/Home.svelte @@ -28,9 +28,12 @@ return new Date(ts).toLocaleDateString("en-US", { month: "short", day: "numeric" }); } function formatReadTime(mins: number): string { - if (mins < 60) return `${mins}m`; + if (mins < 1) return `${Math.round(mins * 60)}s`; + if (mins < 60) return `${Math.round(mins)}m`; const h = Math.floor(mins / 60), r = mins % 60; - return r === 0 ? `${h}h` : `${h}h ${r}m`; + if (h < 24) return r === 0 ? `${h}h` : `${h}h ${r}m`; + const d = Math.floor(h / 24), rh = h % 24; + return rh === 0 ? `${d}d` : `${d}d ${rh}h`; } function focusEl(node: HTMLElement) { node.focus(); } @@ -209,7 +212,7 @@ : []; $: recentHistory = $history.slice(0, 8); $: stats = $readingStats; - $: hasStats = stats.totalChaptersRead > 0 || stats.totalMangaRead > 0; + $: hasStats = true; function handleRowWheel(e: WheelEvent) { if (Math.abs(e.deltaY) <= Math.abs(e.deltaX)) return; @@ -437,90 +440,88 @@ {/if} - +
- +
+
+ Completed + {#if completedManga.length > 0} + + {/if} +
{#if completedManga.length > 0} -
- Completed - -
{#each completedManga as m (m.id)} {/each}
{:else} -
- Completed -

Finish a manga to see it here

{/if}
+
+ -
-
+
+
Your Stats
- {#if hasStats} -
-
-
-
- {stats.currentStreakDays} - Day streak -
-
-
-
-
- {stats.totalChaptersRead} - Chapters read -
-
-
-
-
- {formatReadTime(stats.totalMinutesRead)} - Total read time -
-
-
-
-
- {stats.totalMangaRead} - Series started -
-
-
-
-
- {completedIds.length} - Completed -
-
-
-
-
- {stats.longestStreakDays}d - Best streak -
+
+
+
+
+ {stats.currentStreakDays} + Day streak
- {:else} -

Start reading to see your stats

- {/if} +
+
+
+ {stats.totalChaptersRead} + Chapters read +
+
+
+
+
+ {formatReadTime(stats.totalMinutesRead)} + Read time +
+
+
+
+
+ {stats.totalMangaRead} + Series started +
+
+
+
+
+ {completedIds.length} + Completed +
+
+
+
+
+ {stats.longestStreakDays}d + Best streak +
+
+
@@ -781,8 +782,8 @@ .ch-view-all:hover { color: var(--accent-fg); } /* ══ SECTIONS ════════════════════════════════════════════════════════════════ */ - .section { padding: var(--sp-5) 0 0; } - .section-header { display: flex; align-items: center; justify-content: space-between; padding: 0 var(--sp-5) var(--sp-3); } + .section { border-top: 1px solid var(--border-dim); margin-top: var(--sp-4); } + .section-header { display: flex; align-items: center; justify-content: space-between; padding: var(--sp-3) var(--sp-5) var(--sp-2); } .section-title { display: inline-flex; align-items: center; gap: var(--sp-2); font-family: var(--font-ui); font-size: var(--text-xs); color: var(--text-faint); letter-spacing: var(--tracking-wider); text-transform: uppercase; } .see-all { display: flex; align-items: center; gap: 4px; font-family: var(--font-ui); font-size: var(--text-2xs); letter-spacing: var(--tracking-wide); text-transform: uppercase; color: var(--text-faint); background: none; border: none; cursor: pointer; padding: 0; transition: color var(--t-base); } .see-all:hover { color: var(--accent-fg); } @@ -801,38 +802,52 @@ /* ── Bottom row ───────────────────────────────────────────────────────────── */ .bottom-row { - display: grid; grid-template-columns: 1fr 1fr; - gap: var(--sp-5); padding: var(--sp-5) var(--sp-5) 0; - align-items: start; + display: grid; grid-template-columns: 1fr 1px 1fr; + padding: 0 var(--sp-5) 0; margin-top: var(--sp-4); + border-top: 1px solid var(--border-dim); align-items: start; } - .bottom-col { display: flex; flex-direction: column; min-width: 0; } - .bottom-empty { font-family: var(--font-ui); font-size: var(--text-xs); color: var(--text-faint); letter-spacing: var(--tracking-wide); padding: var(--sp-2) var(--sp-1); } + .bottom-divider { background: var(--border-dim); align-self: stretch; min-height: 100%; } + .bottom-col { display: flex; flex-direction: column; min-width: 0; padding-top: var(--sp-3); } + .bottom-col:first-child { padding-right: var(--sp-5); } + .bottom-col:last-child { padding-left: var(--sp-5); } + .bottom-section-hd { display: flex; align-items: center; justify-content: space-between; padding-bottom: var(--sp-2); } + .bottom-empty { font-family: var(--font-ui); font-size: var(--text-xs); color: var(--text-faint); letter-spacing: var(--tracking-wide); padding: var(--sp-2) 0; } - /* Mini row (completed) */ - .mini-row { display: flex; gap: var(--sp-3); overflow-x: auto; scrollbar-width: none; padding-bottom: var(--sp-1); } + /* Completed cards — Discover format */ + .mini-row { display: flex; gap: var(--sp-3); overflow-x: auto; scrollbar-width: none; padding-bottom: var(--sp-2); } .mini-row::-webkit-scrollbar { display: none; } - .mini-card { flex-shrink: 0; width: 90px; background: none; border: none; padding: 0; cursor: pointer; text-align: left; } - .mini-card:hover .mini-cover { filter: brightness(1.08); } - .mini-card:hover .mini-title { color: var(--text-primary); } - .mini-cover-wrap { position: relative; aspect-ratio: 2/3; overflow: hidden; border-radius: var(--radius-md); background: var(--bg-raised); border: 1px solid var(--border-dim); } - .mini-cover { width: 100%; height: 100%; object-fit: cover; transition: filter var(--t-base); } - .mini-check { position: absolute; top: var(--sp-1); right: var(--sp-1); color: #22c55e; filter: drop-shadow(0 1px 3px rgba(0,0,0,0.5)); } - .mini-title { margin-top: var(--sp-1); font-size: var(--text-2xs); color: var(--text-secondary); line-height: var(--leading-snug); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; transition: color var(--t-base); font-family: var(--font-ui); letter-spacing: var(--tracking-wide); } - - /* Stats grid — 2×3 cards */ - .stats-col { } - .stats-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-3); } - .stat-card { - display: flex; align-items: center; gap: var(--sp-3); - background: var(--bg-raised); border: 1px solid var(--border-dim); - border-radius: var(--radius-lg); padding: var(--sp-3) var(--sp-4); + .mini-card { flex-shrink: 0; width: 120px; background: none; border: none; padding: 0; cursor: pointer; text-align: left; } + .mini-card:hover .mini-cover { filter: brightness(1.08) saturate(1.05); transform: scale(1.02); } + .mini-card:hover { will-change: transform; } + .mini-cover-wrap { + position: relative; aspect-ratio: 2/3; overflow: hidden; + border-radius: var(--radius-md); background: var(--bg-raised); + border: 1px solid var(--border-dim); box-shadow: 0 2px 12px rgba(0,0,0,0.35); } - .stat-icon-wrap { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: var(--radius-md); flex-shrink: 0; } + .mini-cover { width: 100%; height: 100%; object-fit: cover; display: block; transition: filter 0.15s ease, transform 0.15s ease; } + .mini-gradient { position: absolute; inset: 0; background: linear-gradient(to top, rgba(0,0,0,0.85) 0%, rgba(0,0,0,0.1) 55%, transparent 75%); pointer-events: none; } + .mini-footer { position: absolute; bottom: 0; left: 0; right: 0; padding: var(--sp-2); pointer-events: none; } + .mini-card-title { + font-size: var(--text-xs); font-weight: var(--weight-medium); + color: rgba(255,255,255,0.92); line-height: var(--leading-snug); + display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; + text-shadow: 0 1px 4px rgba(0,0,0,0.7); + } + .mini-card-source { font-family: var(--font-ui); font-size: 9px; color: rgba(255,255,255,0.45); letter-spacing: var(--tracking-wide); margin-top: 1px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } + + /* Stats grid */ + .stats-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-2); } + .stat-card { + display: flex; align-items: center; gap: var(--sp-2); + background: var(--bg-raised); border: 1px solid var(--border-dim); + border-radius: var(--radius-md); padding: var(--sp-2) var(--sp-3); + } + .stat-icon-wrap { display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: var(--radius-sm); flex-shrink: 0; } .stat-fire { background: rgba(251,146,60,0.15); color: #fb923c; } .stat-accent { background: var(--accent-muted); color: var(--accent-fg); } .stat-neutral { background: var(--bg-overlay); color: var(--text-faint); } .stat-green { background: rgba(34,197,94,0.12); color: #22c55e; } - .stat-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; } + .stat-body { display: flex; flex-direction: column; gap: 1px; min-width: 0; } .stat-val { font-family: var(--font-ui); font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--text-secondary); line-height: 1; } .stat-label { font-family: var(--font-ui); font-size: var(--text-2xs); color: var(--text-faint); letter-spacing: var(--tracking-wide); white-space: nowrap; } diff --git a/src/components/pages/Library.svelte b/src/components/pages/Library.svelte index d4fe056..c3c4c6d 100644 --- a/src/components/pages/Library.svelte +++ b/src/components/pages/Library.svelte @@ -55,7 +55,7 @@ DEFAULT_TTL_MS, CACHE_GROUPS.LIBRARY, ).then((nodes) => { - allMangaUnfiltered = dedupeMangaByTitle(dedupeMangaById(nodes), $settings.mangaLinks); + allMangaUnfiltered = dedupeMangaById(nodes); }).catch(console.error); } diff --git a/src/components/search/Search.svelte b/src/components/pages/Search.svelte similarity index 100% rename from src/components/search/Search.svelte rename to src/components/pages/Search.svelte diff --git a/src/components/settings/Settings.svelte b/src/components/settings/Settings.svelte index 30237f7..bcc61f9 100644 --- a/src/components/settings/Settings.svelte +++ b/src/components/settings/Settings.svelte @@ -4,7 +4,7 @@ import { invoke } from "@tauri-apps/api/core"; import { gql } from "../../lib/client"; import { GET_DOWNLOADS_PATH } from "../../lib/queries"; - import { settings, settingsOpen, history, updateSettings, resetKeybinds, addFolder, removeFolder, renameFolder, toggleFolderTab } from "../../store"; + import { settings, settingsOpen, history, updateSettings, resetKeybinds, addFolder, removeFolder, renameFolder, toggleFolderTab, clearHistory, wipeAllData } from "../../store"; import { cache } from "../../lib/cache"; import { KEYBIND_LABELS, DEFAULT_KEYBINDS, eventToKeybind } from "../../lib/keybinds"; import type { Settings, FitMode, Theme } from "../../store"; @@ -442,7 +442,14 @@

History

Reading history{$history.length} entries stored
- + +
+
+
+ Full data cleanse + Removes history, stats, completed list, hero pins, and manga links +
+
diff --git a/src/components/sources/SourceBrowse.svelte b/src/components/shared/SourceBrowse.svelte similarity index 100% rename from src/components/sources/SourceBrowse.svelte rename to src/components/shared/SourceBrowse.svelte diff --git a/src/components/sources/SourceList.svelte b/src/components/shared/SourceList.svelte similarity index 100% rename from src/components/sources/SourceList.svelte rename to src/components/shared/SourceList.svelte