Initial clean project import

This commit is contained in:
cat-shark
2026-06-19 18:41:41 +08:00
commit a13b804c7a
1306 changed files with 220568 additions and 0 deletions
+119
View File
@@ -0,0 +1,119 @@
#!/usr/bin/env node
/**
* 导出系统模板配置脚本
* 从数据库导出所有系统模板配置到 system-templates.json
*
* 使用方法:
* node scripts/export-system-templates.js
*/
const fs = require('fs');
const path = require('path');
const Database = require('better-sqlite3');
async function exportSystemTemplates() {
console.log('📦 开始导出系统模板配置...\n');
try {
// 确定数据库路径
let dbPath;
const possiblePaths = [
path.join(__dirname, '../userData/data.db'),
path.join(__dirname, '../data.db'),
path.join(process.env.APPDATA || process.env.HOME, 'zhenqianba/data.db'),
];
for (const tryPath of possiblePaths) {
if (fs.existsSync(tryPath)) {
dbPath = tryPath;
console.log(`✅ 找到数据库: ${dbPath}\n`);
break;
}
}
if (!dbPath) {
console.error('❌ 未找到数据库文件,请确保应用已启动过一次');
console.error('尝试的路径:', possiblePaths);
process.exit(1);
}
// 打开数据库
const db = new Database(dbPath, { readonly: true });
// 导出字幕模板
console.log('1️⃣ 导出字幕模板...');
const subtitleTemplates = db.prepare(`
SELECT id, name, description, config, is_system, readonly, created_at, updated_at
FROM subtitle_templates
WHERE is_system = 1
ORDER BY created_at ASC
`).all();
const subtitleTemplatesFormatted = subtitleTemplates.map(t => ({
id: t.id,
name: t.name,
description: t.description,
isSystem: Boolean(t.is_system),
readonly: Boolean(t.readonly),
createdAt: t.created_at,
config: typeof t.config === 'string' ? JSON.parse(t.config) : t.config
}));
console.log(` ✅ 导出 ${subtitleTemplatesFormatted.length} 个字幕模板`);
// 导出封面模板
console.log('\n2️⃣ 导出封面模板...');
const coverTemplates = db.prepare(`
SELECT id, name, description, config, thumbnail_path, is_system, readonly, created_at, updated_at
FROM cover_templates
WHERE is_system = 1
ORDER BY created_at ASC
`).all();
const coverTemplatesFormatted = coverTemplates.map(t => ({
id: t.id,
name: t.name,
description: t.description,
is_system: t.is_system,
readonly: Boolean(t.readonly),
config: typeof t.config === 'string' ? JSON.parse(t.config) : t.config,
thumbnailPath: t.thumbnail_path,
createdAt: t.created_at
}));
console.log(` ✅ 导出 ${coverTemplatesFormatted.length} 个封面模板`);
// 生成配置对象
const systemTemplatesConfig = {
version: "1.0.0",
description: "系统内置模板配置 - 包含8套字幕模板和8套封面模板(开发模式可编辑,生产模式只读)",
timestamp: new Date().toISOString(),
subtitleTemplates: subtitleTemplatesFormatted,
coverTemplates: coverTemplatesFormatted
};
// 保存到文件
const configPath = path.join(__dirname, '../electron/config/system-templates.json');
fs.writeFileSync(
configPath,
JSON.stringify(systemTemplatesConfig, null, 2),
'utf-8'
);
console.log(`\n✅ 配置已保存到: ${configPath}`);
console.log(` - 字幕模板: ${subtitleTemplatesFormatted.length}`);
console.log(` - 封面模板: ${coverTemplatesFormatted.length}`);
console.log(` - 文件大小: ${(fs.statSync(configPath).size / 1024).toFixed(2)} KB`);
db.close();
console.log('\n✨ 导出完成!');
process.exit(0);
} catch (error) {
console.error('\n❌ 导出失败:', error.message);
console.error(error);
process.exit(1);
}
}
exportSystemTemplates();