优化注入, 支持异常输出

master
yutent 2023-09-04 19:11:36 +08:00
parent 2ddfa5e2ab
commit 2aaa711a89
3 changed files with 50 additions and 22 deletions

View File

@ -2,10 +2,13 @@
# @author yutent<yutent.io@gmail.com>
# @date 2023/08/31 11:55:25
from webengine.gtk3._webengine import WebEngine
from webengine.gtk3._settings import create_setting
from webengine.gtk3._hotreload import create_hmr_server
# from webengine.gtk3._webengine import WebEngine
# from webengine.gtk3._settings import create_setting
# from webengine.gtk3._hotreload import create_hmr_server
from ._webengine import WebEngine
from ._settings import create_setting
from ._hotreload import create_hmr_server
build = (0, 3, 0)
version = '.'.join(map(str, build))

View File

@ -112,8 +112,10 @@ class WebEngine(WebKit2.WebView):
im.notify_cursor_area(p.x - x, p.y - y, 0, 0) # 修正输入法跟随
def call_js(self, method, data = None):
scripts = 'native.$emit("' + method + '",' + json.dumps(data) + ')'
def call_js(self, method, data = None, err = None):
if err is not None:
err = str(err)
scripts = 'native.$emit("' + method + '", ' + json.dumps(err) + ', ' + json.dumps(data) + ')'
self.evaluate_javascript(scripts, -1)
@ -125,6 +127,7 @@ class WebEngine(WebKit2.WebView):
callback = data.get('callback')
params = data.get('data')
output = None
_error = None
match event:
@ -134,15 +137,25 @@ class WebEngine(WebKit2.WebView):
case 'fs':
filepath = params.get('filepath')
if params['action'] == 'read':
if params['action'] == 'access':
try:
with open(filepath, params.get('mode')) as file:
output = True
except Exception as err:
output = False
elif params['action'] == 'read':
try:
with open(filepath, params.get('mode')) as file:
output = file.read()
if params.get('mode').find('b') > -1:
output = list(output)
except Exception as err:
_error = err
if params['action'] == 'write':
elif params['action'] == 'write':
# 调整以支持二进制数据写入
try:
with open(filepath, params.get('mode')) as file:
buff = params['content']
@ -150,11 +163,13 @@ class WebEngine(WebKit2.WebView):
buff = bytes(buff)
output = file.write(buff)
except Exception as err:
_error = err
if params['action'] == 'exists':
elif params['action'] == 'exists':
output = os.path.exists(filepath)
if params['action'] == 'list':
elif params['action'] == 'list':
with os.scandir(filepath) as entries:
output = [{
"name": it.name,
@ -165,24 +180,24 @@ class WebEngine(WebKit2.WebView):
"mtime": int(it.stat().st_mtime),
} for it in entries]
if params['action'] == 'remove':
elif params['action'] == 'remove':
if os.path.isfile(filepath):
output = os.remove(filepath)
elif os.path.isdir(filepath):
output = os.removedirs(filename)
if params['action'] == 'rename':
elif params['action'] == 'rename':
if os.path.exists(filepath):
output = shutil.move(filepath, params['target'])
if params['action'] == 'copy':
elif params['action'] == 'copy':
if os.path.exists(filepath):
output = shutil.copy2(filepath, params['target'])
if params['action'] == 'isfile':
elif params['action'] == 'isfile':
output = os.path.isfile(filepath)
if params['action'] == 'isdir':
elif params['action'] == 'isdir':
output = os.path.isdir(filepath)
@ -331,5 +346,5 @@ class WebEngine(WebKit2.WebView):
# 有回调则返回结果
if callback:
self.call_js(callback, output)
self.call_js(callback, output, _error)

View File

@ -64,7 +64,13 @@ function handler(event, data = {}, once = true) {
if (typeof once === 'boolean') {
callback = rand()
native[once ? '$once' : '$on'](callback, _.resolve)
native[once ? '$once' : '$on'](callback, (err, res) => {
if (err) {
_.reject(err)
} else {
_.resolve(res)
}
})
} else {
_.resolve(true)
}
@ -187,6 +193,10 @@ Object.assign(native, {
return handler('quit', {}, null)
},
fs: {
access(filepath, mode = 'r') {
return handler('fs', { action: 'access', mode, filepath })
},
read(filepath, mode = 'r') {
return handler('fs', { action: 'read', mode, filepath }).then(r =>
mode.includes('b') ? new Uint8Array(r) : r