Clean up of musicmuster.py

This commit is contained in:
Keith Edmunds 2021-08-15 10:40:28 +01:00
parent c0752407b9
commit 90a8209551
4 changed files with 34 additions and 30 deletions

View File

@ -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): 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" 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): def ms_to_mmss(ms, decimals=0, negative=False):
if not ms: if not ms:
return "-" return "-"

View File

@ -2,7 +2,7 @@
import sqlalchemy import sqlalchemy
from datetime import datetime, time from datetime import datetime
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import ( from sqlalchemy import (
Boolean, Boolean,
@ -457,7 +457,6 @@ class Tracks(Base):
# def get_note(session, id): # def get_note(session, id):
# return session.query(Notes).filter(Notes.id == id).one() # return session.query(Notes).filter(Notes.id == id).one()
@staticmethod @staticmethod
def get_all_paths(session): def get_all_paths(session):
"Return a list of paths of all tracks" "Return a list of paths of all tracks"

View File

@ -8,7 +8,6 @@ import urllib.parse
from datetime import datetime, timedelta from datetime import datetime, timedelta
from log import DEBUG, EXCEPTION from log import DEBUG, EXCEPTION
from slugify import slugify
from PyQt5.QtCore import Qt, QTimer from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
@ -18,7 +17,6 @@ from PyQt5.QtWidgets import (
QInputDialog, QInputDialog,
QListWidgetItem, QListWidgetItem,
QMainWindow, QMainWindow,
QMessageBox,
) )
import helpers import helpers
@ -139,10 +137,10 @@ class Window(QMainWindow, Ui_MainWindow):
self.actionOpenPlaylist.triggered.connect(self.open_playlist) self.actionOpenPlaylist.triggered.connect(self.open_playlist)
self.actionPlay_next.triggered.connect(self.play_next) self.actionPlay_next.triggered.connect(self.play_next)
self.actionSearch_database.triggered.connect(self.search_database) 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_played_tracks.triggered.connect(self.select_played)
self.actionSelect_previous_track.triggered.connect( self.actionSelect_previous_track.triggered.connect(
self.select_previous_track) self.select_previous_row)
self.actionSelect_unplayed_tracks.triggered.connect( self.actionSelect_unplayed_tracks.triggered.connect(
self.select_unplayed) self.select_unplayed)
self.actionSetNext.triggered.connect(self.set_next_track) self.actionSetNext.triggered.connect(self.set_next_track)
@ -224,6 +222,10 @@ class Window(QMainWindow, Ui_MainWindow):
def end_of_track_actions(self): def end_of_track_actions(self):
"Clean up after track played" "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 # Clean up metadata
self.previous_track = self.current_track self.previous_track = self.current_track
if self.current_track_playlist_tab: 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.clear_current()
self.current_track_playlist_tab = None self.current_track_playlist_tab = None
self.current_track = None self.current_track = None
self.playing = False
# Clean up display # Clean up display
self.label_end_timer.setText("00:00") self.label_end_timer.setText("00:00")
@ -239,6 +240,9 @@ class Window(QMainWindow, Ui_MainWindow):
self.frame_fade.setStyleSheet("") self.frame_fade.setStyleSheet("")
self.update_headers() self.update_headers()
# Enable controls
self.enable_play_next_controls()
def export_playlist_tab(self): def export_playlist_tab(self):
"Export the current playlist to an m3u file" "Export the current playlist to an m3u file"
@ -285,10 +289,6 @@ class Window(QMainWindow, Ui_MainWindow):
if not self.current_track: if not self.current_track:
return 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.previous_track_position = self.music.fade()
self.end_of_track_actions() self.end_of_track_actions()
@ -424,11 +424,6 @@ class Window(QMainWindow, Ui_MainWindow):
if next_track_id is not None: if next_track_id is not None:
self.next_track = Tracks.get_track(session, next_track_id) self.next_track = Tracks.get_track(session, next_track_id)
self.next_track_playlist_tab = self.current_track_playlist_tab 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: else:
self.next_track = self.next_track_playlist_tab = None 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) playlist_db = Playlists.open(session, dlg.plid)
self.load_playlist(session, playlist_db) self.load_playlist(session, playlist_db)
def select_next_track(self): def select_next_row(self):
"Select next or first track in playlist" "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): def select_played(self):
"Select all played tracks in playlist" "Select all played tracks in playlist"
self.visible_playlist_tab().select_played_tracks() self.visible_playlist_tab().select_played_tracks()
def select_previous_track(self): def select_previous_row(self):
"Select previous or first track in playlist" "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): def set_next_track(self, next_track_id=None):
"Set selected track as next" "Set selected track as next"
@ -532,12 +527,11 @@ class Window(QMainWindow, Ui_MainWindow):
DEBUG("musicmuster.stop()") DEBUG("musicmuster.stop()")
self.stop_playing(fade=False) self.stop_playing(fade=False)
self.enable_play_next_controls()
def stop_playing(self, fade=True): def stop_playing(self, fade=True):
"Stop playing current track" "Stop playing current track"
DEBUG("musicmuster.stop_playing()", True) DEBUG(f"musicmuster.stop_playing({fade=})", True)
if not self.music.playing(): if not self.music.playing():
DEBUG("musicmuster.stop_playing(): not playing", True) DEBUG("musicmuster.stop_playing(): not playing", True)
@ -549,8 +543,8 @@ class Window(QMainWindow, Ui_MainWindow):
DEBUG("musicmuster.stop_playing(): fading music", True) DEBUG("musicmuster.stop_playing(): fading music", True)
self.music.fade() self.music.fade()
else: else:
self.music.stop()
DEBUG("musicmuster.stop_playing(): stopping music", True) DEBUG("musicmuster.stop_playing(): stopping music", True)
self.music.stop()
self.end_of_track_actions() self.end_of_track_actions()
@ -618,16 +612,20 @@ class Window(QMainWindow, Ui_MainWindow):
# Time to fade # Time to fade
self.label_fade_timer.setText(helpers.ms_to_mmss(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: if time_to_silence <= 5500:
self.frame_silent.setStyleSheet( self.frame_silent.setStyleSheet(
f"background: {Config.COLOUR_ENDING_TIMER}" f"background: {Config.COLOUR_ENDING_TIMER}"
) )
self.enable_play_next_controls() self.enable_play_next_controls()
# Set warning colour on time to silence box when fade starts
elif time_to_fade <= 500: elif time_to_fade <= 500:
self.frame_silent.setStyleSheet( self.frame_silent.setStyleSheet(
f"background: {Config.COLOUR_WARNING_TIMER}" 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: elif time_to_fade <= 5500:
self.frame_fade.setStyleSheet( self.frame_fade.setStyleSheet(
f"background: {Config.COLOUR_WARNING_TIMER}" f"background: {Config.COLOUR_WARNING_TIMER}"

View File

@ -409,9 +409,9 @@ class PlaylistTab(QTableWidget):
# Called when we change tabs # Called when we change tabs
self._repaint() 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 selected_rows = [row for row in
@ -456,7 +456,7 @@ class PlaylistTab(QTableWidget):
# Reset extended selection # Reset extended selection
self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) 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. Select previous or last track. Don't select notes. Wrap at first row.
""" """