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_NEXT_HEADER = "#fff3cd"
|
||||
COLOUR_NEXT_PLAYLIST = "#ffc107"
|
||||
COLOUR_NOTES_PLAYLIST = "#17a2b8"
|
||||
COLOUR_NOTES_PLAYLIST = "#668cff"
|
||||
COLOUR_PREVIOUS_HEADER = "#f8d7da"
|
||||
COLOUR_WARNING_TIMER = "#ffc107"
|
||||
DBFS_FADE = -12
|
||||
|
||||
@ -59,7 +59,7 @@ class Notes(Base):
|
||||
note.note = text
|
||||
session.add(note)
|
||||
session.commit()
|
||||
return note.id
|
||||
return note
|
||||
|
||||
@classmethod
|
||||
def update_note(cls, id, row, text):
|
||||
|
||||
133
app/playlists.py
133
app/playlists.py
@ -37,7 +37,7 @@ class Playlist(QTableWidget):
|
||||
COL_ENDTIME = 5
|
||||
COL_PATH = 6
|
||||
|
||||
NOTE_COL_SPAN = 6
|
||||
NOTE_COL_SPAN = 4
|
||||
NOTE_ROW_SPAN = 1
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
@ -149,30 +149,19 @@ class Playlist(QTableWidget):
|
||||
row = self.rowCount()
|
||||
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()
|
||||
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):
|
||||
def add_to_playlist(self, data, repaint=True, row=None):
|
||||
"""
|
||||
Add data to playlist. Data may be either a Tracks object or a
|
||||
Notes object.
|
||||
"""
|
||||
|
||||
if self.selectionModel().hasSelection():
|
||||
row = self.currentRow()
|
||||
else:
|
||||
row = self.rowCount()
|
||||
if not row:
|
||||
if self.selectionModel().hasSelection():
|
||||
row = self.currentRow()
|
||||
else:
|
||||
row = self.rowCount()
|
||||
DEBUG(f"add_to_playlist(data={data}): row={row}")
|
||||
|
||||
self.insertRow(row)
|
||||
@ -195,12 +184,34 @@ class Playlist(QTableWidget):
|
||||
else:
|
||||
# This is a note
|
||||
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)
|
||||
item = QTableWidgetItem(data.note)
|
||||
self.setItem(row, self.COL_NOTE, item)
|
||||
self.setSpan(row, self.COL_NOTE, self.NOTE_ROW_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)
|
||||
|
||||
if repaint:
|
||||
@ -329,7 +340,7 @@ class Playlist(QTableWidget):
|
||||
except AttributeError:
|
||||
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"
|
||||
|
||||
duration = Tracks.get_duration(
|
||||
@ -509,14 +520,8 @@ class Playlist(QTableWidget):
|
||||
# Update metadata
|
||||
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.
|
||||
current_row = self.meta_get_current()
|
||||
if current_row is not None:
|
||||
start = current_row + 1
|
||||
else:
|
||||
@ -592,33 +597,53 @@ class Playlist(QTableWidget):
|
||||
next = self.meta_get_next()
|
||||
notes = self.meta_get_notes()
|
||||
|
||||
if current:
|
||||
start_row = current
|
||||
else:
|
||||
start_row = 0
|
||||
|
||||
# Set colours and start times
|
||||
running_end_time = None
|
||||
if current:
|
||||
self.set_row_colour(
|
||||
current, QColor(Config.COLOUR_CURRENT_PLAYLIST)
|
||||
)
|
||||
try:
|
||||
running_end_time = datetime.strptime(self.item(
|
||||
current, self.COL_ENDTIME).text(), "%H:%M:%S")
|
||||
except AttributeError:
|
||||
pass
|
||||
self.set_row_bold(current)
|
||||
for row in range(start_row, self.rowCount()):
|
||||
|
||||
for row in range(self.rowCount()):
|
||||
if row == next:
|
||||
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(
|
||||
current, QColor(Config.COLOUR_CURRENT_PLAYLIST)
|
||||
)
|
||||
# Make bold
|
||||
self.set_row_bold(current)
|
||||
|
||||
elif 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(
|
||||
row, QColor(Config.COLOUR_NEXT_PLAYLIST)
|
||||
)
|
||||
if running_end_time:
|
||||
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)
|
||||
# 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:
|
||||
DEBUG("Note does not contain valid time")
|
||||
# Set colour
|
||||
self.set_row_colour(
|
||||
row, QColor(Config.COLOUR_NOTES_PLAYLIST)
|
||||
)
|
||||
@ -636,7 +661,7 @@ class Playlist(QTableWidget):
|
||||
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.get_row_endtime(
|
||||
running_end_time = self.calculate_row_endtime(
|
||||
row, running_end_time)
|
||||
item = QTableWidgetItem(
|
||||
running_end_time.strftime("%H:%M:%S"))
|
||||
@ -724,11 +749,15 @@ class Playlist(QTableWidget):
|
||||
|
||||
# Column widths from settings
|
||||
for column in range(self.columnCount()):
|
||||
name = f"playlist_col_{str(column)}_width"
|
||||
record = Settings.get_int(name)
|
||||
if record.f_int is not None:
|
||||
print("setting column width")
|
||||
self.setColumnWidth(column, record.f_int)
|
||||
# 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"
|
||||
record = Settings.get_int(name)
|
||||
if record.f_int is not None:
|
||||
print("setting column width")
|
||||
self.setColumnWidth(column, record.f_int)
|
||||
|
||||
def set_row_bold(self, row, bold=True):
|
||||
boldfont = QFont()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user