Version v0.1.4
🐞 Short summary of issues users hit
- History timestamps: first sync didn’t carry original
watched_at
→ Trakt saw plays as “today”, creating same-day duplicates. - Jellyfin fields: not always requesting
UserData
caused us to missLastPlayedDate
. - Watcher: some improvements when re-watching the same movie/show/episode
- Watchlist noise: unresolved items (esp. episodes) could keep suppressing diffs indefinitely.
🔧 Fixes & Improvements
-
History / Timestamps
- Always read and propagate source play time:
- Plex:
viewedAt
- Jellyfin:
UserData.LastPlayedDate
(fallbackDateLastPlayed
)
- Plex:
- Normalize to UTC; no more silent “now” backfills when a timestamp is missing (we flag instead).
- History query (Jellyfin) uses
Fields=UserData,ProductionYear
+EnableUserData=true
and sorts byDatePlayed
.
-We’ve temporarily disabled the History feature for SIMKL because it isn’t working correctly.
- Always read and propagate source play time:
-
Jellyfin connector
- All features enabled (except playlists) - Watchlists, Ratings, History
- Watchlist:
- “Favorites” (Movies/Series) or named Playlist. as Jellyfin doesnt have any Watchlist
- Ignore items without cross IDs to avoid churn.
-
Unresolved/backoff system
- Track failures with exponential backoff (default base 6h, cap 30d) or virtual policy.
- TTL purge (default 90d) + stats by reason/type.
- Auto-reset a slice on large library growth to retry fresh matches.
-
State & Shadows
- Rolling ratings and history shadows to stabilize snapshots and quick re-runs.
- Cursor fingerprints guard against noisy reindexes.
-
Apply paths
- Favorites add/remove uses dedicated endpoints; verified via
UserData.IsFavorite
, falls back to/Items/{id}/UserData
when needed. - Ratings write/unrate coerces to Trakt-style 10-scale (with 5-star inputs doubled).
- Favorites add/remove uses dedicated endpoints; verified via
-
DX & Ops
- Lightweight HTTP stats (status, bytes, latency).
- Runtime
debug
toggles structured debug logs. - Manifest + config schema updated (watchlist modes, unresolved policy).
⚠️ Status & Safety
- This project is in very early development and not ready for production.
- Always make backups/exports of your history before running a real sync.
- Prefer dry runs first to inspect plans (especially timestamps).