增加聊天历史配置与持久化

This commit is contained in:
2026-05-30 12:39:38 +08:00
parent 46c4f6092b
commit 37b43624a7
14 changed files with 581 additions and 8 deletions
+38
View File
@@ -15,6 +15,7 @@ namespace
{
const QString AppConfigFileName = QStringLiteral("app_config.json");
const QString AIConfigFileName = QStringLiteral("ai_config.json");
const QString ConversationHistoryFileName = QStringLiteral("conversation_history.json");
QJsonObject windowObjectFromConfig(const AppConfig &config)
{
@@ -35,6 +36,16 @@ QJsonObject performanceObjectFromConfig(const AppConfig &config)
return performance;
}
QJsonObject chatObjectFromConfig(const AppConfig &config)
{
QJsonObject chat;
chat.insert(QStringLiteral("requestContextMessageLimit"), config.requestContextMessageLimit);
chat.insert(QStringLiteral("memoryHistoryMessageLimit"), config.memoryHistoryMessageLimit);
chat.insert(QStringLiteral("saveConversationHistory"), config.saveConversationHistory);
chat.insert(QStringLiteral("savedHistoryMessageLimit"), config.savedHistoryMessageLimit);
return chat;
}
QString normalizedProviderName(const QString &provider)
{
const QString normalized = provider.trimmed().toLower();
@@ -194,6 +205,27 @@ AppConfig ConfigManager::loadAppConfig() const
config.enableLazyLoad = performance.value(QStringLiteral("enableLazyLoad")).toBool(config.enableLazyLoad);
}
const QJsonObject chat = root.value(QStringLiteral("chat")).toObject();
if (chat.contains(QStringLiteral("requestContextMessageLimit")))
{
config.requestContextMessageLimit = chat.value(QStringLiteral("requestContextMessageLimit")).toInt(config.requestContextMessageLimit);
}
if (chat.contains(QStringLiteral("memoryHistoryMessageLimit")))
{
config.memoryHistoryMessageLimit = chat.value(QStringLiteral("memoryHistoryMessageLimit")).toInt(config.memoryHistoryMessageLimit);
}
if (chat.contains(QStringLiteral("saveConversationHistory")))
{
config.saveConversationHistory = chat.value(QStringLiteral("saveConversationHistory")).toBool(config.saveConversationHistory);
}
if (chat.contains(QStringLiteral("savedHistoryMessageLimit")))
{
config.savedHistoryMessageLimit = chat.value(QStringLiteral("savedHistoryMessageLimit")).toInt(config.savedHistoryMessageLimit);
}
return config;
}
@@ -280,6 +312,7 @@ bool ConfigManager::saveAppConfig(const AppConfig &config) const
QJsonObject root;
root.insert(QStringLiteral("window"), windowObjectFromConfig(config));
root.insert(QStringLiteral("performance"), performanceObjectFromConfig(config));
root.insert(QStringLiteral("chat"), chatObjectFromConfig(config));
QFile file(appConfigPath());
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
@@ -338,6 +371,11 @@ QString ConfigManager::aiConfigPath() const
return QDir(configDirectoryPath()).filePath(AIConfigFileName);
}
QString ConfigManager::conversationHistoryPath() const
{
return QDir(configDirectoryPath()).filePath(ConversationHistoryFileName);
}
QString ConfigManager::configDirectoryPath() const
{
const QString path = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);