优化注入, 支持异常输出
parent
2ddfa5e2ab
commit
2aaa711a89
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue