diff --git a/app/musicmuster.py b/app/musicmuster.py
index aea96d8..0f3e9b0 100755
--- a/app/musicmuster.py
+++ b/app/musicmuster.py
@@ -3,19 +3,19 @@
import vlc
import sys
-from log import INFO, ERROR, DEBUG
+from log import DEBUG
+# from log import INFO, ERROR, DEBUG
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QDialog, QMainWindow
from PyQt5.QtWidgets import QTableWidgetItem, QFileDialog, QListWidgetItem
from threading import Timer
-from tinytag import TinyTag
from ui.main_window_ui import Ui_MainWindow
from ui.dlg_search_database_ui import Ui_Dialog
from config import Config
-from model import Tracks
+from model import Settings, Tracks
class RepeatedTimer:
@@ -44,48 +44,57 @@ class RepeatedTimer:
self.is_running = False
-def ms_to_mmss(ms, decimals=0):
- if not ms:
- return "-"
- if ms < 0:
- sign = "-"
- else:
- sign = ""
-
- minutes, remainder = divmod(ms, 60 * 1000)
- seconds = remainder / 1000
-
- return f"{sign}{minutes:.0f}:{seconds:02.{decimals}f}"
-
-
class Window(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self.connectSignalsSlots()
- self.resize(1599, 981)
+ record = Settings.get_int("mainwindow_x")
+ x = record.f_int or 1
+ record = Settings.get_int("mainwindow_y")
+ y = record.f_int or 1
+ record = Settings.get_int("mainwindow_width")
+ width = record.f_int or 1599
+ record = Settings.get_int("mainwindow_height")
+ height = record.f_int or 981
+ self.setGeometry(x, y, width, height)
- self.playlist.setColumnWidth(0, 0)
- self.playlist.setColumnWidth(1, 70)
- self.playlist.setColumnWidth(2, 381)
- self.playlist.setColumnWidth(3, 322)
- self.playlist.setColumnWidth(4, 78)
- self.playlist.setColumnWidth(5, 68)
- self.playlist.setColumnWidth(6, 47)
- self.playlist.setColumnWidth(7, 577)
+ for column in range(self.playlist.columnCount()):
+ name = f"playlist_col_{str(column)}_width"
+ record = Settings.get_int(name)
+ if record.f_int is not None:
+ self.playlist.setColumnWidth(column, record.f_int)
def __del__(self):
for column in range(self.playlist.columnCount()):
- print(f"Column {column}: {self.playlist.columnWidth(column)}")
- print(f"Window height: {self.height()} Window width: {self.width()}")
+ name = f"playlist_col_{str(column)}_width"
+ record = Settings.get_int(name)
+ if record.f_int != self.playlist.columnWidth(column):
+ record.update({'f_int': self.playlist.columnWidth(column)})
+
+ record = Settings.get_int("mainwindow_height")
+ if record.f_int != self.height():
+ record.update({'f_int': self.height()})
+
+ record = Settings.get_int("mainwindow_width")
+ if record.f_int != self.width():
+ record.update({'f_int': self.width()})
+
+ record = Settings.get_int("mainwindow_x")
+ if record.f_int != self.x():
+ record.update({'f_int': self.x()})
+
+ record = Settings.get_int("mainwindow_y")
+ if record.f_int != self.y():
+ record.update({'f_int': self.y()})
def connectSignalsSlots(self):
self.fileButton.clicked.connect(self.selectFile)
- self.databaseButton.clicked.connect(self.selectDatabase)
+ self.databaseButton.clicked.connect(self.selectFromDatabase)
self.actionPlay_selected.triggered.connect(self.play_selected)
- def selectDatabase(self):
+ def selectFromDatabase(self):
dlg = DbDialog(self)
dlg.exec()
@@ -93,10 +102,11 @@ class Window(QMainWindow, Ui_MainWindow):
if self.playlist.selectionModel().hasSelection():
row = self.playlist.currentRow()
track_id = int(self.playlist.item(row, 0).text())
+ DEBUG(f"play_selected: track_id={track_id}")
# TODO: get_path may raise exception
track_path = Tracks.get_path(track_id)
if track_path:
- INFO(f"play: {track_path}")
+ DEBUG(f"play_selected: track_path={track_path}")
player = vlc.MediaPlayer(track_path)
player.play()
@@ -121,6 +131,7 @@ class Window(QMainWindow, Ui_MainWindow):
track is an instance of Track
"""
+ DEBUG(f"add_to_playlist: track.id={track.id}")
pl = self.playlist
row = pl.rowCount()
pl.insertRow(row)
@@ -143,13 +154,28 @@ class DbDialog(QDialog):
super().__init__(parent)
self.ui = Ui_Dialog()
self.ui.setupUi(self)
- self.ui.lineEdit.textEdited.connect(self.chars_typed)
- self.ui.listWidget.itemDoubleClicked.connect(self.listdclick)
+ self.ui.searchString.textEdited.connect(self.chars_typed)
+ self.ui.matchList.itemDoubleClicked.connect(self.listdclick)
+
+ record = Settings.get_int("dbdialog_width")
+ width = record.f_int or 800
+ record = Settings.get_int("dbdialog_height")
+ height = record.f_int or 600
+ self.resize(width, height)
+
+ def __del__(self):
+ record = Settings.get_int("dbdialog_height")
+ if record.f_int != self.height():
+ record.update({'f_int': self.height()})
+
+ record = Settings.get_int("dbdialog_width")
+ if record.f_int != self.width():
+ record.update({'f_int': self.width()})
def chars_typed(self, s):
if len(s) >= 3:
matches = Tracks.search_titles(s)
- self.ui.listWidget.clear()
+ self.ui.matchList.clear()
if matches:
for track in matches:
t = QListWidgetItem()
@@ -158,7 +184,7 @@ class DbDialog(QDialog):
f"[{ms_to_mmss(track.duration)}]"
)
t.setData(Qt.UserRole, track.id)
- self.ui.listWidget.addItem(t)
+ self.ui.matchList.addItem(t)
def listdclick(self, entry):
track_id = entry.data(Qt.UserRole)
@@ -166,6 +192,20 @@ class DbDialog(QDialog):
self.parent().add_to_playlist(track)
+def ms_to_mmss(ms, decimals=0):
+ if not ms:
+ return "-"
+ if ms < 0:
+ sign = "-"
+ else:
+ sign = ""
+
+ minutes, remainder = divmod(ms, 60 * 1000)
+ seconds = remainder / 1000
+
+ return f"{sign}{minutes:.0f}:{seconds:02.{decimals}f}"
+
+
def main():
app = QApplication(sys.argv)
win = Window()
diff --git a/app/ui/dlg_SearchDatabase.ui b/app/ui/dlg_SearchDatabase.ui
index 619eddd..972c1e6 100644
--- a/app/ui/dlg_SearchDatabase.ui
+++ b/app/ui/dlg_SearchDatabase.ui
@@ -7,7 +7,7 @@
0
0
383
- 272
+ 270
@@ -26,12 +26,12 @@
-
-
+
-
-
+
-
diff --git a/notes.otl b/notes.otl
index b6be0f0..80d1627 100644
--- a/notes.otl
+++ b/notes.otl
@@ -34,6 +34,8 @@ Playlist management
Clear selection
Track volume analysis
Open track in Audacity
+ Wikipedia for song title
+ Song facts for song title
Display
Remember window size
Remember dialog size