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
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()

View File

@ -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: