Source code for rekordbox_set_list_manager.controllers.track_match
"""Helper for applying a local Rekordbox match to a project Track."""
from __future__ import annotations
from typing import TYPE_CHECKING
from rekordbox_set_list_manager.models.enums import MatchStatus
if TYPE_CHECKING:
from rekordbox_set_list_manager.models.track import Track
[docs]
def apply_track_match(track: Track, local: Track | None) -> None:
"""Apply *local* Rekordbox metadata to *track*.
If *local* is ``None`` the match is cleared (status → UNMATCHED, all
Rekordbox fields set to ``None``). Otherwise each non-``None`` field from
*local* is copied and ``match_status`` is set to ``MANUALLY_MATCHED``.
Parameters
----------
track : Track
The streaming track to update in-place.
local : Track | None
The local Rekordbox track to copy metadata from, or ``None`` to clear
the existing match.
"""
if local is None:
track.filepath = None
track.bpm = None
track.key = None
track.color = None
track.rekordbox_id = None
track.match_status = MatchStatus.UNMATCHED
else:
if local.filepath:
track.filepath = local.filepath
if local.bpm is not None:
track.bpm = local.bpm
if local.key:
track.key = local.key
if local.color is not None:
track.color = local.color
if local.rekordbox_id is not None:
track.rekordbox_id = local.rekordbox_id
track.match_status = MatchStatus.MANUALLY_MATCHED