Session fixes, MSS colour
This commit is contained in:
parent
e2c5bba4ae
commit
47f53428f6
@ -190,14 +190,13 @@ class Playdates(Base):
|
|||||||
tracks: RelationshipProperty = relationship(
|
tracks: RelationshipProperty = relationship(
|
||||||
"Tracks", back_populates="playdates", lazy="joined")
|
"Tracks", back_populates="playdates", lazy="joined")
|
||||||
|
|
||||||
def __init__(self, session: Session, track: "Tracks") -> None:
|
def __init__(self, session: Session, track_id: int) -> None:
|
||||||
"""Record that track was played"""
|
"""Record that track was played"""
|
||||||
|
|
||||||
DEBUG(f"add_playdate(track={track})")
|
DEBUG(f"add_playdate({track_id=})")
|
||||||
|
|
||||||
self.lastplayed = datetime.now()
|
self.lastplayed = datetime.now()
|
||||||
self.track_id = track.id
|
self.track_id = track_id
|
||||||
track.update_lastplayed(session)
|
|
||||||
session.add(self)
|
session.add(self)
|
||||||
session.flush()
|
session.flush()
|
||||||
|
|
||||||
@ -594,9 +593,13 @@ class Tracks(Base):
|
|||||||
.order_by(cls.title)
|
.order_by(cls.title)
|
||||||
).all()
|
).all()
|
||||||
|
|
||||||
def update_lastplayed(self, session: Session) -> None:
|
@staticmethod
|
||||||
self.lastplayed = datetime.now()
|
def update_lastplayed(session: Session, track_id: int) -> None:
|
||||||
session.add(self)
|
"""Update the last_played field to current datetime"""
|
||||||
|
|
||||||
|
rec = session.query(Tracks).get(track_id)
|
||||||
|
rec.lastplayed = datetime.now()
|
||||||
|
session.add(rec)
|
||||||
session.flush()
|
session.flush()
|
||||||
|
|
||||||
def update_artist(self, session: Session, artist: str) -> None:
|
def update_artist(self, session: Session, artist: str) -> None:
|
||||||
|
|||||||
@ -24,12 +24,13 @@ from PyQt5.QtWidgets import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
import dbconfig
|
import dbconfig
|
||||||
|
from dbconfig import Session
|
||||||
import helpers
|
import helpers
|
||||||
import music
|
import music
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from models import (Playdates, Playlists, PlaylistTracks,
|
from models import (Base, Playdates, Playlists, PlaylistTracks,
|
||||||
Session, Settings, Tracks)
|
Settings, Tracks)
|
||||||
from playlists import PlaylistTab
|
from playlists import PlaylistTab
|
||||||
from utilities import create_track_from_file
|
from utilities import create_track_from_file
|
||||||
from sqlalchemy.orm.exc import DetachedInstanceError
|
from sqlalchemy.orm.exc import DetachedInstanceError
|
||||||
@ -38,6 +39,20 @@ from ui.dlg_SelectPlaylist_ui import Ui_dlgSelectPlaylist
|
|||||||
from ui.main_window_ui import Ui_MainWindow
|
from ui.main_window_ui import Ui_MainWindow
|
||||||
|
|
||||||
|
|
||||||
|
class TrackData:
|
||||||
|
def __init__(self, track):
|
||||||
|
self.id = track.id
|
||||||
|
self.title = track.title
|
||||||
|
self.artist = track.artist
|
||||||
|
self.duration = track.duration
|
||||||
|
self.start_gap = track.start_gap
|
||||||
|
self.fade_at = track.fade_at
|
||||||
|
self.silence_at = track.silence_at
|
||||||
|
self.path = track.path
|
||||||
|
self.mtime = track.mtime
|
||||||
|
self.lastplayed = track.lastplayed
|
||||||
|
|
||||||
|
|
||||||
class Window(QMainWindow, Ui_MainWindow):
|
class Window(QMainWindow, Ui_MainWindow):
|
||||||
def __init__(self, parent=None) -> None:
|
def __init__(self, parent=None) -> None:
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
@ -511,10 +526,6 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
self.current_track = self.next_track
|
self.current_track = self.next_track
|
||||||
self.next_track = None
|
self.next_track = None
|
||||||
|
|
||||||
# Ensure track is in session
|
|
||||||
if self.current_track not in session:
|
|
||||||
session.add(self.current_track)
|
|
||||||
|
|
||||||
# If current track on different playlist_tab to last, reset
|
# If current track on different playlist_tab to last, reset
|
||||||
# last track playlist_tab colour
|
# last track playlist_tab colour
|
||||||
# Set current track playlist_tab colour
|
# Set current track playlist_tab colour
|
||||||
@ -534,7 +545,10 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
self.music.play(self.current_track.path)
|
self.music.play(self.current_track.path)
|
||||||
|
|
||||||
# Tell database to record it as played
|
# Tell database to record it as played
|
||||||
Playdates(session, self.current_track)
|
Playdates(session, self.current_track.id)
|
||||||
|
|
||||||
|
# Set last_played date
|
||||||
|
Tracks.update_lastplayed(session, self.current_track.id)
|
||||||
|
|
||||||
# Tell playlist track is now playing
|
# Tell playlist track is now playing
|
||||||
self.current_track_playlist_tab.play_started(session)
|
self.current_track_playlist_tab.play_started(session)
|
||||||
@ -713,7 +727,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
QColor(Config.COLOUR_NEXT_TAB))
|
QColor(Config.COLOUR_NEXT_TAB))
|
||||||
|
|
||||||
# Note next track
|
# Note next track
|
||||||
self.next_track = track
|
self.next_track = TrackData(track)
|
||||||
|
|
||||||
# Update headers
|
# Update headers
|
||||||
self.update_headers()
|
self.update_headers()
|
||||||
@ -747,10 +761,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
# If track is playing, update track clocks time and colours
|
# If track is playing, update track clocks time and colours
|
||||||
if self.music.player and self.music.playing():
|
if self.music.player and self.music.playing():
|
||||||
with Session() as session:
|
|
||||||
self.playing = True
|
self.playing = True
|
||||||
if self.current_track not in session:
|
|
||||||
session.add(self.current_track)
|
|
||||||
playtime: int = self.music.get_playtime()
|
playtime: int = self.music.get_playtime()
|
||||||
time_to_fade: int = (self.current_track.fade_at - playtime)
|
time_to_fade: int = (self.current_track.fade_at - playtime)
|
||||||
time_to_silence: int = (
|
time_to_silence: int = (
|
||||||
|
|||||||
@ -341,7 +341,7 @@ class PlaylistTab(QTableWidget):
|
|||||||
# Add track details to columns
|
# Add track details to columns
|
||||||
mss_item: QTableWidgetItem = QTableWidgetItem(str(track.start_gap))
|
mss_item: QTableWidgetItem = QTableWidgetItem(str(track.start_gap))
|
||||||
if track.start_gap and track.start_gap >= 500:
|
if track.start_gap and track.start_gap >= 500:
|
||||||
item.setBackground(QColor(Config.COLOUR_LONG_START))
|
mss_item.setBackground(QColor(Config.COLOUR_LONG_START))
|
||||||
self.setItem(row, self.COL_MSS, mss_item)
|
self.setItem(row, self.COL_MSS, mss_item)
|
||||||
|
|
||||||
title_item: QTableWidgetItem = QTableWidgetItem(track.title)
|
title_item: QTableWidgetItem = QTableWidgetItem(track.title)
|
||||||
@ -485,7 +485,7 @@ class PlaylistTab(QTableWidget):
|
|||||||
self._insert_note(session, item, repaint=False)
|
self._insert_note(session, item, repaint=False)
|
||||||
|
|
||||||
# Scroll to top
|
# Scroll to top
|
||||||
scroll_to: QTableWidgetItem = self.item(0, self.COL_TITLE)
|
scroll_to: QTableWidgetItem = self.item(0, 0)
|
||||||
self.scrollToItem(scroll_to, QAbstractItemView.PositionAtTop)
|
self.scrollToItem(scroll_to, QAbstractItemView.PositionAtTop)
|
||||||
|
|
||||||
# We possibly don't need to save the playlist here, but row
|
# We possibly don't need to save the playlist here, but row
|
||||||
@ -1364,6 +1364,10 @@ class PlaylistTab(QTableWidget):
|
|||||||
# Get the row number of all selected items and put into a set
|
# Get the row number of all selected items and put into a set
|
||||||
# to deduplicate
|
# to deduplicate
|
||||||
sel_rows: Set[int] = set([item.row() for item in self.selectedItems()])
|
sel_rows: Set[int] = set([item.row() for item in self.selectedItems()])
|
||||||
|
# If no rows are selected, we have nothing to do
|
||||||
|
if len(sel_rows) == 0:
|
||||||
|
return
|
||||||
|
|
||||||
notes_rows: Set[int] = set(self._get_notes_rows())
|
notes_rows: Set[int] = set(self._get_notes_rows())
|
||||||
ms: int = 0
|
ms: int = 0
|
||||||
with Session() as session:
|
with Session() as session:
|
||||||
@ -1388,7 +1392,7 @@ class PlaylistTab(QTableWidget):
|
|||||||
self.clearSelection()
|
self.clearSelection()
|
||||||
|
|
||||||
if played:
|
if played:
|
||||||
rows = self. _get_played_track_rows()
|
rows = self._get_played_track_rows()
|
||||||
else:
|
else:
|
||||||
rows = self._get_unplayed_track_rows()
|
rows = self._get_unplayed_track_rows()
|
||||||
|
|
||||||
|
|||||||
@ -246,7 +246,7 @@ def update_db(session):
|
|||||||
for path in list(os_paths - db_paths):
|
for path in list(os_paths - db_paths):
|
||||||
DEBUG(f"songdb.update_db: {path=} not in database")
|
DEBUG(f"songdb.update_db: {path=} not in database")
|
||||||
# is filename in database?
|
# is filename in database?
|
||||||
track = Tracks.get_from_filename(session, os.path.basename(path))
|
track = Tracks.get_by_filename(session, os.path.basename(path))
|
||||||
if not track:
|
if not track:
|
||||||
messages.append(f"Track missing from database: {path}")
|
messages.append(f"Track missing from database: {path}")
|
||||||
else:
|
else:
|
||||||
@ -262,7 +262,7 @@ def update_db(session):
|
|||||||
# Remote any tracks from database whose paths don't exist
|
# Remote any tracks from database whose paths don't exist
|
||||||
for path in list(db_paths - os_paths):
|
for path in list(db_paths - os_paths):
|
||||||
# Manage tracks listed in database but where path is invalid
|
# Manage tracks listed in database but where path is invalid
|
||||||
track = Tracks.get_from_path(session, path)
|
track = Tracks.get_by_path(session, path)
|
||||||
messages.append(f"Remove from database: {path=} {track=}")
|
messages.append(f"Remove from database: {path=} {track=}")
|
||||||
|
|
||||||
# Remove references from Playdates
|
# Remove references from Playdates
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user