Compare commits
4 Commits
bc54be237b
...
0e4de857d4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0e4de857d4 | ||
|
|
4687ef5288 | ||
|
|
f0b59b8d23 | ||
|
|
976beade85 |
@ -6,20 +6,19 @@ 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().date()
|
reference_date = datetime.now()
|
||||||
|
|
||||||
# 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:
|
||||||
return "Today"
|
# Played today, so return time instead
|
||||||
|
return past_date.strftime("%H:%M")
|
||||||
return f"{weeks} weeks, {days} days ago"
|
return f"{weeks} weeks, {days} days ago"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
21
app/model.py
21
app/model.py
@ -108,12 +108,16 @@ class Playdates(Base):
|
|||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def last_played(session, track):
|
def last_played(session, track_id):
|
||||||
"Return datetime track last played or None"
|
"Return datetime track last played or None"
|
||||||
|
|
||||||
return session.query(Playdates).filter(
|
last_played = session.query(Playdates.lastplayed).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):
|
||||||
@ -317,10 +321,17 @@ 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()
|
||||||
|
|||||||
@ -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(self.next_track.path, os.R_OK)
|
return os.access(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,13 +414,14 @@ 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, os.R_OK):
|
if not self.file_is_readable(self.next_track.path):
|
||||||
self.show_warning(
|
self.show_warning(
|
||||||
"Can't read next track",
|
"Can't read next track",
|
||||||
self.next_track.path)
|
self.next_track.path)
|
||||||
|
|||||||
@ -260,12 +260,8 @@ 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_playdate = Playdates.last_played(session, track)
|
last_playtime = Playdates.last_played(session, track.id)
|
||||||
if last_playdate:
|
last_played_str = get_relative_date(last_playtime)
|
||||||
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
|
||||||
@ -622,9 +618,11 @@ 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}\n
|
Title: {track.title}
|
||||||
Artist: {track.artist}\n
|
Artist: {track.artist}
|
||||||
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)
|
||||||
@ -905,7 +903,14 @@ class PlaylistTab(QTableWidget):
|
|||||||
colour = QColor(Config.COLOUR_EVEN_PLAYLIST)
|
colour = QColor(Config.COLOUR_EVEN_PLAYLIST)
|
||||||
self._set_row_colour(row, colour)
|
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)
|
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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user