49c7f7abd7
feat(frontend): add useLibrarySearch, useLibrarySyncStatus, useTriggerSync, useAdminSettings hooks
2026-03-20 00:30:44 +01:00
978ad1cdb0
feat(frontend): add library paged types, syncStatus/triggerSync/admin API methods
2026-03-20 00:30:03 +01:00
e1a885dcc9
fix(api): mount admin settings routes at /admin/settings (not /admin/library/settings)
2026-03-20 00:28:24 +01:00
e849548e9e
feat(api): replace live-provider library routes with DB-backed routes; add sync + admin settings endpoints
2026-03-20 00:27:06 +01:00
d92d629fbc
feat(api): wire library_repo, app_settings_repo, library_sync_adapter into AppState; start scheduler
2026-03-20 00:23:25 +01:00
aa5e3c28aa
feat(api): add library sync background task
2026-03-20 00:23:22 +01:00
64138b07e4
feat(infra): add FullSyncAdapter for library sync
2026-03-20 00:19:45 +01:00
6732576d06
feat(infra): add SqliteAppSettingsRepository
2026-03-20 00:17:05 +01:00
a3a421c0ac
feat(infra): add SqliteLibraryRepository
2026-03-20 00:15:01 +01:00
c6c93766c7
refactor(domain): remove redundant IAppSettingsRepository re-export; add TODO for Jellyfin enrichment
2026-03-20 00:11:30 +01:00
e101b44fa5
feat(domain): add library types, LibrarySyncAdapter, ILibraryRepository, IAppSettingsRepository; extend MediaItem with thumbnail_url and collection_id
2026-03-20 00:08:10 +01:00
666b1f2753
feat(db): add missing indexes to library migrations
2026-03-20 00:03:27 +01:00
a7c3f1f92e
feat(db): add library_items, library_sync_log, app_settings migrations
2026-03-20 00:01:34 +01:00
187cd064fb
docs: add library management implementation plan
2026-03-19 23:57:05 +01:00
4cc0e155bd
docs: add library management design spec
2026-03-19 23:43:37 +01:00
175d0bb0bb
fix(tests): add missing refresh_expiry_days param to JwtConfig::new in tests
2026-03-19 23:03:36 +01:00
311fdd4006
feat: multi-instance provider support
...
- provider_configs: add id TEXT PK; migrate existing rows (provider_type becomes id)
- local_files_index: add provider_id column + index; scope all queries per instance
- ProviderConfigRow: add id field; add get_by_id to trait
- LocalIndex:🆕 add provider_id param; all SQL scoped by provider_id
- factory: thread provider_id through build_local_files_bundle
- AppState.local_index: Option<Arc<LocalIndex>> → HashMap<String, Arc<LocalIndex>>
- admin_providers: restructured routes (POST /admin/providers create, PUT/DELETE /{id}, POST /test)
- admin_providers: use row.id as registry key for jellyfin and local_files
- files.rescan: optional ?provider=<id> query param
- frontend: add id to ProviderConfig, update api/hooks, new multi-instance panel UX
2026-03-19 22:54:41 +01:00
373e1c7c0a
fix: remove default-run entry from Cargo.toml
2026-03-19 22:34:09 +01:00
d2412da057
feat(auth): refresh tokens + remember me
...
Backend: add refresh JWT (30d, token_type claim), POST /auth/refresh
endpoint (rotates token pair), remember_me on login, JWT_REFRESH_EXPIRY_DAYS
env var. Extractors now reject refresh tokens on protected routes.
Frontend: sessionStorage for non-remembered sessions, localStorage +
refresh token for remembered sessions. Transparent 401 recovery in
api.ts (retry once after refresh). Remember me checkbox on login page
with security note when checked.
2026-03-19 22:24:26 +01:00
8bdd5e2277
fix(infra): deserialize channel schedule_config via ScheduleConfigCompat for V1 compat
2026-03-17 14:56:09 +01:00
26343b08f8
fix: test mocks for new trait methods, V1 schedule_config re-import, stale comments
2026-03-17 14:53:23 +01:00
6d350940b9
feat(frontend): schedule history dialog with rollback, wire ConfigHistorySheet
2026-03-17 14:48:39 +01:00
ba6abad602
feat(frontend): weekly grid editor with day tabs and copy shortcut
2026-03-17 14:46:34 +01:00
c0da075f03
feat(frontend): config history sheet with pin and restore
2026-03-17 14:45:00 +01:00
6bfb148e39
feat(frontend): config history and schedule rollback hooks
2026-03-17 14:43:12 +01:00
45c05b5720
fix: snapshot existing config before update; rollback returns 200
2026-03-17 14:41:57 +01:00
bd498b9bcb
feat(frontend): ScheduleConfig V2 types, weekday schema, export update
2026-03-17 14:39:19 +01:00
20e80ac28e
feat: config history — auto-snapshot on update, list/pin/restore endpoints
2026-03-17 14:39:09 +01:00
ad3a73f061
feat: schedule history — list, detail, rollback endpoints
2026-03-17 14:38:51 +01:00
c0fb8f69de
feat(infra): implement config snapshot repository methods
2026-03-17 14:32:04 +01:00
8b8e8a8d8c
fix(mcp): update block mutations for ScheduleConfig V2 day_blocks
2026-03-17 14:32:02 +01:00
05d2d77515
feat(infra): schedule history list, get-by-id, delete-after methods
2026-03-17 14:32:02 +01:00
8b701745bf
fix(api): update block lookups to use all_blocks() after ScheduleConfig V2
2026-03-17 14:31:24 +01:00
a79ee1b228
feat(domain): 7-day generation window, day_blocks lookup by weekday
2026-03-17 14:29:10 +01:00
d8e39c66be
feat(infra): add channel_config_snapshots migration
2026-03-17 14:28:35 +01:00
055937fc3d
fix(domain): use ChannelId type in patch_config_snapshot_label
2026-03-17 14:27:41 +01:00
1338f6bace
feat(domain): extend ChannelRepository and ScheduleRepository ports for history
2026-03-17 14:25:51 +01:00
995f5b1339
feat(domain): add ChannelConfigSnapshot entity
2026-03-17 14:25:49 +01:00
22bee4f32c
feat(domain): ScheduleConfig V2 day-keyed weekly grid with V1 compat
2026-03-17 14:21:00 +01:00
5f1421f4bd
fix(domain): improve Weekday tests and document all() ordering
2026-03-17 14:18:13 +01:00
f8e8e85cb0
feat(domain): add Weekday enum with From<chrono::Weekday>
2026-03-17 14:16:16 +01:00
c550790287
feat: add find_last_slot_per_block method to schedule repositories and update related logic
2026-03-17 13:02:20 +01:00
d8dd047020
feat: implement local-files feature with various enhancements and cleanup
2026-03-17 03:00:39 +01:00
c4d2e48f73
fix(frontend): resolve all eslint warnings and errors
...
- block-timeline: ref updates moved to useLayoutEffect
- channel-card, guide/page: Date.now() wrapped in useMemo + suppress purity rule
- auth-context: lazy localStorage init (removes setState-in-effect)
- use-channel-order: lazy localStorage init (removes setState-in-effect)
- use-idle: start timer on mount without calling resetIdle (removes setState-in-effect)
- use-subtitles, transcode-settings-dialog: inline eslint-disable on exact violating line
- providers: block-level eslint-disable for tokenRef closure in useState initializer
- edit-channel-sheet: remove unused minsToTime and BlockContent imports
- docs/page: escape unescaped quote and apostrophe entities
2026-03-17 02:40:32 +01:00
8ed8da2d90
refactor(frontend): extract logic to hooks, split inline components
...
Area 1 (tv/page.tsx 964→423 lines):
- hooks: use-fullscreen, use-idle, use-volume, use-quality, use-subtitles,
use-channel-input, use-channel-passwords, use-tv-keyboard
- components: SubtitlePicker, VolumeControl, QualityPicker, TopControlBar,
LogoWatermark, AutoplayPrompt, ChannelNumberOverlay, TvBaseLayer
Area 2 (edit-channel-sheet.tsx 1244→678 lines):
- hooks: use-channel-form (all form state + reset logic)
- lib/schemas.ts: extracted Zod schemas + extractErrors
- components: AlgorithmicFilterEditor, RecyclePolicyEditor, WebhookEditor,
AccessSettingsEditor, LogoEditor
Area 3 (dashboard/page.tsx 406→261 lines):
- hooks: use-channel-order, use-import-channel, use-regenerate-all
- lib/channel-export.ts: pure export utility
- components: DashboardHeader
2026-03-17 02:25:02 +01:00
ce92b43205
fix: show toast and redirect on expired session (401)
...
Fix stale closure bug in QueryProvider (token ref) and add warning toast so users know why they were redirected to login.
2026-03-17 01:37:11 +01:00
7244349e97
refactor: allow unused variable warning for db_pool in build_provider_registry
2026-03-16 04:41:08 +01:00
6aa86b6666
refactor: extract router/serve to server.rs, main is now thin orchestrator
2026-03-16 04:39:36 +01:00
e7bd66ffdf
refactor: extract background task spawning to startup.rs
2026-03-16 04:37:49 +01:00
b25ae95626
refactor: extract provider registry to provider_registry.rs
2026-03-16 04:36:41 +01:00