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)
|
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):
|
class Window(QMainWindow, Ui_MainWindow):
|
||||||
def __init__(self, parent=None, *args, **kwargs) -> None:
|
def __init__(self, parent=None, *args, **kwargs) -> None:
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
@ -267,6 +278,8 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
self.previous_track_position: Optional[float] = None
|
self.previous_track_position: Optional[float] = None
|
||||||
self.selected_plrs: Optional[List[PlaylistRows]] = None
|
self.selected_plrs: Optional[List[PlaylistRows]] = None
|
||||||
|
|
||||||
|
self.signals = MusicMusterSignals()
|
||||||
|
|
||||||
# Set colours that will be used by playlist row stripes
|
# Set colours that will be used by playlist row stripes
|
||||||
palette = QPalette()
|
palette = QPalette()
|
||||||
palette.setColor(QPalette.Base, QColor(Config.COLOUR_EVEN_PLAYLIST))
|
palette.setColor(QPalette.Base, QColor(Config.COLOUR_EVEN_PLAYLIST))
|
||||||
@ -614,7 +627,8 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
assert playlist.id
|
assert playlist.id
|
||||||
|
|
||||||
playlist_tab = PlaylistTab(
|
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)
|
idx = self.tabPlaylist.addTab(playlist_tab, playlist.name)
|
||||||
self.tabPlaylist.setCurrentIndex(idx)
|
self.tabPlaylist.setCurrentIndex(idx)
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,6 @@ from datetime import datetime, timedelta
|
|||||||
from typing import cast, List, Optional, TYPE_CHECKING, Union
|
from typing import cast, List, Optional, TYPE_CHECKING, Union
|
||||||
|
|
||||||
from PyQt5.QtCore import (
|
from PyQt5.QtCore import (
|
||||||
pyqtSignal,
|
|
||||||
QEvent,
|
QEvent,
|
||||||
QModelIndex,
|
QModelIndex,
|
||||||
QObject,
|
QObject,
|
||||||
@ -60,7 +59,7 @@ from models import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from musicmuster import Window
|
from musicmuster import Window, MusicMusterSignals
|
||||||
|
|
||||||
start_time_re = re.compile(r"@\d\d:\d\d:\d\d")
|
start_time_re = re.compile(r"@\d\d:\d\d:\d\d")
|
||||||
HEADER_NOTES_COLUMN = 2
|
HEADER_NOTES_COLUMN = 2
|
||||||
@ -138,10 +137,11 @@ class PlaylistTab(QTableWidget):
|
|||||||
|
|
||||||
def __init__(self, musicmuster: "Window",
|
def __init__(self, musicmuster: "Window",
|
||||||
session: scoped_session,
|
session: scoped_session,
|
||||||
playlist_id: int, *args, **kwargs) -> None:
|
playlist_id: int, signals: "MusicMusterSignals") -> None:
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__()
|
||||||
self.musicmuster: Window = musicmuster
|
self.musicmuster: Window = musicmuster
|
||||||
self.playlist_id = playlist_id
|
self.playlist_id = playlist_id
|
||||||
|
self.signals = signals
|
||||||
|
|
||||||
# Set up widget
|
# Set up widget
|
||||||
self.menu: Optional[QMenu] = None
|
self.menu: Optional[QMenu] = None
|
||||||
@ -193,6 +193,7 @@ class PlaylistTab(QTableWidget):
|
|||||||
self.selecting_in_progress = False
|
self.selecting_in_progress = False
|
||||||
# Connect signals
|
# Connect signals
|
||||||
self.horizontalHeader().sectionResized.connect(self._column_resize)
|
self.horizontalHeader().sectionResized.connect(self._column_resize)
|
||||||
|
self.signals.save_playlist_signal.connect(self._deferred_save)
|
||||||
|
|
||||||
# Load playlist rows
|
# Load playlist rows
|
||||||
self.populate_display(session, self.playlist_id)
|
self.populate_display(session, self.playlist_id)
|
||||||
@ -1292,6 +1293,15 @@ class PlaylistTab(QTableWidget):
|
|||||||
cb.clear(mode=cb.Clipboard)
|
cb.clear(mode=cb.Clipboard)
|
||||||
cb.setText(pathqs, 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:
|
def _delete_rows(self) -> None:
|
||||||
"""
|
"""
|
||||||
Delete mutliple rows
|
Delete mutliple rows
|
||||||
@ -1301,22 +1311,33 @@ class PlaylistTab(QTableWidget):
|
|||||||
- Save the playlist
|
- Save the playlist
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# Delete rows from database
|
with Session() as session:
|
||||||
plr_ids = self.get_selected_playlistrow_ids()
|
plrs = self.get_selected_playlistrows(session)
|
||||||
if not plr_ids:
|
row_count = len(plrs)
|
||||||
|
if not row_count:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Get confirmation
|
# Get confirmation
|
||||||
row_count = len(plr_ids)
|
|
||||||
plural = 's' if row_count > 1 else ''
|
plural = 's' if row_count > 1 else ''
|
||||||
if not ask_yes_no("Delete rows",
|
if not ask_yes_no("Delete rows",
|
||||||
f"Really delete {row_count} row{plural}?"):
|
f"Really delete {row_count} row{plural}?"):
|
||||||
return
|
return
|
||||||
|
|
||||||
self.remove_selected_rows()
|
rows_to_delete = [a.row_number for a in plrs]
|
||||||
|
|
||||||
with Session() as session:
|
# Delete rows from database. Would be more efficient to
|
||||||
QTimer.singleShot(0, lambda: self.save_playlist(session))
|
# 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):
|
def _drop_on(self, event):
|
||||||
"""
|
"""
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user