Set start correctly when note edited

This commit is contained in:
Keith Edmunds 2021-08-23 15:19:52 +01:00
parent d8072ae73f
commit 54cfb1191a
2 changed files with 35 additions and 4 deletions

View File

@ -80,7 +80,7 @@ class Notes(Base):
Update note details. If text=None, don't change text. Update note details. If text=None, don't change text.
""" """
DEBUG(f"update_note(id={id}, row={row}, text={text})") DEBUG(f"Notes.update_note(id={id}, row={row}, text={text})")
note = session.query(cls).filter(cls.id == id).one() note = session.query(cls).filter(cls.id == id).one()
note.row = row note.row = row

View File

@ -17,7 +17,7 @@ import os
from config import Config from config import Config
from datetime import datetime, timedelta from datetime import datetime, timedelta
from helpers import get_relative_date, open_in_audacity, show_warning from helpers import get_relative_date, open_in_audacity
from log import DEBUG, ERROR from log import DEBUG, ERROR
from model import ( from model import (
Notes, Playdates, Playlists, PlaylistTracks, Session, Settings, Tracks Notes, Playdates, Playlists, PlaylistTracks, Session, Settings, Tracks
@ -232,10 +232,12 @@ class PlaylistTab(QTableWidget):
start_time = None start_time = None
try: try:
start_time = datetime.strptime(note.note[-9:], " %H:%M:%S").time() start_time = datetime.strptime(note.note[-9:], " %H:%M:%S").time()
DEBUG(f"Note contains valid time={start_time}") DEBUG(
f"playlist.inset_note(): Note contains valid time={start_time}"
)
except ValueError: except ValueError:
DEBUG( DEBUG(
f"Note on row {row} ('{note.note}') " f"playlist.inset_note(): Note on row {row} ('{note.note}') "
"does not contain valid time" "does not contain valid time"
) )
@ -621,6 +623,9 @@ class PlaylistTab(QTableWidget):
if not self.editing_cell: if not self.editing_cell:
return return
# If we update start time, _cell_changed will be called
if column not in [self.COL_TITLE, self.COL_ARTIST]:
return
new = self.item(row, column).text() new = self.item(row, column).text()
@ -629,7 +634,28 @@ class PlaylistTab(QTableWidget):
row_id = self._get_row_id(row) row_id = self._get_row_id(row)
with Session() as session: with Session() as session:
if row in self._meta_get_notes(): if row in self._meta_get_notes():
# Save change to database
DEBUG(
f"Notes.update_note: saving new note text '{new=}'",
True
)
Notes.update_note(session, row_id, row, new) Notes.update_note(session, row_id, row, new)
# Set/clear row start time accordingly
try:
start_dt = datetime.strptime(new[-9:], " %H:%M:%S")
start_time = start_dt.time()
self._set_row_start_time(row, start_time)
DEBUG(
f"_cell_changed:Note {new} contains valid "
f"time={start_time}"
)
except ValueError:
# Reset row start time in case it used to have one
self._set_row_start_time(row, None)
DEBUG(
f"_cell_changed:Note {new} does not contain "
"start time"
)
else: else:
track = Tracks.get_track(session, row_id) track = Tracks.get_track(session, row_id)
if column == self.COL_ARTIST: if column == self.COL_ARTIST:
@ -647,6 +673,11 @@ class PlaylistTab(QTableWidget):
def _cell_edit_ended(self): def _cell_edit_ended(self):
DEBUG("_cell_edit_ended()") DEBUG("_cell_edit_ended()")
self.editing_cell = False self.editing_cell = False
# Call repaint to update start times, such as when a note has
# been edited
self._repaint()
self.master_process.enable_play_next_controls() self.master_process.enable_play_next_controls()
def _delete_rows(self): def _delete_rows(self):