siftlode/frontend/src/i18n/locales/de
npeter83 bbbcf4ff5a feat(plex): Phase C — incremental + full Plex↔Siftlode watch reconcile
Completes the two-way watch-state sync with two scheduler jobs:

- plex_watch_sync (default 30m): pull recent Plex-side changes (watch history + on-deck, filtered
  to the owner account) into Siftlode under last-write-wins (_pull_apply + a _same_state ping-pong
  guard + skew tolerance), then re-push any still-unsynced local states.
- plex_watch_reconcile (default daily): full section rescan; uses synced_to_plex to settle what the
  incremental feed can't — notably propagating a Plex-side un-watch (clear a previously-mirrored row
  Plex no longer has) — while re-pushing never-synced local states and never touching hidden
  (Siftlode-only) rows. Union-preserving.

PlexClient gains accounts/watch_history/on_deck; _scan_plex_states is factored out and shared with
the one-time import. Owner accountID is resolved once and cached on the link. Both jobs are
registered in the scheduler (pause-skip, activity tracking, run-now, admin-tunable intervals) with
trilingual (HU/EN/DE) labels + descriptions. New config default plex_watch_reconcile_interval_min.

Verified live against the real Plex server: read feeds, last-write-wins, dirty re-push, the
incremental job end-to-end, and a full reconcile that cleared exactly the one un-watched item with
zero collateral across 17976 scanned.
2026-07-10 00:46:22 +02:00
..
about.json feat(i18n): translate login and app chrome (HU/EN/DE) 2026-06-15 00:30:34 +02:00
card.json feat(tags): tag UX overhaul + per-card video reset 2026-06-18 01:17:31 +02:00
channel.json feat(search): ephemeral results UX, count selector, channel blocklist (frontend) 2026-07-01 01:00:32 +02:00
channels.json feat(search): ephemeral results UX, count selector, channel blocklist (frontend) 2026-07-01 01:00:32 +02:00
common.json feat(welcome): link to the public source repository from the footer 2026-07-01 14:27:42 +02:00
config.json feat(plex): surface playback errors + media-mount status in the UI 2026-07-05 06:58:34 +02:00
datatable.json feat(ui): reusable DataTable component 2026-06-17 19:16:23 +02:00
downloads.json feat(downloads): editable details with clickable channel and extra links 2026-07-07 20:19:18 +02:00
editor.json feat(downloads): editor v2 — cut-list, join, aspect filmstrip + hover scrub 2026-07-04 03:26:33 +02:00
errors.json fix(web): make the 'connection lost' notice self-resolving 2026-06-18 23:17:32 +02:00
feed.json feat(plex): P1 frontend — Plex feed source, browse/search, show drill-down 2026-07-05 02:32:00 +02:00
header.json improvement(filters): count Source + Library scope as active; unify Clear all; add search clear (X) 2026-07-01 04:22:39 +02:00
inbox.json feat(messages): E2EE real-time messaging UI + system welcome 2026-06-25 22:05:35 +02:00
login.json feat(i18n): translate login and app chrome (HU/EN/DE) 2026-06-15 00:30:34 +02:00
messages.json feat(messages): standalone Messages module + floating chat dock 2026-06-25 22:34:24 +02:00
nav.json feat(nav): admin section label + role chip beside the user name 2026-07-01 22:50:59 +02:00
notifications.json refactor(i18n,format): translate ETA strings; consolidate time/duration formatters 2026-06-29 00:22:21 +02:00
onboarding.json feat(i18n): translate remaining components (HU/EN/DE) 2026-06-15 00:47:04 +02:00
player.json feat(player): persistent auto-advance + loop playback modes 2026-07-05 00:20:50 +02:00
playlists.json fix(notifications): name the entity in action toasts 2026-06-26 00:32:17 +02:00
plex.json merge: Plex search ephemeral state + empty-with-filters hint (dev-only) 2026-07-09 02:30:57 +02:00
quotaActions.json feat(channels): dedicated channel page + ephemeral explore UI 2026-06-30 03:08:52 +02:00
scheduler.json feat(plex): Phase C — incremental + full Plex↔Siftlode watch reconcile 2026-07-10 00:46:22 +02:00
settings.json fix(plex): optimistic toggle + 'importing' indicator for watch-sync 2026-07-09 15:34:28 +02:00
setup.json feat(setup): install-wizard UI (epic 6c) 2026-06-21 01:11:16 +02:00
sidebar.json feat(layout): full-height collapsible filter sidebar; sync status + scope relocated 2026-07-01 23:08:25 +02:00
stats.json feat(stats): consolidate per-user sync status into the Stats page 2026-06-19 11:48:20 +02:00
tagManager.json fix(notifications): name the entity in action toasts 2026-06-26 00:32:17 +02:00
time.json refactor(i18n,format): translate ETA strings; consolidate time/duration formatters 2026-06-29 00:22:21 +02:00
users.json feat(admin): user management — roles, suspend, delete + lifecycle emails 2026-06-19 19:52:12 +02:00
views.json feat(views): saved-views UI — sidebar widget, apply/rename/default/reorder/share 2026-07-01 03:17:36 +02:00
welcome.json improvement(welcome): prominent open-source callout in the page body 2026-07-02 02:14:27 +02:00