|
|
@@ -9,6 +9,7 @@ const path = require('path');
|
|
|
const CoreWindow = require('ee-core/electron/window');
|
|
|
const { BrowserWindow, Menu,app } = require('electron');
|
|
|
const { spawn } = require('child_process');
|
|
|
+const Log = require('ee-core/log');
|
|
|
|
|
|
const { readConfigFile } = require('../utils/config');
|
|
|
const configDeault = readConfigFile();
|
|
|
@@ -388,6 +389,127 @@ class UtilsController extends Controller {
|
|
|
pyPath:pyPath,
|
|
|
}
|
|
|
}
|
|
|
+ // 字体管理相关方法
|
|
|
+ async downloadFont(args, event) {
|
|
|
+ try {
|
|
|
+ console.log('🔤 IPC downloadFont called with args:', args, 'event:', event)
|
|
|
+ const { url, fontName } = args;
|
|
|
+ console.log('🔤 IPC downloadFont parsed:', { url, fontName })
|
|
|
+ Log.info('downloadFontdownloadFontdownloadFontdownloadFont:', url, fontName)
|
|
|
+ const https = require('https');
|
|
|
+ const http = require('http');
|
|
|
+ const fs = require('fs');
|
|
|
+ const path = require('path');
|
|
|
+ const crypto = require('crypto');
|
|
|
+
|
|
|
+ // 获取字体缓存目录
|
|
|
+ const userDataPath = app.getPath('userData');
|
|
|
+ const fontCacheDir = path.join(userDataPath, 'fonts');
|
|
|
+
|
|
|
+ // 确保字体缓存目录存在
|
|
|
+ if (!fs.existsSync(fontCacheDir)) {
|
|
|
+ fs.mkdirSync(fontCacheDir, { recursive: true });
|
|
|
+ }
|
|
|
+
|
|
|
+ // 生成字体文件名(使用URL的哈希值避免文件名冲突)
|
|
|
+ const urlHash = crypto.createHash('md5').update(url).digest('hex').substring(0, 8);
|
|
|
+ const fontFileName = `${fontName.replace(/[^a-zA-Z0-9]/g, '_')}_${urlHash}.ttf`;
|
|
|
+ const localFontPath = path.join(fontCacheDir, fontFileName);
|
|
|
+
|
|
|
+ // 检查本地是否已有字体文件
|
|
|
+ if (fs.existsSync(localFontPath)) {
|
|
|
+ console.log('字体已存在:', localFontPath);
|
|
|
+ return { success: true, path: localFontPath };
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log('开始下载字体:', fontName, '到:', localFontPath);
|
|
|
+
|
|
|
+ // 下载字体文件
|
|
|
+ const protocol = url.startsWith('https:') ? https : http;
|
|
|
+
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ const request = protocol.get(url, (response) => {
|
|
|
+ if (response.statusCode !== 200) {
|
|
|
+ reject(new Error(`Failed to download font: ${response.statusCode}`));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ const fileStream = fs.createWriteStream(localFontPath);
|
|
|
+ response.pipe(fileStream);
|
|
|
+
|
|
|
+ fileStream.on('finish', () => {
|
|
|
+ fileStream.close();
|
|
|
+ console.log('字体下载完成:', localFontPath);
|
|
|
+ resolve({ success: true, path: localFontPath });
|
|
|
+ });
|
|
|
+
|
|
|
+ fileStream.on('error', (error) => {
|
|
|
+ fs.unlinkSync(localFontPath); // 删除失败的文件
|
|
|
+ reject(error);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ request.on('error', (error) => {
|
|
|
+ reject(error);
|
|
|
+ });
|
|
|
+
|
|
|
+ // 设置超时
|
|
|
+ request.setTimeout(30000, () => {
|
|
|
+ request.abort();
|
|
|
+ reject(new Error('Font download timeout'));
|
|
|
+ });
|
|
|
+ });
|
|
|
+ } catch (error) {
|
|
|
+ Log.info('downloadFont Error:', error);
|
|
|
+ return { success: false, error: error.message };
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async loadFontFromCache(args, event) {
|
|
|
+ try {
|
|
|
+ const { fontName, fontUrl } = args;
|
|
|
+ const fs = require('fs');
|
|
|
+ const path = require('path');
|
|
|
+ const crypto = require('crypto');
|
|
|
+
|
|
|
+ // 获取字体缓存目录
|
|
|
+ const userDataPath = app.getPath('userData');
|
|
|
+ const fontCacheDir = path.join(userDataPath, 'fonts');
|
|
|
+
|
|
|
+ // 生成字体文件名
|
|
|
+ const urlHash = crypto.createHash('md5').update(fontUrl).digest('hex').substring(0, 8);
|
|
|
+ const fontFileName = `${fontName.replace(/[^a-zA-Z0-9]/g, '_')}_${urlHash}.ttf`;
|
|
|
+ const localFontPath = path.join(fontCacheDir, fontFileName);
|
|
|
+
|
|
|
+ // 检查本地是否已有字体文件
|
|
|
+ if (fs.existsSync(localFontPath)) {
|
|
|
+ // 读取字体文件内容并转换为base64
|
|
|
+ const fontData = fs.readFileSync(localFontPath);
|
|
|
+ const base64Data = fontData.toString('base64');
|
|
|
+ const dataUrl = `data:font/ttf;base64,${base64Data}`;
|
|
|
+
|
|
|
+ return { success: true, dataUrl, path: localFontPath };
|
|
|
+ }
|
|
|
+
|
|
|
+ return { success: false, message: 'Font not found in cache' };
|
|
|
+ } catch (error) {
|
|
|
+ console.error('从缓存加载字体失败:', error);
|
|
|
+ return { success: false, error: error.message };
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ getFontCachePath(args, event) {
|
|
|
+ const path = require('path');
|
|
|
+ const userDataPath = app.getPath('userData');
|
|
|
+ return path.join(userDataPath, 'fonts');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 测试方法
|
|
|
+ async testIPC(args, event) {
|
|
|
+ console.log('🧪 IPC test method called:', args)
|
|
|
+ return { success: true, message: 'IPC is working', args }
|
|
|
+ }
|
|
|
+
|
|
|
async readFileImageForPath(filePath,maxWidth=1500){
|
|
|
|
|
|
const getMimeType = (fileName)=>{
|