summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authormsojocs2022-02-04 23:50:10 +0800
committermsojocs2022-02-04 23:50:10 +0800
commit173b879fff38ed6b763005246e0c489f3178faa9 (patch)
tree2ca26d978229c1d3ca88c0397078483d9a66c422
parent9b0b496c6cb1163a7e8aaddd2dd4c89096aabdd0 (diff)
downloadaur-173b879fff38ed6b763005246e0c489f3178faa9.tar.gz
fix: 初步修复云开发控制台
-rw-r--r--.SRCINFO10
-rw-r--r--PKGBUILD12
-rw-r--r--fix-cloudconsole.sh28
-rw-r--r--wxvpkg_pack65
-rw-r--r--wxvpkg_unpack50
5 files changed, 158 insertions, 7 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 0ff30f2c012b..72a94aefd42b 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -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
diff --git a/PKGBUILD b/PKGBUILD
index 9dc0074c0929..279500e98f5b 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -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