| MEDIUM | src/App.jsx | 73 | // ── Scheduled backup: run on startup if due ───────────────────────────────── |
| MEDIUM | src/App.jsx | 89 | // ── Post-update cache flush ─────────────────────────────────────────────── |
| MEDIUM | src/App.jsx | 103 | // ── Startup update check ───────────────────────────────────────────────── |
| MEDIUM | src/App.jsx | 114 | // ── Startup: new-episode notification check ────────────────────────────── |
| MEDIUM | src/App.jsx | 293 | // ── Downloads state ────────────────────────────────────────────────────── |
| MEDIUM | src/App.jsx | 311 | // ── Detect platform for Windows titlebar ────────────────────────────────── |
| MEDIUM | src/App.jsx | 336 | // ── Register global API error handlers ────────────────────────────────── |
| MEDIUM | src/App.jsx | 345 | // ── Validate stored API key on startup ─────────────────────────────────── |
| MEDIUM | src/App.jsx | 411 | // ── Desktop notification ────────────────────── |
| MEDIUM | src/App.jsx | 463 | // ── Trending, single shared fetch fn avoids code duplication ──────────── |
| MEDIUM | src/App.jsx | 508 | // ── Sync librarySort when changed from Settings ─────────────────────────── |
| MEDIUM | src/App.jsx | 516 | // ── Re-fetch trending immediately when metadata language changes ────────── |
| MEDIUM | src/App.jsx | 550 | // ── Navigation ──────────────────────────────────────────────────────────── |
| MEDIUM | src/App.jsx | 588 | // ── Keyboard shortcuts ──────────────────────────────────────────────────── |
| MEDIUM | src/App.jsx | 626 | // ── Helpers ─────────────────────────────────────────────────────────────── |
| MEDIUM | src/utils/updates.js | 1 | // ── App Update Utilities ────────────────────────────────────────────────────── |
| MEDIUM | src/utils/homeLayout.js | 1 | // ── Home Page Layout Utilities ──────────────────────────────────────────────── |
| MEDIUM | src/utils/backup.js | 1 | // ── Backup & Restore Utilities ──────────────────────────────────────────────── |
| MEDIUM | src/utils/subtitles.js | 1 | // ── Shared subtitle helpers ─────────────────────────────────────────────────── |
| MEDIUM | src/utils/appearance.js | 1 | // ── Accent colour presets & helpers ────────────────────────────────────────── |
| MEDIUM | src/utils/api.js | 4 | // ── TMDB metadata language ──────────────────────────────────────────────────── |
| MEDIUM | src/utils/api.js | 49 | // ── Request queue (max 4 concurrent TMDB fetches) ──────────────────────────── |
| MEDIUM | src/utils/api.js | 118 | // ── Player Sources ──────────────────────────────────────────────────────────── |
| MEDIUM | src/utils/api.js | 183 | // ── AniList API (anime metadata) ────────────────────────────────────────────── |
| MEDIUM | src/utils/api.js | 241 | // ── AniList cache (localStorage + in-memory) ────────────────────────────────── |
| MEDIUM | src/utils/api.js | 395 | // ── Episode Group fetch (localStorage + in-memory cache, 7-day TTL) ───────── |
| MEDIUM | src/utils/ageRating.js | 1 | // ── Age Rating Backend ──────────────────────────────────────────────────────── |
| MEDIUM | src/utils/storage.js | 87 | // ── Shared helpers ──────────────────────────────────────────────────────────── |
| MEDIUM | src/utils/storage.js | 104 | // ── Secure storage for sensitive keys ──────────────────────────────────────── |
| MEDIUM | src/components/DownloadModal.jsx | 588 | // ── No download path ─────────────────────────────────────────────────────── |
| MEDIUM | src/components/DownloadModal.jsx | 688 | // ── Main modal ───────────────────────────────────────────────────────────── |
| MEDIUM | src/components/UpdateModal.jsx | 3 | // ── Inline markdown + GitHub formatter ────────────────────────────── |
| MEDIUM | src/components/UpdateModal.jsx | 150 | // ── Block-level markdown renderer ──────────────────────────────────────────── |
| MEDIUM | src/components/UpdateModal.jsx | 412 | // ── Main component ──────────────────────────────────────────────────────────── |
| MEDIUM | src/components/SubtitleDownloaderModal.jsx | 6 | // ── Subtitle Downloader Modal (for retroactive subtitle download) ────────────── |
| MEDIUM | src/components/TrendingCarousel.jsx | 8 | // ── Helpers ─────────────────────────────────────────────────────────────────── |
| MEDIUM | src/components/TrendingCarousel.jsx | 23 | // ── Sub-components ──────────────────────────────────────────────────────────── |
| MEDIUM | src/components/TrendingCarousel.jsx | 148 | // ── Main component ──────────────────────────────────────────────────────────── |
| MEDIUM | src/components/TrendingCarousel.jsx | 171 | // ── Navigation ───────────────────────────────────────────────────────────── |
| MEDIUM | src/components/TrendingCarousel.jsx | 200 | // ── Focus-aware auto-cycle ───────────────────────────────────────────────── |
| MEDIUM | src/components/TrendingCarousel.jsx | 261 | // ── Wheel ────────────────────────────────────────────────────────────────── |
| MEDIUM | src/components/TrendingCarousel.jsx | 292 | // ── Touch ────────────────────────────────────────────────────────────────── |
| MEDIUM | src/components/TrendingCarousel.jsx | 325 | // ── Slot & rating data ───────────────────────────────────────────────────── |
| MEDIUM | src/ipc/blockStats.js | 1 | // ── Block stats store ───────────────────────────────────────────────────────── |
| MEDIUM | src/ipc/downloads.js | 1 | // ── IPC: Downloads ──────────────────────────────────────────────────────────── |
| MEDIUM | src/ipc/downloads.js | 13 | // ── Download store ──────────────────────────────────────────────────────────── |
| MEDIUM | src/ipc/downloads.js | 24 | // ── Trusted binary registry ─────────────────────────────────────────────────── |
| MEDIUM | src/ipc/downloads.js | 109 | // ── Subtitle file downloader (used during run-download completion) ───────────── |
| MEDIUM | src/ipc/downloads.js | 178 | // ── IPC registration ────────────────────────────────────────────────────────── |
| MEDIUM | src/ipc/downloads.js | 183 | // ── downloader binary detection ────────────────────────────────────────── |
| MEDIUM | src/ipc/downloads.js | 219 | // ── start download ──────────────────────────────────────────────────────── |
| MEDIUM | src/ipc/subtitles.js | 1 | // ── IPC: Subtitles ──────────────────────────────────────────────────────────── |
| MEDIUM | src/ipc/subtitles.js | 22 | // ── ZIP subtitle extractor ──────────────────────────────────────────────────── |
| MEDIUM | src/ipc/subtitles.js | 88 | // ── Subtitle language extractor (from URL) ──────────────────────────────────── |
| MEDIUM | src/ipc/subtitles.js | 109 | // ── IPC registration ────────────────────────────────────────────────────────── |
| MEDIUM | src/ipc/subtitles.js | 112 | // ── Subtitle search ──────────────────────────────────────────────────────── |
| MEDIUM | src/ipc/subtitles.js | 288 | // ── Get subtitle download URL ────────────────────────────────────────────── |
| MEDIUM | src/ipc/subtitles.js | 354 | // ── Download subtitles for an already-completed file ────────────────────── |
| MEDIUM | src/ipc/subtitles.js | 486 | // ── Prune subtitle paths that no longer exist on disk ───────────────────── |
| MEDIUM | src/ipc/subtitles.js | 507 | // ── Delete a single subtitle file ───────────────────────────────────────── |
| 66 more matches not shown… |