Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F27672604
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
3 KB
Subscribers
None
View Options
diff --git a/src/utils/migration.cpp b/src/utils/migration.cpp
index 0781b4ee8..717df17e1 100644
--- a/src/utils/migration.cpp
+++ b/src/utils/migration.cpp
@@ -1,75 +1,80 @@
// SPDX-FileCopyrightText: 2024 g10 Code GmbH
// SPDX-FileContributor: Tobias Fella <tobias.fella@gnupg.com>
// SPDX-License-Identifier: GPL-2.0-or-later
#include "utils/migration.h"
#include "kleopatra_debug.h"
#include <KConfigGroup>
#include <KSharedConfig>
#include <QDir>
#include <QFile>
#include <QFileInfo>
#include <QRegularExpression>
#include <QUuid>
#include <Libkleo/GnuPG>
static const QStringList groupStateIgnoredKeys = {
QStringLiteral("magic"),
};
static void migrateGroupState(const QString &configName, const QString &name)
{
const auto config = KSharedConfig::openConfig(configName);
auto groups = config->groupList().filter(QRegularExpression(QStringLiteral("^View #\\d+$")));
groups.sort();
QStringList uuids;
const auto newConfig = KSharedConfig::openStateConfig();
for (const auto &g : groups) {
auto group = KConfigGroup(config, g);
auto newGroup = KConfigGroup(newConfig, QStringLiteral("%1:View %2").arg(name, QUuid::createUuid().toString()));
for (const auto &key : group.keyList()) {
if (key == QLatin1StringView("column-sizes")) {
newGroup.writeEntry("ColumnWidths", group.readEntry(key));
} else if (!groupStateIgnoredKeys.contains(key)) {
newGroup.writeEntry(key, group.readEntry(key));
}
}
newGroup.sync();
uuids += newGroup.name();
}
if (!uuids.isEmpty()) {
newConfig->group(name).writeEntry("Tabs", uuids);
}
}
void Migration::migrate()
{
auto migrations = KSharedConfig::openStateConfig()->group(QStringLiteral("Migrations"));
if (!migrations.readEntry("01-key-list-layout", false)) {
migrateGroupState({}, QStringLiteral("KeyList"));
migrateGroupState(QStringLiteral("kleopatracertificateselectiondialogrc"), QStringLiteral("CertificateSelectionDialog"));
migrations.writeEntry("01-key-list-layout", true);
migrations.sync();
}
- // Migrate ~/.config/kleopatragroupsrc to ~/.gnupg/kleopatra/kleopatragroupsrc
+ // Migrate kleopatragroupsrc from ~/.config/ (or %LOCALAPPDATA%/) to GNUPGHOME/kleopatra/
const QString groupConfigFilename = QStringLiteral("kleopatragroupsrc");
+#ifdef Q_OS_WIN
+ const QString oldGroupConfigPath = qEnvironmentVariable("LOCALAPPDATA") + QLatin1Char('/') + groupConfigFilename;
+#else
const QString oldGroupConfigPath = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QLatin1Char('/') + groupConfigFilename;
+#endif
const QDir groupConfigDir{Kleo::gnupgHomeDirectory() + QLatin1StringView("/kleopatra")};
const QString groupConfigPath = groupConfigDir.absoluteFilePath(groupConfigFilename);
if (!QFileInfo::exists(groupConfigPath) && QFileInfo::exists(oldGroupConfigPath)) {
+ qCInfo(KLEOPATRA_LOG) << "Copying group configuration from" << oldGroupConfigPath << "to" << groupConfigPath;
if (!QDir{}.mkpath(groupConfigDir.absolutePath())) {
qCWarning(KLEOPATRA_LOG) << "Failed to create folder for group configuration:" << groupConfigDir.absolutePath();
return;
}
const bool ok = QFile::copy(oldGroupConfigPath, groupConfigPath);
if (!ok) {
qCWarning(KLEOPATRA_LOG) << "Unable to copy the old group configuration to" << groupConfigPath;
}
}
}
diff --git a/src/utils/migration.h b/src/utils/migration.h
index cf43b7f67..6f964846b 100644
--- a/src/utils/migration.h
+++ b/src/utils/migration.h
@@ -1,8 +1,10 @@
// SPDX-FileCopyrightText: 2024 g10 Code GmbH
// SPDX-FileContributor: Tobias Fella <tobias.fella@gnupg.com>
// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
namespace Migration
{
void migrate();
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Tue, Sep 16, 12:57 AM (1 d, 14 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
64/2e/eab23f9a4e2fb105eab56831ef94
Attached To
rKLEOPATRA Kleopatra
Event Timeline
Log In to Comment