Let notes have times
This commit is contained in:
parent
79b3071170
commit
62f6775e90
@ -11,7 +11,7 @@ class Config(object):
|
|||||||
COLOUR_EVEN_PLAYLIST = "#d9d9d9"
|
COLOUR_EVEN_PLAYLIST = "#d9d9d9"
|
||||||
COLOUR_NEXT_HEADER = "#fff3cd"
|
COLOUR_NEXT_HEADER = "#fff3cd"
|
||||||
COLOUR_NEXT_PLAYLIST = "#ffc107"
|
COLOUR_NEXT_PLAYLIST = "#ffc107"
|
||||||
COLOUR_NOTES_PLAYLIST = "#17a2b8"
|
COLOUR_NOTES_PLAYLIST = "#668cff"
|
||||||
COLOUR_PREVIOUS_HEADER = "#f8d7da"
|
COLOUR_PREVIOUS_HEADER = "#f8d7da"
|
||||||
COLOUR_WARNING_TIMER = "#ffc107"
|
COLOUR_WARNING_TIMER = "#ffc107"
|
||||||
DBFS_FADE = -12
|
DBFS_FADE = -12
|
||||||
|
|||||||
@ -59,7 +59,7 @@ class Notes(Base):
|
|||||||
note.note = text
|
note.note = text
|
||||||
session.add(note)
|
session.add(note)
|
||||||
session.commit()
|
session.commit()
|
||||||
return note.id
|
return note
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def update_note(cls, id, row, text):
|
def update_note(cls, id, row, text):
|
||||||
|
|||||||
107
app/playlists.py
107
app/playlists.py
@ -37,7 +37,7 @@ class Playlist(QTableWidget):
|
|||||||
COL_ENDTIME = 5
|
COL_ENDTIME = 5
|
||||||
COL_PATH = 6
|
COL_PATH = 6
|
||||||
|
|
||||||
NOTE_COL_SPAN = 6
|
NOTE_COL_SPAN = 4
|
||||||
NOTE_ROW_SPAN = 1
|
NOTE_ROW_SPAN = 1
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
@ -149,26 +149,15 @@ class Playlist(QTableWidget):
|
|||||||
row = self.rowCount()
|
row = self.rowCount()
|
||||||
DEBUG(f"playlist.add_note(): row={row}")
|
DEBUG(f"playlist.add_note(): row={row}")
|
||||||
|
|
||||||
note_id = Notes.add_note(self.playlist_id, row, text)
|
self.add_to_playlist(Notes.add_note(self.playlist_id, row, text), row)
|
||||||
|
|
||||||
# TODO: this largely duplicates what's in add_to_playlist()
|
def add_to_playlist(self, data, repaint=True, row=None):
|
||||||
self.insertRow(row)
|
|
||||||
item = QTableWidgetItem(str(note_id))
|
|
||||||
self.setItem(row, self.COL_INDEX, item)
|
|
||||||
item = QTableWidgetItem(text)
|
|
||||||
self.setItem(row, self.COL_NOTE, item)
|
|
||||||
self.setSpan(row, self.COL_NOTE, self.NOTE_ROW_SPAN,
|
|
||||||
self.NOTE_COL_SPAN)
|
|
||||||
self.meta_set_note(row)
|
|
||||||
|
|
||||||
self.repaint(clear_selection=False)
|
|
||||||
|
|
||||||
def add_to_playlist(self, data, repaint=True):
|
|
||||||
"""
|
"""
|
||||||
Add data to playlist. Data may be either a Tracks object or a
|
Add data to playlist. Data may be either a Tracks object or a
|
||||||
Notes object.
|
Notes object.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
if not row:
|
||||||
if self.selectionModel().hasSelection():
|
if self.selectionModel().hasSelection():
|
||||||
row = self.currentRow()
|
row = self.currentRow()
|
||||||
else:
|
else:
|
||||||
@ -195,12 +184,34 @@ class Playlist(QTableWidget):
|
|||||||
else:
|
else:
|
||||||
# This is a note
|
# This is a note
|
||||||
DEBUG(f"add_to_playlist: note.id={data.id}")
|
DEBUG(f"add_to_playlist: note.id={data.id}")
|
||||||
item = QTableWidgetItem(str(data.id))
|
note = data
|
||||||
|
|
||||||
|
# Does note end with a time?
|
||||||
|
start_time = None
|
||||||
|
try:
|
||||||
|
start_time = datetime.strptime(
|
||||||
|
note.note[-9:], " %H:%M:%S").time()
|
||||||
|
DEBUG(f"Note contains valid time={start_time}")
|
||||||
|
except ValueError:
|
||||||
|
DEBUG("Note does not contain valid time")
|
||||||
|
|
||||||
|
item = QTableWidgetItem(str(note.id))
|
||||||
self.setItem(row, self.COL_INDEX, item)
|
self.setItem(row, self.COL_INDEX, item)
|
||||||
item = QTableWidgetItem(data.note)
|
item = QTableWidgetItem(data.note)
|
||||||
self.setItem(row, self.COL_NOTE, item)
|
self.setItem(row, self.COL_NOTE, item)
|
||||||
self.setSpan(row, self.COL_NOTE, self.NOTE_ROW_SPAN,
|
self.setSpan(row, self.COL_NOTE, self.NOTE_ROW_SPAN,
|
||||||
self.NOTE_COL_SPAN)
|
self.NOTE_COL_SPAN)
|
||||||
|
|
||||||
|
# Add start times or empty items, otherwise background
|
||||||
|
# colour won't be set for columns without items
|
||||||
|
if start_time:
|
||||||
|
item = QTableWidgetItem(start_time.strftime("%H:%M:%S"))
|
||||||
|
else:
|
||||||
|
item = QTableWidgetItem()
|
||||||
|
self.setItem(row, self.COL_ENDTIME, item)
|
||||||
|
item = QTableWidgetItem()
|
||||||
|
self.setItem(row, self.COL_PATH, item)
|
||||||
|
|
||||||
self.meta_set_note(row)
|
self.meta_set_note(row)
|
||||||
|
|
||||||
if repaint:
|
if repaint:
|
||||||
@ -329,7 +340,7 @@ class Playlist(QTableWidget):
|
|||||||
except AttributeError:
|
except AttributeError:
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
def get_row_endtime(self, row, start):
|
def calculate_row_endtime(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(
|
||||||
@ -509,14 +520,8 @@ class Playlist(QTableWidget):
|
|||||||
# Update metadata
|
# Update metadata
|
||||||
self.meta_set_current(self.meta_get_next())
|
self.meta_set_current(self.meta_get_next())
|
||||||
|
|
||||||
# Set track end time
|
|
||||||
current_row = self.meta_get_current()
|
|
||||||
endtime = datetime.now() + timedelta(
|
|
||||||
milliseconds=self.current_track.silence_at)
|
|
||||||
item = QTableWidgetItem(endtime.strftime("%H:%M:%S"))
|
|
||||||
self.setItem(current_row, self.COL_ENDTIME, item)
|
|
||||||
|
|
||||||
# Set up metadata for next track in playlist if there is one.
|
# Set up metadata for next track in playlist if there is one.
|
||||||
|
current_row = self.meta_get_current()
|
||||||
if current_row is not None:
|
if current_row is not None:
|
||||||
start = current_row + 1
|
start = current_row + 1
|
||||||
else:
|
else:
|
||||||
@ -592,33 +597,53 @@ class Playlist(QTableWidget):
|
|||||||
next = self.meta_get_next()
|
next = self.meta_get_next()
|
||||||
notes = self.meta_get_notes()
|
notes = self.meta_get_notes()
|
||||||
|
|
||||||
|
if current:
|
||||||
|
start_row = current
|
||||||
|
else:
|
||||||
|
start_row = 0
|
||||||
|
|
||||||
# Set colours and start times
|
# Set colours and start times
|
||||||
running_end_time = None
|
running_end_time = None
|
||||||
if current:
|
for row in range(start_row, self.rowCount()):
|
||||||
|
|
||||||
|
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)
|
||||||
|
# Set colour
|
||||||
self.set_row_colour(
|
self.set_row_colour(
|
||||||
current, QColor(Config.COLOUR_CURRENT_PLAYLIST)
|
current, QColor(Config.COLOUR_CURRENT_PLAYLIST)
|
||||||
)
|
)
|
||||||
try:
|
# Make bold
|
||||||
running_end_time = datetime.strptime(self.item(
|
|
||||||
current, self.COL_ENDTIME).text(), "%H:%M:%S")
|
|
||||||
except AttributeError:
|
|
||||||
pass
|
|
||||||
self.set_row_bold(current)
|
self.set_row_bold(current)
|
||||||
|
|
||||||
for row in range(self.rowCount()):
|
elif row == next:
|
||||||
if row == next:
|
# Set end time
|
||||||
|
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 colour
|
||||||
self.set_row_colour(
|
self.set_row_colour(
|
||||||
row, QColor(Config.COLOUR_NEXT_PLAYLIST)
|
row, QColor(Config.COLOUR_NEXT_PLAYLIST)
|
||||||
)
|
)
|
||||||
if running_end_time:
|
# Make bold
|
||||||
running_end_time = self.get_row_endtime(
|
|
||||||
row, running_end_time)
|
|
||||||
item = QTableWidgetItem(
|
|
||||||
running_end_time.strftime("%H:%M:%S"))
|
|
||||||
self.setItem(row, self.COL_ENDTIME, item)
|
|
||||||
self.set_row_bold(row)
|
self.set_row_bold(row)
|
||||||
|
|
||||||
elif row in notes:
|
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:
|
||||||
|
DEBUG("Note does not contain valid time")
|
||||||
|
# Set colour
|
||||||
self.set_row_colour(
|
self.set_row_colour(
|
||||||
row, QColor(Config.COLOUR_NOTES_PLAYLIST)
|
row, QColor(Config.COLOUR_NOTES_PLAYLIST)
|
||||||
)
|
)
|
||||||
@ -636,7 +661,7 @@ class Playlist(QTableWidget):
|
|||||||
if self.item(row, self.COL_INDEX):
|
if self.item(row, self.COL_INDEX):
|
||||||
if int(self.item(row, self.COL_INDEX).text()) > 0:
|
if int(self.item(row, self.COL_INDEX).text()) > 0:
|
||||||
if running_end_time:
|
if running_end_time:
|
||||||
running_end_time = self.get_row_endtime(
|
running_end_time = self.calculate_row_endtime(
|
||||||
row, running_end_time)
|
row, running_end_time)
|
||||||
item = QTableWidgetItem(
|
item = QTableWidgetItem(
|
||||||
running_end_time.strftime("%H:%M:%S"))
|
running_end_time.strftime("%H:%M:%S"))
|
||||||
@ -724,6 +749,10 @@ class Playlist(QTableWidget):
|
|||||||
|
|
||||||
# Column widths from settings
|
# Column widths from settings
|
||||||
for column in range(self.columnCount()):
|
for column in range(self.columnCount()):
|
||||||
|
# Only show column 0 in test mode
|
||||||
|
if (column == 0 and not Config.TESTMODE):
|
||||||
|
self.setColumnWidth(0, 0)
|
||||||
|
else:
|
||||||
name = f"playlist_col_{str(column)}_width"
|
name = f"playlist_col_{str(column)}_width"
|
||||||
record = Settings.get_int(name)
|
record = Settings.get_int(name)
|
||||||
if record.f_int is not None:
|
if record.f_int is not None:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user