( rewriteData: OpenlistConfigPartial = openlistInfo.openlistConfig )
| 207 | } |
| 208 | |
| 209 | async function modifyOpenlistConfig( |
| 210 | rewriteData: OpenlistConfigPartial = openlistInfo.openlistConfig |
| 211 | ) { |
| 212 | const dataDir = openlistDataDir() |
| 213 | const configPath = joinDir(dataDir, 'config.json') |
| 214 | |
| 215 | // 确保数据目录及子目录存在 |
| 216 | try { |
| 217 | await invoke('fs_make_dir', { path: dataDir }) |
| 218 | await invoke('fs_make_dir', { path: joinDir(dataDir, 'data') }) |
| 219 | await invoke('fs_make_dir', { path: joinDir(dataDir, 'log') }) |
| 220 | await invoke('fs_make_dir', { path: joinDir(dataDir, 'bleve') }) |
| 221 | } catch (e) { |
| 222 | // 目录可能已存在 |
| 223 | } |
| 224 | |
| 225 | let oldOpenlistConfig: Record<string, unknown> = {} |
| 226 | try { |
| 227 | oldOpenlistConfig = (await invoke('read_json_file', { path: configPath })) as Record< |
| 228 | string, |
| 229 | unknown |
| 230 | > |
| 231 | } catch (e) { |
| 232 | console.log('配置文件不存在或损坏,使用空配置:', e) |
| 233 | } |
| 234 | |
| 235 | // 合并配置 |
| 236 | const newOpenlistConfig = mergeObjects( |
| 237 | { ...(oldOpenlistConfig as Record<string, unknown>) } as unknown as OpenlistConfig, |
| 238 | rewriteData as OpenlistConfigPartial |
| 239 | ) as unknown as OpenlistConfig |
| 240 | |
| 241 | // 将绝对路径转换为相对路径(基于数据目录) |
| 242 | const toRelativePath = (absolutePath: string) => { |
| 243 | if (!absolutePath) return absolutePath |
| 244 | // 如果已经是相对路径,直接返回 |
| 245 | if (!isAbsolutePath(absolutePath)) { |
| 246 | return absolutePath |
| 247 | } |
| 248 | // 将路径标准化为使用正斜杠 |
| 249 | const normalizedPath = absolutePath.replace(/\\/g, '/') |
| 250 | let normalizedDataDir = dataDir.replace(/\\/g, '/') |
| 251 | // 确保数据目录以斜杠结尾,避免错误匹配 |
| 252 | if (!normalizedDataDir.endsWith('/')) { |
| 253 | normalizedDataDir += '/' |
| 254 | } |
| 255 | // 如果路径以数据目录开头,转换为相对路径 |
| 256 | if (normalizedPath.startsWith(normalizedDataDir)) { |
| 257 | const relativePath = normalizedPath.substring(normalizedDataDir.length) |
| 258 | return relativePath.startsWith('/') ? relativePath.substring(1) : relativePath |
| 259 | } |
| 260 | return absolutePath |
| 261 | } |
| 262 | |
| 263 | // 转换数据库路径为相对路径 |
| 264 | if (newOpenlistConfig.database?.db_file) { |
| 265 | newOpenlistConfig.database.db_file = toRelativePath(newOpenlistConfig.database.db_file) |
| 266 | } |
no test coverage detected