Simplified JSON option reading
This commit is contained in:
parent
d70c1312c3
commit
2bdc5d5822
1 changed files with 141 additions and 107 deletions
|
|
@ -67,6 +67,70 @@ void WriteDefaultCustomFile() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ReadOption(QJsonObject obj, QString key, std::function<void(QJsonValue)> callback) {
|
||||||
|
const auto it = obj.constFind(key);
|
||||||
|
if (it == obj.constEnd()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
callback(*it);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadObjectOption(QJsonObject obj, QString key, std::function<void(QJsonObject)> callback) {
|
||||||
|
auto readResult = false;
|
||||||
|
auto readValueResult = ReadOption(obj, key, [&](QJsonValue v) {
|
||||||
|
if (v.isObject()) {
|
||||||
|
callback(v.toObject());
|
||||||
|
readResult = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return (readValueResult && readResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadArrayOption(QJsonObject obj, QString key, std::function<void(QJsonArray)> callback) {
|
||||||
|
auto readResult = false;
|
||||||
|
auto readValueResult = ReadOption(obj, key, [&](QJsonValue v) {
|
||||||
|
if (v.isArray()) {
|
||||||
|
callback(v.toArray());
|
||||||
|
readResult = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return (readValueResult && readResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadStringOption(QJsonObject obj, QString key, std::function<void(QString)> callback) {
|
||||||
|
auto readResult = false;
|
||||||
|
auto readValueResult = ReadOption(obj, key, [&](QJsonValue v) {
|
||||||
|
if (v.isString()) {
|
||||||
|
callback(v.toString());
|
||||||
|
readResult = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return (readValueResult && readResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadIntOption(QJsonObject obj, QString key, std::function<void(int)> callback) {
|
||||||
|
auto readResult = false;
|
||||||
|
auto readValueResult = ReadOption(obj, key, [&](QJsonValue v) {
|
||||||
|
if (v.isDouble()) {
|
||||||
|
callback(v.toInt());
|
||||||
|
readResult = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return (readValueResult && readResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ReadBoolOption(QJsonObject obj, QString key, std::function<void(bool)> callback) {
|
||||||
|
auto readResult = false;
|
||||||
|
auto readValueResult = ReadOption(obj, key, [&](QJsonValue v) {
|
||||||
|
if (v.isBool()) {
|
||||||
|
callback(v.toBool());
|
||||||
|
readResult = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return (readValueResult && readResult);
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<Manager> Data;
|
std::unique_ptr<Manager> Data;
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
@ -121,80 +185,64 @@ bool Manager::readCustomFile() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto settingsFontsIt = settings.constFind(qsl("fonts"));
|
ReadObjectOption(settings, "fonts", [&](auto o) {
|
||||||
|
ReadStringOption(o, "main", [&](auto v) {
|
||||||
|
cSetMainFont(v);
|
||||||
|
});
|
||||||
|
|
||||||
if (settingsFontsIt != settings.constEnd() && (*settingsFontsIt).isObject()) {
|
ReadStringOption(o, "semibold", [&](auto v) {
|
||||||
const auto settingsFonts = (*settingsFontsIt).toObject();
|
cSetSemiboldFont(v);
|
||||||
|
});
|
||||||
|
|
||||||
const auto settingsFontsMain = settingsFonts.constFind(qsl("main"));
|
ReadBoolOption(o, "semibold_is_bold", [&](auto v) {
|
||||||
if (settingsFontsMain != settingsFonts.constEnd() && (*settingsFontsMain).isString()) {
|
cSetSemiboldFontIsBold(v);
|
||||||
cSetMainFont((*settingsFontsMain).toString());
|
});
|
||||||
|
|
||||||
|
ReadStringOption(o, "monospaced", [&](auto v) {
|
||||||
|
cSetMonospaceFont(v);
|
||||||
|
});
|
||||||
|
|
||||||
|
ReadBoolOption(o, "use_system_font", [&](auto v) {
|
||||||
|
cSetUseSystemFont(v);
|
||||||
|
});
|
||||||
|
|
||||||
|
ReadBoolOption(o, "use_original_metrics", [&](auto v) {
|
||||||
|
cSetUseOriginalMetrics(v);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
ReadIntOption(settings, "sticker_height", [&](auto v) {
|
||||||
|
if (v >= 64 || v <= 256) {
|
||||||
|
SetStickerHeight(v);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const auto settingsFontsSemibold = settingsFonts.constFind(qsl("semibold"));
|
auto isAdaptiveBubblesSet = ReadBoolOption(settings, "adaptive_bubbles", [&](auto v) {
|
||||||
if (settingsFontsSemibold != settingsFonts.constEnd() && (*settingsFontsSemibold).isString()) {
|
SetAdaptiveBubbles(v);
|
||||||
cSetSemiboldFont((*settingsFontsSemibold).toString());
|
});
|
||||||
}
|
|
||||||
|
|
||||||
const auto settingsFontsSemiboldIsBold = settingsFonts.constFind(qsl("semibold_is_bold"));
|
if (!isAdaptiveBubblesSet) {
|
||||||
if (settingsFontsSemiboldIsBold != settingsFonts.constEnd() && (*settingsFontsSemiboldIsBold).isBool()) {
|
ReadBoolOption(settings, "adaptive_baloons", [&](auto v) {
|
||||||
cSetSemiboldFontIsBold((*settingsFontsSemiboldIsBold).toBool());
|
SetAdaptiveBubbles(v);
|
||||||
}
|
});
|
||||||
|
|
||||||
const auto settingsFontsMonospace = settingsFonts.constFind(qsl("monospaced"));
|
|
||||||
if (settingsFontsMonospace != settingsFonts.constEnd() && (*settingsFontsMonospace).isString()) {
|
|
||||||
cSetMonospaceFont((*settingsFontsMonospace).toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto settingsFontsUseSystemFont = settingsFonts.constFind(qsl("use_system_font"));
|
|
||||||
if (settingsFontsUseSystemFont != settingsFonts.constEnd() && (*settingsFontsUseSystemFont).isBool()) {
|
|
||||||
cSetUseSystemFont((*settingsFontsUseSystemFont).toBool());
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto settingsFontsUseOriginalMetrics = settingsFonts.constFind(qsl("use_original_metrics"));
|
|
||||||
if (settingsFontsUseOriginalMetrics != settingsFonts.constEnd() && (*settingsFontsUseOriginalMetrics).isBool()) {
|
|
||||||
cSetUseOriginalMetrics((*settingsFontsUseOriginalMetrics).toBool());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto settingsStickerHeightIt = settings.constFind(qsl("sticker_height"));
|
ReadBoolOption(settings, "big_emoji_outline", [&](auto v) {
|
||||||
if (settingsStickerHeightIt != settings.constEnd()) {
|
SetBigEmojiOutline(v);
|
||||||
const auto settingsStickerHeight = (*settingsStickerHeightIt).toInt();
|
});
|
||||||
if (settingsStickerHeight >= 64 || settingsStickerHeight <= 256) {
|
|
||||||
SetStickerHeight(settingsStickerHeight);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto settingsAdaptiveBubblesIt = settings.constFind(qsl("adaptive_bubbles"));
|
ReadBoolOption(settings, "always_show_scheduled", [&](auto v) {
|
||||||
if (settingsAdaptiveBubblesIt != settings.constEnd() && (*settingsAdaptiveBubblesIt).isBool()) {
|
cSetAlwaysShowScheduled(v);
|
||||||
SetAdaptiveBubbles((*settingsAdaptiveBubblesIt).toBool());
|
});
|
||||||
} else {
|
|
||||||
const auto settingsAdaptiveBaloonsIt = settings.constFind(qsl("adaptive_baloons"));
|
|
||||||
if (settingsAdaptiveBaloonsIt != settings.constEnd() && (*settingsAdaptiveBaloonsIt).isBool()) {
|
|
||||||
SetAdaptiveBubbles((*settingsAdaptiveBaloonsIt).toBool());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto settingsBigEmojiOutlineIt = settings.constFind(qsl("big_emoji_outline"));
|
ReadBoolOption(settings, "show_chat_id", [&](auto v) {
|
||||||
if (settingsBigEmojiOutlineIt != settings.constEnd() && (*settingsBigEmojiOutlineIt).isBool()) {
|
cSetShowChatId(v);
|
||||||
SetBigEmojiOutline((*settingsBigEmojiOutlineIt).toBool());
|
});
|
||||||
}
|
|
||||||
|
|
||||||
const auto settingsAlwaysShowScheduledIt = settings.constFind(qsl("always_show_scheduled"));
|
ReadOption(settings, "net_speed_boost", [&](auto v) {
|
||||||
if (settingsAlwaysShowScheduledIt != settings.constEnd() && (*settingsAlwaysShowScheduledIt).isBool()) {
|
if (v.isString()) {
|
||||||
cSetAlwaysShowScheduled((*settingsAlwaysShowScheduledIt).toBool());
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto settingsShowChatIdIt = settings.constFind(qsl("show_chat_id"));
|
const auto option = v.toString();
|
||||||
if (settingsShowChatIdIt != settings.constEnd() && (*settingsShowChatIdIt).isBool()) {
|
|
||||||
cSetShowChatId((*settingsShowChatIdIt).toBool());
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto settingsNetSpeedIt = settings.constFind(qsl("net_speed_boost"));
|
|
||||||
if (settingsNetSpeedIt != settings.constEnd()) {
|
|
||||||
if ((*settingsNetSpeedIt).isString()) {
|
|
||||||
|
|
||||||
const auto option = (*settingsNetSpeedIt).toString();
|
|
||||||
if (option == "high") {
|
if (option == "high") {
|
||||||
SetNetworkBoost(3);
|
SetNetworkBoost(3);
|
||||||
} else if (option == "medium") {
|
} else if (option == "medium") {
|
||||||
|
|
@ -205,49 +253,40 @@ bool Manager::readCustomFile() {
|
||||||
SetNetworkBoost(0);
|
SetNetworkBoost(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if ((*settingsNetSpeedIt).isNull()) {
|
} else if (v.isNull()) {
|
||||||
SetNetworkBoost(0);
|
SetNetworkBoost(0);
|
||||||
} else if ((*settingsNetSpeedIt).isDouble()) {
|
} else if (v.isDouble()) {
|
||||||
SetNetworkBoost((*settingsNetSpeedIt).toInt());
|
SetNetworkBoost(v.toInt());
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
const auto settingsShowDrawerPhoneIt = settings.constFind(qsl("show_phone_in_drawer"));
|
ReadBoolOption(settings, "show_phone_in_drawer", [&](auto v) {
|
||||||
if (settingsShowDrawerPhoneIt != settings.constEnd() && (*settingsShowDrawerPhoneIt).isBool()) {
|
cSetShowPhoneInDrawer(v);
|
||||||
cSetShowPhoneInDrawer((*settingsShowDrawerPhoneIt).toBool());
|
});
|
||||||
}
|
|
||||||
|
|
||||||
const auto settingsScalesIt = settings.constFind(qsl("scales"));
|
ReadArrayOption(settings, "scales", [&](auto v) {
|
||||||
if (settingsScalesIt != settings.constEnd() && (*settingsScalesIt).isArray()) {
|
|
||||||
const auto settingsScalesArray = (*settingsScalesIt).toArray();
|
|
||||||
ClearCustomScales();
|
ClearCustomScales();
|
||||||
for (auto i = settingsScalesArray.constBegin(), e = settingsScalesArray.constEnd(); i != e; ++i) {
|
for (auto i = v.constBegin(), e = v.constEnd(); i != e; ++i) {
|
||||||
if (!(*i).isDouble()) {
|
if (!(*i).isDouble()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
AddCustomScale((*i).toInt());
|
AddCustomScale((*i).toInt());
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
}
|
ReadIntOption(settings, "chat_list_lines", [&](auto v) {
|
||||||
|
if (v >= 1 || v <= 2) {
|
||||||
const auto settingsChatListLinesIt = settings.constFind(qsl("chat_list_lines"));
|
SetDialogListLines(v);
|
||||||
if (settingsChatListLinesIt != settings.constEnd()) {
|
|
||||||
const auto settingsChatListLines = (*settingsChatListLinesIt).toInt();
|
|
||||||
if (settingsChatListLines >= 1 || settingsChatListLines <= 2) {
|
|
||||||
SetDialogListLines(settingsChatListLines);
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
const auto settingsDisableUpEditIt = settings.constFind(qsl("disable_up_edit"));
|
ReadBoolOption(settings, "disable_up_edit", [&](auto v) {
|
||||||
if (settingsDisableUpEditIt != settings.constEnd() && (*settingsDisableUpEditIt).isBool()) {
|
cSetDisableUpEdit(v);
|
||||||
cSetDisableUpEdit((*settingsDisableUpEditIt).toBool());
|
});
|
||||||
}
|
|
||||||
|
|
||||||
const auto settingsReplacesIt = settings.constFind(qsl("replaces"));
|
ReadArrayOption(settings, "scales", [&](auto v) {
|
||||||
if (settingsReplacesIt != settings.constEnd() && (*settingsReplacesIt).isArray()) {
|
for (auto i = v.constBegin(), e = v.constEnd(); i != e; ++i) {
|
||||||
const auto settingsReplacesArray = (*settingsReplacesIt).toArray();
|
|
||||||
for (auto i = settingsReplacesArray.constBegin(), e = settingsReplacesArray.constEnd(); i != e; ++i) {
|
|
||||||
if (!(*i).isArray()) {
|
if (!(*i).isArray()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -263,26 +302,21 @@ bool Manager::readCustomFile() {
|
||||||
AddCustomReplace(from, to);
|
AddCustomReplace(from, to);
|
||||||
Ui::AddCustomReplacement(from, to);
|
Ui::AddCustomReplacement(from, to);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
}
|
ReadBoolOption(settings, "confirm_before_calls", [&](auto v) {
|
||||||
|
cSetConfirmBeforeCall(v);
|
||||||
|
});
|
||||||
|
|
||||||
const auto settingsCallConfirmIt = settings.constFind(qsl("confirm_before_calls"));
|
ReadBoolOption(settings, "no_taskbar_flash", [&](auto v) {
|
||||||
if (settingsCallConfirmIt != settings.constEnd() && (*settingsCallConfirmIt).isBool()) {
|
cSetNoTaskbarFlashing(v);
|
||||||
cSetConfirmBeforeCall((*settingsCallConfirmIt).toBool());
|
});
|
||||||
}
|
|
||||||
|
|
||||||
const auto settingsNoTaskbarFlashing = settings.constFind(qsl("no_taskbar_flash"));
|
ReadIntOption(settings, "recent_stickers_limit", [&](auto v) {
|
||||||
if (settingsNoTaskbarFlashing != settings.constEnd() && (*settingsNoTaskbarFlashing).isBool()) {
|
if (v >= 0 || v <= 200) {
|
||||||
cSetNoTaskbarFlashing((*settingsNoTaskbarFlashing).toBool());
|
SetRecentStickersLimit(v);
|
||||||
}
|
|
||||||
|
|
||||||
const auto settingsRecentStickersLimitIt = settings.constFind(qsl("recent_stickers_limit"));
|
|
||||||
if (settingsRecentStickersLimitIt != settings.constEnd()) {
|
|
||||||
const auto settingsRecentStickersLimit = (*settingsRecentStickersLimitIt).toInt();
|
|
||||||
if (settingsRecentStickersLimit >= 0 || settingsRecentStickersLimit <= 200) {
|
|
||||||
SetRecentStickersLimit(settingsRecentStickersLimit);
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue