diff options
author | msojocs | 2022-02-04 23:50:10 +0800 |
---|---|---|
committer | msojocs | 2022-02-04 23:50:10 +0800 |
commit | 173b879fff38ed6b763005246e0c489f3178faa9 (patch) | |
tree | 2ca26d978229c1d3ca88c0397078483d9a66c422 | |
parent | 9b0b496c6cb1163a7e8aaddd2dd4c89096aabdd0 (diff) | |
download | aur-173b879fff38ed6b763005246e0c489f3178faa9.tar.gz |
fix: 初步修复云开发控制台
-rw-r--r-- | .SRCINFO | 10 | ||||
-rw-r--r-- | PKGBUILD | 12 | ||||
-rw-r--r-- | fix-cloudconsole.sh | 28 | ||||
-rw-r--r-- | wxvpkg_pack | 65 | ||||
-rw-r--r-- | wxvpkg_unpack | 50 |
5 files changed, 158 insertions, 7 deletions
@@ -1,7 +1,7 @@ pkgbase = wechat-devtools pkgdesc = WeChat Devtools Linux version. pkgver = 1.05.2201240 - pkgrel = 5 + pkgrel = 6 epoch = 2 url = https://github.com/msojocs/wechat-devtools-linux arch = x86_64 @@ -18,10 +18,12 @@ pkgbase = wechat-devtools source = wechat-devtools.desktop source = fix-cli.sh source = fix-menu.sh + source = fix-cloudconsole.sh source = rebuild-modules.sh source = fix-package-name-node source = logo.svg - source = compiler.tar.xz::https://download.fastgit.org/msojocs/wechat-devtools-linux/releases/download/v0.6/compiler.tar.xz + source = wxvpkg_pack + source = wxvpkg_unpack md5sums = b6f49803c51d0abacca2d1e566c7fe19 md5sums = 85552bae33e98eb186c5068419efce03 md5sums = a4dd86296db9aa6b55b048b43182d74f @@ -29,7 +31,9 @@ pkgbase = wechat-devtools md5sums = SKIP md5sums = SKIP md5sums = SKIP + md5sums = SKIP md5sums = 88e0efe5d58444b3d39695d4fb16d61b - md5sums = c638ccefe09941372903c08ce70420c3 + md5sums = SKIP + md5sums = SKIP pkgname = wechat-devtools @@ -18,7 +18,7 @@ _node_version="v16.1.0" pkgname=wechat-devtools pkgver="${_wechat_devtools_ver}" # 主版本号 -pkgrel=5 # 次版本号release +pkgrel=6 # 次版本号release epoch=2 # 大版本迭代强制更新(维护者变更,尽量不用) pkgdesc="WeChat Devtools Linux version. " arch=("x86_64") @@ -31,10 +31,12 @@ source=("nwjs-v${_nwjs_ver}.tar.gz::https://npm.taobao.org/mirrors/nwjs/v${_nwjs "wechat-devtools.desktop" "fix-cli.sh" "fix-menu.sh" + "fix-cloudconsole.sh" "rebuild-modules.sh" "fix-package-name-node" "logo.svg" - "compiler.tar.xz::https://download.fastgit.org/msojocs/wechat-devtools-linux/releases/download/v0.6/compiler.tar.xz") + "wxvpkg_pack" + "wxvpkg_unpack") md5sums=(b6f49803c51d0abacca2d1e566c7fe19 "${_wechat_devtools_md5}" a4dd86296db9aa6b55b048b43182d74f @@ -42,8 +44,10 @@ md5sums=(b6f49803c51d0abacca2d1e566c7fe19 "SKIP" "SKIP" "SKIP" + "SKIP" 88e0efe5d58444b3d39695d4fb16d61b - c638ccefe09941372903c08ce70420c3) + "SKIP" + "SKIP") options=('!strip') prepare() { @@ -76,7 +80,7 @@ build() { export NW_VERSION=$_nwjs_ver export srcdir=$srcdir chmod 777 "${srcdir}/fix-package-name-node" - for script in fix-package-name-node fix-cli.sh fix-menu.sh rebuild-modules.sh; do + for script in fix-package-name-node fix-cli.sh fix-menu.sh fix-cloudconsole.sh rebuild-modules.sh; do _log "run ${script}" "${srcdir}/${script}" done diff --git a/fix-cloudconsole.sh b/fix-cloudconsole.sh new file mode 100644 index 000000000000..cfad0fefa278 --- /dev/null +++ b/fix-cloudconsole.sh @@ -0,0 +1,28 @@ +#!/bin/bash +echo "Fix Cloud Console" + +package_dir="$srcdir/wechat_devtools/code/package.nw" +tmp_dir=$(mktemp -d) + +# unpack 文件 到 路径 +node "$srcdir/wxvpkg_unpack" "$package_dir/core.wxvpkg" "$tmp_dir/core.wxvpkg" + + +# find +open_find_result=$( grep -lr "this.props.onWindowOpenFail());" "$tmp_dir/core.wxvpkg" ) +token_find_result=$( grep -lr "constructor(){this._sessionToken=\"\",this._tokenMap={}}" "$tmp_dir/core.wxvpkg" ) +echo "云开发控制台启动点: $open_find_result" +echo "WebSocket token存储对象位置: $token_find_result" + + +# replace +new_cb_handle="this.props.onWindowOpenFail());Object.keys(window).forEach(key=>{if(!e.window[key]){try{e.window[key]=window[key];}catch(e){console.error(e);}}});" +sed -i "s/this.props.onWindowOpenFail());/$new_cb_handle/g" $open_find_result + +new_constructor="constructor(){if(window.tokenData){/*有就直接用*/this._sessionToken=window.tokenData._sessionToken;this._tokenMap=window.tokenData._tokenMap;}else{/*没有就新建*/this._sessionToken=\"\",this._tokenMap={};window.tokenData=this;/*新建完要给中间人*/}}" +sed -i "s#constructor(){this._sessionToken=\"\",this._tokenMap={}}#$new_constructor#g" "$token_find_result" + + +# pack 路径 到 文件 +node "$srcdir/wxvpkg_pack" "$tmp_dir/core.wxvpkg" "$package_dir/core.wxvpkg" +rm -rf "$tmp_dir"
\ No newline at end of file diff --git a/wxvpkg_pack b/wxvpkg_pack new file mode 100644 index 000000000000..6918c5269eaa --- /dev/null +++ b/wxvpkg_pack @@ -0,0 +1,65 @@ +#!/usr/bin/env node + +// https://gist.github.com/chemzqm/9f2334ca201dc2fbc363fdd757aa2ed4 +const path = require('path') +const fs = require('fs') +const { execSync } = require('child_process') + +const args = process.argv.slice(2); +const from = args[0] +const to = args[1] + +let file = to +console.log(file) +if (fs.existsSync(file)) { + execSync(`rm -rf ${file}`) +} + +let fd = fs.openSync(file, 'w') +let dest = from + +function writeSync(buf, start) { + fs.writeSync(fd, buf, 0, buf.length, start) +} + +function writeInt32(number, start) { + let buf = Buffer.alloc(4) + buf.writeInt32BE(number, 0) + writeSync(buf, start) +} + +let files = fs.readdirSync(dest) +let totalCount = files.length +let buf = Buffer.alloc(4) +buf.writeInt32BE(totalCount, 0) +writeSync(buf, 14) +let start = 18 +// 12 + /name.length +let dataOffset = start +for (let file of files) { + let name = `/${file}` + let buf = Buffer.from(name, 'utf8') + dataOffset = dataOffset + 12 + buf.length +} + +for (let file of files) { + let nb = Buffer.from(`/${file}`, 'utf8') + // write filename byte length + writeInt32(nb.length, start) + start += 4 + // write filename + writeSync(nb, start) + start += nb.length + // write offset + writeInt32(dataOffset, start) + start += 4 + // write length + let contentBuf = fs.readFileSync(path.join(dest, file)) + writeInt32(contentBuf.length, start) + start += 4 + // write content + writeSync(contentBuf, dataOffset) + dataOffset += contentBuf.length +} + +fs.closeSync(fd)
\ No newline at end of file diff --git a/wxvpkg_unpack b/wxvpkg_unpack new file mode 100644 index 000000000000..14c46a56186f --- /dev/null +++ b/wxvpkg_unpack @@ -0,0 +1,50 @@ +// Extract core.wxvpkg of current folder to dest folder +const path = require('path') +const fs = require('fs') + +const args = process.argv.slice(2); +const from = args[0] +const to = args[1] + +let dest = to +fs.mkdirSync(dest, {recursive: true}) +let file = from +let fd = fs.openSync(file, 'r') + +// read buffer +function readSync(start, length) { + const n = Buffer.alloc(length); + fs.readSync(fd, n, 0, length, start) + return n +} + +const totalCount = readSync(14, 4).readInt32BE(0) +const map = {}; +let n = 18; +for (let i = 0; i < totalCount; i++) { + const e = {}; + // byte length of filename + const i = readSync(n, 4).readInt32BE(0); + n += 4; + e.name = readSync(n, i).toString(); + n += i; + e.offset = readSync(n, 4).readInt32BE(0); + n += 4; + e.length = readSync(n, 4).readInt32BE(0); + n += 4; + map[e.name] = e +} + +let created = [] +for (let item of Object.values(map)) { + let dir = path.join(dest, path.dirname(item.name)) + if (created.indexOf(dir) == -1) { + fs.mkdirSync(dir, {recursive: true}) + created.push(dir) + } + let buf = readSync(item.offset, item.length) + let filepath = path.join(dest, item.name) + fs.writeFileSync(filepath, buf.toString('utf8'), 'utf8') +} + +fs.closeSync(fd)
\ No newline at end of file |