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