* 简化kw歌词获取 && kw歌词解密逻辑移动 将酷我歌词解密从主进程 native/IPC 方案迁移到渲染进程纯 JS 实现, 移除 kw_decodeLyric 主进程入口与 handle_kw_decode_lyric IPC 通道。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * tx歌词解密改用js实现 将 QRC 歌词的 3DES 解密由主进程 native 插件(qrc_decode.node)按原 C++ 算法 1:1 移植为渲染进程纯 JS 实现,移除 tx_decodeLyric 主进程入口、 handle_tx_decode_lyric IPC 通道,以及 build 配置中对 qrc_decode.node 的引用与各平台预构建二进制。 注意:QRC 使用的是非标准 DES 变体(S2[23]=15、S4[53]=10,标准为 14、1),新实现已逐字节对照原 native 二进制保持一致。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * update --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: lyswhut <lyswhut@qq.com>
52 lines
2.1 KiB
JavaScript
52 lines
2.1 KiB
JavaScript
const fs = require('fs')
|
|
const fsPromises = require('fs').promises
|
|
const path = require('path')
|
|
const { Arch } = require('electron-builder')
|
|
const nodeAbi = require('node-abi')
|
|
|
|
const better_sqlite3_fileNameMap = {
|
|
[Arch.x64]: 'linux-x64',
|
|
[Arch.arm64]: 'linux-arm64',
|
|
[Arch.armv7l]: 'linux-arm',
|
|
}
|
|
|
|
const replaceSqliteLib = async(electronNodeAbi, arch) => {
|
|
// console.log(await fs.readdir(path.join(context.appOutDir, './resources/')))
|
|
// if (context.electronPlatformName != 'linux' || context.arch != Arch.arm64) return
|
|
// https://github.com/lyswhut/lx-music-desktop/issues/1102
|
|
// https://github.com/lyswhut/lx-music-desktop/issues/1161
|
|
console.log('replace sqlite lib...')
|
|
const filePath = path.join(__dirname, `./lib/better_sqlite3_electron-v${electronNodeAbi}-${better_sqlite3_fileNameMap[arch]}.node`)
|
|
console.log(filePath)
|
|
const targetPath = path.join(__dirname, '../node_modules/better-sqlite3/build/Release/better_sqlite3.node')
|
|
await fsPromises.unlink(targetPath).catch(_ => _)
|
|
await fsPromises.copyFile(filePath, targetPath)
|
|
}
|
|
|
|
|
|
module.exports = async(context) => {
|
|
const { electronPlatformName, arch } = context
|
|
const electronVersion = context.packager?.info?._framework?.version ?? require('../package.json').devDependencies.electron.replace(/^[^\d]*?(\d+)/, '$1')
|
|
const electronNodeAbi = nodeAbi.getAbi(electronVersion, 'electron')
|
|
if (electronPlatformName !== 'linux' || process.env.FORCE) return
|
|
const bindingFilePath = path.join(__dirname, '../node_modules/better-sqlite3/binding.gyp')
|
|
const bindingBakFilePath = path.join(__dirname, '../node_modules/better-sqlite3/binding.gyp.bak')
|
|
switch (arch) {
|
|
case Arch.x64:
|
|
case Arch.arm64:
|
|
case Arch.armv7l:
|
|
if (fs.existsSync(bindingFilePath)) {
|
|
// console.log('rename binding file...')
|
|
await fsPromises.rename(bindingFilePath, bindingBakFilePath)
|
|
}
|
|
await replaceSqliteLib(electronNodeAbi, arch)
|
|
break
|
|
|
|
default:
|
|
if (fs.existsSync(bindingFilePath)) return
|
|
// console.log('restore binding file...')
|
|
await fsPromises.rename(bindingBakFilePath, bindingFilePath)
|
|
break
|
|
}
|
|
}
|