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

List:       kde-commits
Subject:    [digikam] utilities/queuemanager/manager: fix locked database with BQM
From:       Maik Qualmann <metzpinguin () gmail ! com>
Date:       2016-12-10 10:17:12
Message-ID: E1cFeiO-0005ie-Ng () code ! kde ! org
[Download RAW message or body]

Git commit f37ef2c195b61a43a40e9cbb7f119fdc8e9d38f4 by Maik Qualmann.
Committed on 10/12/2016 at 10:16.
Pushed by mqualmann into branch 'master'.

fix locked database with BQM

M  +24   -3    utilities/queuemanager/manager/actionthread.cpp
M  +1    -0    utilities/queuemanager/manager/actionthread.h
M  +5    -19   utilities/queuemanager/manager/task.cpp

https://commits.kde.org/digikam/f37ef2c195b61a43a40e9cbb7f119fdc8e9d38f4

diff --git a/utilities/queuemanager/manager/actionthread.cpp \
b/utilities/queuemanager/manager/actionthread.cpp index 48c3fa34d2..141bb3db77 100644
--- a/utilities/queuemanager/manager/actionthread.cpp
+++ b/utilities/queuemanager/manager/actionthread.cpp
@@ -28,6 +28,7 @@
 
 #include "digikam_debug.h"
 #include "digikam_config.h"
+#include "collectionscanner.h"
 #include "task.h"
 
 namespace Digikam
@@ -82,7 +83,7 @@ void ActionThread::processQueueItems(const \
QList<AssignedBatchTools>& items)  {
     ActionJobCollection collection;
 
-    for(int i = 0 ; i < items.size() ; i++)
+    for (int i = 0 ; i < items.size() ; i++)
     {
         Task* const t = new Task();
         t->setSettings(d->settings);
@@ -92,10 +93,12 @@ void ActionThread::processQueueItems(const \
QList<AssignedBatchTools>& items)  this, \
SIGNAL(signalStarting(Digikam::ActionData)));  
         connect(t, SIGNAL(signalFinished(Digikam::ActionData)),
-                this, SIGNAL(signalFinished(Digikam::ActionData)));
+                this, SLOT(slotUpdateImageInfo(Digikam::ActionData)),
+                Qt::BlockingQueuedConnection);
 
         connect(this, SIGNAL(signalCancelTask()),
-                t, SLOT(slotCancel()), Qt::QueuedConnection);
+                t, SLOT(slotCancel()),
+                Qt::QueuedConnection);
 
         collection.insert(t, 0);
     }
@@ -111,6 +114,24 @@ void ActionThread::cancel()
     ActionThreadBase::cancel();
 }
 
+void ActionThread::slotUpdateImageInfo(const Digikam::ActionData& ad)
+{
+    if (ad.status == ActionData::BatchDone)
+    {
+        CollectionScanner scanner;
+        ImageInfo source = ImageInfo::fromUrl(ad.fileUrl);
+        qlonglong id     = scanner.scanFile(ad.destUrl.toLocalFile(), \
CollectionScanner::NormalScan); +        ImageInfo info(id);
+        QDateTime dateTime = info.dateTime();
+        // Copy the digiKam attributes from original file to the new file
+        CollectionScanner::copyFileProperties(source, info);
+        // Restore date time from new file
+        info.setDateTime(dateTime);
+    }
+
+    emit signalFinished(ad);
+}
+
 void ActionThread::slotThreadFinished()
 {
     if (isEmpty())
diff --git a/utilities/queuemanager/manager/actionthread.h \
b/utilities/queuemanager/manager/actionthread.h index 8cb848b453..3375c2e2c1 100644
--- a/utilities/queuemanager/manager/actionthread.h
+++ b/utilities/queuemanager/manager/actionthread.h
@@ -72,6 +72,7 @@ Q_SIGNALS:
 
 private Q_SLOTS:
 
+    void slotUpdateImageInfo(const Digikam::ActionData& ad);
     void slotThreadFinished();
 
 private:
diff --git a/utilities/queuemanager/manager/task.cpp \
b/utilities/queuemanager/manager/task.cpp index a94b4f9d4e..4c6b710fbc 100644
--- a/utilities/queuemanager/manager/task.cpp
+++ b/utilities/queuemanager/manager/task.cpp
@@ -46,10 +46,8 @@ extern "C"
 #include "dimg.h"
 #include "dmetadata.h"
 #include "imageinfo.h"
-#include "fileactionmngr.h"
 #include "batchtool.h"
 #include "batchtoolsmanager.h"
-#include "collectionscanner.h"
 #include "fileoperation.h"
 
 namespace Digikam
@@ -245,27 +243,15 @@ void Task::run()
             }
         }
 
-        if (!FileOperation::localFileRename(d->tools.m_itemUrl.toLocalFile(),
-                                            outUrl.toLocalFile(),
-                                            dest.toLocalFile()))
+        if (FileOperation::localFileRename(d->tools.m_itemUrl.toLocalFile(),
+                                           outUrl.toLocalFile(),
+                                           dest.toLocalFile()))
         {
-            emitActionData(ActionData::BatchFailed, i18n("Failed to create \
file..."), dest); +            emitActionData(ActionData::BatchDone, i18n("Item \
processed successfully %1", renameMess), dest);  }
         else
         {
-            // -- Now copy the digiKam attributes from original file to the new file \
                ------------
-
-            CollectionScanner scanner;
-            qlonglong id = scanner.scanFile(dest.toLocalFile(), \
                CollectionScanner::NormalScan);
-
-            ImageInfo destInfo(id);
-            CollectionScanner::copyFileProperties(source, destInfo);
-
-            // -- Read again new file that the database is up to date \
                ---------------------------
-
-            scanner.scanFile(destInfo, CollectionScanner::Rescan);
-
-            emitActionData(ActionData::BatchDone, i18n("Item processed successfully \
%1", renameMess), dest); +            emitActionData(ActionData::BatchFailed, \
i18n("Failed to create file..."), dest);  }
     }
     else


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

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