From 0e4de857d49d9e03fd6cea7e3775e0be0550f461 Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Sat, 14 Aug 2021 09:05:14 +0100 Subject: [PATCH] Update last played time during show Fixes #43 --- app/helpers.py | 11 +++++------ app/model.py | 10 +++++++--- app/playlists.py | 17 ++++++++++------- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/app/helpers.py b/app/helpers.py index 209e7c3..02b20b4 100644 --- a/app/helpers.py +++ b/app/helpers.py @@ -6,20 +6,19 @@ def get_relative_date(past_date, reference_date=None): Return relative date as string. """ + if not past_date: + return "Never" if not reference_date: - reference_date = datetime.now().date() + reference_date = datetime.now() # Check parameters - if type(past_date) != date: - return "get_relative_date() first parameter is not a date" - if type(reference_date) != date: - return "get_relative_date() second parameter is not a date" if past_date > reference_date: return "get_relative_date() past_date is after relative_date" weeks, days = divmod((reference_date - past_date).days, 7) if weeks == days == 0: - return "Today" + # Played today, so return time instead + return past_date.strftime("%H:%M") return f"{weeks} weeks, {days} days ago" diff --git a/app/model.py b/app/model.py index 718a138..427a604 100644 --- a/app/model.py +++ b/app/model.py @@ -108,12 +108,16 @@ class Playdates(Base): session.commit() @staticmethod - def last_played(session, track): + def last_played(session, track_id): "Return datetime track last played or None" - return session.query(Playdates).filter( - (Playdates.track_id == track.id) + last_played = session.query(Playdates.lastplayed).filter( + (Playdates.track_id == track_id) ).order_by(Playdates.lastplayed.desc()).first() + if last_played: + return last_played[0] + else: + return None class Playlists(Base): diff --git a/app/playlists.py b/app/playlists.py index edb1162..74da96e 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -260,12 +260,8 @@ class PlaylistTab(QTableWidget): self.setItem(row, self.COL_ARTIST, item) item = QTableWidgetItem(helpers.ms_to_mmss(track.duration)) self.setItem(row, self.COL_DURATION, item) - last_playdate = Playdates.last_played(session, track) - if last_playdate: - playdate_date = last_playdate.lastplayed.date() - last_played_str = get_relative_date(playdate_date) - else: - last_played_str = "Never" + last_playtime = Playdates.last_played(session, track.id) + last_played_str = get_relative_date(last_playtime) item = QTableWidgetItem(last_played_str) self.setItem(row, self.COL_LAST_PLAYED, item) # Add empty start time for now as background @@ -907,7 +903,14 @@ Track ID: {track.id} colour = QColor(Config.COLOUR_EVEN_PLAYLIST) self._set_row_colour(row, colour) - if self._get_row_id(row) in self.played_tracks: + track_id = self._get_row_id(row) + if track_id in self.played_tracks: + # Played today, so update last played column + last_playtime = Playdates.last_played( + session, track_id) + last_played_str = get_relative_date(last_playtime) + self.item(row, self.COL_LAST_PLAYED).setText( + last_played_str) self._set_row_not_bold(row) else: # Set start/end times only if we haven't played it yet