feat: add reminder scheduling and sound controls

This commit is contained in:
2026-06-01 21:01:11 +08:00
parent 4a7b739eea
commit c794e32023
36 changed files with 2494 additions and 35 deletions
+31
View File
@@ -11,6 +11,7 @@
#include <QJsonParseError>
#include <QJsonValue>
#include <QStandardPaths>
#include <QtGlobal>
namespace
{
@@ -57,6 +58,15 @@ QJsonObject characterObjectFromConfig(const AppConfig &config)
return character;
}
QJsonObject reminderObjectFromConfig(const AppConfig &config)
{
QJsonObject reminder;
reminder.insert(QStringLiteral("soundId"), config.reminderSoundId);
reminder.insert(QStringLiteral("soundEnabled"), config.reminderSoundEnabled);
reminder.insert(QStringLiteral("soundVolume"), qBound(0.0, config.reminderSoundVolume, 1.0));
return reminder;
}
QString normalizedProviderName(const QString &provider)
{
const QString normalized = provider.trimmed().toLower();
@@ -258,6 +268,26 @@ AppConfig ConfigManager::loadAppConfig() const
config.characterId = character.value(QStringLiteral("id")).toString(config.characterId).trimmed();
}
const QJsonObject reminder = root.value(QStringLiteral("reminder")).toObject();
if (reminder.contains(QStringLiteral("soundId")))
{
config.reminderSoundId = reminder.value(QStringLiteral("soundId")).toString(config.reminderSoundId).trimmed();
if (config.reminderSoundId.isEmpty())
{
config.reminderSoundId = QStringLiteral("reminder_default");
}
}
if (reminder.contains(QStringLiteral("soundEnabled")))
{
config.reminderSoundEnabled = reminder.value(QStringLiteral("soundEnabled")).toBool(config.reminderSoundEnabled);
}
if (reminder.contains(QStringLiteral("soundVolume")))
{
config.reminderSoundVolume = qBound(0.0, reminder.value(QStringLiteral("soundVolume")).toDouble(config.reminderSoundVolume), 1.0);
}
return config;
}
@@ -346,6 +376,7 @@ bool ConfigManager::saveAppConfig(const AppConfig &config) const
root.insert(QStringLiteral("performance"), performanceObjectFromConfig(config));
root.insert(QStringLiteral("chat"), chatObjectFromConfig(config));
root.insert(QStringLiteral("character"), characterObjectFromConfig(config));
root.insert(QStringLiteral("reminder"), reminderObjectFromConfig(config));
QFile file(appConfigPath());
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate))