Rolled back complexity of _tracks_where

This commit is contained in:
Keith Edmunds 2025-04-11 13:04:58 +01:00
parent 83f5ad5303
commit e03e64542f

View File

@ -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,24 +148,8 @@ 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
)
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(
stmt = (
select(
Tracks.id.label("track_id"),
Tracks.artist,
Tracks.bitrate,
@ -179,7 +161,10 @@ def _tracks_where(
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,
)