diff --git a/devices/actiondialog.cpp b/devices/actiondialog.cpp index dcaa2bdce..781a0318d 100644 --- a/devices/actiondialog.cpp +++ b/devices/actiondialog.cpp @@ -298,29 +298,33 @@ void ActionDialog::calcFileSize() } } -void ActionDialog::sync(const QString &srcUdi, const QString &dstUdi, const QList &songs, int songsAlreadyCopied, int extraSongsToCopy, const QString &title) +void ActionDialog::sync(const QString &devId, const QList &libSongs, const QList &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()); diff --git a/devices/actiondialog.h b/devices/actiondialog.h index 21910f2ea..ed4aacb90 100644 --- a/devices/actiondialog.h +++ b/devices/actiondialog.h @@ -58,7 +58,7 @@ public: ActionDialog(QWidget *parent); virtual ~ActionDialog(); - void sync(const QString &srcUdi, const QString &dstUdi, const QList &songs, int songsAlreadyCopied, int extraSongsToCopy, const QString &title); + void sync(const QString &devId, const QList &libSongs, const QList &devSongs); void copy(const QString &srcUdi, const QString &dstUdi, const QList &songs); void remove(const QString &udi, const QList &songs); @@ -108,6 +108,7 @@ private: QList songsToAction; QList skippedSongs; QList actionedSongs; + QList syncSongs; QSet dirsToClean; QSet copiedCovers; unsigned long count; diff --git a/devices/syncdialog.cpp b/devices/syncdialog.cpp index 2c5263cf6..fe6743703 100644 --- a/devices/syncdialog.cpp +++ b/devices/syncdialog.cpp @@ -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(sender()); - // Copied to device, now copy to library... - if (State_CopyToDevice==state) { - QString devId; - Device *dev=getDevice(); - if (dev) { - devId=dev->id(); - QList 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 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; } diff --git a/devices/syncdialog.h b/devices/syncdialog.h index 4013f7dba..f2934c99c 100644 --- a/devices/syncdialog.h +++ b/devices/syncdialog.h @@ -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();