Start using signals to call for saving playlist
This commit is contained in:
parent
77716005c7
commit
cc2f3733b2
@ -249,6 +249,17 @@ class ImportTrack(QObject):
|
||||
self.finished.emit(self.playlist)
|
||||
|
||||
|
||||
class MusicMusterSignals(QObject):
|
||||
"""
|
||||
Class for all MusicMuster signals. See:
|
||||
- https://zetcode.com/gui/pyqt5/eventssignals/
|
||||
- https://stackoverflow.com/questions/62654525/
|
||||
emit-a-signal-from-another-class-to-main-class
|
||||
"""
|
||||
|
||||
save_playlist_signal = pyqtSignal()
|
||||
|
||||
|
||||
class Window(QMainWindow, Ui_MainWindow):
|
||||
def __init__(self, parent=None, *args, **kwargs) -> None:
|
||||
super().__init__(*args, **kwargs)
|
||||
@ -267,6 +278,8 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
self.previous_track_position: Optional[float] = None
|
||||
self.selected_plrs: Optional[List[PlaylistRows]] = None
|
||||
|
||||
self.signals = MusicMusterSignals()
|
||||
|
||||
# Set colours that will be used by playlist row stripes
|
||||
palette = QPalette()
|
||||
palette.setColor(QPalette.Base, QColor(Config.COLOUR_EVEN_PLAYLIST))
|
||||
@ -614,7 +627,8 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
assert playlist.id
|
||||
|
||||
playlist_tab = PlaylistTab(
|
||||
musicmuster=self, session=session, playlist_id=playlist.id)
|
||||
musicmuster=self, session=session, playlist_id=playlist.id,
|
||||
signals=self.signals)
|
||||
idx = self.tabPlaylist.addTab(playlist_tab, playlist.name)
|
||||
self.tabPlaylist.setCurrentIndex(idx)
|
||||
|
||||
|
||||
@ -8,7 +8,6 @@ from datetime import datetime, timedelta
|
||||
from typing import cast, List, Optional, TYPE_CHECKING, Union
|
||||
|
||||
from PyQt5.QtCore import (
|
||||
pyqtSignal,
|
||||
QEvent,
|
||||
QModelIndex,
|
||||
QObject,
|
||||
@ -60,7 +59,7 @@ from models import (
|
||||
)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from musicmuster import Window
|
||||
from musicmuster import Window, MusicMusterSignals
|
||||
|
||||
start_time_re = re.compile(r"@\d\d:\d\d:\d\d")
|
||||
HEADER_NOTES_COLUMN = 2
|
||||
@ -138,10 +137,11 @@ class PlaylistTab(QTableWidget):
|
||||
|
||||
def __init__(self, musicmuster: "Window",
|
||||
session: scoped_session,
|
||||
playlist_id: int, *args, **kwargs) -> None:
|
||||
super().__init__(*args, **kwargs)
|
||||
playlist_id: int, signals: "MusicMusterSignals") -> None:
|
||||
super().__init__()
|
||||
self.musicmuster: Window = musicmuster
|
||||
self.playlist_id = playlist_id
|
||||
self.signals = signals
|
||||
|
||||
# Set up widget
|
||||
self.menu: Optional[QMenu] = None
|
||||
@ -193,6 +193,7 @@ class PlaylistTab(QTableWidget):
|
||||
self.selecting_in_progress = False
|
||||
# Connect signals
|
||||
self.horizontalHeader().sectionResized.connect(self._column_resize)
|
||||
self.signals.save_playlist_signal.connect(self._deferred_save)
|
||||
|
||||
# Load playlist rows
|
||||
self.populate_display(session, self.playlist_id)
|
||||
@ -1292,6 +1293,15 @@ class PlaylistTab(QTableWidget):
|
||||
cb.clear(mode=cb.Clipboard)
|
||||
cb.setText(pathqs, mode=cb.Clipboard)
|
||||
|
||||
def _deferred_save(self) -> None:
|
||||
"""
|
||||
Create session and save playlist
|
||||
"""
|
||||
|
||||
print("_deferred_save() called")
|
||||
with Session() as session:
|
||||
self.save_playlist(session)
|
||||
|
||||
def _delete_rows(self) -> None:
|
||||
"""
|
||||
Delete mutliple rows
|
||||
@ -1301,22 +1311,33 @@ class PlaylistTab(QTableWidget):
|
||||
- Save the playlist
|
||||
"""
|
||||
|
||||
# Delete rows from database
|
||||
plr_ids = self.get_selected_playlistrow_ids()
|
||||
if not plr_ids:
|
||||
return
|
||||
|
||||
# Get confirmation
|
||||
row_count = len(plr_ids)
|
||||
plural = 's' if row_count > 1 else ''
|
||||
if not ask_yes_no("Delete rows",
|
||||
f"Really delete {row_count} row{plural}?"):
|
||||
return
|
||||
|
||||
self.remove_selected_rows()
|
||||
|
||||
with Session() as session:
|
||||
QTimer.singleShot(0, lambda: self.save_playlist(session))
|
||||
plrs = self.get_selected_playlistrows(session)
|
||||
row_count = len(plrs)
|
||||
if not row_count:
|
||||
return
|
||||
|
||||
# Get confirmation
|
||||
plural = 's' if row_count > 1 else ''
|
||||
if not ask_yes_no("Delete rows",
|
||||
f"Really delete {row_count} row{plural}?"):
|
||||
return
|
||||
|
||||
rows_to_delete = [a.row_number for a in plrs]
|
||||
|
||||
# Delete rows from database. Would be more efficient to
|
||||
# query then have a single delete.
|
||||
for plr in plrs:
|
||||
session.delete(plr)
|
||||
|
||||
# Remove from display
|
||||
self.remove_rows(rows_to_delete)
|
||||
|
||||
# Reset drag mode
|
||||
self.setDragEnabled(False)
|
||||
|
||||
# QTimer.singleShot(0, lambda: self._deferred_save())
|
||||
self.signals.save_playlist_signal.emit()
|
||||
|
||||
def _drop_on(self, event):
|
||||
"""
|
||||
|
||||
Loading…
Reference in New Issue
Block a user