diff --git a/app/model.py b/app/model.py
index bd43bcd..b18b2ce 100644
--- a/app/model.py
+++ b/app/model.py
@@ -13,6 +13,9 @@ from sqlalchemy.orm import sessionmaker
from config import Config
+from log import ERROR, DEBUG
+# from log import INFO, ERROR, DEBUG
+
# "Constants"
# Instantiate logging
pytiger.logging.config.basic_config(stderr=False, level=logging.INFO)
@@ -88,6 +91,7 @@ class Tracks(Base):
@classmethod
def get_or_create(cls, path):
+ DEBUG(f"get_or_create(cls, {path})")
try:
track = session.query(cls).filter(cls.path == path).one()
except NoResultFound:
@@ -105,6 +109,16 @@ class Tracks(Base):
print(f"Can't find track id {id}")
return None
+ @staticmethod
+ def get_track(id):
+ try:
+ DEBUG(f"get_track({id})")
+ track = session.query(Tracks).filter(Tracks.id == id).one()
+ return track
+ except NoResultFound:
+ ERROR(f"get_track({id}): not found")
+ return None
+
@staticmethod
def search_titles(text):
return (
diff --git a/app/musicmuster.py b/app/musicmuster.py
index 0f3e9b0..e1c2275 100755
--- a/app/musicmuster.py
+++ b/app/musicmuster.py
@@ -1,10 +1,10 @@
#!/usr/bin/python3
+import os
import vlc
import sys
-from log import DEBUG
-# from log import INFO, ERROR, DEBUG
+from log import DEBUG, ERROR
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QDialog, QMainWindow
@@ -44,11 +44,88 @@ class RepeatedTimer:
self.is_running = False
+class Music:
+ def __init__(self):
+ self.current_track = {
+ "player": None,
+ "meta": None
+ }
+
+ self.next_track = {
+ "player": None,
+ "meta": None
+ }
+
+ self.previous_track = {
+ "player": None,
+ "meta": None
+ }
+
+ def get_current_artist(self):
+ return self.current_track['meta'].artist
+
+ def get_current_duration(self):
+ return self.current_track['meta'].duration
+
+ def get_current_fade_at(self):
+ return self.current_track['meta'].fade_at
+
+ def get_current_playtime(self):
+ return self.current_track['player'].get_time()
+
+ def get_current_silence_at(self):
+ return self.current_track['meta'].silence_at
+
+ def get_current_title(self):
+ return self.current_track['meta'].title
+
+ def get_last_artist(self):
+ return self.last_track['meta'].artist
+
+ def get_last_title(self):
+ return self.last_track['meta'].title
+
+ def get_next_artist(self):
+ return self.next_track['meta'].artist
+
+ def get_next_title(self):
+ return self.next_track['meta'].title
+
+ def play_next(self):
+ if self.previous_track['player']:
+ self.previous_track['player'].release()
+ if self.current_track['player']:
+ self.current_track['player'].stop()
+ self.previous_track = self.current_track
+ self.current_track = self.next_track
+ self.next_track = {
+ "player": None,
+ "meta": None
+ }
+
+ self.current_track['player'].play()
+
+ def resume_last(self):
+ pass
+
+ def set_next_track(self, id):
+ track = Tracks.get_track(id)
+ if not track:
+ ERROR(f"set_next_track({id}): can't find track")
+ return None
+
+ self.next_track['player'] = vlc.MediaPlayer(
+ os.path.join(Config.ROOT, track.path))
+ self.next_track['meta'] = track
+ return track.id
+
+
class Window(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self.connectSignalsSlots()
+ self.music = Music()
record = Settings.get_int("mainwindow_x")
x = record.f_int or 1
@@ -92,12 +169,17 @@ class Window(QMainWindow, Ui_MainWindow):
def connectSignalsSlots(self):
self.fileButton.clicked.connect(self.selectFile)
self.databaseButton.clicked.connect(self.selectFromDatabase)
- self.actionPlay_selected.triggered.connect(self.play_selected)
+ self.actionPlay_selected.triggered.connect(self.play_next)
+ self.actionPlay_next.triggered.connect(self.play_next)
+ self.playlist.itemSelectionChanged.connect(self.set_next)
def selectFromDatabase(self):
dlg = DbDialog(self)
dlg.exec()
+ def play_next(self):
+ self.music.play_next()
+
def play_selected(self):
if self.playlist.selectionModel().hasSelection():
row = self.playlist.currentRow()
@@ -124,6 +206,14 @@ class Window(QMainWindow, Ui_MainWindow):
# track = Track(fname)
# self.add_to_playlist(track)
+ def set_next(self):
+ if self.playlist.selectionModel().hasSelection():
+ row = self.playlist.currentRow()
+ track_id = int(self.playlist.item(row, 0).text())
+ DEBUG(f"set_next: track_id={track_id}")
+ if self.music.set_next_track(track_id) != track_id:
+ ERROR("Can't set next track")
+
def add_to_playlist(self, track):
"""
Add track to playlist
diff --git a/app/ui/main_window.ui b/app/ui/main_window.ui
index 945f5d3..dcd1a2c 100644
--- a/app/ui/main_window.ui
+++ b/app/ui/main_window.ui
@@ -322,6 +322,7 @@ border: 1px solid rgb(85, 87, 83);
Pla&ylist
+
@@ -333,12 +334,17 @@ border: 1px solid rgb(85, 87, 83);
- Play selected
+ &Play selected
Return
+
+
+ Play &next
+
+