From 90a8209551479fb1d7b7b85989870f8590de34f1 Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Sun, 15 Aug 2021 10:40:28 +0100 Subject: [PATCH] Clean up of musicmuster.py --- app/helpers.py | 9 ++++++++- app/model.py | 3 +-- app/musicmuster.py | 46 ++++++++++++++++++++++------------------------ app/playlists.py | 6 +++--- 4 files changed, 34 insertions(+), 30 deletions(-) diff --git a/app/helpers.py b/app/helpers.py index ec030bb..7da6bff 100644 --- a/app/helpers.py +++ b/app/helpers.py @@ -1,4 +1,5 @@ -from datetime import datetime, date +from datetime import datetime +from PyQt5.QtWidgets import QMessageBox def get_relative_date(past_date, reference_date=None): @@ -36,6 +37,12 @@ def get_relative_date(past_date, reference_date=None): return f"{weeks} {weeks_str}, {days} {days_str} ago" +def show_warning(self, title, msg): + "Display a warning to user" + + QMessageBox.warning(None, title, msg, buttons=QMessageBox.Cancel) + + def ms_to_mmss(ms, decimals=0, negative=False): if not ms: return "-" diff --git a/app/model.py b/app/model.py index b9b0aba..1619e00 100644 --- a/app/model.py +++ b/app/model.py @@ -2,7 +2,7 @@ import sqlalchemy -from datetime import datetime, time +from datetime import datetime from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import ( Boolean, @@ -457,7 +457,6 @@ class Tracks(Base): # def get_note(session, id): # return session.query(Notes).filter(Notes.id == id).one() - @staticmethod def get_all_paths(session): "Return a list of paths of all tracks" diff --git a/app/musicmuster.py b/app/musicmuster.py index 9cca58c..8f4092c 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -8,7 +8,6 @@ import urllib.parse from datetime import datetime, timedelta from log import DEBUG, EXCEPTION -from slugify import slugify from PyQt5.QtCore import Qt, QTimer from PyQt5.QtWidgets import ( @@ -18,7 +17,6 @@ from PyQt5.QtWidgets import ( QInputDialog, QListWidgetItem, QMainWindow, - QMessageBox, ) import helpers @@ -139,10 +137,10 @@ class Window(QMainWindow, Ui_MainWindow): self.actionOpenPlaylist.triggered.connect(self.open_playlist) self.actionPlay_next.triggered.connect(self.play_next) self.actionSearch_database.triggered.connect(self.search_database) - self.actionSelect_next_track.triggered.connect(self.select_next_track) + self.actionSelect_next_track.triggered.connect(self.select_next_row) self.actionSelect_played_tracks.triggered.connect(self.select_played) self.actionSelect_previous_track.triggered.connect( - self.select_previous_track) + self.select_previous_row) self.actionSelect_unplayed_tracks.triggered.connect( self.select_unplayed) self.actionSetNext.triggered.connect(self.set_next_track) @@ -224,6 +222,10 @@ class Window(QMainWindow, Ui_MainWindow): def end_of_track_actions(self): "Clean up after track played" + # Set self.playing to False so that tick() doesn't see + # player=None and kick off end-of-track actions + self.playing = False + # Clean up metadata self.previous_track = self.current_track if self.current_track_playlist_tab: @@ -231,7 +233,6 @@ class Window(QMainWindow, Ui_MainWindow): self.current_track_playlist_tab.clear_current() self.current_track_playlist_tab = None self.current_track = None - self.playing = False # Clean up display self.label_end_timer.setText("00:00") @@ -239,6 +240,9 @@ class Window(QMainWindow, Ui_MainWindow): self.frame_fade.setStyleSheet("") self.update_headers() + # Enable controls + self.enable_play_next_controls() + def export_playlist_tab(self): "Export the current playlist to an m3u file" @@ -285,10 +289,6 @@ class Window(QMainWindow, Ui_MainWindow): if not self.current_track: return - # Set self.playing to False so that tick() doesn't see - # player=None and kick off end-of-track actions - self.playing = False - self.enable_play_next_controls() self.previous_track_position = self.music.fade() self.end_of_track_actions() @@ -424,11 +424,6 @@ class Window(QMainWindow, Ui_MainWindow): if next_track_id is not None: self.next_track = Tracks.get_track(session, next_track_id) self.next_track_playlist_tab = self.current_track_playlist_tab - # Check we can read it - if not self.file_is_readable(self.next_track.path): - helpers.show_warning( - "Can't read next track", - self.next_track.path) else: self.next_track = self.next_track_playlist_tab = None @@ -469,20 +464,20 @@ class Window(QMainWindow, Ui_MainWindow): playlist_db = Playlists.open(session, dlg.plid) self.load_playlist(session, playlist_db) - def select_next_track(self): - "Select next or first track in playlist" + def select_next_row(self): + "Select next or first row in playlist" - self.visible_playlist_tab().select_next_track() + self.visible_playlist_tab().select_next_row() def select_played(self): "Select all played tracks in playlist" self.visible_playlist_tab().select_played_tracks() - def select_previous_track(self): - "Select previous or first track in playlist" + def select_previous_row(self): + "Select previous or first row in playlist" - self.visible_playlist_tab().select_previous_track() + self.visible_playlist_tab().select_previous_row() def set_next_track(self, next_track_id=None): "Set selected track as next" @@ -532,12 +527,11 @@ class Window(QMainWindow, Ui_MainWindow): DEBUG("musicmuster.stop()") self.stop_playing(fade=False) - self.enable_play_next_controls() def stop_playing(self, fade=True): "Stop playing current track" - DEBUG("musicmuster.stop_playing()", True) + DEBUG(f"musicmuster.stop_playing({fade=})", True) if not self.music.playing(): DEBUG("musicmuster.stop_playing(): not playing", True) @@ -549,8 +543,8 @@ class Window(QMainWindow, Ui_MainWindow): DEBUG("musicmuster.stop_playing(): fading music", True) self.music.fade() else: - self.music.stop() DEBUG("musicmuster.stop_playing(): stopping music", True) + self.music.stop() self.end_of_track_actions() @@ -618,16 +612,20 @@ class Window(QMainWindow, Ui_MainWindow): # Time to fade self.label_fade_timer.setText(helpers.ms_to_mmss(time_to_fade)) - # Time to silence + # If silent in the next 5 seconds, put warning colour on + # time to silence box and enable play controls if time_to_silence <= 5500: self.frame_silent.setStyleSheet( f"background: {Config.COLOUR_ENDING_TIMER}" ) self.enable_play_next_controls() + # Set warning colour on time to silence box when fade starts elif time_to_fade <= 500: self.frame_silent.setStyleSheet( f"background: {Config.COLOUR_WARNING_TIMER}" ) + # Five seconds before fade starts, set warning colour on + # time to silence box and enable play controls elif time_to_fade <= 5500: self.frame_fade.setStyleSheet( f"background: {Config.COLOUR_WARNING_TIMER}" diff --git a/app/playlists.py b/app/playlists.py index 5cd8d10..739e9a3 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -409,9 +409,9 @@ class PlaylistTab(QTableWidget): # Called when we change tabs self._repaint() - def select_next_track(self): + def select_next_row(self): """ - Select next or first track. Don't select notes. Wrap at last row. + Select next or first row. Don't select notes. Wrap at last row. """ selected_rows = [row for row in @@ -456,7 +456,7 @@ class PlaylistTab(QTableWidget): # Reset extended selection self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) - def select_previous_track(self): + def select_previous_row(self): """ Select previous or last track. Don't select notes. Wrap at first row. """