From cce0020696eba55a0d03c308270ca85205aee78f Mon Sep 17 00:00:00 2001 From: "bobo.yang" Date: Fri, 14 Jun 2024 13:24:07 +0800 Subject: [PATCH] Refactor configHandler.ts to read and write YAML configuration files --- src/handler/configHandler.ts | 55 ++++++++++++++++++++++++++++++++++ src/handler/handlerRegister.ts | 6 +++- 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/handler/configHandler.ts b/src/handler/configHandler.ts index 56d6769..cd6c2b5 100644 --- a/src/handler/configHandler.ts +++ b/src/handler/configHandler.ts @@ -2,10 +2,46 @@ Commands for handling configuration read and write */ +import * as fs from 'fs'; +import * as path from 'path'; import * as vscode from 'vscode'; +import yaml from 'yaml'; import { regInMessage, regOutMessage } from '../util/reg_messages'; import { MessageHandler } from './messageHandler'; import { DevChatConfig } from '../util/config'; +import { logger } from '../util/logger'; + + +// 读取YAML配置文件的函数 +function readYamlConfigFile(configFilePath: string): any { + try { + // 如果配置文件不存在,创建一个空文件 + if (!fs.existsSync(configFilePath)) { + fs.mkdirSync(path.dirname(configFilePath), { recursive: true }); + fs.writeFileSync(configFilePath, '', 'utf8'); + } + + const fileContents = fs.readFileSync(configFilePath, 'utf8'); + const data = yaml.parse(fileContents) || {}; + + return data; + } catch (error) { + logger.channel()?.error(`Error reading the config file: ${error}`); + logger.channel()?.show(); + return {}; + } +} + +// 写入YAML配置文件的函数 +function writeYamlConfigFile(configFilePath: string, data: any): void { + try { + const yamlStr = yaml.stringify(data); + fs.writeFileSync(configFilePath, yamlStr, 'utf8'); + } catch (error) { + logger.channel()?.error(`Error writing the config file: ${error}`); + logger.channel()?.show(); + } +} regInMessage({command: 'readConfig', key: ['A','B']}); // when key is "", it will get all config values regOutMessage({command: 'readConfig', key: ['A', 'B'], value: 'any'}); @@ -26,4 +62,23 @@ export async function writeConfig(message: any, panel: vscode.WebviewPanel|vscod } else { DevChatConfig.getInstance().set(message.key, message.value); } +} + +regInMessage({command: 'readServerConfigBase', key: ['A','B']}); // when key is "", it will get all config values +regOutMessage({command: 'readServerConfigBase', key: ['A', 'B'], value: 'any'}); +export async function readServerConfigBase(message: any, panel: vscode.WebviewPanel|vscode.WebviewView): Promise { + const serverConfigFile = path.join(process.env.HOME || process.env.USERPROFILE || '', '.chat', 'server_config.yml'); + const config = readYamlConfigFile(serverConfigFile); + if (!config) { + MessageHandler.sendMessage(panel, {command: 'readServerConfigBase', value: {}}); + } else { + MessageHandler.sendMessage(panel, {command: 'readServerConfigBase', value: config}); + } +} + +regInMessage({command: 'writeServerConfigBase', key: ['A', 'B'], value: 'any'}); // when key is "", it will rewrite all config values +export async function writeServerConfigBase(message: any, panel: vscode.WebviewPanel|vscode.WebviewView): Promise { + const serverConfigFile = path.join(process.env.HOME || process.env.USERPROFILE || '', '.chat', 'server_config.yml'); + const config = message.value; + writeYamlConfigFile(serverConfigFile, config); } \ No newline at end of file diff --git a/src/handler/handlerRegister.ts b/src/handler/handlerRegister.ts index 419a83d..6606169 100644 --- a/src/handler/handlerRegister.ts +++ b/src/handler/handlerRegister.ts @@ -15,7 +15,7 @@ import { doVscodeCommand } from './vscodeCommandHandler'; import { featureToggle, getFeatureToggles } from './featureToggleHandler'; import { readFile, writeFile } from './fileHandler'; import { getTopics, deleteTopic } from './topicHandler'; -import { readConfig, writeConfig } from './configHandler'; +import { readConfig, writeConfig, readServerConfigBase, writeServerConfigBase } from './configHandler'; import { getSetting, getUserAccessKey, getValidLlmModelList, updateSetting } from './removehandler'; @@ -86,6 +86,10 @@ messageHandler.registerHandler('deleteTopic', deleteTopic); messageHandler.registerHandler('readConfig', readConfig); messageHandler.registerHandler('writeConfig', writeConfig); +messageHandler.registerHandler('readServerConfigBase', readServerConfigBase); +messageHandler.registerHandler('writeServerConfigBase', writeServerConfigBase); + + messageHandler.registerHandler('regModelList', getValidLlmModelList); messageHandler.registerHandler('updateSetting', updateSetting); messageHandler.registerHandler('getSetting', getSetting);