feat(oss-browser-link): 实现一键注册+自动定位补丁功能
1. 新增oss-browser自动定位包装层脚本与注册批处理 2. 优化粘贴行为:焦点在输入框时交给浏览器默认粘贴 3. 新增一批调试与构建辅助脚本 4. 更新oss-browser下载页说明与步骤
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
// Trae-Toolbox oss-browser 包装层(resources/app/main.js)
|
||||
// 作用:启动时读取 exe 同目录 trae_default_oss_path.txt(第1行 oss 路径,第2行可选 region),
|
||||
// 并从本机 ~/Toolbox_local_creds.env.local 读取 DOC_CLOUD_KEEPER_OSS_* 凭据(运行时读取,零硬编码),
|
||||
// 注入渲染进程:写入 AuthInfo 并补丁 $rootScope.currentAuthInfo / bucketMap,
|
||||
// 使 oss-browser 每次启动即以有效账号登录、地址栏自动定位到默认目录;
|
||||
// 随后原样交接给官方 app.asar 内的 main.js,不改动官方包任何字节。
|
||||
// 卸载:删除 resources\app 目录与 trae_default_oss_path.txt 即恢复原版。
|
||||
const { app } = require('electron')
|
||||
const fs = require('fs')
|
||||
const os = require('os')
|
||||
const path = require('path')
|
||||
|
||||
const readDefaultConfig = () => {
|
||||
const cfg = { target: '', region: 'oss-cn-shanghai', id: '', secret: '' }
|
||||
try {
|
||||
const p = path.join(path.dirname(process.execPath), 'trae_default_oss_path.txt')
|
||||
if (fs.existsSync(p)) {
|
||||
const lines = String(fs.readFileSync(p, 'utf8')).split(/\r?\n/).map(l => l.trim()).filter(Boolean)
|
||||
if (lines[0] && lines[0].indexOf('oss://') === 0) cfg.target = lines[0]
|
||||
if (lines[1] && /^oss-[a-z0-9-]+$/.test(lines[1])) cfg.region = lines[1]
|
||||
}
|
||||
} catch (e) {}
|
||||
try {
|
||||
const p = path.join(os.homedir(), 'Toolbox_local_creds.env.local')
|
||||
if (fs.existsSync(p)) {
|
||||
const text = String(fs.readFileSync(p, 'utf8'))
|
||||
for (const line of text.split(/\r?\n/)) {
|
||||
const t = line.trim()
|
||||
if (!t || t.startsWith('#')) continue
|
||||
const eq = t.indexOf('=')
|
||||
if (eq <= 0) continue
|
||||
const k = t.slice(0, eq).trim()
|
||||
const v = t.slice(eq + 1).trim()
|
||||
if (k === 'DOC_CLOUD_KEEPER_OSS_ACCESS_KEY_ID') cfg.id = v
|
||||
if (k === 'DOC_CLOUD_KEEPER_OSS_ACCESS_KEY_SECRET') cfg.secret = v
|
||||
}
|
||||
}
|
||||
} catch (e) {}
|
||||
return cfg
|
||||
}
|
||||
|
||||
const CFG = readDefaultConfig()
|
||||
|
||||
if (CFG.target) {
|
||||
const credPatch = (CFG.id && CFG.secret)
|
||||
? { id: CFG.id, secret: CFG.secret, eptpl: 'https://{region}.aliyuncs.com' }
|
||||
: null
|
||||
const injection =
|
||||
'(function () {' +
|
||||
' var TARGET = ' + JSON.stringify(CFG.target) + ';' +
|
||||
' var REGION = ' + JSON.stringify(CFG.region) + ';' +
|
||||
' var CRED = ' + JSON.stringify(credPatch) + ';' +
|
||||
' var BUCKET = TARGET.split("/")[2];' +
|
||||
' var seeded = false;' +
|
||||
' var broadcasts = 0;' +
|
||||
' var tries = 0;' +
|
||||
' var timer = setInterval(function () {' +
|
||||
' tries++;' +
|
||||
' if (tries > 80) { clearInterval(timer); return; }' +
|
||||
' try {' +
|
||||
' var ng = window.angular;' +
|
||||
' if (!ng) return;' +
|
||||
' var el = document.querySelector("[ng-app]") || document.documentElement;' +
|
||||
' var inj = ng.element(el).injector();' +
|
||||
' if (!inj) return;' +
|
||||
' if (!seeded) {' +
|
||||
' seeded = true;' +
|
||||
' var patch = { osspath: TARGET, address: TARGET, region: REGION };' +
|
||||
' if (CRED) { patch.id = CRED.id; patch.secret = CRED.secret; patch.eptpl = CRED.eptpl; }' +
|
||||
' inj.get("AuthInfo").saveToAuthInfo(patch);' +
|
||||
' var rs = inj.get("$rootScope");' +
|
||||
' rs.currentAuthInfo = rs.currentAuthInfo || {};' +
|
||||
' for (var k in patch) { rs.currentAuthInfo[k] = patch[k]; }' +
|
||||
' rs.internalSupported = false;' +
|
||||
' rs.bucketMap = rs.bucketMap || {};' +
|
||||
' rs.bucketMap[BUCKET] = { region: REGION };' +
|
||||
' }' +
|
||||
' if (broadcasts < 8) { broadcasts++; inj.get("$rootScope").$broadcast("goToOssAddress", TARGET); }' +
|
||||
' else { clearInterval(timer); }' +
|
||||
' } catch (e) {}' +
|
||||
' }, 500);' +
|
||||
'})();'
|
||||
|
||||
app.on('web-contents-created', function (event, contents) {
|
||||
contents.on('did-finish-load', function () {
|
||||
try { contents.executeJavaScript(injection) } catch (e) {}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 交接给官方 oss-browser 主进程逻辑
|
||||
try {
|
||||
require(path.join(__dirname, '..', 'app.asar', 'main.js'))
|
||||
} catch (e) {
|
||||
try {
|
||||
require('electron').dialog.showErrorBox(
|
||||
'oss-browser 包装层错误',
|
||||
String((e && e.message) || e) + '\n如需恢复原版,请删除 resources\\app 目录。'
|
||||
)
|
||||
} catch (e2) {}
|
||||
}
|
||||
Reference in New Issue
Block a user