# Standard library imports from dataclasses import dataclass, field from enum import auto, Enum from typing import Any, Optional # PyQt imports from PyQt6.QtCore import pyqtSignal, QObject # Third party imports # App imports import helpers class Col(Enum): START_GAP = 0 TITLE = auto() ARTIST = auto() INTRO = auto() DURATION = auto() START_TIME = auto() END_TIME = auto() LAST_PLAYED = auto() BITRATE = auto() NOTE = auto() @helpers.singleton @dataclass 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 and Singleton class at https://refactoring.guru/design-patterns/singleton/python/example#example-0 """ begin_reset_model_signal = pyqtSignal(int) enable_escape_signal = pyqtSignal(bool) end_reset_model_signal = pyqtSignal(int) next_track_changed_signal = pyqtSignal() resize_rows_signal = pyqtSignal(int) row_order_changed_signal = pyqtSignal(int) search_songfacts_signal = pyqtSignal(str) search_wikipedia_signal = pyqtSignal(str) show_warning_signal = pyqtSignal(str, str) span_cells_signal = pyqtSignal(int, int, int, int, int) status_message_signal = pyqtSignal(str, int) track_ended_signal = pyqtSignal() def __post_init__(self): super().__init__() @dataclass class TrackFileData: """ Simple class to track details changes to a track file """ new_file_path: str track_id: int = 0 track_path: Optional[str] = None obsolete_path: Optional[str] = None tags: dict[str, Any] = field(default_factory=dict) audio_metadata: dict[str, str | int | float] = field(default_factory=dict)