Stop trusting Plex's Date Added on its own
Jess spotted that dates looked like file dates rather than library-add dates. He is right, and MediaShelf was not the culprit: it reproduces Plex's addedAt exactly (verified 500/500 identical to the second). Plex's own field is what follows the file — replace or re-encode one and Date Added resets while the item, its ratingKey and its watch history all survive. Measured on the live library, comparing addedAt against lastViewedAt where both exist: 55 of 509 movies (10.8%) and 306 of 1,393 TV Show Archive items (22.0%) were watched BEFORE they were "added" — 19% overall. 2001: A Space Odyssey reports added 2026-07-31, last watched 2017-08-26. That is not cosmetic. pre_history is derived from added_at, so an old item whose file was replaced looks post-coverage and gets promoted into the CONFIDENT reclaim pool, which is the one pool meant to be trustworthy. A completed play proves the item already existed, so added_at is now MIN(provider_added_at, first_watched_at). Plex's raw value is kept in provider_added_at, added_at_source records which applied, and the item drawer explains the substitution instead of quietly disagreeing with Plex. Unwatched items keep Plex's value since nothing contradicts it. first_seen_at is also recorded now and is authoritative for anything added from here on. Plex's API has no better field; the true insert time is only in Plex's own metadata_items.created_at on Loki. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GVbG48GAXfCZatcmX123Ra
This commit is contained in:
parent
d12cbc62ee
commit
e819548ff2
9 changed files with 234 additions and 15 deletions
26
mediashelf/migrations/002_added_at_provenance.sql
Normal file
26
mediashelf/migrations/002_added_at_provenance.sql
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
-- Plex's addedAt tracks the FILE, not the library entry. Replacing or
|
||||
-- re-encoding a file resets Date Added while the item and its watch history
|
||||
-- survive, so 19% of the live library (22% of TV Show Archive) reports a
|
||||
-- lastViewedAt EARLIER than its addedAt — watched before it was "added".
|
||||
--
|
||||
-- That matters beyond cosmetics: pre_history is derived from added_at, so an
|
||||
-- old item whose file was replaced looks post-coverage and lands in the
|
||||
-- CONFIDENT reclaim pool when it belongs in the uncertain one.
|
||||
--
|
||||
-- Keep Plex's raw value for reference, and let added_at hold the best estimate
|
||||
-- (see ingest._correct_added_at). Also record when MediaShelf itself first saw
|
||||
-- a row, which is authoritative from now on regardless of what Plex does.
|
||||
|
||||
ALTER TABLE media_item ADD COLUMN provider_added_at INTEGER;
|
||||
ALTER TABLE media_item ADD COLUMN added_at_source TEXT;
|
||||
ALTER TABLE media_item ADD COLUMN first_seen_at INTEGER;
|
||||
|
||||
ALTER TABLE episode ADD COLUMN provider_added_at INTEGER;
|
||||
ALTER TABLE episode ADD COLUMN first_watched_at INTEGER;
|
||||
ALTER TABLE episode ADD COLUMN first_seen_at INTEGER;
|
||||
|
||||
-- Backfill: existing rows carry Plex's value in added_at.
|
||||
UPDATE media_item SET provider_added_at = added_at WHERE provider_added_at IS NULL;
|
||||
UPDATE episode SET provider_added_at = added_at WHERE provider_added_at IS NULL;
|
||||
|
||||
CREATE INDEX ix_item_first_seen ON media_item(first_seen_at);
|
||||
Loading…
Add table
Add a link
Reference in a new issue