mirror of
https://github.com/rizinorg/cutter.git
synced 2024-12-20 03:46:11 +00:00
Add Settings and Color Theme Versioning (#1557)
This commit is contained in:
parent
d32e3fa20f
commit
2012637922
124
src/Main.cpp
124
src/Main.cpp
@ -10,18 +10,109 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Migrate Settings used before Cutter 1.8
|
* @brief Migrate Settings used before Cutter 1.8
|
||||||
|
*
|
||||||
|
* @return whether any settings have been migrated
|
||||||
*/
|
*/
|
||||||
static void migrateSettings(QSettings &newSettings)
|
static bool migrateSettingsPre18(QSettings &newSettings)
|
||||||
{
|
{
|
||||||
|
if(newSettings.value("settings_migrated", false).toBool()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
QSettings oldSettings(QSettings::NativeFormat, QSettings::Scope::UserScope, "Cutter", "Cutter");
|
QSettings oldSettings(QSettings::NativeFormat, QSettings::Scope::UserScope, "Cutter", "Cutter");
|
||||||
for (const QString &key : oldSettings.allKeys()) {
|
QStringList allKeys = oldSettings.allKeys();
|
||||||
|
if (allKeys.isEmpty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
qInfo() << "Migrating Settings from pre-1.8";
|
||||||
|
for (const QString &key : allKeys) {
|
||||||
newSettings.setValue(key, oldSettings.value(key));
|
newSettings.setValue(key, oldSettings.value(key));
|
||||||
}
|
}
|
||||||
oldSettings.clear();
|
oldSettings.clear();
|
||||||
QFile settingsFile(oldSettings.fileName());
|
QFile settingsFile(oldSettings.fileName());
|
||||||
settingsFile.remove();
|
settingsFile.remove();
|
||||||
|
newSettings.setValue("settings_migrated", true);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define CUTTER_SETTINGS_VERSION_CURRENT 1
|
||||||
|
#define CUTTER_SETTINGS_VERSION_KEY "version"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* How Settings migrations work:
|
||||||
|
*
|
||||||
|
* Every time settings are changed in a way that needs migration,
|
||||||
|
* CUTTER_SETTINGS_VERSION_CURRENT is raised by 1 and a function migrateSettingsToX
|
||||||
|
* is implemented and added to initializeSettings().
|
||||||
|
* This function takes care of migrating from EXACTLY version X-1 to X.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void migrateSettingsTo1(QSettings &settings) {
|
||||||
|
settings.remove("settings_migrated"); // now handled by version
|
||||||
|
settings.remove("updated_custom_themes"); // now handled by theme_version
|
||||||
|
}
|
||||||
|
|
||||||
|
static void initializeSettings()
|
||||||
|
{
|
||||||
|
QSettings::setDefaultFormat(QSettings::IniFormat);
|
||||||
|
QSettings settings;
|
||||||
|
|
||||||
|
int settingsVersion = settings.value(CUTTER_SETTINGS_VERSION_KEY, 0).toInt();
|
||||||
|
if(settingsVersion == 0) {
|
||||||
|
migrateSettingsPre18(settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(settings.allKeys().length() > 0) {
|
||||||
|
if (settingsVersion > CUTTER_SETTINGS_VERSION_CURRENT) {
|
||||||
|
qWarning() << "Settings have a higher version than current! Skipping migration.";
|
||||||
|
} else if(settingsVersion >= 0) {
|
||||||
|
for (int v = settingsVersion + 1; v <= CUTTER_SETTINGS_VERSION_CURRENT; v++) {
|
||||||
|
qInfo() << "Migrating Settings to Version" << v;
|
||||||
|
switch (v) {
|
||||||
|
case 1:
|
||||||
|
migrateSettingsTo1(settings);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
settings.setValue(CUTTER_SETTINGS_VERSION_KEY, CUTTER_SETTINGS_VERSION_CURRENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define THEME_VERSION_CURRENT 1
|
||||||
|
#define THEME_VERSION_KEY "theme_version"
|
||||||
|
|
||||||
|
static void removeObsoleteOptionsFromCustomThemes() {
|
||||||
|
const QStringList options = Core()->cmdj("ecj").object().keys()
|
||||||
|
<< ColorThemeWorker::cutterSpecificOptions;
|
||||||
|
for (auto theme : Core()->cmdList("eco*")) {
|
||||||
|
theme = theme.trimmed();
|
||||||
|
if (!ThemeWorker().isCustomTheme(theme)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
QJsonObject updatedTheme;
|
||||||
|
auto sch = ThemeWorker().getTheme(theme).object();
|
||||||
|
for (const auto& key : sch.keys()) {
|
||||||
|
if (options.contains(key)) {
|
||||||
|
updatedTheme.insert(key, sch[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ThemeWorker().save(QJsonDocument(updatedTheme), theme);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void migrateThemes()
|
||||||
|
{
|
||||||
|
QSettings settings;
|
||||||
|
int themeVersion = settings.value(THEME_VERSION_KEY, 0).toInt();
|
||||||
|
if (themeVersion != THEME_VERSION_CURRENT) {
|
||||||
|
removeObsoleteOptionsFromCustomThemes();
|
||||||
|
settings.setValue(THEME_VERSION_KEY, THEME_VERSION_CURRENT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
if (argc >= 3 && QString::fromLocal8Bit(argv[1]) == "--start-crash-handler") {
|
if (argc >= 3 && QString::fromLocal8Bit(argv[1]) == "--start-crash-handler") {
|
||||||
@ -38,39 +129,14 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
QCoreApplication::setOrganizationName("RadareOrg");
|
QCoreApplication::setOrganizationName("RadareOrg");
|
||||||
QCoreApplication::setApplicationName("Cutter");
|
QCoreApplication::setApplicationName("Cutter");
|
||||||
QSettings::setDefaultFormat(QSettings::IniFormat);
|
|
||||||
|
|
||||||
QSettings settings;
|
initializeSettings();
|
||||||
if (!settings.value("settings_migrated", false).toBool()) {
|
|
||||||
qInfo() << "Settings have not been migrated before, trying to migrate from pre-1.8 if possible.";
|
|
||||||
migrateSettings(settings);
|
|
||||||
settings.setValue("settings_migrated", true);
|
|
||||||
}
|
|
||||||
|
|
||||||
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts); // needed for QtWebEngine inside Plugins
|
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts); // needed for QtWebEngine inside Plugins
|
||||||
|
|
||||||
CutterApplication a(argc, argv);
|
CutterApplication a(argc, argv);
|
||||||
|
|
||||||
// Removes obsolete color options (highlight and highlightWord) from custom theme files
|
migrateThemes();
|
||||||
if (!settings.value("updated_custom_themes", false).toBool()) {
|
|
||||||
const QStringList options = Core()->cmdj("ecj").object().keys()
|
|
||||||
<< ColorThemeWorker::cutterSpecificOptions;
|
|
||||||
for (auto theme : Core()->cmdList("eco*")) {
|
|
||||||
theme = theme.trimmed();
|
|
||||||
if (!ThemeWorker().isCustomTheme(theme)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
QJsonObject updatedTheme;
|
|
||||||
auto sch = ThemeWorker().getTheme(theme).object();
|
|
||||||
for (auto key : sch.keys()) {
|
|
||||||
if (options.contains(key)) {
|
|
||||||
updatedTheme.insert(key, sch[key]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ThemeWorker().save(QJsonDocument(updatedTheme), theme);
|
|
||||||
}
|
|
||||||
settings.setValue("updated_custom_themes", true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Config()->getAutoUpdateEnabled()) {
|
if (Config()->getAutoUpdateEnabled()) {
|
||||||
UpdateWorker *updateWorker = new UpdateWorker;
|
UpdateWorker *updateWorker = new UpdateWorker;
|
||||||
|
Loading…
Reference in New Issue
Block a user