Show track start times rather than end times

This commit is contained in:
Keith Edmunds 2021-04-19 22:22:02 +01:00
parent 04f5a07c3e
commit 1c078a2d69
2 changed files with 65 additions and 52 deletions

View File

@ -34,7 +34,7 @@ class Playlist(QTableWidget):
COL_TITLE = 2 COL_TITLE = 2
COL_ARTIST = 3 COL_ARTIST = 3
COL_DURATION = 4 COL_DURATION = 4
COL_ENDTIME = 5 COL_START_TIME = 5
COL_PATH = 6 COL_PATH = 6
NOTE_COL_SPAN = 3 NOTE_COL_SPAN = 3
@ -213,7 +213,7 @@ class Playlist(QTableWidget):
item = QTableWidgetItem(start_time.strftime("%H:%M:%S")) item = QTableWidgetItem(start_time.strftime("%H:%M:%S"))
else: else:
item = QTableWidgetItem() item = QTableWidgetItem()
self.setItem(row, self.COL_ENDTIME, item) self.setItem(row, self.COL_START_TIME, item)
item = QTableWidgetItem() item = QTableWidgetItem()
self.setItem(row, self.COL_PATH, item) self.setItem(row, self.COL_PATH, item)
@ -348,7 +348,7 @@ class Playlist(QTableWidget):
except AttributeError: except AttributeError:
return "" 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" "Return this row's end time given its start time"
duration = Tracks.get_duration( duration = Tracks.get_duration(
@ -497,8 +497,6 @@ class Playlist(QTableWidget):
else: else:
title = "" title = ""
DEBUG(f"meta_set(row={row}, title={title}, metadata={metadata})") 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: if row is None:
raise ValueError(f"meta_set() with row=None") raise ValueError(f"meta_set() with row=None")
@ -541,6 +539,7 @@ class Playlist(QTableWidget):
# Play (new) current. # Play (new) current.
self.music.play(self.current_track.path) self.music.play(self.current_track.path)
self.current_track.start_time = datetime.now()
# Update metadata # Update metadata
self.meta_set_current(self.meta_get_next()) self.meta_set_current(self.meta_get_next())
@ -614,24 +613,29 @@ class Playlist(QTableWidget):
def repaint(self, clear_selection=True): def repaint(self, clear_selection=True):
"Set row colours, fonts, etc, and save playlist" "Set row colours, fonts, etc, and save playlist"
DEBUG(f"repaint(clear_selection={clear_selection})")
self.save_playlist() self.save_playlist()
if clear_selection: if clear_selection:
self.clearSelection() self.clearSelection()
current = self.meta_get_current() current = self.meta_get_current()
next = self.meta_get_next() next = self.meta_get_next() or 0
notes = self.meta_get_notes() notes = self.meta_get_notes()
# Set colours and start times # Set colours and start times
running_end_time = None next_start_time = None
for row in range(self.rowCount()):
if row == current: # Set current row if there is one
# Set end time row = current
running_end_time = datetime.now() + timedelta( if row is not None:
milliseconds=self.current_track.silence_at) # Set start time
item = QTableWidgetItem(running_end_time.strftime("%H:%M:%S")) next_start_time = self.calculate_next_start_time(
self.setItem(row, self.COL_ENDTIME, item) 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 # Set colour
self.set_row_colour( self.set_row_colour(
current, QColor(Config.COLOUR_CURRENT_PLAYLIST) current, QColor(Config.COLOUR_CURRENT_PLAYLIST)
@ -639,27 +643,21 @@ class Playlist(QTableWidget):
# Make bold # Make bold
self.set_row_bold(current) self.set_row_bold(current)
elif row == next: # Now from the top, but ignore timing until either next or current
# Set end time for row in range(self.rowCount()):
if running_end_time: # Current row is already set
running_end_time = self.calculate_row_endtime( if row == current:
row, running_end_time) continue
item = QTableWidgetItem(
running_end_time.strftime("%H:%M:%S")
)
self.setItem(row, self.COL_ENDTIME, item)
# Set colour
self.set_row_colour(
row, QColor(Config.COLOUR_NEXT_PLAYLIST)
)
# Make bold
self.set_row_bold(row)
elif row in notes: set_time = row >= min(next or 0, current or 0)
# Set/reset end time
# Handle notes
if row in notes:
if set_time:
try: try:
running_end_time = datetime.strptime( next_start_time = datetime.strptime(
self.item(row, self.COL_ENDTIME).text(), "%H:%M:%S" self.item(row, self.COL_START_TIME).text(),
"%H:%M:%S"
) )
except ValueError: except ValueError:
pass pass
@ -669,6 +667,23 @@ class Playlist(QTableWidget):
) )
self.set_row_bold(row) self.set_row_bold(row)
# Handle next
elif row == next:
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)
# Set colour
self.set_row_colour(
row, QColor(Config.COLOUR_NEXT_PLAYLIST)
)
# Make bold
self.set_row_bold(row)
# Handle other rows
else: else:
# Stripe rows # Stripe rows
if row % 2: if row % 2:
@ -677,15 +692,13 @@ class Playlist(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)
# Add running end time # Set time
if self.item(row, self.COL_INDEX): if set_time and next_start_time:
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( 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)
# Dim played tracks # Dim played tracks
track_id = int(self.item(row, self.COL_INDEX).text()) track_id = int(self.item(row, self.COL_INDEX).text())

View File

@ -491,7 +491,7 @@ border: 1px solid rgb(85, 87, 83);</string>
</column> </column>
<column> <column>
<property name="text"> <property name="text">
<string>End time</string> <string>Start</string>
</property> </property>
</column> </column>
<column> <column>