优化注入, 支持异常输出
parent
2ddfa5e2ab
commit
2aaa711a89
|
@ -2,10 +2,13 @@
|
||||||
# @author yutent<yutent.io@gmail.com>
|
# @author yutent<yutent.io@gmail.com>
|
||||||
# @date 2023/08/31 11:55:25
|
# @date 2023/08/31 11:55:25
|
||||||
|
|
||||||
from webengine.gtk3._webengine import WebEngine
|
# from webengine.gtk3._webengine import WebEngine
|
||||||
from webengine.gtk3._settings import create_setting
|
# from webengine.gtk3._settings import create_setting
|
||||||
from webengine.gtk3._hotreload import create_hmr_server
|
# 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)
|
build = (0, 3, 0)
|
||||||
version = '.'.join(map(str, build))
|
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) # 修正输入法跟随
|
im.notify_cursor_area(p.x - x, p.y - y, 0, 0) # 修正输入法跟随
|
||||||
|
|
||||||
|
|
||||||
def call_js(self, method, data = None):
|
def call_js(self, method, data = None, err = None):
|
||||||
scripts = 'native.$emit("' + method + '",' + json.dumps(data) + ')'
|
if err is not None:
|
||||||
|
err = str(err)
|
||||||
|
scripts = 'native.$emit("' + method + '", ' + json.dumps(err) + ', ' + json.dumps(data) + ')'
|
||||||
self.evaluate_javascript(scripts, -1)
|
self.evaluate_javascript(scripts, -1)
|
||||||
|
|
||||||
|
|
||||||
|
@ -125,6 +127,7 @@ class WebEngine(WebKit2.WebView):
|
||||||
callback = data.get('callback')
|
callback = data.get('callback')
|
||||||
params = data.get('data')
|
params = data.get('data')
|
||||||
output = None
|
output = None
|
||||||
|
_error = None
|
||||||
|
|
||||||
|
|
||||||
match event:
|
match event:
|
||||||
|
@ -134,15 +137,25 @@ class WebEngine(WebKit2.WebView):
|
||||||
case 'fs':
|
case 'fs':
|
||||||
filepath = params.get('filepath')
|
filepath = params.get('filepath')
|
||||||
|
|
||||||
if params['action'] == 'read':
|
if params['action'] == 'access':
|
||||||
with open(filepath, params.get('mode')) as file:
|
try:
|
||||||
output = file.read()
|
with open(filepath, params.get('mode')) as file:
|
||||||
if params.get('mode').find('b') > -1:
|
output = True
|
||||||
output = list(output)
|
except Exception as err:
|
||||||
|
output = False
|
||||||
|
|
||||||
if params['action'] == 'write':
|
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
|
||||||
|
|
||||||
|
elif params['action'] == 'write':
|
||||||
|
# 调整以支持二进制数据写入
|
||||||
|
try:
|
||||||
with open(filepath, params.get('mode')) as file:
|
with open(filepath, params.get('mode')) as file:
|
||||||
buff = params['content']
|
buff = params['content']
|
||||||
|
|
||||||
|
@ -150,11 +163,13 @@ class WebEngine(WebKit2.WebView):
|
||||||
buff = bytes(buff)
|
buff = bytes(buff)
|
||||||
|
|
||||||
output = file.write(buff)
|
output = file.write(buff)
|
||||||
|
except Exception as err:
|
||||||
|
_error = err
|
||||||
|
|
||||||
if params['action'] == 'exists':
|
elif params['action'] == 'exists':
|
||||||
output = os.path.exists(filepath)
|
output = os.path.exists(filepath)
|
||||||
|
|
||||||
if params['action'] == 'list':
|
elif params['action'] == 'list':
|
||||||
with os.scandir(filepath) as entries:
|
with os.scandir(filepath) as entries:
|
||||||
output = [{
|
output = [{
|
||||||
"name": it.name,
|
"name": it.name,
|
||||||
|
@ -165,24 +180,24 @@ class WebEngine(WebKit2.WebView):
|
||||||
"mtime": int(it.stat().st_mtime),
|
"mtime": int(it.stat().st_mtime),
|
||||||
} for it in entries]
|
} for it in entries]
|
||||||
|
|
||||||
if params['action'] == 'remove':
|
elif params['action'] == 'remove':
|
||||||
if os.path.isfile(filepath):
|
if os.path.isfile(filepath):
|
||||||
output = os.remove(filepath)
|
output = os.remove(filepath)
|
||||||
elif os.path.isdir(filepath):
|
elif os.path.isdir(filepath):
|
||||||
output = os.removedirs(filename)
|
output = os.removedirs(filename)
|
||||||
|
|
||||||
if params['action'] == 'rename':
|
elif params['action'] == 'rename':
|
||||||
if os.path.exists(filepath):
|
if os.path.exists(filepath):
|
||||||
output = shutil.move(filepath, params['target'])
|
output = shutil.move(filepath, params['target'])
|
||||||
|
|
||||||
if params['action'] == 'copy':
|
elif params['action'] == 'copy':
|
||||||
if os.path.exists(filepath):
|
if os.path.exists(filepath):
|
||||||
output = shutil.copy2(filepath, params['target'])
|
output = shutil.copy2(filepath, params['target'])
|
||||||
|
|
||||||
if params['action'] == 'isfile':
|
elif params['action'] == 'isfile':
|
||||||
output = os.path.isfile(filepath)
|
output = os.path.isfile(filepath)
|
||||||
|
|
||||||
if params['action'] == 'isdir':
|
elif params['action'] == 'isdir':
|
||||||
output = os.path.isdir(filepath)
|
output = os.path.isdir(filepath)
|
||||||
|
|
||||||
|
|
||||||
|
@ -331,5 +346,5 @@ class WebEngine(WebKit2.WebView):
|
||||||
|
|
||||||
# 有回调则返回结果
|
# 有回调则返回结果
|
||||||
if callback:
|
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') {
|
if (typeof once === 'boolean') {
|
||||||
callback = rand()
|
callback = rand()
|
||||||
native[once ? '$once' : '$on'](callback, _.resolve)
|
native[once ? '$once' : '$on'](callback, (err, res) => {
|
||||||
|
if (err) {
|
||||||
|
_.reject(err)
|
||||||
|
} else {
|
||||||
|
_.resolve(res)
|
||||||
|
}
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
_.resolve(true)
|
_.resolve(true)
|
||||||
}
|
}
|
||||||
|
@ -187,6 +193,10 @@ Object.assign(native, {
|
||||||
return handler('quit', {}, null)
|
return handler('quit', {}, null)
|
||||||
},
|
},
|
||||||
fs: {
|
fs: {
|
||||||
|
access(filepath, mode = 'r') {
|
||||||
|
return handler('fs', { action: 'access', mode, filepath })
|
||||||
|
},
|
||||||
|
|
||||||
read(filepath, mode = 'r') {
|
read(filepath, mode = 'r') {
|
||||||
return handler('fs', { action: 'read', mode, filepath }).then(r =>
|
return handler('fs', { action: 'read', mode, filepath }).then(r =>
|
||||||
mode.includes('b') ? new Uint8Array(r) : r
|
mode.includes('b') ? new Uint8Array(r) : r
|
||||||
|
|
Loading…
Reference in New Issue