[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [gwenview/bring-back-importer] /: Start bringing back Gwenview Importer
From:       Aurélien Gâteau <agateau () kde ! org>
Date:       2016-10-31 9:21:30
Message-ID: E1c18mY-0006Kn-HD () code ! kde ! org
[Download RAW message or body]

Git commit 017b4fe5dc7f4b6e876cfd7b108dcebbf609ae94 by Aurélien Gâteau.
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="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-gwenview-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, Cambridge, MA \
02110-1301, USA  
 */
 // Self
-#include "dialogpage.moc"
+#include "dialogpage.h"
 
 // Qt
 #include <QEventLoop>
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, Cambridge, 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 = rootUrl;
     d->mDirLister = 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 KFileItemList& list)
+void DocumentDirFinder::slotItemsAdded(const QUrl& dir, const KFileItemList& list)
 {
     Q_FOREACH(const KFileItem & item, list) {
         MimeTypeUtils::Kind kind = 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 = d->mFoundDirUrl;
-        d->mFoundDirUrl = KUrl();
+        QUrl url = d->mFoundDirUrl;
+        d->mFoundDirUrl = 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, Cambridge, MA \
02110-1301, USA  #include "filenameformater.h"
 
 // Qt
+#include <QDateTime>
 #include <QFileInfo>
+#include <QUrl>
 
 // KDE
-#include <KDateTime>
 #include <KLocale>
-#include <KUrl>
 
 // Local
 
@@ -52,14 +52,14 @@ FileNameFormater::~FileNameFormater()
     delete d;
 }
 
-QString FileNameFormater::format(const KUrl& url, const KDateTime& dateTime)
+QString FileNameFormater::format(const QUrl& url, const QDateTime& dateTime)
 {
     QFileInfo info(url.fileName());
 
     // Keep in sync with helpMap()
     Dict dict;
-    dict["date"]       = dateTime.toString("%Y-%m-%d");
-    dict["time"]       = dateTime.toString("%H-%M-%S");
+    dict["date"]       = dateTime.toString("yyyy-MM-dd");
+    dict["time"]       = dateTime.toString("HH-mm-ss");
     dict["ext"]        = info.suffix();
     dict["ext.lower"]  = info.suffix().toLower();
     dict["name"]       = 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, Cambridge, 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, Cambridge, MA \
02110-1301, USA  // Qt
 #include <QFile>
 #include <QFileInfo>
+#include <QUrl>
 
 // KDE
 #include <QDebug>
@@ -33,7 +34,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA \
02110-1301, USA  #include <KIO/JobClasses>
 #include <KIO/JobUiDelegate>
 #include <KIO/NetAccess>
-#include <KUrl>
 
 // libc
 #include <errno.h>
@@ -45,7 +45,7 @@ namespace Gwenview
 namespace FileUtils
 {
 
-bool contentsAreIdentical(const KUrl& url1, const KUrl& url2, QWidget* authWindow)
+bool contentsAreIdentical(const QUrl& url1, const QUrl& url2, QWidget* authWindow)
 {
     // FIXME: Support remote urls
     QFile file1(KIO::NetAccess::mostLocalUrl(url1, authWindow).toLocalFile());
@@ -79,9 +79,9 @@ bool contentsAreIdentical(const KUrl& url1, const KUrl& url2, \
QWidget* authWindo  }
 }
 
-RenameResult rename(const KUrl& src, const KUrl& dst_, QWidget* authWindow)
+RenameResult rename(const QUrl& src, const QUrl& dst_, QWidget* authWindow)
 {
-    KUrl dst = dst_;
+    QUrl dst = dst_;
     RenameResult result = RenamedOK;
     int count = 1;
 
@@ -104,15 +104,18 @@ RenameResult rename(const KUrl& src, const KUrl& dst_, QWidget* \
                authWindow)
         if (srcSize == dstSize && contentsAreIdentical(src, dst, authWindow)) {
             // Already imported, skip it
             KIO::Job* job = KIO::file_delete(src, KIO::HideProgressInfo);
+            // FIXME KF5
+            /*
             if (job->ui()) {
                 job->ui()->setWindow(authWindow);
             }
+            */
 
             return Skipped;
         }
         result = RenamedUnderNewName;
 
-        dst.setFileName(prefix + QString::number(count) + suffix);
+        dst.setPath(dst.path() + '/' + prefix + QString::number(count) + suffix);
         ++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, Cambridge, 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* authWindow = \
0); +bool contentsAreIdentical(const QUrl& url1, const QUrl& url2, QWidget* \
authWindow = 0);  
 /**
  * Rename src to dst, returns RenameResult
  */
-RenameResult rename(const KUrl& src, const KUrl& dst, QWidget* authWindow = 0);
+RenameResult rename(const QUrl& src, const QUrl& dst, QWidget* authWindow = 0);
 
 /**
  * Create a temp dir in baseDir, starting with prefix.  If successful returns
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, Cambridge, MA \
02110-1301, USA  
 */
 // Self
-#include "importdialog.moc"
+#include "importdialog.h"
 
 // Qt
 #include <QApplication>
@@ -62,8 +62,8 @@ public:
 
     void deleteImportedUrls()
     {
-        KUrl::List importedUrls = mImporter->importedUrlList();
-        KUrl::List skippedUrls = mImporter->skippedUrlList();
+        QList<QUrl> importedUrls = mImporter->importedUrlList();
+        QList<QUrl> skippedUrls = mImporter->skippedUrlList();
         int importedCount = importedUrls.count();
         int skippedCount = skippedUrls.count();
 
@@ -120,7 +120,7 @@ public:
         if (answer != KMessageBox::Yes) {
             return;
         }
-        KUrl::List urls = importedUrls + skippedUrls;
+        QList<QUrl> urls = importedUrls + skippedUrls;
         while (true) {
             KIO::Job* job = KIO::del(urls);
             if (KIO::NetAccess::synchronousRun(job, q)) {
@@ -144,11 +144,11 @@ public:
 
     void startGwenview()
     {
-        KService::Ptr service = KService::serviceByDesktopName("gwenview");
+        KService::Ptr service = KService::serviceByDesktopName("org.kde.gwenview");
         if (!service) {
             qCritical() << "Could not find gwenview";
         } else {
-            KRun::run(*service, KUrl::List() << mThumbnailPage->destinationUrl(), 0 \
/* window */); +            KRun::run(*service, {mThumbnailPage->destinationUrl()}, 0 \
/* window */);  }
     }
 
@@ -182,11 +182,11 @@ ImportDialog::ImportDialog()
             SLOT(showImportError(QString)));
     d->mThumbnailPage = new ThumbnailPage;
 
-    KUrl url = ImporterConfig::destinationUrl();
+    QUrl url = ImporterConfig::destinationUrl();
     if (!url.isValid()) {
         url = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation));
  int year = 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 = url.pathOrUrl();
-        iconName = KProtocolInfo::icon(url.protocol());
+        name = url.url(QUrl::PreferLocalFile);
+        iconName = KProtocolInfo::icon(url.scheme());
         if (iconName.isEmpty()) {
             iconName = "folder";
         }
@@ -242,7 +242,7 @@ void ImportDialog::setSourceUrl(const KUrl& url, const QString& \
deviceUdi)  
 void ImportDialog::startImport()
 {
-    KUrl url = d->mThumbnailPage->destinationUrl();
+    QUrl url = 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, Cambridge, MA \
02110-1301, USA  #define IMPORTDIALOG_H
 
 // Qt
+#include <QUrl>
 
 // KDE
-#include <KUrl>
 #include <KMainWindow>
 
 // 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, Cambridge, MA \
02110-1301, USA  
 */
 // Self
-#include "importer.moc"
+#include "importer.h"
 
 // Qt
+#include <QDateTime>
+#include <QDebug>
+#include <QUrl>
 
 // KDE
-#include <KDateTime>
-#include <QDebug>
 #include <KFileItem>
 #include <KLocale>
-#include <KUrl>
 #include <KIO/CopyJob>
 #include <KIO/DeleteJob>
 #include <KIO/Job>
@@ -53,26 +53,26 @@ struct ImporterPrivate
     Importer* q;
     QWidget* mAuthWindow;
     std::auto_ptr<FileNameFormater> mFileNameFormater;
-    KUrl mTempImportDir;
+    QUrl mTempImportDirUrl;
 
     /* @defgroup reset Should be reset in start()
      * @{ */
-    KUrl::List mUrlList;
-    KUrl::List mImportedUrlList;
-    KUrl::List mSkippedUrlList;
+    QList<QUrl> mUrlList;
+    QList<QUrl> mImportedUrlList;
+    QList<QUrl> 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 = FileUtils::createTempDir(url.toLocalFile(), \
                ".gwenview_importer-", &message);
-        if (mTempImportDir.isEmpty()) {
+        QString dir = FileUtils::createTempDir(url.toLocalFile(), \
".gwenview_importer-", &message); +        mTempImportDirUrl = \
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 = mUrlList.takeFirst();
-        KUrl dst = mTempImportDir;
-        dst.addPath(mCurrentUrl.fileName());
+        QUrl dst = mTempImportDirUrl;
+        dst.setPath(dst.path() + '/' + mCurrentUrl.fileName());
         KIO::Job* job = KIO::copy(mCurrentUrl, dst, KIO::HideProgressInfo);
+        /* 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 = src;
-        dst.cd("..");
+        QUrl dst = src.resolved(QUrl(".."));
         QString fileName;
         if (mFileNameFormater.get()) {
             KFileItem item(KFileItem::Unknown, KFileItem::Unknown, src, true /* \
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 the
             // 'src' url.
-            KDateTime dateTime = TimeUtils::dateTimeForFileItem(item, \
TimeUtils::SkipCache); +            QDateTime dateTime = \
TimeUtils::dateTimeForFileItem(item, TimeUtils::SkipCache);  fileName = \
mFileNameFormater->format(src, dateTime);  } else {
             fileName = src.fileName();
         }
-        dst.setFileName(fileName);
+        dst.setPath(dst.path() + '/' + fileName);
 
         FileUtils::RenameResult result = FileUtils::rename(src, dst, mAuthWindow);
         switch (result) {
@@ -169,7 +171,7 @@ void Importer::setAutoRenameFormat(const QString& format)
     }
 }
 
-void Importer::start(const KUrl::List& list, const KUrl& destination)
+void Importer::start(const QList<QUrl>& list, const QUrl& destination)
 {
     d->mUrlList = 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 = static_cast<KIO::CopyJob*>(_job);
-    KUrl url = job->destUrl();
+    QUrl url = 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 = KIO::del(d->mTempImportDir, KIO::HideProgressInfo);
+    KIO::Job* job = 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<QUrl> Importer::importedUrlList() const
 {
     return d->mImportedUrlList;
 }
 
-KUrl::List Importer::skippedUrlList() const
+QList<QUrl> 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, Cambridge, MA \
02110-1301, USA  
 // Qt
 #include <QObject>
+#include <QUrl>
 
 // KDE
-#include <KUrl>
 
 // Local
 
@@ -48,14 +48,14 @@ public:
      */
     void setAutoRenameFormat(const QString&);
 
-    void start(const KUrl::List& list, const KUrl& destUrl);
+    void start(const QList<QUrl>& list, const QUrl& destUrl);
 
-    KUrl::List importedUrlList() const;
+    QList<QUrl> importedUrlList() const;
 
     /**
      * Documents which have been skipped during import
      */
-    KUrl::List skippedUrlList() const;
+    QList<QUrl> skippedUrlList() const;
 
     /**
      * How many documents have been renamed during import
diff --git a/importer/importerconfigdialog.cpp b/importer/importerconfigdialog.cpp
index 87619f1..7385977 100644
--- a/importer/importerconfigdialog.cpp
+++ b/importer/importerconfigdialog.cpp
@@ -19,7 +19,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA \
02110-1301, USA  
 */
 // Self
-#include "importerconfigdialog.moc"
+#include "importerconfigdialog.h"
 
 // Qt
 #include <QTextDocument>
@@ -36,7 +36,7 @@ namespace Gwenview
 {
 
 static const QString PREVIEW_FILENAME = "PICT0012.JPG";
-static const KDateTime PREVIEW_DATETIME = KDateTime(QDate(2009, 10, 25), QTime(17, \
51, 18)); +static const QDateTime PREVIEW_DATETIME = QDateTime(QDate(2009, 10, 25), \
QTime(17, 51, 18));  
 struct ImporterConfigDialogPrivate : public Ui_ImporterConfigDialog
 {
@@ -71,9 +71,10 @@ ImporterConfigDialog::ImporterConfigDialog(QWidget* parent)
     QWidget* widget = 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, Boston, MA  \
02110-1301, USA.  
 */
 // Qt
+#include <QApplication>
+#include <QDebug>
+#include <QDir>
+#include <QCommandLineParser>
 #include <QScopedPointer>
+#include <QUrl>
 
 // KDE
 #include <KAboutData>
-#include <KApplication>
 #include <KCmdLineArgs>
-#include <QDebug>
 #include <KLocale>
-#include <KUrl>
 
 // Local
 #include <lib/about.h>
@@ -37,38 +39,39 @@ int main(int argc, char *argv[])
 {
     QScopedPointer<KAboutData> 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 <device-udi>", ki18n("Device UDI"));
-    KCmdLineArgs::addCmdLineOptions(options);
+    QApplication app(argc, argv);
+    KAboutData::setApplicationData(*aboutData);
 
-    KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
-    KApplication app;
+    QCommandLineParser parser;
+    aboutData.data()->setupCommandLine(&parser);
+    parser.addOption(QCommandLineOption({QStringLiteral("udi")}, i18n("Device \
UDI"))); +    parser.addHelpOption();
+    parser.addVersionOption();
+    parser.addPositionalArgument("folder", i18n("Source folder"));
+    parser.process(app);
+    aboutData.data()->processCommandLine(&parser);
 
-    if (args->count() != 1) {
-        KCmdLineArgs::usageError("Missing required source folder argument."); // \
FIXME 2.11 Add i18n() call +    if (parser.positionalArguments().count() != 1) {
+        KCmdLineArgs::usageError(i18n("Missing required source folder argument."));
         return 1;
     }
-    KUrl url = args->url(0);
+    QString urlString = parser.positionalArguments().first();
+    QUrl url = 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 = args->isSet("udi") ? args->getOption("udi") : QString();
-    args->clear();
+    QString deviceUdi = parser.isSet("udi") ? parser.value("udi") : QString();
 
     Gwenview::ImageFormats::registerPlugins();
 
     Gwenview::ImportDialog* dialog = 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, Cambridge, MA \
02110-1301, USA  #include <QWidget>
 
 // KDE
-#include <KUrl>
 
 // 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, Cambridge, MA \
02110-1301, USA  
 // KDE
 #include <KConfigGroup>
-#include <KUrl>
 
 // Qt
+#include <QUrl>
 
 namespace Gwenview
 {
@@ -35,17 +35,17 @@ namespace Gwenview
 static const char* KEY_SUFFIX = "key";
 static const char* VALUE_SUFFIX = "value";
 
-static KUrl stripPass(const KUrl &url_)
+static QUrl stripPass(const QUrl &url_)
 {
-    KUrl url = url_;
-    url.setPass(QString());
+    QUrl url = url_;
+    url.setPassword(QString());
     return url;
 }
 
 struct SerializedUrlMapPrivate
 {
     KConfigGroup mGroup;
-    QMap<KUrl, KUrl> mMap;
+    QMap<QUrl, QUrl> mMap;
 
     void read()
     {
@@ -56,21 +56,21 @@ struct SerializedUrlMapPrivate
             if (!mGroup.hasKey(key)) {
                 break;
             }
-            QString keyUrl = mGroup.readEntry(key);
-            QString valueUrl = mGroup.readEntry(idxString + \
                QLatin1String(VALUE_SUFFIX));
-            mMap.insert(keyUrl, valueUrl);
+            QVariant keyUrl = mGroup.readEntry(key, QVariant());
+            QVariant valueUrl = mGroup.readEntry(idxString + \
QLatin1String(VALUE_SUFFIX), QVariant()); +            mMap.insert(keyUrl.toUrl(), \
valueUrl.toUrl());  }
     }
 
     void write()
     {
         mGroup.deleteGroup();
-        QMap<KUrl, KUrl>::ConstIterator it = mMap.constBegin(), end = \
mMap.constEnd(); +        QMap<QUrl, QUrl>::ConstIterator it = mMap.constBegin(), end \
= mMap.constEnd();  int idx = 0;
         for (; it != end; ++it, ++idx) {
             QString idxString = QString::number(idx);
-            mGroup.writeEntry(idxString + QLatin1String(KEY_SUFFIX), \
                it.key().url());
-            mGroup.writeEntry(idxString + QLatin1String(VALUE_SUFFIX), \
it.value().url()); +            mGroup.writeEntry(idxString + \
QLatin1String(KEY_SUFFIX), QVariant(it.key())); +            \
mGroup.writeEntry(idxString + QLatin1String(VALUE_SUFFIX), QVariant(it.value()));  }
         mGroup.sync();
     }
@@ -92,16 +92,16 @@ void SerializedUrlMap::setConfigGroup(const KConfigGroup& group)
     d->read();
 }
 
-KUrl SerializedUrlMap::value(const KUrl& key_) const
+QUrl SerializedUrlMap::value(const QUrl& key_) const
 {
-    QString pass = key_.pass();
-    KUrl key = stripPass(key_);
-    KUrl url = d->mMap.value(key);
-    url.setPass(pass);
+    QString pass = key_.password();
+    QUrl key = stripPass(key_);
+    QUrl url = 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, Cambridge, MA \
02110-1301, USA  // Qt
 
 class KConfigGroup;
-class KUrl;
+class QUrl;
 
 namespace Gwenview
 {
 
 struct SerializedUrlMapPrivate;
 /**
- * A map-like KUrl=>KUrl object, serialized in a KConfigGroup
+ * A map-like QUrl=>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, Cambridge, MA \
02110-1301, USA  
 */
 // Self
-#include "thumbnailpage.moc"
+#include "thumbnailpage.h"
 
 // Qt
+#include <QDir>
+#include <QIcon>
 #include <QPushButton>
 #include <QTreeView>
 
@@ -32,6 +34,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA \
02110-1301, USA  #include <KDirModel>
 #include <KIconLoader>
 #include <KIO/NetAccess>
+#include <kio/global.h>
 #include <kmodelindexproxymapper.h>
 
 // Local
@@ -66,10 +69,10 @@ public:
     void showContextMenu(QWidget*)
     {}
 
-    void showMenuForUrlDroppedOnViewport(QWidget*, const KUrl::List&)
+    void showMenuForUrlDroppedOnViewport(QWidget*, const QList<QUrl>&)
     {}
 
-    void showMenuForUrlDroppedOnDir(QWidget*, const KUrl::List&, const KUrl&)
+    void showMenuForUrlDroppedOnDir(QWidget*, const QList<QUrl>&, const QUrl&)
     {}
 };
 
@@ -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<QUrl> mUrlList;
 
     void setupDirModel()
     {
@@ -206,23 +209,23 @@ struct ThumbnailPagePrivate : public Ui_ThumbnailPage
             q, SIGNAL(rejected()));
     }
 
-    KUrl urlForBaseUrl() const
+    QUrl urlForBaseUrl() const
     {
-        KUrl url = mUrlMap.value(mSrcBaseUrl);
+        QUrl url = mUrlMap.value(mSrcBaseUrl);
         if (!url.isValid()) {
-            return KUrl();
+            return QUrl();
         }
 
         KIO::UDSEntry entry;
         bool ok = 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& iconName, \
const QString& name) +void ThumbnailPage::setSourceUrl(const QUrl& srcBaseUrl, const \
QString& iconName, const QString& name)  {
-    d->mSrcBaseIcon = KIcon(iconName);
+    d->mSrcBaseIcon = QIcon(iconName);
     d->mSrcBaseName = name;
 
     const int size = KIconLoader::SizeHuge;
     d->mSrcIconLabel->setPixmap(d->mSrcBaseIcon.pixmap(size));
 
     d->mSrcBaseUrl = srcBaseUrl;
-    d->mSrcBaseUrl.adjustPath(KUrl::AddTrailingSlash);
-    KUrl url = d->urlForBaseUrl();
+    if (!d->mSrcBaseUrl.path().endsWith('/')) {
+        d->mSrcBaseUrl.setPath(d->mSrcBaseUrl.path() + '/');
+    }
+    QUrl url = d->urlForBaseUrl();
 
     if (url.isValid()) {
         openUrl(url);
     } else {
         DocumentDirFinder* finder = new DocumentDirFinder(srcBaseUrl);
-        connect(finder, SIGNAL(done(KUrl,DocumentDirFinder::Status)),
-                SLOT(slotDocumentDirFinderDone(KUrl,DocumentDirFinder::Status)));
+        connect(finder, SIGNAL(done(QUrl,DocumentDirFinder::Status)),
+                SLOT(slotDocumentDirFinderDone(QUrl,DocumentDirFinder::Status)));
         finder->start();
     }
 }
 
-void ThumbnailPage::slotDocumentDirFinderDone(const KUrl& url, \
DocumentDirFinder::Status /*status*/) +void \
ThumbnailPage::slotDocumentDirFinderDone(const QUrl& url, DocumentDirFinder::Status \
/*status*/)  {
     d->rememberUrl(url);
     openUrl(url);
 }
 
-void ThumbnailPage::openUrl(const KUrl& url)
+void ThumbnailPage::openUrl(const QUrl& url)
 {
     d->mSrcUrl = url;
-    QString path = KUrl::relativeUrl(d->mSrcBaseUrl, d->mSrcUrl);
+    QString path = QDir(d->mSrcBaseUrl.path()).relativeFilePath(d->mSrcUrl.path());
     QString text;
     if (path.isEmpty() || path == "./") {
         text = d->mSrcBaseName;
@@ -292,17 +297,17 @@ void ThumbnailPage::openUrl(const KUrl& url)
     d->mRecursiveDirModel->setUrl(url);
 }
 
-KUrl::List ThumbnailPage::urlList() const
+QList<QUrl> 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 QString& name, \
QObject* parent) +    OnlyBaseUrlProxyModel(const QUrl& url, const QIcon& icon, const \
QString& name, QObject* parent)  : QSortFilterProxyModel(parent)
     , mUrl(url)
     , mIcon(icon)
@@ -369,7 +374,7 @@ public:
         }
         QModelIndex index = sourceModel()->index(sourceRow, 0);
         KFileItem item = 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 = new KDirModel(this);
     dirModel->dirLister()->setDirOnlyMode(true);
-    dirModel->dirLister()->openUrl(d->mSrcBaseUrl.upUrl());
+    dirModel->dirLister()->openUrl(KIO::upUrl(d->mSrcBaseUrl));
 
     OnlyBaseUrlProxyModel* onlyBaseUrlModel = 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 = item.url();
+    QUrl url = 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, Cambridge, MA \
02110-1301, USA  
 // Qt
 #include <QModelIndex>
+#include <QUrl>
 #include <QWidget>
 
 // KDE
-#include <KUrl>
 
 // 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<QUrl> 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& label);
+    void setSourceUrl(const QUrl&, const QString& icon, const QString& label);
 
 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::Status \
status); +    void openUrl(const QUrl&);
+    void slotDocumentDirFinderDone(const QUrl& url, DocumentDirFinder::Status \
status);  void showConfigDialog();
     void openUrlFromIndex(const QModelIndex& index);
     void setupSrcUrlTreeView();


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic