From e03e64542ffc6383bf025c068f193117a952db18 Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Fri, 11 Apr 2025 13:04:58 +0100 Subject: [PATCH] Rolled back complexity of _tracks_where --- app/repository.py | 55 ++++++++++++++++++----------------------------- 1 file changed, 21 insertions(+), 34 deletions(-) diff --git a/app/repository.py b/app/repository.py index 426f6dc..343aca1 100644 --- a/app/repository.py +++ b/app/repository.py @@ -129,12 +129,10 @@ def remove_colour_substring(text: str) -> str: # Track functions @log_call -def _tracks_where( - query: BinaryExpression | ColumnElement[bool], +def _tracks_where(query: BinaryExpression | ColumnElement[bool],) -> list[TrackDTO]: + """ filter_by_last_played: bool = False, last_played_before: dt.datetime | None = None, -) -> list[TrackDTO]: - """ Return tracks selected by query """ @@ -150,36 +148,23 @@ def _tracks_where( .group_by(LatestPlaydate.track_id) .subquery() ) - if not filter_by_last_played: - query = query.outerjoin( - latest_playdate_subq, Tracks.id == latest_playdate_subq.c.track_id + stmt = ( + select( + Tracks.id.label("track_id"), + Tracks.artist, + Tracks.bitrate, + Tracks.duration, + Tracks.fade_at, + Tracks.intro, + Tracks.path, + Tracks.silence_at, + Tracks.start_gap, + Tracks.title, + latest_playdate_subq.c.lastplayed, ) - else: - # We are filtering by last played. If last_played_before is None, - # we want tracks that have never been played - if last_played_before is None: - query = query.outerjoin(Playdates, Tracks.id == Playdates.track_id).where( - Playdates.id.is_(None) - ) - else: - query = query.join( - latest_playdate_subq, Tracks.id == latest_playdate_subq.c.track_id - ).where(latest_playdate_subq.c.max_last_played < last_played_before) - pass - - stmt = select( - Tracks.id.label("track_id"), - Tracks.artist, - Tracks.bitrate, - Tracks.duration, - Tracks.fade_at, - Tracks.intro, - Tracks.path, - Tracks.silence_at, - Tracks.start_gap, - Tracks.title, - latest_playdate_subq.c.lastplayed, - ).where(query) + .outerjoin(latest_playdate_subq, Tracks.id == latest_playdate_subq.c.track_id) + .where(query) + ) results: list[TrackDTO] = [] @@ -335,6 +320,8 @@ def get_filtered_tracks(filter: Filter) -> list[TrackDTO]: Return tracks matching filter """ + with db.Session() as session: + return Tracks.get_filtered_tracks(session, Filter) # Create a base query query = Tracks.id > 0 @@ -903,7 +890,7 @@ def get_playlist_row(playlistrow_id: int) -> PlaylistRowDTO | None: note=record.note, played=record.played, playlist_id=record.playlist_id, - playlistrow_id=record.playlistrow_id, + playlistrow_id=record.id, row_number=record.row_number, track=track, )