From 6efc103ba5ebcab8725c93f90f3ff02c16908f8b Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Fri, 4 Jun 2021 14:46:59 +0100 Subject: [PATCH] More session fixups --- app/musicmuster.py | 15 ++++++++------- app/playlists.py | 29 +++++++++++++++++++---------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/app/musicmuster.py b/app/musicmuster.py index bc0d1bd..fbd6c25 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -261,7 +261,7 @@ class Window(QMainWindow, Ui_MainWindow): if ok: with Session() as session: note = self.create_note(session, dlg.textValue()) - self.visible_playlist().add_note(note) + self.visible_playlist().add_note(session, note) def load_last_playlists(self): "Load the playlists that we loaded at end of last session" @@ -655,7 +655,8 @@ class DbDialog(QDialog): item = self.ui.matchList.currentItem() track_id = item.data(Qt.UserRole) - self.add_track(track_id) + with Session() as session: + self.add_track(session, track_id) def add_selected_and_close(self): self.add_selected() @@ -678,14 +679,14 @@ class DbDialog(QDialog): def double_click(self, entry): track_id = entry.data(Qt.UserRole) - self.add_track(track_id) + with Session() as session: + self.add_track(session, track_id) # Select search text to make it easier for next search self.select_searchtext() - def add_track(self, track_id): - with Session() as session: - track = Tracks.track_from_id(session, track_id) - self.parent().visible_playlist().add_to_playlist(session, track) + def add_track(self, session, track_id): + track = Tracks.track_from_id(session, track_id) + self.parent().visible_playlist().add_to_playlist(session, track) # Select search text to make it easier for next search self.select_searchtext() diff --git a/app/playlists.py b/app/playlists.py index 4d5c2ac..630033c 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -17,7 +17,7 @@ import os from config import Config from datetime import datetime, timedelta from log import DEBUG, ERROR -from model import Notes, PlaylistTracks, Session, Settings, Tracks +from model import Notes, Playlists, PlaylistTracks, Session, Settings, Tracks class Playlist(QTableWidget): @@ -222,7 +222,7 @@ class Playlist(QTableWidget): Notes object. """ - DEBUG(f"add_to_playlist(session={session}, data={data})") + DEBUG(f"playlists.add_to_playlist(session={session}, data={data})") if isinstance(data, Tracks): self.add_track(session, data, repaint=repaint) @@ -241,7 +241,13 @@ class Playlist(QTableWidget): row = self.currentRow() else: row = self.rowCount() - DEBUG(f"add_track(track={track}), row={row}") + DEBUG(f"playlists.add_track(track={track}), row={row}") + + # We need to add ourself to the session + us_in_db = session.query(Playlists).filter( + Playlists.id == self.db.id).one() + + us_in_db.add_track(session, track, row) self.insertRow(row) @@ -512,7 +518,7 @@ class Playlist(QTableWidget): PlaylistTracks.remove_track(session, self.db.id, row) self.removeRow(row) - self._save_playlist(session) + self._save_playlist(session) self._repaint() def _drop_on(self, event): @@ -819,6 +825,10 @@ class Playlist(QTableWidget): times in one playlist and in multiple playlists. """ + # We need to add ourself to the session + us_in_db = session.query(Playlists).filter( + Playlists.id == self.db.id).one() + # Notes first # Create dictionaries indexed by note_id playlist_notes = {} @@ -834,7 +844,7 @@ class Playlist(QTableWidget): playlist_notes[note_id] = row # Database - for note in self.db.notes: + for note in us_in_db.notes: database_notes[note.id] = note.row # Notes to add to database @@ -843,14 +853,14 @@ class Playlist(QTableWidget): for note_id in set(playlist_notes.keys()) - set(database_notes.keys()): ERROR( f"_save_playlist(): Note.id={note_id} " - f"missing from playlist {self} in database" + f"missing from playlist {us_in_db} in database" ) # Notes to remove from database for note_id in set(database_notes.keys()) - set(playlist_notes.keys()): DEBUG( f"_save_playlist(): Delete note note_id={note_id} " - f"from playlist {self} in database" + f"from playlist {us_in_db} in database" ) Notes.delete_note(session, note_id) @@ -878,8 +888,7 @@ class Playlist(QTableWidget): # Database # Workaround for issue #10 # for track in self.db.tracks: - for track in session.query(PlaylistTracks).filter( - PlaylistTracks.playlist_id == self.db.id).all(): + for track in us_in_db.tracks: database_tracks[track.row] = track.track_id # Tracks rows to add to database @@ -907,7 +916,7 @@ class Playlist(QTableWidget): ): if playlist_tracks[row] != database_tracks[row]: DEBUG( - "_save_playlist(): Update row={row} in database for " + "f_save_playlist(): Update row={row} in database for " f"playlist {self} from track={database_tracks[row]} " f"to track={playlist_tracks[row]}" )