Only use one instance of action dialog for sync
This commit is contained in:
committed by
Craig Drummond
parent
f191481c84
commit
c85eb42948
@@ -298,29 +298,33 @@ void ActionDialog::calcFileSize()
|
||||
}
|
||||
}
|
||||
|
||||
void ActionDialog::sync(const QString &srcUdi, const QString &dstUdi, const QList<Song> &songs, int songsAlreadyCopied, int extraSongsToCopy, const QString &title)
|
||||
void ActionDialog::sync(const QString &devId, const QList<Song> &libSongs, const QList<Song> &devSongs)
|
||||
{
|
||||
init(srcUdi, dstUdi, songs, Sync);
|
||||
Device *dev=getDevice(sourceUdi.isEmpty() ? destUdi : sourceUdi);
|
||||
// If only copying one way, then just use standard copying...
|
||||
bool toLib=libSongs.isEmpty();
|
||||
if (toLib || devSongs.isEmpty()) {
|
||||
copy(toLib ? devId : QString(), toLib ? QString() : devId, toLib ? devSongs : libSongs);
|
||||
setCaption(toLib ? i18n("Copy Songs To Library") : i18n("Copy Songs To Device"));
|
||||
return;
|
||||
}
|
||||
|
||||
init(toLib ? devId : QString(), toLib ? QString() : devId, toLib ? devSongs : libSongs, Sync);
|
||||
Device *dev=getDevice(devId);
|
||||
|
||||
if (!dev) {
|
||||
deleteLater();
|
||||
return;
|
||||
}
|
||||
|
||||
// Taken into account songs that were copied before, or songs that will be copied after...
|
||||
count=songsAlreadyCopied;
|
||||
progressBar->setValue(songsAlreadyCopied*100);
|
||||
progressBar->setRange(0, (songsToAction.count()+songsAlreadyCopied+extraSongsToCopy)*100);
|
||||
progressBar->setRange(0, (libSongs.count()+devSongs.count())*100);
|
||||
|
||||
sourceIsAudioCd=false;
|
||||
controlInfoLabel(dev);
|
||||
fileSizeProgress->setMinimum(0);
|
||||
fileSizeProgress->setMaximum(songs.size());
|
||||
songsToCalcSize=songs;
|
||||
if (!title.isEmpty()) {
|
||||
setCaption(title);
|
||||
}
|
||||
fileSizeProgress->setMaximum(songsToAction.size());
|
||||
songsToCalcSize=songsToAction;
|
||||
syncSongs=devSongs;
|
||||
setCaption(toLib ? i18n("Copy Songs To Library") : i18n("Copy Songs To Device"));
|
||||
setPage(PAGE_SIZE_CALC);
|
||||
show();
|
||||
calcFileSize();
|
||||
@@ -564,6 +568,14 @@ Device * ActionDialog::getDevice(const QString &udi, bool logErrors)
|
||||
void ActionDialog::doNext()
|
||||
{
|
||||
currentPercent=0;
|
||||
if (songsToAction.isEmpty() && Sync==mode && !syncSongs.isEmpty()) {
|
||||
songsToAction=syncSongs;
|
||||
syncSongs.clear();
|
||||
sourceUdi=destUdi;
|
||||
destUdi=QString();
|
||||
setCaption(i18n("Copy Songs To Library"));
|
||||
}
|
||||
|
||||
if (songsToAction.count()) {
|
||||
currentSong=origCurrentSong=songsToAction.takeFirst();
|
||||
if(Copy==mode || Sync==mode) {
|
||||
@@ -874,7 +886,18 @@ bool ActionDialog::refreshLibrary()
|
||||
{
|
||||
actionLabel->stopAnimation();
|
||||
if (!actionedSongs.isEmpty()) {
|
||||
if ( ((Copy==mode || Sync==mode) && !sourceUdi.isEmpty()) ||
|
||||
if (Sync==mode) {
|
||||
emit update();
|
||||
Device *dev=DevicesModel::self()->device(sourceUdi.isEmpty() ? destUdi : sourceUdi);
|
||||
|
||||
if (dev) {
|
||||
connect(dev, SIGNAL(cacheSaved()), this, SLOT(cacheSaved()));
|
||||
dev->saveCache();
|
||||
progressLabel->setText(i18n("Saving cache"));
|
||||
setButtons(Close);
|
||||
return true;
|
||||
}
|
||||
} else if ( (Copy==mode && !sourceUdi.isEmpty()) ||
|
||||
(Remove==mode && sourceUdi.isEmpty()) ) {
|
||||
// MusicLibraryModel::self()->checkForNewSongs();
|
||||
// AlbumsModel::self()->update(MusicLibraryModel::self()->root());
|
||||
|
||||
@@ -58,7 +58,7 @@ public:
|
||||
ActionDialog(QWidget *parent);
|
||||
virtual ~ActionDialog();
|
||||
|
||||
void sync(const QString &srcUdi, const QString &dstUdi, const QList<Song> &songs, int songsAlreadyCopied, int extraSongsToCopy, const QString &title);
|
||||
void sync(const QString &devId, const QList<Song> &libSongs, const QList<Song> &devSongs);
|
||||
void copy(const QString &srcUdi, const QString &dstUdi, const QList<Song> &songs);
|
||||
void remove(const QString &udi, const QList<Song> &songs);
|
||||
|
||||
@@ -108,6 +108,7 @@ private:
|
||||
QList<Song> songsToAction;
|
||||
QList<Song> skippedSongs;
|
||||
QList<Song> actionedSongs;
|
||||
QList<Song> syncSongs;
|
||||
QSet<QString> dirsToClean;
|
||||
QSet<QString> copiedCovers;
|
||||
unsigned long count;
|
||||
|
||||
@@ -231,36 +231,6 @@ void SyncDialog::saveProperties(const QString &path, const DeviceOptions &opts)
|
||||
libOptions.save(MPDConnectionDetails::configGroupName(MPDConnection::self()->getDetails().name), true, false);
|
||||
}
|
||||
|
||||
void SyncDialog::copyComplete()
|
||||
{
|
||||
ActionDialog *old=qobject_cast<ActionDialog *>(sender());
|
||||
// Copied to device, now copy to library...
|
||||
if (State_CopyToDevice==state) {
|
||||
QString devId;
|
||||
Device *dev=getDevice();
|
||||
if (dev) {
|
||||
devId=dev->id();
|
||||
QList<Song> songs=devWidget->checkedSongs();
|
||||
if (!songs.isEmpty()) {
|
||||
state=State_CopyToLib;
|
||||
ActionDialog *dlg=new ActionDialog(parentWidget());
|
||||
dlg->sync(devId, QString(), songs, libWidget->numCheckedSongs(), 0, i18n("Copy Songs To Library"));
|
||||
if (old) {
|
||||
old->setVisible(false);
|
||||
dlg->move(old->pos());
|
||||
}
|
||||
} else {
|
||||
Dialog::slotButtonClicked(Cancel);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SyncDialog::copyAborted()
|
||||
{
|
||||
Dialog::slotButtonClicked(Cancel);
|
||||
}
|
||||
|
||||
void SyncDialog::slotButtonClicked(int button)
|
||||
{
|
||||
switch(button) {
|
||||
@@ -272,25 +242,8 @@ void SyncDialog::slotButtonClicked(int button)
|
||||
QList<Song> songs=libWidget->checkedSongs();
|
||||
QString devId;
|
||||
devId=dev->id();
|
||||
// Copy songs to device first, if we have any selected...
|
||||
if (!songs.isEmpty()) {
|
||||
state=State_CopyToDevice;
|
||||
dlg->sync(QString(), devId, songs, 0, devWidget->numCheckedSongs(), i18n("Copy Songs To Device"));
|
||||
} else {
|
||||
// No lib songs selected, so copy to device...
|
||||
songs=devWidget->checkedSongs();
|
||||
if (!songs.isEmpty()) {
|
||||
state=State_CopyToLib;
|
||||
dlg->sync(devId, QString(), songs, libWidget->numCheckedSongs(), 0, i18n("Copy Songs To Library"));
|
||||
}
|
||||
}
|
||||
if (State_Lists==state) {
|
||||
dlg->deleteLater();
|
||||
Dialog::slotButtonClicked(Cancel);
|
||||
} else {
|
||||
connect(dlg, SIGNAL(completed()), SLOT(copyComplete()));
|
||||
connect(dlg, SIGNAL(rejected()), SLOT(copyAborted()));
|
||||
}
|
||||
dlg->sync(devId, libWidget->checkedSongs(), devWidget->checkedSongs());
|
||||
Dialog::slotButtonClicked(button);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -56,8 +56,6 @@ private Q_SLOTS:
|
||||
void selectionChanged();
|
||||
void configure();
|
||||
void saveProperties(const QString &path, const DeviceOptions &opts);
|
||||
void copyComplete();
|
||||
void copyAborted();
|
||||
|
||||
private:
|
||||
void updateSongs();
|
||||
|
||||
Reference in New Issue
Block a user