From kde-commits Mon Oct 31 09:21:30 2016 From: =?utf-8?b?QXVyw6lsaWVuIEfDonRlYXU=?= Date: Mon, 31 Oct 2016 09:21:30 +0000 To: kde-commits Subject: [gwenview/bring-back-importer] /: Start bringing back Gwenview Importer Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=147790570110675 Git commit 017b4fe5dc7f4b6e876cfd7b108dcebbf609ae94 by Aur=C3=A9lien G=C3= =A2teau. Committed on 31/10/2016 at 09:20. Pushed by gateau into branch 'bring-back-importer'. Start bringing back Gwenview Importer Port from KUrl to QUrl, and KDateTime to QDateTime M +2 -1 CMakeLists.txt M +5 -1 importer/CMakeLists.txt M +1 -1 importer/dialogpage.cpp M +10 -10 importer/documentdirfinder.cpp M +4 -4 importer/documentdirfinder.h M +5 -5 importer/filenameformater.cpp M +3 -4 importer/filenameformater.h M +8 -5 importer/fileutils.cpp M +3 -3 importer/fileutils.h M +13 -13 importer/importdialog.cpp M +2 -2 importer/importdialog.h M +28 -24 importer/importer.cpp M +4 -4 importer/importer.h M +4 -3 importer/importerconfigdialog.cpp M +25 -22 importer/main.cpp M +0 -1 importer/progresspage.h M +17 -17 importer/serializedurlmap.cpp M +4 -4 importer/serializedurlmap.h M +37 -32 importer/thumbnailpage.cpp M +7 -7 importer/thumbnailpage.h http://commits.kde.org/gwenview/017b4fe5dc7f4b6e876cfd7b108dcebbf609ae94 diff --git a/CMakeLists.txt b/CMakeLists.txt index 0f528ae..645d434 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,6 +59,7 @@ find_package(KF5KIO 5.4 REQUIRED) find_package(KF5 REQUIRED COMPONENTS KDELibs4Support Activities + ItemModels ) = ## Dependencies @@ -111,7 +112,7 @@ add_definitions(-DTRANSLATION_DOMAIN=3D"gwenview") ## dirs to build add_subdirectory(lib) add_subdirectory(app) -# add_subdirectory(importer) +add_subdirectory(importer) add_subdirectory(part) add_subdirectory(tests) add_subdirectory(icons) diff --git a/importer/CMakeLists.txt b/importer/CMakeLists.txt index e75746e..81e585c 100644 --- a/importer/CMakeLists.txt +++ b/importer/CMakeLists.txt @@ -27,24 +27,28 @@ ki18n_wrap_ui(importer_SRCS thumbnailpage.ui ) = -file(GLOB ICONS_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/../icons/hi*-apps-gwenvi= ew-importer.png") +file(GLOB ICONS_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/../icons/*-apps-gwenview= .png") ecm_add_app_icon(importer_SRCS ICONS ${ICONS_SRCS}) = kconfig_add_kcfg_files(importer_SRCS importerconfig.kcfgc ) = +add_definitions(-DQT_NO_URL_CAST_FROM_STRING) + add_executable(gwenview_importer ${importer_SRCS}) = target_link_libraries(gwenview_importer gwenviewlib KF5::KIOCore + KF5::ItemModels Qt5::Core ) = target_link_libraries(gwenview_importer LINK_INTERFACE_LIBRARIES KF5::KIOCore + KF5::ItemModels Qt5::Core ) = diff --git a/importer/dialogpage.cpp b/importer/dialogpage.cpp index 5091cba..f7a8fbc 100644 --- a/importer/dialogpage.cpp +++ b/importer/dialogpage.cpp @@ -19,7 +19,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambri= dge, MA 02110-1301, USA = */ // Self -#include "dialogpage.moc" +#include "dialogpage.h" = // Qt #include diff --git a/importer/documentdirfinder.cpp b/importer/documentdirfinder.cpp index 0211aef..8eaa63a 100644 --- a/importer/documentdirfinder.cpp +++ b/importer/documentdirfinder.cpp @@ -19,7 +19,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambri= dge, MA 02110-1301, USA = */ // Self -#include "documentdirfinder.moc" +#include "documentdirfinder.h" = // Qt = @@ -35,19 +35,19 @@ namespace Gwenview = struct DocumentDirFinderPrivate { - KUrl mRootUrl; + QUrl mRootUrl; KDirLister* mDirLister; = - KUrl mFoundDirUrl; + QUrl mFoundDirUrl; }; = -DocumentDirFinder::DocumentDirFinder(const KUrl& rootUrl) +DocumentDirFinder::DocumentDirFinder(const QUrl& rootUrl) : d(new DocumentDirFinderPrivate) { d->mRootUrl =3D rootUrl; d->mDirLister =3D new KDirLister(this); - connect(d->mDirLister, SIGNAL(itemsAdded(KUrl,KFileItemList)), - SLOT(slotItemsAdded(KUrl,KFileItemList))); + connect(d->mDirLister, SIGNAL(itemsAdded(QUrl,KFileItemList)), + SLOT(slotItemsAdded(QUrl,KFileItemList))); connect(d->mDirLister, SIGNAL(completed()), SLOT(slotCompleted())); d->mDirLister->openUrl(rootUrl); @@ -63,7 +63,7 @@ void DocumentDirFinder::start() d->mDirLister->openUrl(d->mRootUrl); } = -void DocumentDirFinder::slotItemsAdded(const KUrl& dir, const KFileItemLis= t& list) +void DocumentDirFinder::slotItemsAdded(const QUrl& dir, const KFileItemLis= t& list) { Q_FOREACH(const KFileItem & item, list) { MimeTypeUtils::Kind kind =3D MimeTypeUtils::fileItemKind(item); @@ -96,15 +96,15 @@ void DocumentDirFinder::slotItemsAdded(const KUrl& dir,= const KFileItemList& lis void DocumentDirFinder::slotCompleted() { if (d->mFoundDirUrl.isValid()) { - KUrl url =3D d->mFoundDirUrl; - d->mFoundDirUrl =3D KUrl(); + QUrl url =3D d->mFoundDirUrl; + d->mFoundDirUrl =3D QUrl(); d->mDirLister->openUrl(url); } else { finish(d->mRootUrl, NoDocumentFound); } } = -void DocumentDirFinder::finish(const KUrl& url, DocumentDirFinder::Status = status) +void DocumentDirFinder::finish(const QUrl& url, DocumentDirFinder::Status = status) { disconnect(d->mDirLister, 0, this, 0); emit done(url, status); diff --git a/importer/documentdirfinder.h b/importer/documentdirfinder.h index 4c01e0c..05b9623 100644 --- a/importer/documentdirfinder.h +++ b/importer/documentdirfinder.h @@ -55,21 +55,21 @@ public: MultipleDirsFound }; = - DocumentDirFinder(const KUrl& rootUrl); + DocumentDirFinder(const QUrl& rootUrl); ~DocumentDirFinder(); = void start(); = Q_SIGNALS: - void done(const KUrl&, DocumentDirFinder::Status); + void done(const QUrl&, DocumentDirFinder::Status); = private Q_SLOTS: - void slotItemsAdded(const KUrl&, const KFileItemList&); + void slotItemsAdded(const QUrl&, const KFileItemList&); void slotCompleted(); = private: DocumentDirFinderPrivate* const d; - void finish(const KUrl&, Status); + void finish(const QUrl&, Status); }; = } // namespace diff --git a/importer/filenameformater.cpp b/importer/filenameformater.cpp index 6080526..f9c33ec 100644 --- a/importer/filenameformater.cpp +++ b/importer/filenameformater.cpp @@ -22,12 +22,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Camb= ridge, MA 02110-1301, USA #include "filenameformater.h" = // Qt +#include #include +#include = // KDE -#include #include -#include = // Local = @@ -52,14 +52,14 @@ FileNameFormater::~FileNameFormater() delete d; } = -QString FileNameFormater::format(const KUrl& url, const KDateTime& dateTim= e) +QString FileNameFormater::format(const QUrl& url, const QDateTime& dateTim= e) { QFileInfo info(url.fileName()); = // Keep in sync with helpMap() Dict dict; - dict["date"] =3D dateTime.toString("%Y-%m-%d"); - dict["time"] =3D dateTime.toString("%H-%M-%S"); + dict["date"] =3D dateTime.toString("yyyy-MM-dd"); + dict["time"] =3D dateTime.toString("HH-mm-ss"); dict["ext"] =3D info.suffix(); dict["ext.lower"] =3D info.suffix().toLower(); dict["name"] =3D info.completeBaseName(); diff --git a/importer/filenameformater.h b/importer/filenameformater.h index 97205d7..f16409d 100644 --- a/importer/filenameformater.h +++ b/importer/filenameformater.h @@ -28,10 +28,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambr= idge, MA 02110-1301, USA = // Local = +class QDateTime; class QString; - -class KDateTime; -class KUrl; +class QUrl; = namespace Gwenview { @@ -49,7 +48,7 @@ public: * Given an url and its dateTime, returns a filename according to the * format passed to the constructor */ - QString format(const KUrl& url, const KDateTime& dateTime); + QString format(const QUrl& url, const QDateTime& dateTime); = /** * Returns a map whose keys are the available keywords and values are = the diff --git a/importer/fileutils.cpp b/importer/fileutils.cpp index 258c592..35a22e0 100644 --- a/importer/fileutils.cpp +++ b/importer/fileutils.cpp @@ -24,6 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambri= dge, MA 02110-1301, USA // Qt #include #include +#include = // KDE #include @@ -33,7 +34,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambri= dge, MA 02110-1301, USA #include #include #include -#include = // libc #include @@ -45,7 +45,7 @@ namespace Gwenview namespace FileUtils { = -bool contentsAreIdentical(const KUrl& url1, const KUrl& url2, QWidget* aut= hWindow) +bool contentsAreIdentical(const QUrl& url1, const QUrl& url2, QWidget* aut= hWindow) { // FIXME: Support remote urls QFile file1(KIO::NetAccess::mostLocalUrl(url1, authWindow).toLocalFile= ()); @@ -79,9 +79,9 @@ bool contentsAreIdentical(const KUrl& url1, const KUrl& u= rl2, QWidget* authWindo } } = -RenameResult rename(const KUrl& src, const KUrl& dst_, QWidget* authWindow) +RenameResult rename(const QUrl& src, const QUrl& dst_, QWidget* authWindow) { - KUrl dst =3D dst_; + QUrl dst =3D dst_; RenameResult result =3D RenamedOK; int count =3D 1; = @@ -104,15 +104,18 @@ RenameResult rename(const KUrl& src, const KUrl& dst_= , QWidget* authWindow) if (srcSize =3D=3D dstSize && contentsAreIdentical(src, dst, authW= indow)) { // Already imported, skip it KIO::Job* job =3D KIO::file_delete(src, KIO::HideProgressInfo); + // FIXME KF5 + /* if (job->ui()) { job->ui()->setWindow(authWindow); } + */ = return Skipped; } result =3D RenamedUnderNewName; = - dst.setFileName(prefix + QString::number(count) + suffix); + dst.setPath(dst.path() + '/' + prefix + QString::number(count) + s= uffix); ++count; } = diff --git a/importer/fileutils.h b/importer/fileutils.h index e81c1db..db10f56 100644 --- a/importer/fileutils.h +++ b/importer/fileutils.h @@ -23,7 +23,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambri= dge, MA 02110-1301, USA = class QString; class QWidget; -class KUrl; +class QUrl; = namespace Gwenview { @@ -41,12 +41,12 @@ enum RenameResult { /** * Compare content of two urls, returns whether they are the same */ -bool contentsAreIdentical(const KUrl& url1, const KUrl& url2, QWidget* aut= hWindow =3D 0); +bool contentsAreIdentical(const QUrl& url1, const QUrl& url2, QWidget* aut= hWindow =3D 0); = /** * Rename src to dst, returns RenameResult */ -RenameResult rename(const KUrl& src, const KUrl& dst, QWidget* authWindow = =3D 0); +RenameResult rename(const QUrl& src, const QUrl& dst, QWidget* authWindow = =3D 0); = /** * Create a temp dir in baseDir, starting with prefix. If successful retu= rns diff --git a/importer/importdialog.cpp b/importer/importdialog.cpp index 2a4d468..7c85f51 100644 --- a/importer/importdialog.cpp +++ b/importer/importdialog.cpp @@ -19,7 +19,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambri= dge, MA 02110-1301, USA = */ // Self -#include "importdialog.moc" +#include "importdialog.h" = // Qt #include @@ -62,8 +62,8 @@ public: = void deleteImportedUrls() { - KUrl::List importedUrls =3D mImporter->importedUrlList(); - KUrl::List skippedUrls =3D mImporter->skippedUrlList(); + QList importedUrls =3D mImporter->importedUrlList(); + QList skippedUrls =3D mImporter->skippedUrlList(); int importedCount =3D importedUrls.count(); int skippedCount =3D skippedUrls.count(); = @@ -120,7 +120,7 @@ public: if (answer !=3D KMessageBox::Yes) { return; } - KUrl::List urls =3D importedUrls + skippedUrls; + QList urls =3D importedUrls + skippedUrls; while (true) { KIO::Job* job =3D KIO::del(urls); if (KIO::NetAccess::synchronousRun(job, q)) { @@ -144,11 +144,11 @@ public: = void startGwenview() { - KService::Ptr service =3D KService::serviceByDesktopName("gwenview= "); + KService::Ptr service =3D KService::serviceByDesktopName("org.kde.= gwenview"); if (!service) { qCritical() << "Could not find gwenview"; } else { - KRun::run(*service, KUrl::List() << mThumbnailPage->destinatio= nUrl(), 0 /* window */); + KRun::run(*service, {mThumbnailPage->destinationUrl()}, 0 /* w= indow */); } } = @@ -182,11 +182,11 @@ ImportDialog::ImportDialog() SLOT(showImportError(QString))); d->mThumbnailPage =3D new ThumbnailPage; = - KUrl url =3D ImporterConfig::destinationUrl(); + QUrl url =3D ImporterConfig::destinationUrl(); if (!url.isValid()) { url =3D QUrl::fromLocalFile(QStandardPaths::writableLocation(QStan= dardPaths::PicturesLocation)); int year =3D QDate::currentDate().year(); - url.addPath(QString::number(year)); + url.setPath(url.path() + '/' + QString::number(year)); } d->mThumbnailPage->setDestinationUrl(url); = @@ -209,7 +209,7 @@ ImportDialog::ImportDialog() = d->mCentralWidget->setCurrentWidget(d->mThumbnailPage); = - setWindowIcon(KIcon("gwenview")); + setWindowIcon(QIcon::fromTheme("gwenview")); setAutoSaveSettings(); } = @@ -223,12 +223,12 @@ QSize ImportDialog::sizeHint() const return QSize(700, 500); } = -void ImportDialog::setSourceUrl(const KUrl& url, const QString& deviceUdi) +void ImportDialog::setSourceUrl(const QUrl& url, const QString& deviceUdi) { QString name, iconName; if (deviceUdi.isEmpty()) { - name =3D url.pathOrUrl(); - iconName =3D KProtocolInfo::icon(url.protocol()); + name =3D url.url(QUrl::PreferLocalFile); + iconName =3D KProtocolInfo::icon(url.scheme()); if (iconName.isEmpty()) { iconName =3D "folder"; } @@ -242,7 +242,7 @@ void ImportDialog::setSourceUrl(const KUrl& url, const = QString& deviceUdi) = void ImportDialog::startImport() { - KUrl url =3D d->mThumbnailPage->destinationUrl(); + QUrl url =3D d->mThumbnailPage->destinationUrl(); ImporterConfig::setDestinationUrl(url); ImporterConfig::self()->save(); = diff --git a/importer/importdialog.h b/importer/importdialog.h index f8f56d3..4abe82f 100644 --- a/importer/importdialog.h +++ b/importer/importdialog.h @@ -22,9 +22,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambri= dge, MA 02110-1301, USA #define IMPORTDIALOG_H = // Qt +#include = // KDE -#include #include = // Local @@ -43,7 +43,7 @@ public: virtual QSize sizeHint() const; = public Q_SLOTS: - void setSourceUrl(const KUrl&, const QString& deviceUdi); + void setSourceUrl(const QUrl&, const QString& deviceUdi); = private Q_SLOTS: void startImport(); diff --git a/importer/importer.cpp b/importer/importer.cpp index 25bb4ee..b606360 100644 --- a/importer/importer.cpp +++ b/importer/importer.cpp @@ -19,16 +19,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Camb= ridge, MA 02110-1301, USA = */ // Self -#include "importer.moc" +#include "importer.h" = // Qt +#include +#include +#include = // KDE -#include -#include #include #include -#include #include #include #include @@ -53,26 +53,26 @@ struct ImporterPrivate Importer* q; QWidget* mAuthWindow; std::auto_ptr mFileNameFormater; - KUrl mTempImportDir; + QUrl mTempImportDirUrl; = /* @defgroup reset Should be reset in start() * @{ */ - KUrl::List mUrlList; - KUrl::List mImportedUrlList; - KUrl::List mSkippedUrlList; + QList mUrlList; + QList mImportedUrlList; + QList mSkippedUrlList; int mRenamedCount; int mProgress; int mJobProgress; /* @} */ = - KUrl mCurrentUrl; + QUrl mCurrentUrl; = void emitError(const QString& message) { QMetaObject::invokeMethod(q, "error", Q_ARG(QString, message)); } = - bool createImportDir(const KUrl url) + bool createImportDir(const QUrl url) { Q_ASSERT(url.isLocalFile()); // FIXME: Support remote urls @@ -82,8 +82,9 @@ struct ImporterPrivate return false; } QString message; - mTempImportDir =3D FileUtils::createTempDir(url.toLocalFile(), ".g= wenview_importer-", &message); - if (mTempImportDir.isEmpty()) { + QString dir =3D FileUtils::createTempDir(url.toLocalFile(), ".gwen= view_importer-", &message); + mTempImportDirUrl =3D QUrl::fromLocalFile(dir); + if (mTempImportDirUrl.isEmpty()) { emitError(i18n("Could not create temporary upload folder:\n%1"= , message)); return false; } @@ -97,22 +98,23 @@ struct ImporterPrivate return; } mCurrentUrl =3D mUrlList.takeFirst(); - KUrl dst =3D mTempImportDir; - dst.addPath(mCurrentUrl.fileName()); + QUrl dst =3D mTempImportDirUrl; + dst.setPath(dst.path() + '/' + mCurrentUrl.fileName()); KIO::Job* job =3D KIO::copy(mCurrentUrl, dst, KIO::HideProgressInf= o); + /* KF5 FIXME if (job->ui()) { job->ui()->setWindow(mAuthWindow); } + */ QObject::connect(job, SIGNAL(result(KJob*)), q, SLOT(slotCopyDone(KJob*))); QObject::connect(job, SIGNAL(percent(KJob*,ulong)), q, SLOT(slotPercent(KJob*,ulong))); } = - void renameImportedUrl(const KUrl& src) + void renameImportedUrl(const QUrl& src) { - KUrl dst =3D src; - dst.cd(".."); + QUrl dst =3D src.resolved(QUrl("..")); QString fileName; if (mFileNameFormater.get()) { KFileItem item(KFileItem::Unknown, KFileItem::Unknown, src, tr= ue /* delayedMimeTypes */); @@ -120,12 +122,12 @@ struct ImporterPrivate // 'src' url is temporary: if we import "foo/image.jpg" and // "bar/image.jpg", both images will be temporarily saved in t= he // 'src' url. - KDateTime dateTime =3D TimeUtils::dateTimeForFileItem(item, Ti= meUtils::SkipCache); + QDateTime dateTime =3D TimeUtils::dateTimeForFileItem(item, Ti= meUtils::SkipCache); fileName =3D mFileNameFormater->format(src, dateTime); } else { fileName =3D src.fileName(); } - dst.setFileName(fileName); + dst.setPath(dst.path() + '/' + fileName); = FileUtils::RenameResult result =3D FileUtils::rename(src, dst, mAu= thWindow); switch (result) { @@ -169,7 +171,7 @@ void Importer::setAutoRenameFormat(const QString& forma= t) } } = -void Importer::start(const KUrl::List& list, const KUrl& destination) +void Importer::start(const QList& list, const QUrl& destination) { d->mUrlList =3D list; d->mImportedUrlList.clear(); @@ -191,7 +193,7 @@ void Importer::start(const KUrl::List& list, const KUrl= & destination) void Importer::slotCopyDone(KJob* _job) { KIO::CopyJob* job =3D static_cast(_job); - KUrl url =3D job->destUrl(); + QUrl url =3D job->destUrl(); if (job->error()) { qWarning() << "FIXME: What do we do with failed urls?"; advance(); @@ -204,10 +206,12 @@ void Importer::slotCopyDone(KJob* _job) = void Importer::finalizeImport() { - KIO::Job* job =3D KIO::del(d->mTempImportDir, KIO::HideProgressInfo); + KIO::Job* job =3D KIO::del(d->mTempImportDirUrl, KIO::HideProgressInfo= ); + /* KF5 FIXME if (job->ui()) { job->ui()->setWindow(d->mAuthWindow); } + */ importFinished(); } = @@ -229,12 +233,12 @@ void Importer::emitProgressChanged() progressChanged(d->mProgress * 100 + d->mJobProgress); } = -KUrl::List Importer::importedUrlList() const +QList Importer::importedUrlList() const { return d->mImportedUrlList; } = -KUrl::List Importer::skippedUrlList() const +QList Importer::skippedUrlList() const { return d->mSkippedUrlList; } diff --git a/importer/importer.h b/importer/importer.h index 0f175da..3efa282 100644 --- a/importer/importer.h +++ b/importer/importer.h @@ -23,9 +23,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambri= dge, MA 02110-1301, USA = // Qt #include +#include = // KDE -#include = // Local = @@ -48,14 +48,14 @@ public: */ void setAutoRenameFormat(const QString&); = - void start(const KUrl::List& list, const KUrl& destUrl); + void start(const QList& list, const QUrl& destUrl); = - KUrl::List importedUrlList() const; + QList importedUrlList() const; = /** * Documents which have been skipped during import */ - KUrl::List skippedUrlList() const; + QList skippedUrlList() const; = /** * How many documents have been renamed during import diff --git a/importer/importerconfigdialog.cpp b/importer/importerconfigdia= log.cpp index 87619f1..7385977 100644 --- a/importer/importerconfigdialog.cpp +++ b/importer/importerconfigdialog.cpp @@ -19,7 +19,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambri= dge, MA 02110-1301, USA = */ // Self -#include "importerconfigdialog.moc" +#include "importerconfigdialog.h" = // Qt #include @@ -36,7 +36,7 @@ namespace Gwenview { = static const QString PREVIEW_FILENAME =3D "PICT0012.JPG"; -static const KDateTime PREVIEW_DATETIME =3D KDateTime(QDate(2009, 10, 25),= QTime(17, 51, 18)); +static const QDateTime PREVIEW_DATETIME =3D QDateTime(QDate(2009, 10, 25),= QTime(17, 51, 18)); = struct ImporterConfigDialogPrivate : public Ui_ImporterConfigDialog { @@ -71,9 +71,10 @@ ImporterConfigDialog::ImporterConfigDialog(QWidget* pare= nt) QWidget* widget =3D new QWidget; d->setupUi(widget); setFaceType(KPageDialog::Plain); + /* KF5 FIXME // Hide help button until there is actual documentation to show showButton(KDialog::Help, false); - showButtonSeparator(true); + */ addPage(widget, QString()); = connect(d->kcfg_AutoRenameFormat, SIGNAL(textChanged(QString)), diff --git a/importer/main.cpp b/importer/main.cpp index 3f5e5c1..85dbdc2 100644 --- a/importer/main.cpp +++ b/importer/main.cpp @@ -18,15 +18,17 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Bost= on, MA 02110-1301, USA. = */ // Qt +#include +#include +#include +#include #include +#include = // KDE #include -#include #include -#include #include -#include = // Local #include @@ -37,38 +39,39 @@ int main(int argc, char *argv[]) { QScopedPointer aboutData( Gwenview::createAboutData( - "gwenview_importer", /* appname */ - "gwenview", /* catalogName */ - ki18n("Gwenview Importer") /* programName */ + QStringLiteral("org.kde.gwenview"), /* component name */ + i18n("Gwenview Importer") /* programName */ )); - aboutData->setShortDescription(ki18n("Photo Importer")); - - KCmdLineArgs::init(argc, argv, aboutData.data()); + aboutData->setShortDescription(i18n("Photo Importer")); = - KCmdLineOptions options; - options.add("+folder", ki18n("Source folder")); - options.add("udi ", ki18n("Device UDI")); - KCmdLineArgs::addCmdLineOptions(options); + QApplication app(argc, argv); + KAboutData::setApplicationData(*aboutData); = - KCmdLineArgs *args =3D KCmdLineArgs::parsedArgs(); - KApplication app; + QCommandLineParser parser; + aboutData.data()->setupCommandLine(&parser); + parser.addOption(QCommandLineOption({QStringLiteral("udi")}, i18n("Dev= ice UDI"))); + parser.addHelpOption(); + parser.addVersionOption(); + parser.addPositionalArgument("folder", i18n("Source folder")); + parser.process(app); + aboutData.data()->processCommandLine(&parser); = - if (args->count() !=3D 1) { - KCmdLineArgs::usageError("Missing required source folder argument.= "); // FIXME 2.11 Add i18n() call + if (parser.positionalArguments().count() !=3D 1) { + KCmdLineArgs::usageError(i18n("Missing required source folder argu= ment.")); return 1; } - KUrl url =3D args->url(0); + QString urlString =3D parser.positionalArguments().first(); + QUrl url =3D QUrl::fromUserInput(urlString, QDir::currentPath(), QUrl:= :AssumeLocalFile); if (!url.isValid()) { - qCritical() << "Invalid source folder."; // FIXME 2.11 Add i18n() = call + qCritical() << i18n("Invalid source folder."); return 1; } - QString deviceUdi =3D args->isSet("udi") ? args->getOption("udi") : QS= tring(); - args->clear(); + QString deviceUdi =3D parser.isSet("udi") ? parser.value("udi") : QStr= ing(); = Gwenview::ImageFormats::registerPlugins(); = Gwenview::ImportDialog* dialog =3D new Gwenview::ImportDialog(); dialog->show(); - QMetaObject::invokeMethod(dialog, "setSourceUrl", Qt::QueuedConnection= , Q_ARG(KUrl, url), Q_ARG(QString, deviceUdi)); + QMetaObject::invokeMethod(dialog, "setSourceUrl", Qt::QueuedConnection= , Q_ARG(QUrl, url), Q_ARG(QString, deviceUdi)); return app.exec(); } diff --git a/importer/progresspage.h b/importer/progresspage.h index bd1856a..1a5e84b 100644 --- a/importer/progresspage.h +++ b/importer/progresspage.h @@ -25,7 +25,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambri= dge, MA 02110-1301, USA #include = // KDE -#include = // Local = diff --git a/importer/serializedurlmap.cpp b/importer/serializedurlmap.cpp index 172761b..4127071 100644 --- a/importer/serializedurlmap.cpp +++ b/importer/serializedurlmap.cpp @@ -25,9 +25,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambri= dge, MA 02110-1301, USA = // KDE #include -#include = // Qt +#include = namespace Gwenview { @@ -35,17 +35,17 @@ namespace Gwenview static const char* KEY_SUFFIX =3D "key"; static const char* VALUE_SUFFIX =3D "value"; = -static KUrl stripPass(const KUrl &url_) +static QUrl stripPass(const QUrl &url_) { - KUrl url =3D url_; - url.setPass(QString()); + QUrl url =3D url_; + url.setPassword(QString()); return url; } = struct SerializedUrlMapPrivate { KConfigGroup mGroup; - QMap mMap; + QMap mMap; = void read() { @@ -56,21 +56,21 @@ struct SerializedUrlMapPrivate if (!mGroup.hasKey(key)) { break; } - QString keyUrl =3D mGroup.readEntry(key); - QString valueUrl =3D mGroup.readEntry(idxString + QLatin1Strin= g(VALUE_SUFFIX)); - mMap.insert(keyUrl, valueUrl); + QVariant keyUrl =3D mGroup.readEntry(key, QVariant()); + QVariant valueUrl =3D mGroup.readEntry(idxString + QLatin1Stri= ng(VALUE_SUFFIX), QVariant()); + mMap.insert(keyUrl.toUrl(), valueUrl.toUrl()); } } = void write() { mGroup.deleteGroup(); - QMap::ConstIterator it =3D mMap.constBegin(), end =3D = mMap.constEnd(); + QMap::ConstIterator it =3D mMap.constBegin(), end =3D = mMap.constEnd(); int idx =3D 0; for (; it !=3D end; ++it, ++idx) { QString idxString =3D QString::number(idx); - mGroup.writeEntry(idxString + QLatin1String(KEY_SUFFIX), it.ke= y().url()); - mGroup.writeEntry(idxString + QLatin1String(VALUE_SUFFIX), it.= value().url()); + mGroup.writeEntry(idxString + QLatin1String(KEY_SUFFIX), QVari= ant(it.key())); + mGroup.writeEntry(idxString + QLatin1String(VALUE_SUFFIX), QVa= riant(it.value())); } mGroup.sync(); } @@ -92,16 +92,16 @@ void SerializedUrlMap::setConfigGroup(const KConfigGrou= p& group) d->read(); } = -KUrl SerializedUrlMap::value(const KUrl& key_) const +QUrl SerializedUrlMap::value(const QUrl& key_) const { - QString pass =3D key_.pass(); - KUrl key =3D stripPass(key_); - KUrl url =3D d->mMap.value(key); - url.setPass(pass); + QString pass =3D key_.password(); + QUrl key =3D stripPass(key_); + QUrl url =3D d->mMap.value(key); + url.setPassword(pass); return url; } = -void SerializedUrlMap::insert(const KUrl& key, const KUrl& value) +void SerializedUrlMap::insert(const QUrl& key, const QUrl& value) { d->mMap.insert(stripPass(key), stripPass(value)); d->write(); diff --git a/importer/serializedurlmap.h b/importer/serializedurlmap.h index d15918d..b50927e 100644 --- a/importer/serializedurlmap.h +++ b/importer/serializedurlmap.h @@ -28,14 +28,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Camb= ridge, MA 02110-1301, USA // Qt = class KConfigGroup; -class KUrl; +class QUrl; = namespace Gwenview { = struct SerializedUrlMapPrivate; /** - * A map-like KUrl=3D>KUrl object, serialized in a KConfigGroup + * A map-like QUrl=3D>QUrl object, serialized in a KConfigGroup */ class SerializedUrlMap { @@ -45,9 +45,9 @@ public: = void setConfigGroup(const KConfigGroup&); = - KUrl value(const KUrl&) const; + QUrl value(const QUrl&) const; = - void insert(const KUrl& key, const KUrl& value); + void insert(const QUrl& key, const QUrl& value); = private: SerializedUrlMapPrivate* const d; diff --git a/importer/thumbnailpage.cpp b/importer/thumbnailpage.cpp index 31e1d7f..bd7c7ad 100644 --- a/importer/thumbnailpage.cpp +++ b/importer/thumbnailpage.cpp @@ -19,9 +19,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambr= idge, MA 02110-1301, USA = */ // Self -#include "thumbnailpage.moc" +#include "thumbnailpage.h" = // Qt +#include +#include #include #include = @@ -32,6 +34,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambri= dge, MA 02110-1301, USA #include #include #include +#include #include = // Local @@ -66,10 +69,10 @@ public: void showContextMenu(QWidget*) {} = - void showMenuForUrlDroppedOnViewport(QWidget*, const KUrl::List&) + void showMenuForUrlDroppedOnViewport(QWidget*, const QList&) {} = - void showMenuForUrlDroppedOnDir(QWidget*, const KUrl::List&, const KUr= l&) + void showMenuForUrlDroppedOnDir(QWidget*, const QList&, const QU= rl&) {} }; = @@ -83,10 +86,10 @@ struct ThumbnailPagePrivate : public Ui_ThumbnailPage ThumbnailPage* q; SerializedUrlMap mUrlMap; = - KIcon mSrcBaseIcon; + QIcon mSrcBaseIcon; QString mSrcBaseName; - KUrl mSrcBaseUrl; - KUrl mSrcUrl; + QUrl mSrcBaseUrl; + QUrl mSrcUrl; KModelIndexProxyMapper* mSrcUrlModelProxyMapper; = RecursiveDirModel* mRecursiveDirModel; @@ -96,7 +99,7 @@ struct ThumbnailPagePrivate : public Ui_ThumbnailPage = QPushButton* mImportSelectedButton; QPushButton* mImportAllButton; - KUrl::List mUrlList; + QList mUrlList; = void setupDirModel() { @@ -206,23 +209,23 @@ struct ThumbnailPagePrivate : public Ui_ThumbnailPage q, SIGNAL(rejected())); } = - KUrl urlForBaseUrl() const + QUrl urlForBaseUrl() const { - KUrl url =3D mUrlMap.value(mSrcBaseUrl); + QUrl url =3D mUrlMap.value(mSrcBaseUrl); if (!url.isValid()) { - return KUrl(); + return QUrl(); } = KIO::UDSEntry entry; bool ok =3D KIO::NetAccess::stat(url, entry, q); if (!ok) { - return KUrl(); + return QUrl(); } KFileItem item(entry, url, true /* delayedMimeTypes */); - return item.isDir() ? url : KUrl(); + return item.isDir() ? url : QUrl(); } = - void rememberUrl(const KUrl& url) + void rememberUrl(const QUrl& url) { mUrlMap.insert(mSrcBaseUrl, url); } @@ -248,38 +251,40 @@ ThumbnailPage::~ThumbnailPage() delete d; } = -void ThumbnailPage::setSourceUrl(const KUrl& srcBaseUrl, const QString& ic= onName, const QString& name) +void ThumbnailPage::setSourceUrl(const QUrl& srcBaseUrl, const QString& ic= onName, const QString& name) { - d->mSrcBaseIcon =3D KIcon(iconName); + d->mSrcBaseIcon =3D QIcon(iconName); d->mSrcBaseName =3D name; = const int size =3D KIconLoader::SizeHuge; d->mSrcIconLabel->setPixmap(d->mSrcBaseIcon.pixmap(size)); = d->mSrcBaseUrl =3D srcBaseUrl; - d->mSrcBaseUrl.adjustPath(KUrl::AddTrailingSlash); - KUrl url =3D d->urlForBaseUrl(); + if (!d->mSrcBaseUrl.path().endsWith('/')) { + d->mSrcBaseUrl.setPath(d->mSrcBaseUrl.path() + '/'); + } + QUrl url =3D d->urlForBaseUrl(); = if (url.isValid()) { openUrl(url); } else { DocumentDirFinder* finder =3D new DocumentDirFinder(srcBaseUrl); - connect(finder, SIGNAL(done(KUrl,DocumentDirFinder::Status)), - SLOT(slotDocumentDirFinderDone(KUrl,DocumentDirFinder::Sta= tus))); + connect(finder, SIGNAL(done(QUrl,DocumentDirFinder::Status)), + SLOT(slotDocumentDirFinderDone(QUrl,DocumentDirFinder::Sta= tus))); finder->start(); } } = -void ThumbnailPage::slotDocumentDirFinderDone(const KUrl& url, DocumentDir= Finder::Status /*status*/) +void ThumbnailPage::slotDocumentDirFinderDone(const QUrl& url, DocumentDir= Finder::Status /*status*/) { d->rememberUrl(url); openUrl(url); } = -void ThumbnailPage::openUrl(const KUrl& url) +void ThumbnailPage::openUrl(const QUrl& url) { d->mSrcUrl =3D url; - QString path =3D KUrl::relativeUrl(d->mSrcBaseUrl, d->mSrcUrl); + QString path =3D QDir(d->mSrcBaseUrl.path()).relativeFilePath(d->mSrcU= rl.path()); QString text; if (path.isEmpty() || path =3D=3D "./") { text =3D d->mSrcBaseName; @@ -292,17 +297,17 @@ void ThumbnailPage::openUrl(const KUrl& url) d->mRecursiveDirModel->setUrl(url); } = -KUrl::List ThumbnailPage::urlList() const +QList ThumbnailPage::urlList() const { return d->mUrlList; } = -void ThumbnailPage::setDestinationUrl(const KUrl& url) +void ThumbnailPage::setDestinationUrl(const QUrl& url) { d->mDstUrlRequester->setUrl(url); } = -KUrl ThumbnailPage::destinationUrl() const +QUrl ThumbnailPage::destinationUrl() const { return d->mDstUrlRequester->url(); } @@ -355,7 +360,7 @@ void ThumbnailPage::showConfigDialog() class OnlyBaseUrlProxyModel : public QSortFilterProxyModel { public: - OnlyBaseUrlProxyModel(const KUrl& url, const KIcon& icon, const QStrin= g& name, QObject* parent) + OnlyBaseUrlProxyModel(const QUrl& url, const QIcon& icon, const QStrin= g& name, QObject* parent) : QSortFilterProxyModel(parent) , mUrl(url) , mIcon(icon) @@ -369,7 +374,7 @@ public: } QModelIndex index =3D sourceModel()->index(sourceRow, 0); KFileItem item =3D itemForIndex(index); - return item.url().equals(mUrl, KUrl::CompareWithoutTrailingSlash); + return item.url().matches(mUrl, QUrl::StripTrailingSlash); } = QVariant data(const QModelIndex& index, int role) const // reimp @@ -383,15 +388,15 @@ public: case Qt::DecorationRole: return mIcon; case Qt::ToolTipRole: - return mUrl.pathOrUrl(); + return mUrl.toDisplayString(QUrl::PreferLocalFile); default: return QSortFilterProxyModel::data(index, role); } } = private: - KUrl mUrl; - KIcon mIcon; + QUrl mUrl; + QIcon mIcon; QString mName; }; = @@ -403,7 +408,7 @@ void ThumbnailPage::setupSrcUrlTreeView() } KDirModel* dirModel =3D new KDirModel(this); dirModel->dirLister()->setDirOnlyMode(true); - dirModel->dirLister()->openUrl(d->mSrcBaseUrl.upUrl()); + dirModel->dirLister()->openUrl(KIO::upUrl(d->mSrcBaseUrl)); = OnlyBaseUrlProxyModel* onlyBaseUrlModel =3D new OnlyBaseUrlProxyModel(= d->mSrcBaseUrl, d->mSrcBaseIcon, d->mSrcBaseName, this); onlyBaseUrlModel->setSourceModel(dirModel); @@ -447,7 +452,7 @@ void ThumbnailPage::openUrlFromIndex(const QModelIndex&= index) if (item.isNull()) { return; } - KUrl url =3D item.url(); + QUrl url =3D item.url(); d->rememberUrl(url); openUrl(url); } diff --git a/importer/thumbnailpage.h b/importer/thumbnailpage.h index 4f74482..95d5006 100644 --- a/importer/thumbnailpage.h +++ b/importer/thumbnailpage.h @@ -23,10 +23,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Camb= ridge, MA 02110-1301, USA = // Qt #include +#include #include = // KDE -#include = // Local #include "documentdirfinder.h" @@ -46,12 +46,12 @@ public: * Returns the list of urls to import * Only valid after importRequested() has been emitted */ - KUrl::List urlList() const; + QList urlList() const; = - KUrl destinationUrl() const; - void setDestinationUrl(const KUrl&); + QUrl destinationUrl() const; + void setDestinationUrl(const QUrl&); = - void setSourceUrl(const KUrl&, const QString& icon, const QString& lab= el); + void setSourceUrl(const QUrl&, const QString& icon, const QString& lab= el); = Q_SIGNALS: void importRequested(); @@ -61,8 +61,8 @@ private Q_SLOTS: void slotImportSelected(); void slotImportAll(); void updateImportButtons(); - void openUrl(const KUrl&); - void slotDocumentDirFinderDone(const KUrl& url, DocumentDirFinder::Sta= tus status); + void openUrl(const QUrl&); + void slotDocumentDirFinderDone(const QUrl& url, DocumentDirFinder::Sta= tus status); void showConfigDialog(); void openUrlFromIndex(const QModelIndex& index); void setupSrcUrlTreeView();