Only use one instance of action dialog for sync

This commit is contained in:
Craig Drummond
2015-11-01 19:23:28 +00:00
committed by Craig Drummond
parent f191481c84
commit c85eb42948
4 changed files with 40 additions and 65 deletions

View File

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

View File

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

View File

@@ -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;
}

View File

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