增加文件操作
parent
018c18a1ed
commit
98023484cf
|
@ -1 +1,2 @@
|
|||
__pycache__
|
||||
*.txt
|
30
inject.js
30
inject.js
|
@ -186,7 +186,35 @@ Object.assign(native, {
|
|||
return handler('quit', {}, null)
|
||||
},
|
||||
fs: {
|
||||
read(filepath) {}
|
||||
read(filepath) {
|
||||
return handler('fs', { action: 'read', filepath })
|
||||
},
|
||||
write(filepath, content = '', append = false) {
|
||||
return handler('fs', {
|
||||
action: 'write',
|
||||
filepath,
|
||||
content,
|
||||
append
|
||||
})
|
||||
},
|
||||
exists(filepath) {
|
||||
return handler('fs', { action: 'exists', filepath })
|
||||
},
|
||||
isfile(filepath) {
|
||||
return handler('fs', { action: 'isfile', filepath })
|
||||
},
|
||||
isdir(filepath) {
|
||||
return handler('fs', { action: 'isdir', filepath })
|
||||
},
|
||||
remove(filepath) {
|
||||
return handler('fs', { action: 'remove', filepath })
|
||||
},
|
||||
rename(filepath, target) {
|
||||
return handler('fs', { action: 'rename', filepath, target })
|
||||
},
|
||||
copy(filepath, target) {
|
||||
return handler('fs', { action: 'copy', filepath, target })
|
||||
}
|
||||
},
|
||||
image(filepath) {
|
||||
return handler('image', { value: filepath }).then(r => new NativeImage(r))
|
||||
|
|
53
main.py
53
main.py
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
import gi, json, os
|
||||
import gi, json, os, shutil
|
||||
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
|
@ -173,7 +173,48 @@ class WebKitWindow(Gtk.Window):
|
|||
|
||||
match event:
|
||||
case 'fs':
|
||||
pass
|
||||
filepath = params['filepath']
|
||||
if params['action'] == 'read':
|
||||
file = open(filepath)
|
||||
output = file.read()
|
||||
|
||||
if params['action'] == 'write':
|
||||
try:
|
||||
file = open(filepath, 'a' if params['append'] else 'w')
|
||||
output = file.write(params['content'])
|
||||
finally:
|
||||
if file:
|
||||
file.close()
|
||||
|
||||
if params['action'] == 'exists':
|
||||
output = os.path.exists(filepath)
|
||||
|
||||
if params['action'] == 'list':
|
||||
file = open(filepath)
|
||||
output = file.read()
|
||||
|
||||
if 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':
|
||||
if os.path.exists(filepath):
|
||||
output = shutil.move(filepath, params['target'])
|
||||
|
||||
if params['action'] == 'copy':
|
||||
if os.path.exists(filepath):
|
||||
output = shutil.copy2(filepath, params['target'])
|
||||
|
||||
if params['action'] == 'isfile':
|
||||
output = os.path.isfile(filepath)
|
||||
|
||||
if params['action'] == 'isdir':
|
||||
output = os.path.isdir(filepath)
|
||||
|
||||
|
||||
|
||||
|
||||
case 'clipboard':
|
||||
# 读文本
|
||||
|
@ -304,14 +345,6 @@ class WebKitWindow(Gtk.Window):
|
|||
output = self.is_visible()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
case _:
|
||||
output = {"foo": 123, "bar": (11,22,33)}
|
||||
# 有回调则返回结果
|
||||
if callback :
|
||||
self.call_js(callback, output)
|
||||
|
|
|
@ -10,7 +10,8 @@ import { html, css, Component } from 'wkit'
|
|||
class App extends Component {
|
||||
static props = {
|
||||
input: '',
|
||||
img: ''
|
||||
img: '',
|
||||
content: ''
|
||||
}
|
||||
|
||||
static styles = css`
|
||||
|
@ -28,7 +29,7 @@ class App extends Component {
|
|||
|
||||
<a target="_blank" href="about:blank">打开控制台</a>
|
||||
|
||||
<div class="output">loading...</div>
|
||||
<div class="output">${this.content || 'loading...'}</div>
|
||||
|
||||
<input value=${this.input} />
|
||||
|
||||
|
@ -50,6 +51,35 @@ class App extends Component {
|
|||
>
|
||||
unregisterall
|
||||
</button>
|
||||
<button
|
||||
@click=${async function () {
|
||||
let data = await native.fs.read('/code/gtk/webkit/demo.txt')
|
||||
console.log(data)
|
||||
this.content = data
|
||||
}}
|
||||
>
|
||||
cat file
|
||||
</button>
|
||||
<button
|
||||
@click=${async function () {
|
||||
await native.fs.write(
|
||||
'/code/gtk/webkit/demo.txt',
|
||||
'hello world 222\n'
|
||||
)
|
||||
}}
|
||||
>
|
||||
echo >> file
|
||||
</button>
|
||||
<button
|
||||
@click=${async function () {
|
||||
await native.fs.copy(
|
||||
'/code/gtk/webkit/demo3.txt',
|
||||
'/code/gtk/webkit/demo2.txt'
|
||||
)
|
||||
}}
|
||||
>
|
||||
rename
|
||||
</button>
|
||||
<img style="width:100px;border:1px solid #09f;" src=${this.img} />
|
||||
<textarea @paste=${this.pasteImg}></textarea>
|
||||
`
|
||||
|
|
Reference in New Issue