diff --git a/app/classes.py b/app/classes.py index 13fd882..3c43aac 100644 --- a/app/classes.py +++ b/app/classes.py @@ -247,11 +247,6 @@ class MusicMusterSignals(QObject): # Signals that the playlist_id passed should resize all rows. resize_rows_signal = pyqtSignal(int) - # Signal to open browser at songfacts or wikipedia page matching - # passed string. - search_songfacts_signal = pyqtSignal(str) - search_wikipedia_signal = pyqtSignal(str) - # Displays a warning dialog show_warning_signal = pyqtSignal(str, str) diff --git a/app/musicmuster.py b/app/musicmuster.py index d9183ee..1e9fd92 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -6,7 +6,7 @@ from functools import partial from slugify import slugify # type: ignore from typing import Any, Callable import argparse -from dataclasses import dataclass +from dataclasses import dataclass, field import datetime as dt import os import subprocess @@ -70,14 +70,14 @@ from classes import ( MusicMusterSignals, PlaylistDTO, QueryDTO, - TrackAndPlaylist, + SelectedRows, TrackInfo, ) from config import Config from dialogs import TrackInsertDialog from file_importer import FileImporter -from helpers import ask_yes_no, file_is_unreadable, get_name +from helpers import file_is_unreadable, get_name from log import log, log_call from playlistmodel import PlaylistModel, PlaylistProxyModel from playlistrow import PlaylistRow, TrackSequence @@ -104,15 +104,6 @@ class SignalMonitor: self.signals.resize_rows_signal.connect( partial(self.show_signal, "resize_rows_signal ") ) - self.signals.search_songfacts_signal.connect( - partial(self.show_signal, "search_songfacts_signal ") - ) - self.signals.search_wikipedia_signal.connect( - partial(self.show_signal, "search_wikipedia_signal ") - ) - self.signals.show_warning_signal.connect( - partial(self.show_signal, "show_warning_signal ") - ) self.signals.signal_add_track_to_header.connect( partial(self.show_signal, "signal_add_track_to_header ") ) @@ -152,17 +143,12 @@ class SignalMonitor: log.debug(f"{name=}, args={args}") +@dataclass class Current: - base_model: PlaylistModel - proxy_model: PlaylistProxyModel + base_model: PlaylistModel | None = None + proxy_model: PlaylistProxyModel | None = None playlist_id: int = 0 - selected_row_numbers: list[int] = [] - - def __repr__(self): - return ( - f"" - ) + selected_row_numbers: list[int] = field(default_factory=list) class DownloadCSV(QDialog): @@ -1738,14 +1724,13 @@ class Window(QMainWindow): self.tabBar = self.playlist_section.tabPlaylist.tabBar() self.txtSearch.textChanged.connect(self.search_playlist_text_changed) - self.signals.enable_escape_signal.connect(self.enable_escape) - self.signals.search_songfacts_signal.connect(self.open_songfacts_browser) - self.signals.search_wikipedia_signal.connect(self.open_wikipedia_browser) + self.signals.enable_escape_signal.connect(self.enable_escape_signal_handler) self.signals.show_warning_signal.connect(self.show_warning) self.signals.signal_next_track_changed.connect(self.signal_next_track_changed_handler) self.signals.signal_set_next_track.connect(self.signal_set_next_track_handler) self.signals.status_message_signal.connect(self.show_status_message) self.signals.signal_track_ended.connect(self.end_of_track_actions) + self.signals.signal_playlist_selected_rows.connect(self.signal_playlist_selected_rows_handler) self.timer10.timeout.connect(self.tick_10ms) self.timer500.timeout.connect(self.tick_500ms) @@ -1806,7 +1791,7 @@ class Window(QMainWindow): ) # @log_call - def enable_escape(self, enabled: bool) -> None: + def enable_escape_signal_handler(self, enabled: bool) -> None: """ Manage signal to enable/disable handling ESC character. @@ -1981,7 +1966,7 @@ class Window(QMainWindow): if not track_info: return - self.signals.search_songfacts_signal.emit(track_info.title) + self.open_songfacts_browser(track_info.title) def lookup_row_in_wikipedia(self, checked: bool = False) -> None: """ @@ -1992,7 +1977,7 @@ class Window(QMainWindow): if not track_info: return - self.signals.search_wikipedia_signal.emit(track_info.title) + self.open_wikipedia_browser(track_info.title) def mark_rows_for_moving(self, checked: bool = False) -> None: """ @@ -2521,6 +2506,14 @@ class Window(QMainWindow): self._active_tab().scroll_to_top(playlist_track.row_number) + def signal_playlist_selected_rows_handler(self, selected_rows: SelectedRows) -> None: + """ + Handle signal_playlist_selected_rows to keep track of which rows + are selected in the current model + """ + + self.current.selected_row_numbers = selected_rows.rows + def signal_set_next_track_handler(self, plr: PlaylistRow) -> None: """ Handle signal_set_next_track diff --git a/app/playlistmodel.py b/app/playlistmodel.py index a55a9d5..15eea32 100644 --- a/app/playlistmodel.py +++ b/app/playlistmodel.py @@ -97,7 +97,7 @@ class PlaylistModel(QAbstractTableModel): self.signals.signal_begin_insert_rows.connect(self.begin_insert_rows) self.signals.signal_end_insert_rows.connect(self.end_insert_rows) self.signals.signal_insert_track.connect(self.insert_row_signal_handler) - self.signals.signal_playlist_selected_rows.connect(self.set_selected_rows) + self.signals.signal_playlist_selected_rows.connect(self.signal_playlist_selected_rows_handler) self.signals.signal_set_next_row.connect(self.set_next_row) self.signals.signal_track_started.connect(self.track_started) self.signals.signal_track_ended.connect(self.previous_track_ended) @@ -1255,7 +1255,7 @@ class PlaylistModel(QAbstractTableModel): return True # @log_call - def set_selected_rows(self, selected_rows: SelectedRows) -> None: + def signal_playlist_selected_rows_handler(self, selected_rows: SelectedRows) -> None: """ Handle signal_playlist_selected_rows to keep track of which rows are selected in the view diff --git a/app/playlists.py b/app/playlists.py index 901357f..ef21b4b 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -354,7 +354,7 @@ class PlaylistTab(QTableView): Override closeEditor to enable play controls and update display. """ - self.musicmuster.enable_escape(True) + self.signals.enable_escape_signal.emit(True) super(PlaylistTab, self).closeEditor(editor, hint)