H2 (URL half): one canonical youtubeId in urlHelpers
Consolidates the scattered YouTube-URL parsing (the clean, renderer-contained half of H2): - Move the complete youtubeId (watch/shorts/embed/live/youtu.be) into lib/urlHelpers.ts as the single home. - thumb.ts, queueStats.ts (sameVideo), and store/downloads.ts (titleFromUrl) now import it; the three ad-hoc reimplementations are removed. - titleFromUrl gains correctness: it previously labeled ANY host with a ?v= param as "YouTube video (…)" and missed youtu.be/shorts; it's now host-correct and covers every YouTube shape. sameVideo now also dedupes /shorts/ID against /watch?v=ID. - Unit-tested in test/clipboardLink.test.ts (+4 cases, 247 pass). The formatter half of H2 is deferred to travel with H4: the renderer re-parses speed/eta strings only because raw numbers aren't carried across the IPC boundary (H4), and fmtBytes (1024) vs formatSpeed (1000) differ intentionally. typecheck + 247 tests + eslint + prettier green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+9
-1
@@ -224,7 +224,15 @@ token system + shared primitives (UI/SIMP — high value, larger effort) · i18n
|
||||
- [ ] **H1 — Decompose god files.** `SettingsView.tsx` (1104, ~11 cards, ~30 selector subs +
|
||||
~20 useState), `DownloadBar.tsx` (858, ~17 state hooks), `store/downloads.ts` (614).
|
||||
- [ ] **H2 — Consolidate scattered utilities.** `youtubeId` ×2; 4 YouTube-URL-parsing variants;
|
||||
byte/speed/eta/duration formatting across 4 modules.
|
||||
byte/speed/eta/duration formatting across 4 modules. *URL half done: one canonical `youtubeId` now
|
||||
lives in [urlHelpers.ts](src/renderer/src/lib/urlHelpers.ts) (the complete watch/shorts/embed/live/
|
||||
youtu.be parse); `thumb.ts`, `queueStats.ts` (`sameVideo`), and `store/downloads.ts` (`titleFromUrl`,
|
||||
which also fixes an old bug where any host with a `?v=` param was mislabeled "YouTube video") all import
|
||||
it — the three ad-hoc reimplementations are gone. Unit-tested in `test/clipboardLink.test.ts` (247 pass).
|
||||
**Formatter half still open** and intentionally deferred to travel with **H4**: the renderer only
|
||||
re-parses `speed`/`eta` strings back to numbers because raw numbers aren't carried across the IPC
|
||||
boundary (that's H4), and `fmtBytes` (1024) vs `formatSpeed` (1000) differ on purpose — so a real
|
||||
merge means solving H4 first, not just extracting a shared module.*
|
||||
- [x] **H3 — Fix `probe.ts → download.ts` dependency direction** (`fmtBytes` import); resolves
|
||||
with H2's shared formatter.
|
||||
- [ ] **H4 — Carry raw numbers across the progress boundary.** `DownloadProgress` ships
|
||||
|
||||
Reference in New Issue
Block a user