diff --git a/libs/iojobs/iojobdata.cpp b/libs/iojobs/iojobdata.cpp index f41c012108..fdda50093c 100644 --- a/libs/iojobs/iojobdata.cpp +++ b/libs/iojobs/iojobdata.cpp @@ -1,208 +1,208 @@ /* ============================================================ * * This file is a part of digiKam project * http://www.digikam.org * * Date : 2018-02-24 * Description : Container for IOJob data. * * Copyright (C) 2018 by Maik Qualmann * * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General * Public License as published by the Free Software Foundation; * either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * ============================================================ */ #include "iojobdata.h" // Local includes #include "album.h" #include "imageinfo.h" #include "digikam_debug.h" namespace Digikam { class IOJobData::Private { public: Private() : operation(0), srcAlbum(0), destAlbum(0) { } int operation; PAlbum* srcAlbum; PAlbum* destAlbum; QList imageInfoList; QList sourceUrlList; QUrl destUrl; }; IOJobData::IOJobData(int operation, const QList& infos, PAlbum* const dest) : d(new Private) { d->operation = operation; d->destAlbum = dest; setImageInfos(infos); if (d->destAlbum) { d->destUrl = d->destAlbum->fileUrl(); } } IOJobData::IOJobData(int operation, const QList& urls, PAlbum* const dest) : d(new Private) { d->operation = operation; d->sourceUrlList = urls; d->destAlbum = dest; if (d->destAlbum) { d->destUrl = d->destAlbum->fileUrl(); } } IOJobData::IOJobData(int operation, PAlbum* const src, PAlbum* const dest) : d(new Private) { d->operation = operation; d->srcAlbum = src; d->destAlbum = dest; d->sourceUrlList.clear(); if (d->srcAlbum) { d->sourceUrlList << d->srcAlbum->fileUrl(); } if (d->destAlbum) { d->destUrl = d->destAlbum->fileUrl(); } } IOJobData::IOJobData(int operation, const QList& urls, const QUrl& dest) : d(new Private) { d->operation = operation; d->sourceUrlList = urls; d->destUrl = dest; } -IOJobData::IOJobData(int operation, const ImageInfo& info, const QString& name) +IOJobData::IOJobData(int operation, const ImageInfo& info, const QString& newName) : d(new Private) { - d->operation = operation; + d->operation = operation; setImageInfos(QList() << info); d->destUrl = srcUrl().adjusted(QUrl::RemoveFilename); - d->destUrl.setPath(d->destUrl.path() + name); + d->destUrl.setPath(d->destUrl.path() + newName); } IOJobData::~IOJobData() { delete d; } void IOJobData::setImageInfos(const QList& infos) { d->imageInfoList = infos; d->sourceUrlList.clear(); foreach(const ImageInfo& info, d->imageInfoList) { d->sourceUrlList << info.fileUrl(); } } void IOJobData::setSourceUrls(const QList& urls) { d->sourceUrlList = urls; } void IOJobData::setDestUrl(const QUrl& url) { d->destUrl = url; } int IOJobData::operation() const { return d->operation; } PAlbum* IOJobData::srcAlbum() const { return d->srcAlbum; } PAlbum* IOJobData::destAlbum() const { return d->destAlbum; } QUrl IOJobData::srcUrl() const { if (d->sourceUrlList.isEmpty()) { return QUrl(); } return d->sourceUrlList.first(); } QUrl IOJobData::destUrl() const { return d->destUrl; } ImageInfo IOJobData::imageInfo() const { if (d->imageInfoList.isEmpty()) { return ImageInfo(); } return d->imageInfoList.first(); } QList IOJobData::sourceUrls() const { return d->sourceUrlList; } QList IOJobData::imageInfos() const { return d->imageInfoList; } } // namespace Digikam diff --git a/libs/iojobs/iojobdata.h b/libs/iojobs/iojobdata.h index c42401ecb9..42923521b0 100644 --- a/libs/iojobs/iojobdata.h +++ b/libs/iojobs/iojobdata.h @@ -1,103 +1,103 @@ /* ============================================================ * * This file is a part of digiKam project * http://www.digikam.org * * Date : 2018-02-24 * Description : Container for IOJob data. * * Copyright (C) 2018 by Maik Qualmann * * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General * Public License as published by the Free Software Foundation; * either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * ============================================================ */ #ifndef IOJOB_DATA_H #define IOJOB_DATA_H // Qt includes #include #include namespace Digikam { class PAlbum; class ImageInfo; class IOJobData { public: enum Operation { CopyAlbum = 1 << 0, CopyImage = 1 << 1, CopyFiles = 1 << 2, MoveAlbum = 1 << 3, MoveImage = 1 << 4, MoveFiles = 1 << 5, Rename = 1 << 6, Delete = 1 << 7, Trash = 1 << 8, }; explicit IOJobData(int operation, const QList& infos, PAlbum* const dest = 0); explicit IOJobData(int operation, const QList& urls, PAlbum* const dest = 0); explicit IOJobData(int operation, PAlbum* const src, PAlbum* const dest); explicit IOJobData(int operation, const QList& urls, const QUrl& dest); explicit IOJobData(int operation, const ImageInfo& info, - const QString& name); + const QString& newName); ~IOJobData(); void setImageInfos(const QList& infos); void setSourceUrls(const QList& urls); void setDestUrl(const QUrl& url); int operation() const; PAlbum* srcAlbum() const; PAlbum* destAlbum() const; QUrl srcUrl() const; QUrl destUrl() const; ImageInfo imageInfo() const; QList sourceUrls() const; QList imageInfos() const; private: class Private; Private* const d; }; } // namespace Digikam #endif // IOJOB_DATA_H diff --git a/libs/iojobs/iojobsthread.cpp b/libs/iojobs/iojobsthread.cpp index 4a362f681b..22fe3e5b06 100644 --- a/libs/iojobs/iojobsthread.cpp +++ b/libs/iojobs/iojobsthread.cpp @@ -1,259 +1,258 @@ /* ============================================================ * * This file is a part of digiKam project * http://www.digikam.org * * Date : 2015-06-15 * Description : IO Jobs thread for file system jobs * * Copyright (C) 2015 by Mohamed Anwer * * This program is free software; you can redistribute it * and/or modify it under the terms of the GNU General * Public License as published by the Free Software Foundation; * either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * ============================================================ */ #include "iojobsthread.h" // Qt includes #include #include // Local includes #include "iojob.h" #include "iojobdata.h" #include "digikam_debug.h" #include "coredb.h" #include "coredbaccess.h" namespace Digikam { class IOJobsThread::Private { public: Private() : jobsCount(0), isCanceled(false), jobData(0) { } int jobsCount; bool isCanceled; IOJobData* jobData; QList errorsList; - }; IOJobsThread::IOJobsThread(QObject* const parent) : ActionThreadBase(parent), d(new Private) { } IOJobsThread::~IOJobsThread() { delete d->jobData; delete d; } void IOJobsThread::copy(IOJobData* const data) { d->jobData = data; ActionJobCollection collection; foreach (const QUrl& url, data->sourceUrls()) { CopyJob* const j = new CopyJob(url, data->destUrl(), false); connectOneJob(j); collection.insert(j, 0); d->jobsCount++; } appendJobs(collection); } void IOJobsThread::move(IOJobData* const data) { d->jobData = data; ActionJobCollection collection; foreach (const QUrl& url, data->sourceUrls()) { CopyJob* const j = new CopyJob(url, data->destUrl(), true); connectOneJob(j); collection.insert(j, 0); d->jobsCount++; } appendJobs(collection); } void IOJobsThread::deleteFiles(IOJobData* const data) { d->jobData = data; ActionJobCollection collection; bool useTrash = (data->operation() == IOJobData::Trash); foreach (const QUrl& url, data->sourceUrls()) { DeleteJob* const j = new DeleteJob(url, useTrash, true); connectOneJob(j); collection.insert(j, 0); d->jobsCount++; } appendJobs(collection); } void IOJobsThread::renameFile(IOJobData* const data) { d->jobData = data; ActionJobCollection collection; RenameFileJob* const j = new RenameFileJob(data->srcUrl(), data->destUrl()); connectOneJob(j); connect(j, SIGNAL(signalRenamed(QUrl)), this, SIGNAL(signalRenamed(QUrl))); connect(j, SIGNAL(signalRenameFailed(QUrl)), this, SIGNAL(signalRenameFailed(QUrl))); collection.insert(j, 0); d->jobsCount++; appendJobs(collection); } void IOJobsThread::listDTrashItems(const QString& collectionPath) { ActionJobCollection collection; DTrashItemsListingJob* const j = new DTrashItemsListingJob(collectionPath); connect(j, SIGNAL(trashItemInfo(DTrashItemInfo)), this, SIGNAL(collectionTrashItemInfo(DTrashItemInfo))); connect(j, SIGNAL(signalDone()), this, SIGNAL(finished())); collection.insert(j, 0); d->jobsCount++; appendJobs(collection); } void IOJobsThread::restoreDTrashItems(const DTrashItemInfoList& items) { ActionJobCollection collection; RestoreDTrashItemsJob* const j = new RestoreDTrashItemsJob(items); connect(j, SIGNAL(signalDone()), this, SIGNAL(finished())); collection.insert(j, 0); d->jobsCount++; appendJobs(collection); } void IOJobsThread::deleteDTrashItems(const DTrashItemInfoList& items) { ActionJobCollection collection; DeleteDTrashItemsJob* const j = new DeleteDTrashItemsJob(items); connect(j, SIGNAL(signalDone()), this, SIGNAL(finished())); collection.insert(j, 0); d->jobsCount++; appendJobs(collection); } bool IOJobsThread::isCanceled() { return d->isCanceled; } bool IOJobsThread::hasErrors() { return !d->errorsList.isEmpty(); } QList& IOJobsThread::errorsList() { return d->errorsList; } void IOJobsThread::connectOneJob(IOJob* const j) { connect(j, SIGNAL(error(QString)), this, SLOT(slotError(QString))); connect(j, SIGNAL(signalDone()), this, SLOT(slotOneJobFinished())); } void IOJobsThread::slotOneJobFinished() { d->jobsCount--; if (d->jobData) { emit signalOneProccessed(d->jobData->operation()); } if (d->jobsCount == 0) { emit finished(); qCDebug(DIGIKAM_IOJOB_LOG) << "Thread Finished"; } } void IOJobsThread::slotError(const QString& errString) { d->errorsList.append(errString); } void IOJobsThread::slotCancel() { d->isCanceled = true; ActionThreadBase::cancel(); } IOJobData* IOJobsThread::jobData() { return d->jobData; } } // namespace Digikam