media-gfx/digikam: Fix db lock issue

Revision bump adds upstream patch to fix a database lock with the batch queue
manager.

Reported-by: Oliver Schwabedissen <Oliver@Schwabedissen.name>
Gentoo-bug: 602320

Package-Manager: portage-2.3.3
This commit is contained in:
Johannes Huber
2016-12-11 11:12:35 +01:00
parent e5512914d9
commit cd2f2c655d
2 changed files with 305 additions and 0 deletions

View File

@@ -0,0 +1,170 @@
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
EAPI=6
if [[ ${KDE_BUILD_TYPE} != live ]]; then
KDE_HANDBOOK="true"
KDE_TEST="true"
fi
CMAKE_MAKEFILE_GENERATOR="emake"
CMAKE_MIN_VERSION="3.0"
inherit kde5 toolchain-funcs
DESCRIPTION="Digital photo management application"
HOMEPAGE="https://www.digikam.org/"
LICENSE="GPL-2"
KEYWORDS="~amd64 ~x86"
IUSE="addressbook calendar gphoto2 jpeg2k +kipi +lensfun marble semantic-desktop mysql opengl openmp +panorama scanner video X"
if [[ ${KDE_BUILD_TYPE} != live ]]; then
MY_PV=${PV/_/-}
MY_P=${PN}-${MY_PV}
SRC_BRANCH=stable
[[ ${PV} =~ beta[0-9]$ ]] && SRC_BRANCH=unstable
SRC_URI="mirror://kde/${SRC_BRANCH}/digikam/${MY_P}.tar.xz"
S="${WORKDIR}/${MY_P}/core"
fi
COMMON_DEPEND="
$(add_frameworks_dep kconfig)
$(add_frameworks_dep kconfigwidgets)
$(add_frameworks_dep kcoreaddons)
$(add_frameworks_dep kiconthemes)
$(add_frameworks_dep ki18n)
$(add_frameworks_dep kio)
$(add_frameworks_dep knotifications)
$(add_frameworks_dep knotifyconfig)
$(add_frameworks_dep kservice)
$(add_frameworks_dep kwidgetsaddons)
$(add_frameworks_dep kwindowsystem)
$(add_frameworks_dep kxmlgui)
$(add_frameworks_dep solid)
$(add_qt_dep qtdbus)
$(add_qt_dep qtgui '-gles2')
$(add_qt_dep qtprintsupport)
$(add_qt_dep qtsql 'mysql?')
$(add_qt_dep qtwebkit)
$(add_qt_dep qtwidgets)
$(add_qt_dep qtxml)
dev-libs/expat
media-gfx/exiv2:=
media-libs/lcms:2
media-libs/liblqr
>=media-libs/libpgf-6.12.27
media-libs/libpng:0=
media-libs/opencv:=[-qt4(-)]
|| ( <media-libs/opencv-3.0.0 >=media-libs/opencv-3.1.0 )
media-libs/tiff:0
virtual/jpeg:0
addressbook? (
$(add_kdeapps_dep akonadi-contacts)
$(add_kdeapps_dep kcontacts)
)
calendar? ( $(add_kdeapps_dep kcalcore) )
gphoto2? ( media-libs/libgphoto2:= )
jpeg2k? ( media-libs/jasper:= )
kipi? ( $(add_kdeapps_dep libkipi '' '16.03.80') )
lensfun? ( media-libs/lensfun )
marble? (
$(add_frameworks_dep kbookmarks)
$(add_kdeapps_dep marble)
$(add_qt_dep qtconcurrent)
$(add_qt_dep qtnetwork)
)
mysql? ( virtual/mysql )
opengl? (
$(add_qt_dep qtopengl)
virtual/opengl
)
panorama? ( $(add_frameworks_dep threadweaver) )
scanner? ( $(add_kdeapps_dep libksane) )
semantic-desktop? ( $(add_frameworks_dep kfilemetadata) )
video? ( $(add_qt_dep qtmultimedia 'widgets') )
X? (
$(add_qt_dep qtx11extras)
x11-libs/libX11
)
"
DEPEND="${COMMON_DEPEND}
$(add_qt_dep qtconcurrent)
dev-cpp/eigen:3
dev-libs/boost[threads]
sys-devel/gettext
panorama? (
sys-devel/bison
sys-devel/flex
)
"
RDEPEND="${COMMON_DEPEND}
media-plugins/kipi-plugins:5
panorama? ( media-gfx/hugin )
!media-gfx/digikam:4
"
RESTRICT=test
# bug 366505
PATCHES=( "${FILESDIR}/${P}-db-lock.patch" )
pkg_pretend() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
kde5_pkg_pretend
}
pkg_setup() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
kde5_pkg_setup
}
# FIXME: Unbundle libraw (libs/rawengine/libraw)
src_prepare() {
if [[ ${KDE_BUILD_TYPE} != live ]]; then
# prepare the translations
mv "${WORKDIR}/${MY_P}/po" po || die
find po -name "*.po" -and -not -name "digikam.po" -delete || die
echo "set_property(GLOBAL PROPERTY ALLOW_DUPLICATE_CUSTOM_TARGETS 1)" >> CMakeLists.txt || die
echo "find_package(Gettext REQUIRED)" >> CMakeLists.txt || die
echo "add_subdirectory( po )" >> CMakeLists.txt || die
if use handbook; then
# subdirs need to be preserved b/c relative paths...
# doc-translated is, in fact, broken, and ignored
mv "${WORKDIR}/${MY_P}/doc/${PN}" doc-default || die
echo "find_package(KF5DocTools REQUIRED)" >> CMakeLists.txt || die
echo "add_subdirectory( doc-default )" >> CMakeLists.txt || die
fi
fi
if ! use marble; then
punt_bogus_dep Qt5 Network
fi
kde5_src_prepare
}
src_configure() {
local mycmakeargs=(
-DENABLE_APPSTYLES=ON
-DENABLE_AKONADICONTACTSUPPORT=$(usex addressbook)
-DENABLE_MYSQLSUPPORT=$(usex mysql)
-DENABLE_MEDIAPLAYER=$(usex video)
-DENABLE_OPENCV3=$(has_version ">=media-libs/opencv-3" && echo yes || echo no)
$(cmake-utils_use_find_package calendar KF5CalendarCore)
$(cmake-utils_use_find_package gphoto2 Gphoto2)
$(cmake-utils_use_find_package jpeg2k Jasper)
$(cmake-utils_use_find_package kipi KF5Kipi)
$(cmake-utils_use_find_package lensfun LensFun)
$(cmake-utils_use_find_package marble Marble)
$(cmake-utils_use_find_package opengl OpenGL)
$(cmake-utils_use_find_package openmp OpenMP)
$(cmake-utils_use_find_package panorama KF5ThreadWeaver)
$(cmake-utils_use_find_package scanner KF5Sane)
$(cmake-utils_use_find_package semantic-desktop KF5FileMetaData)
$(cmake-utils_use_find_package X X11)
)
kde5_src_configure
}

View File

@@ -0,0 +1,135 @@
From f37ef2c195b61a43a40e9cbb7f119fdc8e9d38f4 Mon Sep 17 00:00:00 2001
From: Maik Qualmann <metzpinguin@gmail.com>
Date: Sat, 10 Dec 2016 11:16:50 +0100
Subject: fix locked database with BQM
---
utilities/queuemanager/manager/actionthread.cpp | 27 ++++++++++++++++++++++---
utilities/queuemanager/manager/actionthread.h | 1 +
utilities/queuemanager/manager/task.cpp | 24 +++++-----------------
3 files changed, 30 insertions(+), 22 deletions(-)
diff --git a/utilities/queuemanager/manager/actionthread.cpp b/utilities/queuemanager/manager/actionthread.cpp
index 48c3fa3..141bb3d 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 8cb848b..3375c2e 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 a94b4f9..4c6b710 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
--
cgit v0.11.2