diff --git a/app/playlists.py b/app/playlists.py
index 961719f..8aa38fc 100644
--- a/app/playlists.py
+++ b/app/playlists.py
@@ -34,7 +34,7 @@ class Playlist(QTableWidget):
COL_TITLE = 2
COL_ARTIST = 3
COL_DURATION = 4
- COL_ENDTIME = 5
+ COL_START_TIME = 5
COL_PATH = 6
NOTE_COL_SPAN = 3
@@ -213,7 +213,7 @@ class Playlist(QTableWidget):
item = QTableWidgetItem(start_time.strftime("%H:%M:%S"))
else:
item = QTableWidgetItem()
- self.setItem(row, self.COL_ENDTIME, item)
+ self.setItem(row, self.COL_START_TIME, item)
item = QTableWidgetItem()
self.setItem(row, self.COL_PATH, item)
@@ -348,7 +348,7 @@ class Playlist(QTableWidget):
except AttributeError:
return ""
- def calculate_row_endtime(self, row, start):
+ def calculate_next_start_time(self, row, start):
"Return this row's end time given its start time"
duration = Tracks.get_duration(
@@ -497,8 +497,6 @@ class Playlist(QTableWidget):
else:
title = ""
DEBUG(f"meta_set(row={row}, title={title}, metadata={metadata})")
- if metadata is None and self.current_track and title == self.current_track.title:
- import ipdb; ipdb.set_trace()
if row is None:
raise ValueError(f"meta_set() with row=None")
@@ -541,6 +539,7 @@ class Playlist(QTableWidget):
# Play (new) current.
self.music.play(self.current_track.path)
+ self.current_track.start_time = datetime.now()
# Update metadata
self.meta_set_current(self.meta_get_next())
@@ -614,40 +613,69 @@ class Playlist(QTableWidget):
def repaint(self, clear_selection=True):
"Set row colours, fonts, etc, and save playlist"
+ DEBUG(f"repaint(clear_selection={clear_selection})")
+
self.save_playlist()
if clear_selection:
self.clearSelection()
current = self.meta_get_current()
- next = self.meta_get_next()
+ next = self.meta_get_next() or 0
notes = self.meta_get_notes()
# Set colours and start times
- running_end_time = None
- for row in range(self.rowCount()):
+ next_start_time = None
+ # Set current row if there is one
+ row = current
+ if row is not None:
+ # Set start time
+ next_start_time = self.calculate_next_start_time(
+ row, self.current_track.start_time)
+ item = QTableWidgetItem(
+ self.current_track.start_time.strftime("%H:%M:%S")
+ )
+ self.setItem(row, self.COL_START_TIME, item)
+ # Set colour
+ self.set_row_colour(
+ current, QColor(Config.COLOUR_CURRENT_PLAYLIST)
+ )
+ # Make bold
+ self.set_row_bold(current)
+
+ # Now from the top, but ignore timing until either next or current
+ for row in range(self.rowCount()):
+ # Current row is already set
if row == current:
- # Set end time
- running_end_time = datetime.now() + timedelta(
- milliseconds=self.current_track.silence_at)
- item = QTableWidgetItem(running_end_time.strftime("%H:%M:%S"))
- self.setItem(row, self.COL_ENDTIME, item)
+ continue
+
+ set_time = row >= min(next or 0, current or 0)
+
+ # Handle notes
+ if row in notes:
+ if set_time:
+ try:
+ next_start_time = datetime.strptime(
+ self.item(row, self.COL_START_TIME).text(),
+ "%H:%M:%S"
+ )
+ except ValueError:
+ pass
# Set colour
self.set_row_colour(
- current, QColor(Config.COLOUR_CURRENT_PLAYLIST)
+ row, QColor(Config.COLOUR_NOTES_PLAYLIST)
)
- # Make bold
- self.set_row_bold(current)
+ self.set_row_bold(row)
+ # Handle next
elif row == next:
- # Set end time
- if running_end_time:
- running_end_time = self.calculate_row_endtime(
- row, running_end_time)
+ if set_time and next_start_time:
item = QTableWidgetItem(
- running_end_time.strftime("%H:%M:%S")
+ next_start_time.strftime("%H:%M:%S")
)
- self.setItem(row, self.COL_ENDTIME, item)
+ self.setItem(row, self.COL_START_TIME, item)
+ next_start_time = self.calculate_next_start_time(
+ row, next_start_time)
# Set colour
self.set_row_colour(
row, QColor(Config.COLOUR_NEXT_PLAYLIST)
@@ -655,20 +683,7 @@ class Playlist(QTableWidget):
# Make bold
self.set_row_bold(row)
- elif row in notes:
- # Set/reset end time
- try:
- running_end_time = datetime.strptime(
- self.item(row, self.COL_ENDTIME).text(), "%H:%M:%S"
- )
- except ValueError:
- pass
- # Set colour
- self.set_row_colour(
- row, QColor(Config.COLOUR_NOTES_PLAYLIST)
- )
- self.set_row_bold(row)
-
+ # Handle other rows
else:
# Stripe rows
if row % 2:
@@ -677,22 +692,20 @@ class Playlist(QTableWidget):
colour = QColor(Config.COLOUR_EVEN_PLAYLIST)
self.set_row_colour(row, colour)
- # Add running end time
- if self.item(row, self.COL_INDEX):
- if int(self.item(row, self.COL_INDEX).text()) > 0:
- if running_end_time:
- running_end_time = self.calculate_row_endtime(
- row, running_end_time)
- item = QTableWidgetItem(
- running_end_time.strftime("%H:%M:%S"))
- self.setItem(row, self.COL_ENDTIME, item)
+ # Set time
+ if set_time and next_start_time:
+ item = QTableWidgetItem(
+ next_start_time.strftime("%H:%M:%S"))
+ self.setItem(row, self.COL_START_TIME, item)
+ next_start_time = self.calculate_next_start_time(
+ row, next_start_time)
- # Dim played tracks
- track_id = int(self.item(row, self.COL_INDEX).text())
- if track_id in self.played_tracks:
- self.set_row_not_bold(row)
- else:
- self.set_row_bold(row)
+ # Dim played tracks
+ track_id = int(self.item(row, self.COL_INDEX).text())
+ if track_id in self.played_tracks:
+ self.set_row_not_bold(row)
+ else:
+ self.set_row_bold(row)
# Headers might need updating
self.parent().parent().update_headers()
diff --git a/app/ui/main_window.ui b/app/ui/main_window.ui
index d84e4b7..7e84781 100644
--- a/app/ui/main_window.ui
+++ b/app/ui/main_window.ui
@@ -491,7 +491,7 @@ border: 1px solid rgb(85, 87, 83);
- End time
+ Start