diff --git a/.gitignore b/.gitignore index 2389a41..78cbc5f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,8 @@ package-lock.json **/*.zip +**/*/.DS_Store + # tsc lib/ diff --git a/packages/app/src/utils/ocr.ts b/packages/app/src/utils/ocr.ts index e32b25a..7135224 100644 --- a/packages/app/src/utils/ocr.ts +++ b/packages/app/src/utils/ocr.ts @@ -23,7 +23,7 @@ export function ocr(base64: string) { const img = path.join(img_cache, uuid + '.png'); writeFile(img, base64, 'base64', () => { // 要使用 "" 去包裹路径,防止出现空格 - const cmd = [`"${path.join(getOcrFolder(), './ocr.exe')}"`, '--ocr', `"${img}"`].join(' '); + const cmd = [`".${path.join(getOcrFolder(), getOCRFileName())}"`, '--ocr', `"${img}"`].join(' '); logger.log('cmd', cmd); child_process.exec(cmd, (err, stdout, stderr) => { @@ -65,7 +65,7 @@ export function det(det_target_base64: string, det_bg_base64: string) { writeFileSync(img2, det_bg_base64, 'base64'); const cmd = [ - `"${path.join(getOcrFolder(), './ocr.exe')}"`, + `"${path.join(getOcrFolder(), getOCRFileName())}"`, '--det-target', `"${img1}"`, '--det-bg', @@ -91,5 +91,9 @@ export function det(det_target_base64: string, det_bg_base64: string) { /** 判断是否能够进行验证码识别 */ export function canOCR() { - return existsSync(path.join(getOcrFolder(), './ocr.exe')); + return existsSync(path.join(getOcrFolder(), getOCRFileName())); +} + +function getOCRFileName() { + return process.platform === 'win32' ? './ocr.exe' : './ocr'; } diff --git a/packages/common/src/api.ts b/packages/common/src/api.ts index 4424b77..97e791b 100644 --- a/packages/common/src/api.ts +++ b/packages/common/src/api.ts @@ -9,6 +9,11 @@ export interface ResourceFile { description?: string; icon?: string; homepage?: string; + platforms?: { + // eslint-disable-next-line no-undef + platform: NodeJS.Platform; + url: string; + }[]; } /** 资源组 */ diff --git a/packages/web/src/utils/remote.ts b/packages/web/src/utils/remote.ts index 58ca253..2a2d874 100644 --- a/packages/web/src/utils/remote.ts +++ b/packages/web/src/utils/remote.ts @@ -27,11 +27,12 @@ function registerRemote(eventName: string) { } function send(channel: string, args: any[]): Promise { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { ipcRenderer.once(args[0], (e: any, ...respondArgs) => { if (respondArgs[0].error) { console.log({ respondArgs, channel, args }); notify('remote 模块错误', respondArgs[0].error, 'remote', { copy: true, type: 'error' }); + reject(String(respondArgs[0].error)); } else { resolve(respondArgs[0].data); } diff --git a/packages/web/src/utils/resources.loader.ts b/packages/web/src/utils/resources.loader.ts index 70a636a..9acfb97 100644 --- a/packages/web/src/utils/resources.loader.ts +++ b/packages/web/src/utils/resources.loader.ts @@ -62,8 +62,13 @@ export class ResourceLoader { if (await remote.fs.call('existsSync', downloadPath)) { await remote.fs.call('unlinkSync', downloadPath); } + const platform = await remote.methods.call('getPlatform'); + const url = platform === 'win32' ? file.url : file.platforms?.find((p) => p.platform === platform)?.url || ''; + if (!url) { + throw new Error('资源下载失败,路径为空'); + } // 下载 - await remote.methods.call('download', 'download-file-' + file.id, file.url, downloadPath); + await remote.methods.call('download', 'download-file-' + file.id, url, downloadPath); } /** 解压资源 */ @@ -108,15 +113,19 @@ export class ResourceLoader { const files: LocalResourceFile[] = []; // @ts-ignore const groupnames: string[] = await remote.fs.call('readdirSync', this.resourceRootPath); - - for (const groupname of groupnames) { + // TODO 检测是否是文件夹,如果不是则忽略 + for (const groupname of groupnames.filter((g) => g !== '.DS_Store')) { const folder = await remote.path.call('join', this.resourceRootPath, groupname); if (await remote.fs.call('existsSync', folder)) { - // @ts-ignore - const filenames: string[] = await remote.fs.call('readdirSync', folder); - for (const filename of filenames) { - const path = await remote.path.call('join', folder, filename); - files.push({ groupname, filename, path }); + try { + // @ts-ignore + const filenames: string[] = await remote.fs.call('readdirSync', folder); + for (const filename of filenames) { + const path = await remote.path.call('join', folder, filename); + files.push({ groupname, filename, path }); + } + } catch (e) { + console.error(e); } } }