From 214acc331f02f4f9563710e7d46b5504319027df9849ac9b6afb696029bcc4bf Mon Sep 17 00:00:00 2001
From: OBS User buildservice-autocommit
Date: Mon, 3 Oct 2016 13:50:02 +0000
Subject: [PATCH] Updating link to change in openSUSE:Factory/digikam revision
151.0
OBS-URL: https://build.opensuse.org/package/show/KDE:Extra/digikam?expand=0&rev=2c6f911e0f018cd900952a75df3a1396
---
digikam.changes | 8 +
digikam.spec | 3 +
migration_from_digikam4.diff | 458 +++++++++++++++++++++++++++++++++++
3 files changed, 469 insertions(+)
create mode 100644 migration_from_digikam4.diff
diff --git a/digikam.changes b/digikam.changes
index 4e1ee15..65f220c 100644
--- a/digikam.changes
+++ b/digikam.changes
@@ -1,3 +1,11 @@
+-------------------------------------------------------------------
+Mon Oct 3 07:55:43 UTC 2016 - alarrosa@suse.com
+
+- Added migration_from_digikam4.diff to support migration of
+ settings and database from digikam4 the first time digikam5
+ is run by adding a migration page in the welcome wizard and
+ letting the user choose what to do (kde#364258).
+
-------------------------------------------------------------------
Thu Sep 29 22:19:22 UTC 2016 - lbeltrame@kde.org
diff --git a/digikam.spec b/digikam.spec
index 56a3a5b..0735563 100644
--- a/digikam.spec
+++ b/digikam.spec
@@ -26,6 +26,8 @@ Url: http://www.digikam.org/
Source0: http://download.kde.org/stable/%{name}/%{name}-%{version}.tar.xz
# PATCH-FIX-OPENSUSE find_libastro-qt5.patch -- fix build of geolocation support in Leap 42.1
Patch2: find_libastro-qt5.patch
+# PATCH-FIX-UPSTREAM migration_from_digikam4.diff alarrosa@suse.com kde#364258 -- Migration wizard page to migrate configuration and db from digikam4
+Patch3: migration_from_digikam4.diff
#This pulls in QWebEngine, which is not available on ppc64
%ifarch %ix86 x86_64 %arm aarch64 mips mips64
BuildRequires: akonadi-contact-devel
@@ -170,6 +172,7 @@ The main digikam libraries that are being shared between showfoto and digikam
# we renamed libastro to libastro-qt5 in Leap 42.1, make FindMARBLE.cmake find it
%patch2 -p1
%endif
+%patch3 -p1
# Remove build time references so build-compare can do its work
FAKE_BUILDDATE=$(LC_ALL=C date -u -r %{_sourcedir}/%{name}.changes '+%%b %%e %%Y')
diff --git a/migration_from_digikam4.diff b/migration_from_digikam4.diff
new file mode 100644
index 0000000..9107b6d
--- /dev/null
+++ b/migration_from_digikam4.diff
@@ -0,0 +1,458 @@
+Index: digikam-5.2.0/core/utilities/assistants/firstrun/CMakeLists.txt
+===================================================================
+--- digikam-5.2.0.orig/core/utilities/assistants/firstrun/CMakeLists.txt
++++ digikam-5.2.0/core/utilities/assistants/firstrun/CMakeLists.txt
+@@ -11,6 +11,7 @@ endif (POLICY CMP0063)
+
+ set(libfirstrun_SRCS
+ firstrundlg.cpp
++ migratefromdigikam4page.cpp
+ firstrundlgpage.cpp
+ welcomepage.cpp
+ collectionpage.cpp
+@@ -26,6 +27,7 @@ set(libfirstrun_SRCS
+ include_directories($
+ $
+ $
++ $
+
+ $
+ $
+Index: digikam-5.2.0/core/utilities/assistants/firstrun/firstrundlg.cpp
+===================================================================
+--- digikam-5.2.0.orig/core/utilities/assistants/firstrun/firstrundlg.cpp
++++ digikam-5.2.0/core/utilities/assistants/firstrun/firstrundlg.cpp
+@@ -27,10 +27,15 @@
+
+ #include
+
++// KDE includes
++
++#include
++
+ // Local incudes
+
+ #include "dxmlguiwindow.h"
+ #include "welcomepage.h"
++#include "migratefromdigikam4page.h"
+ #include "collectionpage.h"
+ #include "databasepage.h"
+ #include "rawpage.h"
+@@ -49,6 +54,7 @@ public:
+
+ Private() :
+ welcomePage(0),
++ migrateFromDigikam4Page(0),
+ collectionPage(0),
+ databasePage(0),
+ rawPage(0),
+@@ -61,6 +67,7 @@ public:
+ }
+
+ WelcomePage* welcomePage;
++ MigrateFromDigikam4Page* migrateFromDigikam4Page;
+ CollectionPage* collectionPage;
+ DatabasePage* databasePage;
+ RawPage* rawPage;
+@@ -82,7 +89,21 @@ FirstRunDlg::FirstRunDlg(QWidget* const
+ << QWizard::NextButton
+ << QWizard::FinishButton);
+
++ bool migrateAvailable = false;
++
++#ifdef Q_OS_LINUX
++ ::Kdelibs4Migration migration;
++
++ // If there's a digikamrc file in $KDEHOME/share/config,
++ // then we create the migration page in the wizard
++ migrateAvailable = !migration.locateLocal("config", QStringLiteral("digikamrc")).isEmpty();
++#endif
++
+ d->welcomePage = new WelcomePage(this); // First assistant page
++
++ if (migrateAvailable)
++ d->migrateFromDigikam4Page = new MigrateFromDigikam4Page(this);
++
+ d->collectionPage = new CollectionPage(this);
+ d->databasePage = new DatabasePage(this);
+ d->rawPage = new RawPage(this);
+@@ -151,14 +172,22 @@ bool FirstRunDlg::validateCurrentPage()
+
+ void FirstRunDlg::slotFinishPressed()
+ {
+- // Save settings to rc files.
+- d->collectionPage->saveSettings();
+- d->databasePage->saveSettings();
+- d->rawPage->saveSettings();
+- d->metadataPage->saveSettings();
+- d->previewPage->saveSettings();
+- d->openFilePage->saveSettings();
+- d->tooltipsPage->saveSettings();
++ if (d->migrateFromDigikam4Page && d->migrateFromDigikam4Page->isMigrationChecked())
++ {
++ // The user choosed to do a migration from digikam4
++ d->migrateFromDigikam4Page->doMigration();
++ }
++ else
++ {
++ // Save settings to rc files.
++ d->collectionPage->saveSettings();
++ d->databasePage->saveSettings();
++ d->rawPage->saveSettings();
++ d->metadataPage->saveSettings();
++ d->previewPage->saveSettings();
++ d->openFilePage->saveSettings();
++ d->tooltipsPage->saveSettings();
++ }
+ }
+
+ } // namespace Digikam
+Index: digikam-5.2.0/core/utilities/assistants/firstrun/migratefromdigikam4page.cpp
+===================================================================
+--- /dev/null
++++ digikam-5.2.0/core/utilities/assistants/firstrun/migratefromdigikam4page.cpp
+@@ -0,0 +1,203 @@
++/* ============================================================
++ *
++ * This file is a part of digiKam project
++ * http://www.digikam.org
++ *
++ * Date : 2016-09-29
++ * Description : migration page from digikam4
++ *
++ * Copyright (C) 2016 by Antonio Larrosa
++ *
++ * 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 "migratefromdigikam4page.h"
++
++// Qt includes
++
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++
++// KDE includes
++
++#include
++#include
++#include
++
++// Local includes
++
++#include "digikam_debug.h"
++#include "dbengineparameters.h"
++#include "dwidgetutils.h"
++
++namespace Digikam
++{
++
++MigrateFromDigikam4Page::MigrateFromDigikam4Page(FirstRunDlg* const dlg)
++ : FirstRunDlgPage(dlg, i18n("Migration from digiKam 4") ),
++ m_migrateBehavior(0L), m_migrate(0L), m_createnew(0L)
++{
++ const int spacing = QApplication::style()->pixelMetric(QStyle::PM_DefaultLayoutSpacing);
++
++ DVBox* const vbox = new DVBox(this);
++ QLabel* const title = new QLabel(vbox);
++ title->setWordWrap(true);
++ title->setText(i18n(""
++ "Migrate configuration and metadata from digiKam 4
"
++ "You can choose here if you want to use the configuration and albums from digiKam 4 in digiKam 5 . "
++ "Please note the following warnings:
"
++ "Migration is done at your own risk. Digikam developers "
++ "don't recommend it and don't support it. On the other hand, Creating "
++ "a new configuration might result in loss of tags and other metadata that wasn't embedded inside "
++ "the pictures and was only available in digiKam 4's database.
"
++ "In either case you're recommended to backup "
++ "the configuration files and databases before proceeding.
"
++ ""));
++
++ QWidget* const btns = new QWidget(vbox);
++ QVBoxLayout* const vlay = new QVBoxLayout(btns);
++
++ m_migrateBehavior = new QButtonGroup(btns);
++ m_migrate = new QRadioButton(btns);
++ m_migrate->setText(i18n("Migrate configuration from digiKam 4"));
++ m_migrate->setChecked(true);
++ connect(m_migrate, SIGNAL(toggled(bool)), this, SLOT(migrationToggled(bool)) );
++ m_migrateBehavior->addButton(m_migrate);
++
++ m_createnew = new QRadioButton(btns);
++ m_createnew->setText(i18n("Create a new configuration"));
++ m_migrateBehavior->addButton(m_createnew);
++
++ vlay->addWidget(m_migrate);
++ vlay->addWidget(m_createnew);
++ vlay->setContentsMargins(spacing, spacing, spacing, spacing);
++ vlay->setSpacing(spacing);
++
++ connect(m_migrateBehavior, SIGNAL(buttonClicked(int)), this, SIGNAL(completeChanged()));
++
++ setPageWidget(vbox);
++}
++
++MigrateFromDigikam4Page::~MigrateFromDigikam4Page()
++{
++}
++
++void MigrateFromDigikam4Page::doMigration()
++{
++ // Migrate digiKam config files from $KDEHOME/share/config/
++ Kdelibs4ConfigMigrator migrator(QStringLiteral("digikam"));
++ QStringList configFiles;
++ configFiles << QStringLiteral("digikamrc")
++ << QStringLiteral("digikam_tagsmanagerrc")
++ << QStringLiteral("kipipluginsrc")
++ << QStringLiteral("kipirc")
++ << QStringLiteral("showfotorc");
++ migrator.setConfigFiles( configFiles );
++ migrator.migrate();
++
++ // Migrate digiKam config files from $KDEHOME/share/apps/digikam/
++ Kdelibs4Migration migration;
++ QString oldappdatadir = migration.locateLocal("data", QStringLiteral("digikam"));
++ QStringList oldAppFiles = QDir(oldappdatadir).entryList( QDir::Files | QDir::Readable | QDir::NoDotAndDotDot );
++
++ Q_FOREACH( const QString &configFileName, oldAppFiles)
++ {
++ const QString newConfigLocation
++ = QStandardPaths::writableLocation(QStandardPaths::DataLocation)
++ + QLatin1Char('/') + configFileName;
++
++ if (QFile(newConfigLocation).exists()) {
++ qCDebug(DIGIKAM_GENERAL_LOG) << newConfigLocation << " already exists. Skipping";
++ continue;
++ }
++
++ QFileInfo fileInfo(newConfigLocation);
++ QDir().mkpath(fileInfo.absolutePath());
++
++ const QString oldConfigFile = oldappdatadir + QLatin1Char('/') + configFileName;
++ if (!oldConfigFile.isEmpty()) {
++ if (QFile(oldConfigFile).copy(newConfigLocation)) {
++ qCDebug(DIGIKAM_GENERAL_LOG) << "Config file" << oldConfigFile << "was migrated to" << newConfigLocation;
++ }
++ }
++
++ }
++
++ // Fix albumroot identifier since digiKam 5 doesn't interpret correctly
++ // values like volumeid:?path=%2Fhome%2Fantonio%2FPictures and it needs
++ // to be url-decoded.
++ DbEngineParameters parameters = DbEngineParameters::parametersFromConfig(KSharedConfig::openConfig());
++ QSqlDatabase databaseHandler = QSqlDatabase::addDatabase(parameters.databaseType, QStringLiteral("digikam4migration"));
++
++ databaseHandler.setHostName(parameters.hostName);
++ databaseHandler.setPort(parameters.port);
++ databaseHandler.setDatabaseName(parameters.databaseNameCore);
++ databaseHandler.setUserName(parameters.userName);
++ databaseHandler.setPassword(parameters.password);
++ databaseHandler.setConnectOptions(parameters.connectOptions);
++ if (!databaseHandler.open()) {
++ qCDebug(DIGIKAM_GENERAL_LOG) << "Cannot open database:" << databaseHandler.lastError().text();
++ return;
++ }
++
++ QSqlQuery query(QStringLiteral("SELECT id,identifier FROM albumroots"), databaseHandler);
++ while (query.next()) {
++ int id = query.value(0).toInt();
++ QString identifier = query.value(1).toString();
++
++ if (identifier.startsWith(QStringLiteral("volumeid:?path=%2F")))
++ {
++ QUrl url(identifier);
++ url.setQuery(url.query(QUrl::FullyDecoded), QUrl::DecodedMode);
++ qCDebug(DIGIKAM_GENERAL_LOG) << "Updating albumroot " << id << " from " << identifier << " to " << url.toString();
++ QSqlQuery uquery(QStringLiteral("UPDATE albumroots SET identifier=? WHERE id=?"), databaseHandler);
++ uquery.bindValue(0, url.toString());
++ uquery.bindValue(1, id);
++ uquery.exec();
++ }
++ }
++ databaseHandler.close();
++
++ qCDebug(DIGIKAM_GENERAL_LOG) << "Migration finished";
++}
++
++bool MigrateFromDigikam4Page::isMigrationChecked() const
++{
++ return m_migrate->isChecked();
++}
++
++void MigrateFromDigikam4Page::migrationToggled(bool b)
++{
++ setFinalPage(b);
++}
++
++int MigrateFromDigikam4Page::nextId() const
++{
++ if (m_migrate->isChecked())
++ return -1;
++ else
++ return QWizardPage::nextId();
++}
++
++} // namespace Digikam
+Index: digikam-5.2.0/core/utilities/assistants/firstrun/migratefromdigikam4page.h
+===================================================================
+--- /dev/null
++++ digikam-5.2.0/core/utilities/assistants/firstrun/migratefromdigikam4page.h
+@@ -0,0 +1,63 @@
++/* ============================================================
++ *
++ * This file is a part of digiKam project
++ * http://www.digikam.org
++ *
++ * Date : 2016-09-29
++ * Description : migration page from digikam4
++ *
++ * Copyright (C) 2016 by Antonio Larrosa
++ *
++ * 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 MIGRATEFROMDIGIKAM4_PAGE_H
++#define MIGRATEFROMDIGIKAM4_PAGE_H
++
++// Local includes
++
++#include "firstrundlgpage.h"
++
++class QRadioButton;
++class QButtonGroup;
++namespace Digikam
++{
++
++class MigrateFromDigikam4Page : public FirstRunDlgPage
++{
++Q_OBJECT
++
++public:
++
++ explicit MigrateFromDigikam4Page(FirstRunDlg* const dlg);
++ ~MigrateFromDigikam4Page();
++
++ /**
++ * Returns true if the user selected to do a migration
++ */
++ bool isMigrationChecked() const;
++ void doMigration();
++ int nextId() const;
++
++public Q_SLOTS:
++ void migrationToggled(bool b);
++
++protected:
++ QButtonGroup *m_migrateBehavior;
++ QRadioButton *m_migrate;
++ QRadioButton *m_createnew;
++};
++
++} // namespace Digikam
++
++#endif /* MIGRATEFROMDIGIKAM4_PAGE_H */
+Index: digikam-5.2.0/core/utilities/assistants/firstrun/welcomepage.cpp
+===================================================================
+--- digikam-5.2.0.orig/core/utilities/assistants/firstrun/welcomepage.cpp
++++ digikam-5.2.0/core/utilities/assistants/firstrun/welcomepage.cpp
+@@ -52,6 +52,7 @@ WelcomePage::WelcomePage(FirstRunDlg* co
+ "application published as open-source."
+ "This assistant will help you to configure first "
+ "run settings to be able to use digiKam quickly.
"
++#if defined Q_OS_WIN || defined Q_OS_OSX
+ "
"
+ "You can ignore the following if you use digiKam "
+ "for the first time:
"
+@@ -75,10 +76,11 @@ WelcomePage::WelcomePage(FirstRunDlg* co
+ #elif defined Q_OS_OSX
+ // MacOS settings place.
+ QLatin1String("~/Library/Preferences/"), QLatin1String("~/Library/Preferences/KDE/share/config/")
+-#else
+- // Linux settings place.
+- QLatin1String("~/.config/"), QLatin1String("~/.kde4/share/config")
+ #endif
++#else // defined Q_OS_LINUX
++ "",
++ QLatin1String(digikam_version_short)
++#endif
+ ));
+
+ setPageWidget(vbox);
+Index: digikam-5.2.0/po/es/digikam.po
+===================================================================
+--- digikam-5.2.0.orig/po/es/digikam.po
++++ digikam-5.2.0/po/es/digikam.po
+@@ -16820,6 +16820,41 @@ msgstr ""
+ "podrá alterar las operaciones de gestión de las fotografías haciéndolas más "
+ "lentas."
+
++#: utilities/assistants/firstrun/migratefromdigikam4page.cpp:58
++msgid "Migration from digiKam 4"
++msgstr "Migración desde Digikam4"
++
++#: utilities/assistants/firstrun/migratefromdigikam4page.cpp:66
++msgid ""
++"Migrate configuration and metadata from digiKam 4
"
++"p>You can choose here if you want to use the configuration and albums "
++"from digiKam 4 in digiKam 5 . Please note the following warnings:"
++"p>
Migration is done at your own risk. Digikam developers don't "
++"recommend it and don't support it. On the other hand, Creating a new "
++"configuration might result in loss of tags and other metadata that wasn't "
++"embedded inside the pictures and was only available in digiKam 4's database."
++"
In either case you're recommended to backup the configuration files "
++"and databases before proceeding.
"
++msgstr ""
++"Migración de configuración y metadatos desde digiKam 4"
++"h1>
Puede elegir aquí si quieres usar la configuración y albums de "
++"digiKam 4 en digiKam 5. Por favor, observe las siguientes advertencias:"
++"p>
La migration se hace bajo su propia responsabilidad. Los "
++"desarrolladores de Digikam no la recomiendan y no dan soporte. Por otra "
++"parte, crear una configuración nueva puede resultar en pérdida de etiquetas "
++"y otros metadatos que no estaban almacenados dentro de las imágenes y sólo "
++"estaban en la base de datos de digiKam 4.
En cualquier caso, se "
++"recomienda que hagas un backup de los ficheros de configuración y bases de "
++"datos antes de continuar.
"
++
++#: utilities/assistants/firstrun/migratefromdigikam4page.cpp:83
++msgid "Migrate configuration from digiKam 4"
++msgstr "Migrar configuración de digiKam 4"
++
++#: utilities/assistants/firstrun/migratefromdigikam4page.cpp:89
++msgid "Create a new configuration"
++msgstr "Crear nueva configuración"
++
+ #: utilities/assistants/firstrun/openfilepage.cpp:66
+ msgid "Configure Open File Behavior"
+ msgstr "Configurar el comportamiento de apertura de archivos"