More session fixups

This commit is contained in:
Keith Edmunds 2021-06-04 14:46:59 +01:00
parent 1abe377b4c
commit 6efc103ba5
2 changed files with 27 additions and 17 deletions

View File

@ -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,12 +679,12 @@ 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:
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

View File

@ -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)
@ -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]}"
)