Fix move selected tracks

This commit is contained in:
Keith Edmunds 2022-03-20 22:40:38 +00:00
parent ebfdf98612
commit 976eb91e30
2 changed files with 29 additions and 17 deletions

View File

@ -6,7 +6,7 @@ import sys
import urllib.parse import urllib.parse
from datetime import datetime, timedelta from datetime import datetime
from log import DEBUG, EXCEPTION from log import DEBUG, EXCEPTION
from typing import Callable, Dict, List, Optional, Tuple from typing import Callable, Dict, List, Optional, Tuple
@ -32,7 +32,6 @@ from config import Config
from models import (Base, Playdates, Playlists, PlaylistTracks, from models import (Base, Playdates, Playlists, PlaylistTracks,
Settings, Tracks) Settings, Tracks)
from playlists import PlaylistTab from playlists import PlaylistTab
from utilities import create_track_from_file
from sqlalchemy.orm.exc import DetachedInstanceError from sqlalchemy.orm.exc import DetachedInstanceError
from ui.dlg_search_database_ui import Ui_Dialog from ui.dlg_search_database_ui import Ui_Dialog
from ui.dlg_SelectPlaylist_ui import Ui_dlgSelectPlaylist 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 = self.visible_playlist_tab()
visible_tab_id = visible_tab.playlist_id visible_tab_id = visible_tab.playlist_id
playlists = [p for p in Playlists.get_all(session) source_playlist = None
if p.id != visible_tab_id] 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, dlg = SelectPlaylistDialog(self, playlists=playlists,
session=session) session=session)
dlg.exec() dlg.exec()
if not dlg.plid: if not dlg.playlist:
return return
destination_playlist = dlg.playlist
# Update database for both source and destination playlists # Update database for both source and destination playlists
rows = visible_tab.get_selected_rows() rows = visible_tab.get_selected_rows()
for row in rows: source_playlist.move_track(session, rows, destination_playlist)
PlaylistTracks.move_track(
session, visible_tab.playlist_id, row, dlg.plid
)
# Update destination playlist_tab if visible (if not visible, it # Update destination playlist_tab if visible (if not visible, it
# will be re-populated when it is opened) # 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 # Non-playlist tabs won't have a 'playlist_id' attribute
if not hasattr(self.tabPlaylist.widget(tab), 'playlist_id'): if not hasattr(self.tabPlaylist.widget(tab), 'playlist_id'):
continue continue
if self.tabPlaylist.widget(tab).playlist_id == dlg.plid: if self.tabPlaylist.widget(tab).playlist_id == dlg.playlist.id:
destination_visible_playlist_tab = ( destination_visible_playlist_tab = (
self.tabPlaylist.widget(tab)) self.tabPlaylist.widget(tab))
break break
if destination_visible_playlist_tab: 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 # Update source playlist
self.visible_playlist_tab().remove_rows(rows) self.visible_playlist_tab().remove_rows(rows)
@ -964,10 +971,15 @@ class SelectPlaylistDialog(QDialog):
height = record.f_int or 600 height = record.f_int or 600
self.resize(width, height) 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 = QListWidgetItem()
p.setText(plname) p.setText(playlist.name)
p.setData(Qt.UserRole, plid) p.setData(Qt.UserRole, playlist)
self.ui.lstPlaylists.addItem(p) self.ui.lstPlaylists.addItem(p)
def __del__(self): # review def __del__(self): # review
@ -982,13 +994,13 @@ class SelectPlaylistDialog(QDialog):
record.update(self.session, {'f_int': self.width()}) record.update(self.session, {'f_int': self.width()})
def list_doubleclick(self, entry): # review def list_doubleclick(self, entry): # review
self.plid = entry.data(Qt.UserRole) self.playlist = entry.data(Qt.UserRole)
self.accept() self.accept()
def open(self): # review def open(self): # review
if self.ui.lstPlaylists.selectedItems(): if self.ui.lstPlaylists.selectedItems():
item = self.ui.lstPlaylists.currentItem() item = self.ui.lstPlaylists.currentItem()
self.plid = item.data(Qt.UserRole) self.playlist = item.data(Qt.UserRole)
self.accept() self.accept()

View File

@ -34,7 +34,7 @@ from models import (
) )
from dbconfig import Session 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: class RowMeta: