Compare commits
	
		
			2 Commits 
		
	
	
		
			68a773bb0c
			...
			2aaa711a89
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | 2aaa711a89 | |
|  | 2ddfa5e2ab | 
							
								
								
									
										2
									
								
								build.sh
								
								
								
								
							
							
						
						
									
										2
									
								
								build.sh
								
								
								
								
							|  | @ -4,7 +4,7 @@ if [ -d unpack ]; then | ||||||
|   sudo rm -rf unpack |   sudo rm -rf unpack | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| version="0.2.0" | version="0.3.0" | ||||||
| 
 | 
 | ||||||
| mkdir -p unpack/DEBIAN | mkdir -p unpack/DEBIAN | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| Package: python3-webengine-gtk3 | Package: python3-webengine-gtk3 | ||||||
| Version: 0.2.0 | Version: 0.3.0 | ||||||
| Section: develop | Section: develop | ||||||
| Priority: optional | Priority: optional | ||||||
| Maintainer: Yutent <yutent.io@gmail.com> | Maintainer: Yutent <yutent.io@gmail.com> | ||||||
|  |  | ||||||
|  | @ -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, 2, 0) | build = (0, 3, 0) | ||||||
| version = '.'.join(map(str, build)) | version = '.'.join(map(str, build)) | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ | ||||||
| # @date 2023/08/08 15:00:27 | # @date 2023/08/08 15:00:27 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| import os, gi | import os, gi, json | ||||||
| 
 | 
 | ||||||
| gi.require_version("WebKit2", "4.1") | gi.require_version("WebKit2", "4.1") | ||||||
| 
 | 
 | ||||||
|  | @ -15,10 +15,10 @@ class Inject: | ||||||
| 
 | 
 | ||||||
|     self.manager = webview.get_user_content_manager() |     self.manager = webview.get_user_content_manager() | ||||||
|          |          | ||||||
|     script = open(self.abspath('./inject.js'), 'r').read() |     script_data = open(self.abspath('./inject.js'), 'r').read() | ||||||
|     frame  = WebKit2.UserContentInjectedFrames.ALL_FRAMES |     frame  = WebKit2.UserContentInjectedFrames.ALL_FRAMES | ||||||
|     time   = WebKit2.UserScriptInjectionTime.END |     time   = WebKit2.UserScriptInjectionTime.END | ||||||
|     script = WebKit2.UserScript(script, frame, time, None, None) |     script = WebKit2.UserScript(script_data, frame, time, None, None) | ||||||
| 
 | 
 | ||||||
|     self.manager.add_script(script) |     self.manager.add_script(script) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -40,6 +40,14 @@ from ._inject import Inject | ||||||
| from ._utils import get_monitor_info, pixbuf_to_dict, dict_to_pixbuf | from ._utils import get_monitor_info, pixbuf_to_dict, dict_to_pixbuf | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | env = { | ||||||
|  |   "HOME_DIR": os.getenv('HOME'), | ||||||
|  |   "CONFIG_DIR": os.path.join(os.getenv('HOME'), '.config'), | ||||||
|  |   "CACHE_DIR": os.path.join(os.getenv('HOME'), '.cache') | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def noop(): | def noop(): | ||||||
|   pass |   pass | ||||||
| 
 | 
 | ||||||
|  | @ -104,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) | ||||||
| 
 | 
 | ||||||
|    |    | ||||||
|  | @ -117,21 +127,35 @@ 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: | ||||||
|  |       case 'init': | ||||||
|  |         output = env | ||||||
|  | 
 | ||||||
|       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'] | ||||||
| 
 | 
 | ||||||
|  | @ -139,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, | ||||||
|  | @ -154,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) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -320,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 | ||||||
|  | @ -195,6 +205,7 @@ Object.assign(native, { | ||||||
|     write(filepath, content = '', mode = 'w') { |     write(filepath, content = '', mode = 'w') { | ||||||
|       return handler('fs', { |       return handler('fs', { | ||||||
|         action: 'write', |         action: 'write', | ||||||
|  |         mode, | ||||||
|         append: false, |         append: false, | ||||||
|         filepath, |         filepath, | ||||||
|         content |         content | ||||||
|  | @ -203,6 +214,7 @@ Object.assign(native, { | ||||||
|     append(filepath, content = '', mode = 'w') { |     append(filepath, content = '', mode = 'w') { | ||||||
|       return handler('fs', { |       return handler('fs', { | ||||||
|         action: 'write', |         action: 'write', | ||||||
|  |         mode, | ||||||
|         append: true, |         append: true, | ||||||
|         filepath, |         filepath, | ||||||
|         content |         content | ||||||
|  | @ -389,3 +401,8 @@ Object.assign(native, { | ||||||
| 
 | 
 | ||||||
|   handler |   handler | ||||||
| }) | }) | ||||||
|  | 
 | ||||||
|  | !(async function () { | ||||||
|  |   let env = await handler('init') //.then(r => (native.env = r))
 | ||||||
|  |   native.env = env | ||||||
|  | })() | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue