Commit graph

9 commits

Author SHA1 Message Date
jlightner
76e7611d8d fix: Fixed cross-platform enrichment bug (hardcoded YouTube URLs for So…
All checks were successful
CI / test (push) Successful in 19s
- "src/services/scheduler.ts"
- "src/services/missing-file-scanner.ts"

GSD-Task: S08/T02
2026-04-04 10:39:13 +00:00
jlightner
8ebacba3e1 test: Integrate fetchPlaylists into scheduler checkChannel as best-effo…
- "src/services/scheduler.ts"
- "src/__tests__/scheduler.test.ts"

GSD-Task: S03/T01
2026-04-04 09:43:51 +00:00
jlightner
ad16cc6141 fix: direct per-video enrichment and migration statement breakpoints
All checks were successful
CI / test (push) Successful in 20s
- Rewrote scheduler enrichNewItems to fetch metadata per-video directly
  instead of redundantly re-running Phase 1 discovery. Background enrichment
  now calls yt-dlp --dump-json per video ID, updating publishedAt and
  duration on DB records. Emits scan:complete when enrichment finishes
  so clients know to refetch.

- Added missing --> statement-breakpoint markers to migration 0011.
  Without them, Drizzle concatenated the three ALTER TABLE statements
  and SQLite only executed the first one, leaving embed_thumbnail and
  sponsor_block_remove columns missing from format_profiles.
2026-04-04 08:23:23 +00:00
jlightner
05045828d8 feat: Wire keyword filter into scheduler scan flow — exclude/include pa…
- "src/services/scheduler.ts"
- "src/__tests__/scheduler.test.ts"
- "src/db/repositories/channel-repository.ts"

GSD-Task: S03/T03
2026-04-04 05:41:55 +00:00
jlightner
f494d31e60 fix: raise default scan limit from 100 to 500, use 999 for initial scans
- Default scanLimit increased to 500 (was 100, missing most channel content)
- First scan (lastCheckedAt === null) uses max(scanLimit, 999) for full catalog
- Discovery timeout scales with limit: 60s base + 30s per 500 items
- Updated platform-settings-repository defaults to match
2026-04-03 22:07:24 +00:00
jlightner
4546ddb4ea feat: real-time scan streaming with fire-and-forget API and cancel support
- Scan endpoint returns 202 immediately, runs in background
- Items appear in real-time via WebSocket scan:item-discovered events
- Phase 1 (fast flat-playlist) runs first with discoveryOnly flag
- Phase 2 (slow enrichment) runs as background post-scan pass
- Added POST /api/v1/channel/:id/scan-cancel endpoint
- AbortController support in scheduler for scan cancellation
- Frontend: Scan button toggles to Stop button during scan
- Frontend: Live item count shown during scanning
- Frontend: useCancelScan hook for cancel functionality
- Moved tubearr config to local Docker volume (SQLite on CIFS fix)
2026-04-03 21:43:23 +00:00
jlightner
cdd1128632 feat: Added typed scan event pipeline — EventBus emits scan:started/ite…
- "src/services/event-bus.ts"
- "src/services/scheduler.ts"
- "src/index.ts"
- "src/server/routes/websocket.ts"

GSD-Task: S05/T01
2026-04-03 07:23:39 +00:00
John Lightner
dbe163bdbb chore(M007/S01): auto-commit after research-slice 2026-03-24 23:04:09 -05:00
John Lightner
4606dce553 feat: Tubearr — full project state through M006/S01
Migrated git root from W:/programming/Projects/ to W:/programming/Projects/Tubearr/.
Previous history preserved in Tubearr-full-backup.bundle at parent directory.

Completed milestones: M001 through M005
Active: M006/S02 (Add Channel UX)
2026-03-24 20:20:10 -05:00