Hugely simplify save_playlist

Don't try to work out how tracks may have moved. Instead, delete all
track from current playlist and re-add them.
This commit is contained in:
Keith Edmunds 2021-06-04 15:45:29 +01:00
parent a4bdbfccd0
commit 4bae0b8548

View File

@ -881,54 +881,15 @@ class Playlist(QTableWidget):
)
Notes.update_note(session, note_id, playlist_notes[note_id])
# Now check tracks
# Create dictionaries indexed by row
playlist_tracks = {}
database_tracks = {}
# Playlist
# Tracks
# Remove all tracks for us in datbase
PlaylistTracks.remove_all_tracks(session, self.db.id)
# Iterate on-screen playlist and add tracks back in
for row in range(self.rowCount()):
if row in notes_rows:
continue
playlist_tracks[row] = self._get_row_id(row)
# Database
# Workaround for issue #10
# for track in self.db.tracks:
for track in us_in_db.tracks:
database_tracks[track.row] = track.track_id
# Tracks rows to add to database
for row in (
set(set(playlist_tracks.keys()) - set(database_tracks.keys()))
):
DEBUG(f"_save_playlist(): row {row} missing from database")
PlaylistTracks.add_track(session, self.db.id,
playlist_tracks[row], row)
# Track rows to remove from database
for row in (
set(database_tracks.keys()) - set(playlist_tracks.keys())
):
track = database_tracks[row]
DEBUG(
f"_save_playlist(): row {row} in database not playlist "
f"(track={track})"
)
PlaylistTracks.remove_track(session, self.db.id, row)
# Track rows to update in database
for row in (
set(playlist_tracks.keys()) & set(database_tracks.keys())
):
if playlist_tracks[row] != database_tracks[row]:
DEBUG(
"f_save_playlist(): Update row={row} in database for "
f"playlist {self} from track={database_tracks[row]} "
f"to track={playlist_tracks[row]}"
)
PlaylistTracks.update_row_track(
session, self.db.id, row, playlist_tracks[row])
PlaylistTracks.add_track(
session, self.db.id, self._get_row_id(row), row)
def _set_column_widths(self):