More 'detached session' fixes
This commit is contained in:
parent
4bae0b8548
commit
0cf649bb01
17
app/model.py
17
app/model.py
@ -221,6 +221,15 @@ class Playlists(Base):
|
||||
def get_notes(self):
|
||||
return [a.note for a in self.notes]
|
||||
|
||||
@staticmethod
|
||||
def get_playlist(session, playlist_id):
|
||||
return (
|
||||
session.query(Playlists)
|
||||
.filter(
|
||||
Playlists.id == playlist_id # noqa E712
|
||||
)
|
||||
).one()
|
||||
|
||||
def get_tracks(self):
|
||||
return [a.tracks for a in self.tracks]
|
||||
|
||||
@ -244,6 +253,7 @@ class Playlists(Base):
|
||||
|
||||
return p
|
||||
|
||||
|
||||
class PlaylistTracks(Base):
|
||||
__tablename__ = 'playlisttracks'
|
||||
|
||||
@ -424,13 +434,6 @@ class Tracks(Base):
|
||||
|
||||
return [a[0] for a in session.query(Tracks.path).all()]
|
||||
|
||||
# Not used as of 1 June 2021
|
||||
# @classmethod
|
||||
# def get_all_tracks(cls):
|
||||
# "Return a list of all tracks"
|
||||
|
||||
# return session.query(cls).all()
|
||||
|
||||
@staticmethod
|
||||
def get_path(session, id):
|
||||
try:
|
||||
|
||||
@ -217,7 +217,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
# Get output filename
|
||||
pathspec = QFileDialog.getSaveFileName(
|
||||
self, 'Save Playlist',
|
||||
directory=f"{self.visible_playlist().db.name}.m3u",
|
||||
directory=f"{self.visible_playlist().name}.m3u",
|
||||
filter="M3U files (*.m3u);;All files (*.*)"
|
||||
)
|
||||
if not pathspec:
|
||||
@ -227,10 +227,14 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
|
||||
if not path.endswith(".m3u"):
|
||||
path += ".m3u"
|
||||
|
||||
# Get playlist db object
|
||||
with Session() as session:
|
||||
p = Playlists.get_playlist(session, self.visible_playlist().id)
|
||||
with open(path, "w") as f:
|
||||
# Required directive on first line
|
||||
f.write("#EXTM3U\n")
|
||||
for track in self.visible_playlist().db.get_tracks():
|
||||
for track in p.get_tracks():
|
||||
f.write(
|
||||
"#EXTINF:"
|
||||
f"{int(track.duration / 1000)},"
|
||||
|
||||
@ -279,13 +279,13 @@ class Playlist(QTableWidget):
|
||||
"Clear current track"
|
||||
|
||||
self._meta_clear_current()
|
||||
self._repaint(save_playlist=False)
|
||||
self._repaint()
|
||||
|
||||
def clear_next(self):
|
||||
"Clear next track"
|
||||
|
||||
self._meta_clear_next()
|
||||
self._repaint(save_playlist=False)
|
||||
self._repaint()
|
||||
|
||||
def get_next_track_id(self):
|
||||
"Return next track id"
|
||||
@ -325,7 +325,7 @@ class Playlist(QTableWidget):
|
||||
for row in sorted(rows, reverse=True):
|
||||
self.removeRow(row)
|
||||
|
||||
self._repaint(save_playlist=False)
|
||||
self._repaint()
|
||||
|
||||
def get_selected_title(self):
|
||||
"Return title of selected row or None"
|
||||
@ -352,13 +352,13 @@ class Playlist(QTableWidget):
|
||||
scroll_to = self.item(current_row, self.COL_INDEX)
|
||||
self.scrollToItem(scroll_to, QAbstractItemView.PositionAtCenter)
|
||||
next_track_id = self._mark_next_track()
|
||||
self._repaint(save_playlist=False)
|
||||
self._repaint()
|
||||
return next_track_id
|
||||
|
||||
def play_stopped(self):
|
||||
self._meta_clear_current()
|
||||
self.current_track_start_time = None
|
||||
self._repaint(save_playlist=False)
|
||||
self._repaint()
|
||||
|
||||
def populate(self, session):
|
||||
# add tracks and notes in row order.
|
||||
@ -368,6 +368,7 @@ class Playlist(QTableWidget):
|
||||
|
||||
# First, save our id for the future
|
||||
self.id = self.db.id
|
||||
self.name = self.db.name
|
||||
|
||||
data = []
|
||||
|
||||
@ -392,7 +393,7 @@ class Playlist(QTableWidget):
|
||||
|
||||
def repaint(self):
|
||||
# Called when we change tabs
|
||||
self._repaint(save_playlist=False)
|
||||
self._repaint()
|
||||
|
||||
def select_next_track(self):
|
||||
"""
|
||||
@ -520,7 +521,7 @@ class Playlist(QTableWidget):
|
||||
if row in self._meta_get_notes():
|
||||
Notes.delete_note(session, id)
|
||||
else:
|
||||
PlaylistTracks.remove_track(session, self.db.id, row)
|
||||
PlaylistTracks.remove_track(session, self.id, row)
|
||||
self.removeRow(row)
|
||||
|
||||
self._save_playlist(session)
|
||||
@ -707,7 +708,7 @@ class Playlist(QTableWidget):
|
||||
else:
|
||||
title = ""
|
||||
DEBUG(
|
||||
f"playlist[{self.db.id}:{self.db.name}]._meta_set(row={row}, "
|
||||
f"playlist[{self.id}:{self.name}]._meta_set(row={row}, "
|
||||
f"title={title}, metadata={metadata})"
|
||||
)
|
||||
if row is None:
|
||||
@ -729,14 +730,14 @@ class Playlist(QTableWidget):
|
||||
track_id = self._get_row_id(row)
|
||||
if track_id:
|
||||
self._meta_set_next(self.currentRow())
|
||||
self._repaint(save_playlist=False)
|
||||
self._repaint()
|
||||
self.master_process.set_next_track(track_id)
|
||||
|
||||
def _repaint(self, clear_selection=True):
|
||||
"Set row colours, fonts, etc"
|
||||
|
||||
DEBUG(
|
||||
f"playlist[{self.db.id}:{self.db.name}]."
|
||||
f"playlist[{self.id}:{self.name}]."
|
||||
f"_repaint(clear_selection={clear_selection}"
|
||||
)
|
||||
|
||||
@ -883,13 +884,13 @@ class Playlist(QTableWidget):
|
||||
|
||||
# Tracks
|
||||
# Remove all tracks for us in datbase
|
||||
PlaylistTracks.remove_all_tracks(session, self.db.id)
|
||||
PlaylistTracks.remove_all_tracks(session, self.id)
|
||||
# Iterate on-screen playlist and add tracks back in
|
||||
for row in range(self.rowCount()):
|
||||
if row in notes_rows:
|
||||
continue
|
||||
PlaylistTracks.add_track(
|
||||
session, self.db.id, self._get_row_id(row), row)
|
||||
session, self.id, self._get_row_id(row), row)
|
||||
|
||||
def _set_column_widths(self):
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user