Browse Source

fix(settings): Heal invalid ToxPk saved to Personal Settings

Fix #6506
reviewable/pr6507/r11
Anthony Bilinski 3 years ago
parent
commit
dd9524085f
No known key found for this signature in database
GPG Key ID: 2AA8E0DA1B31FB3C
  1. 24
      src/persistence/personalsettingsupgrader.cpp
  2. 2
      src/persistence/settings.cpp

24
src/persistence/personalsettingsupgrader.cpp

@ -18,11 +18,33 @@
*/ */
#include "personalsettingsupgrader.h" #include "personalsettingsupgrader.h"
#include "settingsserializer.h"
#include "src/core/toxpk.h"
#include <QDebug> #include <QDebug>
#include <cassert> #include <cassert>
namespace {
bool version0to1(SettingsSerializer& ps)
{
ps.beginGroup("Friends");
{
int size = ps.beginReadArray("Friend");
for (int i = 0; i < size; i++) {
ps.setArrayIndex(i);
const auto oldFriendAddr = ps.value("addr").toString();
auto newFriendAddr = oldFriendAddr.left(ToxPk::numHexChars);
ps.setValue("addr", newFriendAddr);
}
ps.endArray();
}
ps.endGroup();
return true;
}
} // namespace
bool PersonalSettingsUpgrader::doUpgrade(SettingsSerializer& settingsSerializer, int fromVer, int toVer) bool PersonalSettingsUpgrader::doUpgrade(SettingsSerializer& settingsSerializer, int fromVer, int toVer)
{ {
if (fromVer == toVer) { if (fromVer == toVer) {
@ -37,7 +59,7 @@ bool PersonalSettingsUpgrader::doUpgrade(SettingsSerializer& settingsSerializer,
} }
using SettingsUpgradeFn = bool (*)(SettingsSerializer&); using SettingsUpgradeFn = bool (*)(SettingsSerializer&);
std::vector<SettingsUpgradeFn> upgradeFns = {}; std::vector<SettingsUpgradeFn> upgradeFns = {version0to1};
assert(fromVer < static_cast<int>(upgradeFns.size())); assert(fromVer < static_cast<int>(upgradeFns.size()));
assert(toVer == static_cast<int>(upgradeFns.size())); assert(toVer == static_cast<int>(upgradeFns.size()));

2
src/persistence/settings.cpp

@ -65,7 +65,7 @@ Settings* Settings::settings{nullptr};
CompatibleRecursiveMutex Settings::bigLock; CompatibleRecursiveMutex Settings::bigLock;
QThread* Settings::settingsThread{nullptr}; QThread* Settings::settingsThread{nullptr};
static constexpr int GLOBAL_SETTINGS_VERSION = 1; static constexpr int GLOBAL_SETTINGS_VERSION = 1;
static constexpr int PERSONAL_SETTINGS_VERSION = 0; static constexpr int PERSONAL_SETTINGS_VERSION = 1;
Settings::Settings() Settings::Settings()
: loaded(false) : loaded(false)

Loading…
Cancel
Save