Rebase dev onto v2_id

This commit is contained in:
Keith Edmunds 2022-03-02 09:23:56 +00:00
parent cf58932fca
commit 281a1d40bf
9 changed files with 405 additions and 521 deletions

View File

@ -5,6 +5,7 @@ import os
class Config(object):
AUDACITY_COMMAND = "/usr/bin/audacity"
AUDIO_SEGMENT_CHUNK_SIZE = 10
CHECK_AUDACITY_AT_STARTUP = True
COLOUR_CURRENT_HEADER = "#d4edda"
COLOUR_CURRENT_PLAYLIST = "#7eca8f"
COLOUR_CURRENT_TAB = "#248f24"
@ -50,6 +51,7 @@ class Config(object):
MILLISECOND_SIGFIGS = 0
MYSQL_CONNECT = os.environ.get('MYSQL_CONNECT') or "mysql+mysqldb://musicmuster:musicmuster@localhost/musicmuster_v2" # noqa E501
NORMALISE_ON_IMPORT = True
NOTE_TIME_FORMAT = "%H:%M:%S"
ROOT = os.environ.get('ROOT') or "/home/kae/music"
TESTMODE = True
TIMER_MS = 500

View File

@ -160,6 +160,10 @@ def open_in_audacity(path):
if "audacity" not in [i.name() for i in psutil.process_iter()]:
return False
# Return if path not given
if not path:
return False
to_pipe = '/tmp/audacity_script_pipe.to.' + str(os.getuid())
from_pipe = '/tmp/audacity_script_pipe.from.' + str(os.getuid())
EOL = '\n'

View File

@ -6,8 +6,6 @@ import re
import sqlalchemy
from datetime import datetime
from mutagen.flac import FLAC
from mutagen.mp3 import MP3
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.ext.declarative import declarative_base, DeclarativeMeta
from sqlalchemy import (
@ -30,7 +28,6 @@ from helpers import (
fade_point,
get_audio_segment,
leading_silence,
show_warning,
trailing_silence,
)
from log import DEBUG, ERROR

View File

@ -36,23 +36,6 @@ from ui.dlg_SelectPlaylist_ui import Ui_dlgSelectPlaylist
from ui.main_window_ui import Ui_MainWindow
class ElideLabel(QLabel):
"""
From https://stackoverflow.com/questions/11446478/
pyside-pyqt-truncate-text-in-qlabel-based-on-minimumsize
"""
def paintEvent(self, event):
#TODO: V2 check
painter = QPainter(self)
metrics = QFontMetrics(self.font())
elided = metrics.elidedText(self.text(), Qt.ElideRight, self.width())
painter.drawText(self.rect(), self.alignment(), elided)
#TODO: V2 check
class Window(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
#TODO: V2 check
@ -120,8 +103,10 @@ class Window(QMainWindow, Ui_MainWindow):
self.setGeometry(x, y, width, height)
def check_audacity(self):
#TODO: V2 check
"Offer to run Audacity if not running"
"""Offer to run Audacity if not running"""
if not Config.CHECK_AUDACITY_AT_STARTUP:
return
if "audacity" in [i.name() for i in psutil.process_iter()]:
return
@ -427,15 +412,16 @@ class Window(QMainWindow, Ui_MainWindow):
for playlist_db in Playlists.get_open(session):
self.create_playlist_tab(session, playlist_db)
def create_playlist_tab(self, session, playlist_db):
def create_playlist_tab(self, session, playlist):
#TODO: V2 check
"""
Take the passed database object, create a playlist tab and add tab
to display.
Take the passed playlist database object, create a playlist tab and
add tab to display.
"""
playlist_tab = PlaylistTab(self, session, playlist_db)
idx = self.tabPlaylist.addTab(playlist_tab, playlist_db.name)
playlist_tab = PlaylistTab(parent=self,
session=session, playlist=playlist)
idx = self.tabPlaylist.addTab(playlist_tab, playlist.name)
self.tabPlaylist.setCurrentIndex(idx)
def move_selected(self):
@ -466,11 +452,10 @@ class Window(QMainWindow, Ui_MainWindow):
break
rows = []
for (row, track_id) in (
for (row, track) in (
self.visible_playlist_tab().get_selected_rows_and_tracks()
):
rows.append(row)
track = Tracks.get_by_id(session, track_id)
if destination_visible_playlist_tab:
# Insert with repaint=False to not update database
destination_visible_playlist_tab.insert_track(
@ -538,7 +523,7 @@ class Window(QMainWindow, Ui_MainWindow):
# no automatic next track, and may later be overriden by
# user selecting a different track on this or another
# playlist.
next_track_id = self.current_track_playlist_tab.play_started()
***KAE won't return next_track_id *** = self.current_track_playlist_tab.play_started()
if next_track_id is not None:
self.next_track = Tracks.get_by_id(session, next_track_id)
@ -1019,6 +1004,5 @@ def main():
EXCEPTION("Unhandled Exception caught by musicmuster.main()")
print(f"{__name__=}")
if __name__ == "__main__":
main()

File diff suppressed because it is too large Load Diff

View File

@ -175,7 +175,7 @@ border: 1px solid rgb(85, 87, 83);</string>
</widget>
</item>
<item>
<widget class="ElideLabel" name="hdrNextTrack">
<widget class="QLabel" name="hdrNextTrack">
<property name="minimumSize">
<size>
<width>0</width>
@ -1014,13 +1014,6 @@ border: 1px solid rgb(85, 87, 83);</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
<class>ElideLabel</class>
<extends>QLabel</extends>
<header>musicmuster</header>
</customwidget>
</customwidgets>
<resources>
<include location="icons.qrc"/>
</resources>

View File

@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'ui/main_window.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
@ -99,7 +99,7 @@ class Ui_MainWindow(object):
self.hdrCurrentTrack.setWordWrap(True)
self.hdrCurrentTrack.setObjectName("hdrCurrentTrack")
self.verticalLayout.addWidget(self.hdrCurrentTrack)
self.hdrNextTrack = ElideLabel(self.centralwidget)
self.hdrNextTrack = QtWidgets.QLabel(self.centralwidget)
self.hdrNextTrack.setMinimumSize(QtCore.QSize(0, 39))
self.hdrNextTrack.setMaximumSize(QtCore.QSize(16777215, 39))
font = QtGui.QFont()
@ -478,7 +478,7 @@ class Ui_MainWindow(object):
self.retranslateUi(MainWindow)
self.tabPlaylist.setCurrentIndex(-1)
self.actionE_xit.triggered.connect(MainWindow.close)
self.actionE_xit.triggered.connect(MainWindow.close) # type: ignore
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
@ -550,5 +550,4 @@ class Ui_MainWindow(object):
self.actionSelect_unplayed_tracks.setText(_translate("MainWindow", "Select unplayed tracks"))
self.actionAdd_note.setText(_translate("MainWindow", "Add note..."))
self.actionAdd_note.setShortcut(_translate("MainWindow", "Ctrl+T"))
from musicmuster import ElideLabel
import icons_rc

16
app/ui_helpers.py Normal file
View File

@ -0,0 +1,16 @@
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFontMetrics, QPainter
class ElideLabel(QLabel):
"""
From https://stackoverflow.com/questions/11446478/
pyside-pyqt-truncate-text-in-qlabel-based-on-minimumsize
"""
def paintEvent(self, event):
painter = QPainter(self)
metrics = QFontMetrics(self.font())
elided = metrics.elidedText(self.text(), Qt.ElideRight, self.width())
painter.drawText(self.rect(), self.alignment(), elided)

View File

@ -1,4 +1,4 @@
from app.playlists import PlaylistTab
from app.playlists import Notes, PlaylistTab, Tracks
from app.models import Playlists
@ -8,3 +8,32 @@ def test_init(qtbot, session):
playlist = Playlists(session, "my playlist")
playlist_tab = PlaylistTab(None, session, playlist)
assert playlist_tab
def test_save_and_restore(qtbot, session):
"""Playlist with one track, one note, save and restore"""
# Create playlist
playlist = Playlists(session, "my playlist")
playlist_tab = PlaylistTab(None, session, playlist)
# Insert a note
note_text = "my note"
note_row = 7
note = Notes(session, playlist.id, note_row, note_text)
playlist_tab._insert_note(session, note)
# Add a track
track_path = "/a/b/c"
track = Tracks(session, track_path)
playlist_tab._insert_track(session, track)
# Save playlist
playlist_tab.save_playlist(session)
# Retrieve playlist
playlists = Playlists.get_open(session)
assert len(playlists) == 1
retrieved_playlist = playlists[0]
assert track_path in [a.path for a in retrieved_playlist.tracks.values()]
assert note_text in [a.note for a in retrieved_playlist.notes]