parent
0fe26e8a75
commit
9e65eef621
@ -67,6 +67,7 @@ class PlaylistTab(QTableWidget):
|
||||
# Qt.UserRoles
|
||||
ROW_METADATA = Qt.UserRole
|
||||
CONTENT_OBJECT = Qt.UserRole + 1
|
||||
ROW_DURATION = Qt.UserRole + 2
|
||||
|
||||
def __init__(self, musicmuster: QMainWindow, session: Session,
|
||||
playlist_id: int, *args, **kwargs):
|
||||
@ -358,6 +359,7 @@ class PlaylistTab(QTableWidget):
|
||||
duration_item: QTableWidgetItem = QTableWidgetItem(
|
||||
helpers.ms_to_mmss(track.duration)
|
||||
)
|
||||
self._set_row_duration(row, track.duration)
|
||||
self.setItem(row, self.COL_DURATION, duration_item)
|
||||
|
||||
last_playtime: Optional[datetime] = Playdates.last_played(
|
||||
@ -713,12 +715,6 @@ class PlaylistTab(QTableWidget):
|
||||
# For unplayed tracks, if there's a 'current' or 'next'
|
||||
# track marked, populate start times from then onwards. A note
|
||||
# with a start time will reset the next track start time.
|
||||
if current_row and next_row:
|
||||
start_times_row = min(current_row, next_row)
|
||||
else:
|
||||
start_times_row = current_row or next_row
|
||||
if not start_times_row:
|
||||
start_times_row = 0
|
||||
|
||||
# Cycle through all rows
|
||||
for row in range(self.rowCount()):
|
||||
@ -778,8 +774,8 @@ class PlaylistTab(QTableWidget):
|
||||
last_played_str)
|
||||
|
||||
# Calculate next_start_time
|
||||
next_start_time = self._calculate_track_end_time(
|
||||
track, self.current_track_start_time)
|
||||
next_start_time = self._calculate_row_end_time(
|
||||
row, self.current_track_start_time)
|
||||
|
||||
# Set end time
|
||||
self._set_row_end_time(row, next_start_time)
|
||||
@ -795,8 +791,9 @@ class PlaylistTab(QTableWidget):
|
||||
# Render next track
|
||||
if row == next_row:
|
||||
# if there's a track playing, set start time from that
|
||||
if current_row:
|
||||
start_time = self.current_track_start_time
|
||||
if current_row is not None:
|
||||
start_time = self._calculate_row_end_time(
|
||||
current_row, self.current_track_start_time)
|
||||
else:
|
||||
# No current track to base from, but don't change
|
||||
# time if it's already set
|
||||
@ -806,8 +803,7 @@ class PlaylistTab(QTableWidget):
|
||||
self._set_row_start_time(row, start_time)
|
||||
|
||||
# Set end time
|
||||
next_start_time = self._calculate_track_end_time(
|
||||
track, start_time)
|
||||
next_start_time = self._calculate_row_end_time(row, start_time)
|
||||
self._set_row_end_time(row, next_start_time)
|
||||
|
||||
# Set colour
|
||||
@ -829,10 +825,10 @@ class PlaylistTab(QTableWidget):
|
||||
self._set_row_not_bold(row)
|
||||
else:
|
||||
# Set start/end times as we haven't played it yet
|
||||
if next_start_time and row >= start_times_row:
|
||||
if next_start_time:
|
||||
self._set_row_start_time(row, next_start_time)
|
||||
next_start_time = self._calculate_track_end_time(
|
||||
track, next_start_time)
|
||||
next_start_time = self._calculate_row_end_time(
|
||||
row, next_start_time)
|
||||
# Set end time
|
||||
self._set_row_end_time(row, next_start_time)
|
||||
else:
|
||||
@ -868,18 +864,14 @@ class PlaylistTab(QTableWidget):
|
||||
track: Tracks = self._get_row_track_object(row, session)
|
||||
open_in_audacity(track.path)
|
||||
|
||||
@staticmethod
|
||||
def _calculate_track_end_time(
|
||||
track: Tracks, start: Optional[datetime]) -> Optional[datetime]:
|
||||
"""Return this track's end time given its start time"""
|
||||
def _calculate_row_end_time(self, row, start: Optional[datetime]) \
|
||||
-> Optional[datetime]:
|
||||
"""Return this row's end time given its start time"""
|
||||
|
||||
if start is None:
|
||||
return None
|
||||
if track is None:
|
||||
DEBUG("_calculate_next_start_time() called with track=None")
|
||||
return None
|
||||
|
||||
duration = track.duration
|
||||
duration = self._get_row_duration(row)
|
||||
return start + timedelta(milliseconds=duration)
|
||||
|
||||
def _context_menu(self, pos): # review
|
||||
@ -1141,6 +1133,14 @@ class PlaylistTab(QTableWidget):
|
||||
|
||||
return self._meta_search(RowMeta.NOTE, one=False)
|
||||
|
||||
def _get_row_duration(self, row: int) -> int:
|
||||
"""Return duration associated with this row"""
|
||||
|
||||
try:
|
||||
return self.item(row, self.COL_USERDATA).data(self.ROW_DURATION)
|
||||
except:
|
||||
return 0
|
||||
|
||||
def _get_row_end_time(self, row) -> Optional[datetime]:
|
||||
"""
|
||||
Return row end time as string
|
||||
@ -1551,6 +1551,13 @@ class PlaylistTab(QTableWidget):
|
||||
self.item(row, self.COL_USERDATA).setData(
|
||||
self.CONTENT_OBJECT, object_id)
|
||||
|
||||
def _set_row_duration(self, row: int, ms: int) -> None:
|
||||
"""Set duration of this row in milliseconds"""
|
||||
|
||||
assert self.item(row, self.COL_USERDATA)
|
||||
|
||||
self.item(row, self.COL_USERDATA).setData(self.ROW_DURATION, ms)
|
||||
|
||||
def _set_row_end_time(self, row: int, time: Optional[datetime]) -> None:
|
||||
"""Set passed row end time to passed time"""
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user