Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.2
digikam
migration_from_digikam4.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File migration_from_digikam4.diff of Package digikam
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($<TARGET_PROPERTY:Qt5::Gui,INTERFACE_INCLUDE_DIRECTORIES> $<TARGET_PROPERTY:Qt5::Widgets,INTERFACE_INCLUDE_DIRECTORIES> $<TARGET_PROPERTY:Qt5::Core,INTERFACE_INCLUDE_DIRECTORIES> + $<TARGET_PROPERTY:Qt5::Sql,INTERFACE_INCLUDE_DIRECTORIES> $<TARGET_PROPERTY:KF5::I18n,INTERFACE_INCLUDE_DIRECTORIES> $<TARGET_PROPERTY:KF5::ConfigCore,INTERFACE_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 <QPushButton> +// KDE includes + +#include <kdelibs4migration.h> + // 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,220 @@ +/* ============================================================ + * + * 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 <alarrosa at suse dot com> + * + * 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 <QLabel> +#include <QRadioButton> +#include <QButtonGroup> +#include <QDir> +#include <QFileInfo> +#include <QFile> +#include <QStringList> +#include <QVBoxLayout> +#include <QApplication> +#include <QStyle> +#include <QSqlDatabase> +#include <QSqlQuery> +#include <QSqlError> + +// KDE includes + +#include <klocalizedstring.h> +#include <kdelibs4configmigrator.h> +#include <kdelibs4migration.h> + +// 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("<qt>" + "<p><h1><b>Migrate configuration and metadata from digiKam 4</b></h1></p>" + "<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>" + "<p>Migration is done <b>at your own risk</b>. 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.</p>" + "<p>In either case you're recommended to backup " + "the configuration files and databases before proceeding.</p>" + "</qt>")); + + 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; + } + } + } + + // Migrate $KDEHOME/share/apps/kipi/geobookmarks.xml to ./.local/share/digikam/geobookmarks.xml + QString oldGeobookmarksFile = migration.locateLocal("data", QStringLiteral("kipi/geobookmarks.xml")); + const QString newGeobookmarksFile = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + + QStringLiteral("/geobookmarks.xml"); + + if (QFile(newGeobookmarksFile).exists()) { + qCDebug(DIGIKAM_GENERAL_LOG) << newGeobookmarksFile << " already exists. Skipping"; + } else { + QFileInfo fileInfo(newGeobookmarksFile); + QDir().mkpath(fileInfo.absolutePath()); + + if (!oldGeobookmarksFile.isEmpty()) { + if (QFile(oldGeobookmarksFile).copy(newGeobookmarksFile)) { + qCDebug(DIGIKAM_GENERAL_LOG) << "Config file" << oldGeobookmarksFile << "was migrated to" << newGeobookmarksFile; + } + } + } + + // 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 <alarrosa at suse dot com> + * + * 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.</p>" "<p>This assistant will help you to configure first " "run settings to be able to use digiKam quickly.</p>" +#if defined Q_OS_WIN || defined Q_OS_OSX "<br/>" "<p>You can ignore the following if you use digiKam " "for the first time:</p>" @@ -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 +#endif +#else // defined Q_OS_LINUX + "</qt>", + 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.</p></qt>" +#: utilities/assistants/firstrun/migratefromdigikam4page.cpp:58 +msgid "Migration from digiKam 4" +msgstr "Migración desde Digikam4" + +#: utilities/assistants/firstrun/migratefromdigikam4page.cpp:66 +msgid "" +"<qt><p><h1><b>Migrate configuration and metadata from digiKam 4</b></h1></" +"p><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><p>Migration is done <b>at your own risk</b>. 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." +"</p><p>In either case you're recommended to backup the configuration files " +"and databases before proceeding.</p></qt>" +msgstr "" +"<qt><p><h1><b>Migración de configuración y metadatos desde digiKam 4</b></" +"h1></p><p>Puede elegir aquí si quieres usar la configuración y albums de " +"digiKam 4 en digiKam 5. Por favor, observe las siguientes advertencias:</" +"p><p>La migration se hace <b>bajo su propia responsabilidad</b>. 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.</p><p>En cualquier caso, se " +"recomienda que hagas un backup de los ficheros de configuración y bases de " +"datos antes de continuar.</p></qt>" + +#: 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 "<b>Configure Open File Behavior</b>" msgstr "<b>Configurar el comportamiento de apertura de archivos</b>"
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor