Files

1.6 KiB

src/core/migrate.py

One-off migration of an existing pool to the Jellyfin naming convention.

Older pools carry files like Title.ext / Title (rok).ext with no TMDb id. This matches each such movie against TMDb by title + year and proposes a tmdbid (and the missing year, which TMDb supplies), so the file can be renamed to Title (rok) [tmdbid].ext and Jellyfin can match it deterministically.

The classification is deliberately conservative: only an exact (diacritics-insensitive) title match with a matching year and a single candidate is auto; everything else is ambiguous for the user to confirm.

Source: src/core/migrate.py

Classes

MatchProposal

class · line 19

class MatchProposal:

One movie's proposed TMDb match.

Functions

normalize

function · line 33

normalize(text: str) -> str

Fold a title for comparison: strip diacritics/punctuation, lowercase.

_year_close

function · line 41

_year_close(a: Optional[str], b: Optional[str]) -> bool

True when two year strings are both numeric and differ by at most one year (release years often disagree by one).

classify

function · line 47

classify(title: str, year: Optional[str], candidates: list) -> tuple[str, object]

Return (status, chosen) for a title/year against TMDb candidates.

auto requires an exact normalized-title match, a year within ±1, and that exactly one candidate qualifies. Otherwise ambiguous (top hit preselected) or no_match when there are no candidates.