diff --git a/app/musicmuster.py b/app/musicmuster.py index 834cc23..4165239 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -6,7 +6,7 @@ import sys import urllib.parse -from datetime import datetime, timedelta +from datetime import datetime from log import DEBUG, EXCEPTION from typing import Callable, Dict, List, Optional, Tuple @@ -32,7 +32,6 @@ from config import Config from models import (Base, Playdates, Playlists, PlaylistTracks, Settings, Tracks) from playlists import PlaylistTab -from utilities import create_track_from_file from sqlalchemy.orm.exc import DetachedInstanceError from ui.dlg_search_database_ui import Ui_Dialog from ui.dlg_SelectPlaylist_ui import Ui_dlgSelectPlaylist @@ -407,20 +406,25 @@ class Window(QMainWindow, Ui_MainWindow): visible_tab = self.visible_playlist_tab() visible_tab_id = visible_tab.playlist_id - playlists = [p for p in Playlists.get_all(session) - if p.id != visible_tab_id] + source_playlist = None + playlists = [] + for playlist in Playlists.get_all(session): + if playlist.id == visible_tab_id: + source_playlist = playlist + else: + playlists.append(playlist) + + # Get destination playlist id dlg = SelectPlaylistDialog(self, playlists=playlists, session=session) dlg.exec() - if not dlg.plid: + if not dlg.playlist: return + destination_playlist = dlg.playlist # Update database for both source and destination playlists rows = visible_tab.get_selected_rows() - for row in rows: - PlaylistTracks.move_track( - session, visible_tab.playlist_id, row, dlg.plid - ) + source_playlist.move_track(session, rows, destination_playlist) # Update destination playlist_tab if visible (if not visible, it # will be re-populated when it is opened) @@ -429,13 +433,16 @@ class Window(QMainWindow, Ui_MainWindow): # Non-playlist tabs won't have a 'playlist_id' attribute if not hasattr(self.tabPlaylist.widget(tab), 'playlist_id'): continue - if self.tabPlaylist.widget(tab).playlist_id == dlg.plid: + if self.tabPlaylist.widget(tab).playlist_id == dlg.playlist.id: destination_visible_playlist_tab = ( self.tabPlaylist.widget(tab)) break if destination_visible_playlist_tab: - destination_visible_playlist_tab.populate(session, dlg.plid) + # We need to commit to database for populate to work + session.commit() + destination_visible_playlist_tab.populate( + session, dlg.playlist.id) # Update source playlist self.visible_playlist_tab().remove_rows(rows) @@ -964,10 +971,15 @@ class SelectPlaylistDialog(QDialog): height = record.f_int or 600 self.resize(width, height) - for (plid, plname) in [(a.id, a.name) for a in playlists]: + # for (plid, plname) in [(a.id, a.name) for a in playlists]: + # p = QListWidgetItem() + # p.setText(plname) + # p.setData(Qt.UserRole, plid) + # self.ui.lstPlaylists.addItem(p) + for playlist in playlists: p = QListWidgetItem() - p.setText(plname) - p.setData(Qt.UserRole, plid) + p.setText(playlist.name) + p.setData(Qt.UserRole, playlist) self.ui.lstPlaylists.addItem(p) def __del__(self): # review @@ -982,13 +994,13 @@ class SelectPlaylistDialog(QDialog): record.update(self.session, {'f_int': self.width()}) def list_doubleclick(self, entry): # review - self.plid = entry.data(Qt.UserRole) + self.playlist = entry.data(Qt.UserRole) self.accept() def open(self): # review if self.ui.lstPlaylists.selectedItems(): item = self.ui.lstPlaylists.currentItem() - self.plid = item.data(Qt.UserRole) + self.playlist = item.data(Qt.UserRole) self.accept() diff --git a/app/playlists.py b/app/playlists.py index 66bd21a..9f22610 100644 --- a/app/playlists.py +++ b/app/playlists.py @@ -34,7 +34,7 @@ from models import ( ) from dbconfig import Session -start_time_re = re.compile(r"@\d\d:\d\d\:\d\d") +start_time_re = re.compile(r"@\d\d:\d\d:\d\d") class RowMeta: