Clean up of musicmuster.py
This commit is contained in:
parent
c0752407b9
commit
90a8209551
@ -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 "-"
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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}"
|
||||||
|
|||||||
@ -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.
|
||||||
"""
|
"""
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user