Compare commits

..

No commits in common. "0e4de857d49d9e03fd6cea7e3775e0be0550f461" and "bc54be237b0e82113dac42e417f81e51b01a92ab" have entirely different histories.

4 changed files with 25 additions and 41 deletions

View File

@ -6,19 +6,20 @@ def get_relative_date(past_date, reference_date=None):
Return relative date as string. Return relative date as string.
""" """
if not past_date:
return "Never"
if not reference_date: if not reference_date:
reference_date = datetime.now() reference_date = datetime.now().date()
# Check parameters # 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: if past_date > reference_date:
return "get_relative_date() past_date is after relative_date" return "get_relative_date() past_date is after relative_date"
weeks, days = divmod((reference_date - past_date).days, 7) weeks, days = divmod((reference_date - past_date).days, 7)
if weeks == days == 0: if weeks == days == 0:
# Played today, so return time instead return "Today"
return past_date.strftime("%H:%M")
return f"{weeks} weeks, {days} days ago" return f"{weeks} weeks, {days} days ago"

View File

@ -108,16 +108,12 @@ class Playdates(Base):
session.commit() session.commit()
@staticmethod @staticmethod
def last_played(session, track_id): def last_played(session, track):
"Return datetime track last played or None" "Return datetime track last played or None"
last_played = session.query(Playdates.lastplayed).filter( return session.query(Playdates).filter(
(Playdates.track_id == track_id) (Playdates.track_id == track.id)
).order_by(Playdates.lastplayed.desc()).first() ).order_by(Playdates.lastplayed.desc()).first()
if last_played:
return last_played[0]
else:
return None
class Playlists(Base): class Playlists(Base):
@ -321,17 +317,10 @@ class PlaylistTracks(Base):
else: else:
# Destination playlist has tracks; add to end # Destination playlist has tracks; add to end
new_row = max_row + 1 new_row = max_row + 1
try: record = session.query(PlaylistTracks).filter(
record = session.query(PlaylistTracks).filter( PlaylistTracks.playlist_id == from_playlist_id,
PlaylistTracks.playlist_id == from_playlist_id, PlaylistTracks.row == row
PlaylistTracks.row == row).one() ).one()
except NoResultFound:
# Issue #38?
ERROR(
f"No rows matched in query: "
f"PlaylistTracks.playlist_id == {from_playlist_id}, "
f"PlaylistTracks.row == {row}"
)
record.playlist_id = to_playlist_id record.playlist_id = to_playlist_id
record.row = new_row record.row = new_row
session.commit() session.commit()

View File

@ -294,7 +294,7 @@ class Window(QMainWindow, Ui_MainWindow):
def file_is_readable(self, path): def file_is_readable(self, path):
"Return True if path is readable else False" "Return True if path is readable else False"
return os.access(path, os.R_OK) return os.access(self.next_track.path, os.R_OK)
def insert_note(self): def insert_note(self):
"Add non-track row to playlist" "Add non-track row to playlist"
@ -414,14 +414,13 @@ class Window(QMainWindow, Ui_MainWindow):
self.music.play(self.current_track.path) self.music.play(self.current_track.path)
# Update metadata # Update metadata
# TODO is this valid if next track is on different playlist?
next_track_id = self.current_track_playlist_tab.play_started() next_track_id = self.current_track_playlist_tab.play_started()
if next_track_id is not None: if next_track_id is not None:
self.next_track = Tracks.get_track(session, next_track_id) self.next_track = Tracks.get_track(session, next_track_id)
self.next_track_playlist_tab = self.current_track_playlist_tab self.next_track_playlist_tab = self.current_track_playlist_tab
# Check we can read it # Check we can read it
if not self.file_is_readable(self.next_track.path): if not self.file_is_readable(self.next_track.path, os.R_OK):
self.show_warning( self.show_warning(
"Can't read next track", "Can't read next track",
self.next_track.path) self.next_track.path)

View File

@ -260,8 +260,12 @@ class PlaylistTab(QTableWidget):
self.setItem(row, self.COL_ARTIST, item) self.setItem(row, self.COL_ARTIST, item)
item = QTableWidgetItem(helpers.ms_to_mmss(track.duration)) item = QTableWidgetItem(helpers.ms_to_mmss(track.duration))
self.setItem(row, self.COL_DURATION, item) self.setItem(row, self.COL_DURATION, item)
last_playtime = Playdates.last_played(session, track.id) last_playdate = Playdates.last_played(session, track)
last_played_str = get_relative_date(last_playtime) if last_playdate:
playdate_date = last_playdate.lastplayed.date()
last_played_str = get_relative_date(playdate_date)
else:
last_played_str = "Never"
item = QTableWidgetItem(last_played_str) item = QTableWidgetItem(last_played_str)
self.setItem(row, self.COL_LAST_PLAYED, item) self.setItem(row, self.COL_LAST_PLAYED, item)
# Add empty start time for now as background # Add empty start time for now as background
@ -618,11 +622,9 @@ class PlaylistTab(QTableWidget):
txt = f"Track not found (track.id={id})" txt = f"Track not found (track.id={id})"
else: else:
txt = f""" txt = f"""
Title: {track.title} Title: {track.title}\n
Artist: {track.artist} Artist: {track.artist}\n
Path: {track.path} Path: {track.path}"""
Track ID: {track.id}
"""
info = QMessageBox(self) info = QMessageBox(self)
info.setIcon(QMessageBox.Information) info.setIcon(QMessageBox.Information)
info.setText(txt) info.setText(txt)
@ -903,14 +905,7 @@ Track ID: {track.id}
colour = QColor(Config.COLOUR_EVEN_PLAYLIST) colour = QColor(Config.COLOUR_EVEN_PLAYLIST)
self._set_row_colour(row, colour) self._set_row_colour(row, colour)
track_id = self._get_row_id(row) if self._get_row_id(row) in self.played_tracks:
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) self._set_row_not_bold(row)
else: else:
# Set start/end times only if we haven't played it yet # Set start/end times only if we haven't played it yet