Rolled back complexity of _tracks_where
This commit is contained in:
parent
83f5ad5303
commit
e03e64542f
@ -129,12 +129,10 @@ def remove_colour_substring(text: str) -> str:
|
|||||||
|
|
||||||
# Track functions
|
# Track functions
|
||||||
@log_call
|
@log_call
|
||||||
def _tracks_where(
|
def _tracks_where(query: BinaryExpression | ColumnElement[bool],) -> list[TrackDTO]:
|
||||||
query: BinaryExpression | ColumnElement[bool],
|
"""
|
||||||
filter_by_last_played: bool = False,
|
filter_by_last_played: bool = False,
|
||||||
last_played_before: dt.datetime | None = None,
|
last_played_before: dt.datetime | None = None,
|
||||||
) -> list[TrackDTO]:
|
|
||||||
"""
|
|
||||||
Return tracks selected by query
|
Return tracks selected by query
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -150,24 +148,8 @@ def _tracks_where(
|
|||||||
.group_by(LatestPlaydate.track_id)
|
.group_by(LatestPlaydate.track_id)
|
||||||
.subquery()
|
.subquery()
|
||||||
)
|
)
|
||||||
if not filter_by_last_played:
|
stmt = (
|
||||||
query = query.outerjoin(
|
select(
|
||||||
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(
|
|
||||||
Tracks.id.label("track_id"),
|
Tracks.id.label("track_id"),
|
||||||
Tracks.artist,
|
Tracks.artist,
|
||||||
Tracks.bitrate,
|
Tracks.bitrate,
|
||||||
@ -179,7 +161,10 @@ def _tracks_where(
|
|||||||
Tracks.start_gap,
|
Tracks.start_gap,
|
||||||
Tracks.title,
|
Tracks.title,
|
||||||
latest_playdate_subq.c.lastplayed,
|
latest_playdate_subq.c.lastplayed,
|
||||||
).where(query)
|
)
|
||||||
|
.outerjoin(latest_playdate_subq, Tracks.id == latest_playdate_subq.c.track_id)
|
||||||
|
.where(query)
|
||||||
|
)
|
||||||
|
|
||||||
results: list[TrackDTO] = []
|
results: list[TrackDTO] = []
|
||||||
|
|
||||||
@ -335,6 +320,8 @@ def get_filtered_tracks(filter: Filter) -> list[TrackDTO]:
|
|||||||
Return tracks matching filter
|
Return tracks matching filter
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
with db.Session() as session:
|
||||||
|
return Tracks.get_filtered_tracks(session, Filter)
|
||||||
# Create a base query
|
# Create a base query
|
||||||
query = Tracks.id > 0
|
query = Tracks.id > 0
|
||||||
|
|
||||||
@ -903,7 +890,7 @@ def get_playlist_row(playlistrow_id: int) -> PlaylistRowDTO | None:
|
|||||||
note=record.note,
|
note=record.note,
|
||||||
played=record.played,
|
played=record.played,
|
||||||
playlist_id=record.playlist_id,
|
playlist_id=record.playlist_id,
|
||||||
playlistrow_id=record.playlistrow_id,
|
playlistrow_id=record.id,
|
||||||
row_number=record.row_number,
|
row_number=record.row_number,
|
||||||
track=track,
|
track=track,
|
||||||
)
|
)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user