Simplified JSON option reading

This commit is contained in:
Eric Kotato 2020-02-29 05:05:06 +03:00
parent d70c1312c3
commit 2bdc5d5822

View file

@ -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;
} }