mirror of
https://github.com/antos-rde/antosdk-apps.git
synced 2024-12-24 19:28:21 +01:00
Update apps categories
This commit is contained in:
parent
3ff8f1a6eb
commit
ada4358d61
@ -5,6 +5,9 @@ It is used to show the change logs of the current AntOS version
|
||||
|
||||
## Change logs
|
||||
|
||||
### v0.0.7-a
|
||||
* Change app category to Utility
|
||||
|
||||
### v0.0.6-a
|
||||
* Use README page available on github
|
||||
|
||||
|
@ -5,6 +5,9 @@ It is used to show the change logs of the current AntOS version
|
||||
|
||||
## Change logs
|
||||
|
||||
### v0.0.7-a
|
||||
* Change app category to Utility
|
||||
|
||||
### v0.0.6-a
|
||||
* Use README page available on github
|
||||
|
||||
|
@ -6,8 +6,8 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "xsang.le@gmail.com"
|
||||
},
|
||||
"version":"0.0.6-a",
|
||||
"category":"Other",
|
||||
"version":"0.0.7-a",
|
||||
"category":"Utility",
|
||||
"iconclass":"fa fa-question-circle",
|
||||
"mimes":["none"],
|
||||
"locales": {
|
||||
|
Binary file not shown.
@ -6,8 +6,8 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "xsang.le@gmail.com"
|
||||
},
|
||||
"version":"0.0.6-a",
|
||||
"category":"Other",
|
||||
"version":"0.0.7-a",
|
||||
"category":"Utility",
|
||||
"iconclass":"fa fa-question-circle",
|
||||
"mimes":["none"],
|
||||
"locales": {
|
||||
|
@ -9,6 +9,9 @@ Small application for zip file manager
|
||||
|
||||
## Changle log
|
||||
|
||||
### v0.0.2-a
|
||||
* Change category to utility
|
||||
|
||||
### v0.0.2-a
|
||||
* Adapt to the new AntOS string API
|
||||
|
||||
|
@ -9,6 +9,9 @@ Small application for zip file manager
|
||||
|
||||
## Changle log
|
||||
|
||||
### v0.0.2-a
|
||||
* Change category to utility
|
||||
|
||||
### v0.0.2-a
|
||||
* Adapt to the new AntOS string API
|
||||
|
||||
|
@ -7,8 +7,8 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "mrsang@lxsang.me"
|
||||
},
|
||||
"version":"0.0.2-a",
|
||||
"category":"Other",
|
||||
"version":"0.0.3-a",
|
||||
"category":"Utility",
|
||||
"iconclass":"fa fa-archive",
|
||||
"mimes":["application/zip"],
|
||||
"locale": {}
|
||||
|
Binary file not shown.
@ -7,8 +7,8 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "mrsang@lxsang.me"
|
||||
},
|
||||
"version":"0.0.2-a",
|
||||
"category":"Other",
|
||||
"version":"0.0.3-a",
|
||||
"category":"Utility",
|
||||
"iconclass":"fa fa-archive",
|
||||
"mimes":["application/zip"],
|
||||
"locale": {}
|
||||
|
@ -3,6 +3,8 @@ A back-end tool for my online document hub [https://doc.iohub.dev/antos/](https:
|
||||
|
||||
|
||||
## Change logs
|
||||
### v0.2.3-a
|
||||
* Chage app category name
|
||||
### v0.2.1-a
|
||||
* Chage libraries load order
|
||||
### v0.2.1-a
|
||||
|
@ -1,8 +1,10 @@
|
||||
# Booklet
|
||||
A back-end tool for my online document hub [https://doc.iohub.dev/antos/](https://doc.iohub.dev/antos/)
|
||||
A back-end tool for my online document hub [https://doc.iohub.dev/antos/](https://doc.iohub.dev/)
|
||||
|
||||
|
||||
## Change logs
|
||||
### v0.2.3-a
|
||||
* Chage app category name
|
||||
### v0.2.1-a
|
||||
* Chage libraries load order
|
||||
### v0.2.1-a
|
||||
@ -23,4 +25,4 @@ A back-end tool for my online document hub [https://doc.iohub.dev/antos/](https:
|
||||
|
||||
### v0.0.2-a
|
||||
* First public release
|
||||
*
|
||||
*
|
||||
|
@ -6,9 +6,9 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "mrsang@lxsang.me"
|
||||
},
|
||||
"version":"0.2.2-a",
|
||||
"category":"Other",
|
||||
"iconclass":"fa fa-adn",
|
||||
"version":"0.2.3-a",
|
||||
"category":"Office",
|
||||
"iconclass":"bi bi-journals",
|
||||
"dependencies": ["SimpleMDE@1.11.2-r","Katex@0.11.1-r"],
|
||||
"mimes":["dir"]
|
||||
}
|
Binary file not shown.
@ -6,9 +6,9 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "mrsang@lxsang.me"
|
||||
},
|
||||
"version":"0.2.2-a",
|
||||
"category":"Other",
|
||||
"iconclass":"fa fa-adn",
|
||||
"version":"0.2.3-a",
|
||||
"category":"Office",
|
||||
"iconclass":"bi bi-journals",
|
||||
"dependencies": ["SimpleMDE@1.11.2-r","Katex@0.11.1-r"],
|
||||
"mimes":["dir"]
|
||||
}
|
@ -6,6 +6,7 @@ Clipper use `html2canvas` to capture AntOS desktop or a specific window.
|
||||
It is able to crop the captured image before saving to a file
|
||||
|
||||
## Change logs
|
||||
* v0.1.3-a change app category
|
||||
* v0.1.2-a use ALT-S as global shortcut for screen capture
|
||||
* v0.1.1-a use CTRL-S as global shortcut for screen capture
|
||||
* v0.1.0-a initial version
|
||||
|
@ -6,6 +6,7 @@ Clipper use `html2canvas` to capture AntOS desktop or a specific window.
|
||||
It is able to crop the captured image before saving to a file
|
||||
|
||||
## Change logs
|
||||
* v0.1.3-a change app category
|
||||
* v0.1.2-a use ALT-S as global shortcut for screen capture
|
||||
* v0.1.1-a use CTRL-S as global shortcut for screen capture
|
||||
* v0.1.0-a initial version
|
||||
|
@ -6,8 +6,8 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "xsang.le@gmail.com"
|
||||
},
|
||||
"version":"0.1.2-a",
|
||||
"category":"Other",
|
||||
"version":"0.1.3-a",
|
||||
"category":"Utility",
|
||||
"iconclass":"fa fa-scissors",
|
||||
"mimes":["none"],
|
||||
"locale": {}
|
||||
|
Binary file not shown.
@ -6,8 +6,8 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "xsang.le@gmail.com"
|
||||
},
|
||||
"version":"0.1.2-a",
|
||||
"category":"Other",
|
||||
"version":"0.1.3-a",
|
||||
"category":"Utility",
|
||||
"iconclass":"fa fa-scissors",
|
||||
"mimes":["none"],
|
||||
"locale": {}
|
||||
|
@ -7,9 +7,9 @@
|
||||
"author": "",
|
||||
"edsdmail": ""
|
||||
},
|
||||
"version":"0.1.2-a",
|
||||
"category":"Other",
|
||||
"iconclass":"fa fa-adn",
|
||||
"version":"0.1.3-a",
|
||||
"category":"Development",
|
||||
"iconclass":"bi bi-file-diff-fill",
|
||||
"mimes":["none"],
|
||||
"dependencies":["AceDiff@3.0.3-r"],
|
||||
"locale": {}
|
||||
|
Binary file not shown.
@ -7,9 +7,9 @@
|
||||
"author": "",
|
||||
"edsdmail": ""
|
||||
},
|
||||
"version":"0.1.2-a",
|
||||
"category":"Other",
|
||||
"iconclass":"fa fa-adn",
|
||||
"version":"0.1.3-a",
|
||||
"category":"Development",
|
||||
"iconclass":"bi bi-file-diff-fill",
|
||||
"mimes":["none"],
|
||||
"dependencies":["AceDiff@3.0.3-r"],
|
||||
"locale": {}
|
||||
|
@ -2,6 +2,7 @@
|
||||
Simple PDF document manager
|
||||
|
||||
## Change logs
|
||||
- v0.0.7-a: Change category and icon
|
||||
- v0.0.6-a: Add print dialog (support server side printing)
|
||||
- v0.0.5-a: Fix delete file bug
|
||||
- v0.0.4-a: Display file size in entry meta-data
|
||||
|
@ -2,6 +2,7 @@
|
||||
Simple PDF document manager
|
||||
|
||||
## Change logs
|
||||
- v0.0.7-a: Change category and icon
|
||||
- v0.0.6-a: Add print dialog (support server side printing)
|
||||
- v0.0.5-a: Fix delete file bug
|
||||
- v0.0.4-a: Display file size in entry meta-data
|
||||
|
File diff suppressed because one or more lines are too long
@ -7,9 +7,9 @@
|
||||
"author": "",
|
||||
"email": ""
|
||||
},
|
||||
"version":"0.0.6-a",
|
||||
"category":"Other",
|
||||
"iconclass":"fa fa-adn",
|
||||
"version":"0.0.7-a",
|
||||
"category":"Office",
|
||||
"iconclass":"bi bi-collection-fill",
|
||||
"mimes":["none"],
|
||||
"locale": {}
|
||||
}
|
Binary file not shown.
@ -7,9 +7,9 @@
|
||||
"author": "",
|
||||
"email": ""
|
||||
},
|
||||
"version":"0.0.6-a",
|
||||
"category":"Other",
|
||||
"iconclass":"fa fa-adn",
|
||||
"version":"0.0.7-a",
|
||||
"category":"Office",
|
||||
"iconclass":"bi bi-collection-fill",
|
||||
"mimes":["none"],
|
||||
"locale": {}
|
||||
}
|
15
Dockman/README.md
Normal file
15
Dockman/README.md
Normal file
@ -0,0 +1,15 @@
|
||||
# Dockman
|
||||
This is an example project, generated by AntOS Development Kit
|
||||
|
||||
## Howto
|
||||
Use the CodePad command palette to access to the SDK functionalities:
|
||||
|
||||
1. Create new project
|
||||
2. Init the project from the current folder located in side bar
|
||||
3. Build and run the project
|
||||
4. Release the project in zip package
|
||||
|
||||
## Set up build target
|
||||
|
||||
Open the `project.json` file from the current project tree and add/remove
|
||||
build target entries. Save the file
|
141
Dockman/api.lua
Normal file
141
Dockman/api.lua
Normal file
@ -0,0 +1,141 @@
|
||||
local args=...
|
||||
|
||||
local handle = {}
|
||||
|
||||
local result = function(data)
|
||||
return { error = false, result = data }
|
||||
end
|
||||
|
||||
local error = function(msg)
|
||||
return {error = msg, result = false}
|
||||
end
|
||||
|
||||
local exec = function(host, rcmd, decode)
|
||||
local user = SESSION.user
|
||||
if not user then return nil end
|
||||
local cmd = "ssh -tt "..user.."@"..host.." "..rcmd
|
||||
if decode then
|
||||
cmd = cmd.." --format \\'{{json .}}\\'"
|
||||
end
|
||||
local f = assert(io.popen(cmd, 'r'))
|
||||
local s = assert(f:read('*a'))
|
||||
f:close()
|
||||
if decode then
|
||||
s = s:gsub('[\n\r]+', ',')
|
||||
return JSON.decodeString("["..s.."null]")
|
||||
else
|
||||
return s
|
||||
end
|
||||
end
|
||||
|
||||
handle.list_image = function(data)
|
||||
local res = exec(data.host, "docker image ls", true)
|
||||
if not res then
|
||||
return error("Unable to fetch image list")
|
||||
end
|
||||
-- inspect images
|
||||
for i,v in ipairs(res) do
|
||||
v.Detail = exec(data.host, "docker image inspect "..v.ID, true)[1]
|
||||
v.text = v.Detail.RepoTags[1]
|
||||
if not v.text or v.text == "" then
|
||||
v.text = v.ID
|
||||
end
|
||||
end
|
||||
return result(res)
|
||||
end
|
||||
|
||||
handle.list_container = function(data)
|
||||
local res = exec(data.host, "docker ps -a -f ancestor="..data.image, true)
|
||||
if not res then
|
||||
return error("Unable to fetch container list")
|
||||
end
|
||||
for i,v in ipairs(res) do
|
||||
v.Detail = exec(data.host, "docker container inspect "..v.ID, true)[1]
|
||||
v.text = v.Names
|
||||
|
||||
if v.Detail.State.Running then
|
||||
v.iconclass = "fa fa-circle running"
|
||||
else
|
||||
v.iconclass = "fa fa-circle stop"
|
||||
end
|
||||
end
|
||||
return result(res)
|
||||
end
|
||||
|
||||
handle.run_container = function(data)
|
||||
local res = exec(data.host, "docker start "..data.id, false)
|
||||
res = res:gsub('[\n\r]+', '')
|
||||
if res == data.id then
|
||||
return result("OK")
|
||||
else
|
||||
return error(res)
|
||||
end
|
||||
end
|
||||
|
||||
handle.pull_image = function(data)
|
||||
local res = exec(data.host, "docker pull "..data.image, false)
|
||||
return result(std.b64encode(res))
|
||||
end
|
||||
|
||||
|
||||
handle.rm_image = function(data)
|
||||
local res = exec(data.host, "docker rmi "..data.id.."; sleep 2", false)
|
||||
return result(res)
|
||||
end
|
||||
|
||||
handle.create_container = function(data)
|
||||
local cmd = "docker run "
|
||||
for k,v in pairs(data.parameters) do
|
||||
k = k:gsub(" ", "")
|
||||
if k:len() == 1 then
|
||||
cmd = cmd.." -"..k.." \""..v.."\" "
|
||||
else
|
||||
if k:match("^e_.*") then
|
||||
cmd = cmd.." -e \""..k:gsub("e_","").."="..v.."\" "
|
||||
else
|
||||
cmd = cmd.." --"..k
|
||||
if v ~= "" then
|
||||
cmd = cmd.."=\""..v.."\" "
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
cmd = cmd.."--detach=true "..data.image
|
||||
|
||||
local res = exec(data.host, cmd, false)
|
||||
return result(res)
|
||||
end
|
||||
|
||||
handle.stop_container = function(data)
|
||||
local res = exec(data.host, "docker stop "..data.id, false)
|
||||
res = res:gsub('[\n\r]+', '')
|
||||
if res == data.id then
|
||||
return result("OK")
|
||||
else
|
||||
return error(res)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
handle.rm_container = function(data)
|
||||
local res = exec(data.host, "docker stop "..data.id, false)
|
||||
res = res:gsub('[\n\r]+', '')
|
||||
if res == data.id then
|
||||
local res = exec(data.host, "docker rm "..data.id, false)
|
||||
res = res:gsub('[\n\r]+', '')
|
||||
if res == data.id then
|
||||
return result("OK")
|
||||
else
|
||||
error(res)
|
||||
end
|
||||
else
|
||||
return error(res)
|
||||
end
|
||||
end
|
||||
|
||||
if args.action and handle[args.action] then
|
||||
return handle[args.action](args.args)
|
||||
else
|
||||
return error("Invalid action parameter")
|
||||
end
|
15
Dockman/build/debug/README.md
Normal file
15
Dockman/build/debug/README.md
Normal file
@ -0,0 +1,15 @@
|
||||
# Dockman
|
||||
This is an example project, generated by AntOS Development Kit
|
||||
|
||||
## Howto
|
||||
Use the CodePad command palette to access to the SDK functionalities:
|
||||
|
||||
1. Create new project
|
||||
2. Init the project from the current folder located in side bar
|
||||
3. Build and run the project
|
||||
4. Release the project in zip package
|
||||
|
||||
## Set up build target
|
||||
|
||||
Open the `project.json` file from the current project tree and add/remove
|
||||
build target entries. Save the file
|
141
Dockman/build/debug/api.lua
Normal file
141
Dockman/build/debug/api.lua
Normal file
@ -0,0 +1,141 @@
|
||||
local args=...
|
||||
|
||||
local handle = {}
|
||||
|
||||
local result = function(data)
|
||||
return { error = false, result = data }
|
||||
end
|
||||
|
||||
local error = function(msg)
|
||||
return {error = msg, result = false}
|
||||
end
|
||||
|
||||
local exec = function(host, rcmd, decode)
|
||||
local user = SESSION.user
|
||||
if not user then return nil end
|
||||
local cmd = "ssh -tt "..user.."@"..host.." "..rcmd
|
||||
if decode then
|
||||
cmd = cmd.." --format \\'{{json .}}\\'"
|
||||
end
|
||||
local f = assert(io.popen(cmd, 'r'))
|
||||
local s = assert(f:read('*a'))
|
||||
f:close()
|
||||
if decode then
|
||||
s = s:gsub('[\n\r]+', ',')
|
||||
return JSON.decodeString("["..s.."null]")
|
||||
else
|
||||
return s
|
||||
end
|
||||
end
|
||||
|
||||
handle.list_image = function(data)
|
||||
local res = exec(data.host, "docker image ls", true)
|
||||
if not res then
|
||||
return error("Unable to fetch image list")
|
||||
end
|
||||
-- inspect images
|
||||
for i,v in ipairs(res) do
|
||||
v.Detail = exec(data.host, "docker image inspect "..v.ID, true)[1]
|
||||
v.text = v.Detail.RepoTags[1]
|
||||
if not v.text or v.text == "" then
|
||||
v.text = v.ID
|
||||
end
|
||||
end
|
||||
return result(res)
|
||||
end
|
||||
|
||||
handle.list_container = function(data)
|
||||
local res = exec(data.host, "docker ps -a -f ancestor="..data.image, true)
|
||||
if not res then
|
||||
return error("Unable to fetch container list")
|
||||
end
|
||||
for i,v in ipairs(res) do
|
||||
v.Detail = exec(data.host, "docker container inspect "..v.ID, true)[1]
|
||||
v.text = v.Names
|
||||
|
||||
if v.Detail.State.Running then
|
||||
v.iconclass = "fa fa-circle running"
|
||||
else
|
||||
v.iconclass = "fa fa-circle stop"
|
||||
end
|
||||
end
|
||||
return result(res)
|
||||
end
|
||||
|
||||
handle.run_container = function(data)
|
||||
local res = exec(data.host, "docker start "..data.id, false)
|
||||
res = res:gsub('[\n\r]+', '')
|
||||
if res == data.id then
|
||||
return result("OK")
|
||||
else
|
||||
return error(res)
|
||||
end
|
||||
end
|
||||
|
||||
handle.pull_image = function(data)
|
||||
local res = exec(data.host, "docker pull "..data.image, false)
|
||||
return result(std.b64encode(res))
|
||||
end
|
||||
|
||||
|
||||
handle.rm_image = function(data)
|
||||
local res = exec(data.host, "docker rmi "..data.id.."; sleep 2", false)
|
||||
return result(res)
|
||||
end
|
||||
|
||||
handle.create_container = function(data)
|
||||
local cmd = "docker run "
|
||||
for k,v in pairs(data.parameters) do
|
||||
k = k:gsub(" ", "")
|
||||
if k:len() == 1 then
|
||||
cmd = cmd.." -"..k.." \""..v.."\" "
|
||||
else
|
||||
if k:match("^e_.*") then
|
||||
cmd = cmd.." -e \""..k:gsub("e_","").."="..v.."\" "
|
||||
else
|
||||
cmd = cmd.." --"..k
|
||||
if v ~= "" then
|
||||
cmd = cmd.."=\""..v.."\" "
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
cmd = cmd.."--detach=true "..data.image
|
||||
|
||||
local res = exec(data.host, cmd, false)
|
||||
return result(res)
|
||||
end
|
||||
|
||||
handle.stop_container = function(data)
|
||||
local res = exec(data.host, "docker stop "..data.id, false)
|
||||
res = res:gsub('[\n\r]+', '')
|
||||
if res == data.id then
|
||||
return result("OK")
|
||||
else
|
||||
return error(res)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
handle.rm_container = function(data)
|
||||
local res = exec(data.host, "docker stop "..data.id, false)
|
||||
res = res:gsub('[\n\r]+', '')
|
||||
if res == data.id then
|
||||
local res = exec(data.host, "docker rm "..data.id, false)
|
||||
res = res:gsub('[\n\r]+', '')
|
||||
if res == data.id then
|
||||
return result("OK")
|
||||
else
|
||||
error(res)
|
||||
end
|
||||
else
|
||||
return error(res)
|
||||
end
|
||||
end
|
||||
|
||||
if args.action and handle[args.action] then
|
||||
return handle[args.action](args.args)
|
||||
else
|
||||
return error("Invalid action parameter")
|
||||
end
|
34
Dockman/build/debug/main.css
Normal file
34
Dockman/build/debug/main.css
Normal file
@ -0,0 +1,34 @@
|
||||
|
||||
afx-app-window[data-id="Dockman"] .tab-wrapper button {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
afx-app-window[data-id="Dockman"] .header .label-text {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
afx-app-window[data-id="Dockman"] afx-label.header
|
||||
{
|
||||
border-bottom: 1px solid #116cd6;
|
||||
}
|
||||
|
||||
afx-app-window[data-id="Dockman"] .tab-wrapper {
|
||||
border-bottom: 1px solid #116cd6;
|
||||
}
|
||||
|
||||
afx-app-window[data-id="Dockman"] .tab-wrapper afx-list-view> .list-container {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
afx-app-window[data-id="Dockman"] afx-tree-view .afx_folder_item .itemname .label-text {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
afx-app-window[data-id="Dockman"] .running:before{
|
||||
color: green;
|
||||
}
|
||||
|
||||
afx-app-window[data-id="Dockman"] .stop:before{
|
||||
color: red;
|
||||
}
|
1
Dockman/build/debug/main.js
Normal file
1
Dockman/build/debug/main.js
Normal file
File diff suppressed because one or more lines are too long
16
Dockman/build/debug/package.json
Normal file
16
Dockman/build/debug/package.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"pkgname": "Dockman",
|
||||
"app":"Dockman",
|
||||
"name":"Remote Docker Manager",
|
||||
"description":"Remote Docker Manager",
|
||||
"info":{
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "xsang.le@gmail.com"
|
||||
},
|
||||
"version":"0.1.0-b",
|
||||
"category":"Development",
|
||||
"iconclass":"fa fa-cubes",
|
||||
"mimes":["none"],
|
||||
"dependencies":[],
|
||||
"locale": {}
|
||||
}
|
25
Dockman/build/debug/scheme.html
Normal file
25
Dockman/build/debug/scheme.html
Normal file
@ -0,0 +1,25 @@
|
||||
<afx-app-window data-id="Dockman" apptitle="__(Remote Docker Manager)" width="650" height="450" >
|
||||
<afx-vbox>
|
||||
<afx-hbox data-height="23" class="tab-wrapper">
|
||||
<afx-button data-id="add" text="" iconclass="fa fa-plus-square" data-width="23"></afx-button>
|
||||
<afx-tab-bar data-id="host-tab-bar" closable="true"></afx-tab-bar>
|
||||
</afx-hbox>
|
||||
<afx-hbox>
|
||||
<afx-vbox data-width="250">
|
||||
<afx-label text = "__(Images)" class="header" iconclass='fa fa-square' data-height="23"></afx-label>
|
||||
<afx-list-view data-id="img-list"></afx-list-view>
|
||||
<afx-resizer data-height = "3"></afx-resizer>
|
||||
<afx-label text = "__(Containers)" class="header" iconclass='fa fa-square' data-height="23"></afx-label>
|
||||
<afx-list-view data-id="container-list"></afx-list-view>
|
||||
</afx-vbox>
|
||||
<afx-resizer data-width="3"></afx-resizer>
|
||||
<afx-vbox>
|
||||
<!--afx-label text = "__(Detail)" class="header" iconclass='fa fa-square' data-height="23"></afx-label-->
|
||||
<afx-tree-view data-id="obj-view"></afx-tree-view>
|
||||
<div data-height="25"></div>
|
||||
</afx-vbox>
|
||||
|
||||
</afx-hbox>
|
||||
</afx-vbox>
|
||||
|
||||
</afx-app-window>
|
BIN
Dockman/build/release/Dockman.zip
Normal file
BIN
Dockman/build/release/Dockman.zip
Normal file
Binary file not shown.
283
Dockman/main.coffee
Normal file
283
Dockman/main.coffee
Normal file
@ -0,0 +1,283 @@
|
||||
class Dockman extends this.OS.application.BaseApplication
|
||||
constructor: ( args ) ->
|
||||
super "Dockman", args
|
||||
|
||||
main: () ->
|
||||
@setting.hosts = [] unless @setting.hosts
|
||||
@treeview = @find "obj-view"
|
||||
@currenthost = undefined
|
||||
@tabbar = @find "host-tab-bar"
|
||||
@tabbar.ontabselect = (e) =>
|
||||
@currenthost = e.data.item.data
|
||||
@loadHost()
|
||||
|
||||
@tabbar.ontabclose = (e) =>
|
||||
id = @setting.hosts.indexOf e.data.item.data
|
||||
return false unless id >= 0
|
||||
selid = @tabbar.selected
|
||||
|
||||
if selid is id
|
||||
nid = id + 1
|
||||
nid = id - 1 if id >= @setting.hosts.length - 1
|
||||
@tabbar.selected = nid
|
||||
|
||||
@setting.hosts.splice id, 1
|
||||
return true
|
||||
|
||||
@find("add").onbtclick = (e) =>
|
||||
@openDialog("MultiInputDialog", {
|
||||
title: "__(Add new Docker host)",
|
||||
model: {
|
||||
text: "__(Name)",
|
||||
url: "__(Host url)"
|
||||
},
|
||||
allow_empty: false
|
||||
})
|
||||
.then (d) =>
|
||||
@addTab d, true
|
||||
|
||||
@imglist = @find "img-list"
|
||||
@imglist.onlistselect = (e) =>
|
||||
@loadContainer e.data.item.data.text, false
|
||||
tdata = { text: e.data.item.data.text, nodes: @getTreeData e.data.item.data }
|
||||
@treeview.data = tdata
|
||||
@treeview.expandAll()
|
||||
|
||||
@ctnlist = @find "container-list"
|
||||
@ctnlist.onlistselect = (e) =>
|
||||
tdata = { text: e.data.item.data.text, nodes: @getTreeData e.data.item.data }
|
||||
@treeview.data = tdata
|
||||
@treeview.expandAll()
|
||||
@imglist.selected = -1
|
||||
|
||||
@imglist.buttons = [
|
||||
{
|
||||
text: "",
|
||||
iconclass: "fa fa-arrow-down",
|
||||
onbtclick: () =>
|
||||
sel = @imglist.selectedItem
|
||||
image = ""
|
||||
image = sel.data.text if sel
|
||||
@openDialog "PromptDialog", {
|
||||
title: __("Pull image"),
|
||||
label: __("Pull image:"),
|
||||
value: image
|
||||
}
|
||||
.then (img) =>
|
||||
return if img is ""
|
||||
@exec("pull_image", {
|
||||
host: @currenthost.url,
|
||||
image: img
|
||||
})
|
||||
.then (r) =>
|
||||
return @error r.error if r.error
|
||||
@openDialog "TextDialog", {
|
||||
title:__("Command output"),
|
||||
disable: true,
|
||||
value: atob(r.result)
|
||||
}
|
||||
.then (_d_) =>
|
||||
@loadHost()
|
||||
},
|
||||
{
|
||||
text: "",
|
||||
iconclass: "fa fa-refresh",
|
||||
onbtclick: () =>
|
||||
@loadHost()
|
||||
},
|
||||
{
|
||||
text: "",
|
||||
iconclass: "fa fa-minus",
|
||||
onbtclick: () =>
|
||||
sel = @imglist.selectedItem
|
||||
return unless sel
|
||||
@ask({ title: __("Comfirm delete"), text: __("Are you sure?")})
|
||||
.then (r) =>
|
||||
return unless r
|
||||
@exec("rm_image", {
|
||||
host: @currenthost.url,
|
||||
id: sel.data.ID
|
||||
})
|
||||
.then (r) =>
|
||||
return @error r.error if r.error
|
||||
@openDialog "TextDialog", {
|
||||
title:__("Command output"),
|
||||
disable: true,
|
||||
value: r.result
|
||||
}
|
||||
.then (_d_) =>
|
||||
@loadHost()
|
||||
}
|
||||
]
|
||||
|
||||
@ctnlist.buttons = [
|
||||
{
|
||||
text: "",
|
||||
iconclass: "fa fa-play",
|
||||
onbtclick: () =>
|
||||
sel = @ctnlist.selectedItem
|
||||
return unless sel and sel.data
|
||||
data = sel.data
|
||||
return if data.Detail.State.Running
|
||||
@exec("run_container", {
|
||||
host: @currenthost.url,
|
||||
id: data.ID
|
||||
})
|
||||
.then (r) =>
|
||||
return @error r.error if r.error
|
||||
@notify __("Container {0} started", data.ID)
|
||||
@loadContainer(data.Image, true)
|
||||
},
|
||||
{
|
||||
text: "",
|
||||
iconclass: "fa fa-stop",
|
||||
onbtclick: () =>
|
||||
sel = @ctnlist.selectedItem
|
||||
return unless sel and sel.data
|
||||
data = sel.data
|
||||
return unless data.Detail.State.Running
|
||||
@exec("stop_container", {
|
||||
host: @currenthost.url,
|
||||
id: data.ID
|
||||
})
|
||||
.then (r) =>
|
||||
return @error r.error if r.error
|
||||
@notify __("Container {0} stopped", data.ID)
|
||||
@loadContainer(data.Image, true)
|
||||
},
|
||||
{
|
||||
text: "",
|
||||
iconclass: "fa fa-refresh",
|
||||
onbtclick: () =>
|
||||
data = @ctnlist.data[0]
|
||||
if not data
|
||||
sel = @imglist.selectedItem
|
||||
return unless sel
|
||||
image = sel.data.text
|
||||
else
|
||||
image = data.Image
|
||||
@loadContainer(image, true)
|
||||
},
|
||||
{
|
||||
text: "",
|
||||
iconclass: "fa fa-plus",
|
||||
onbtclick: () =>
|
||||
if not @ctnlist.data[0]
|
||||
return unless @imglist.selectedItem
|
||||
image = @imglist.selectedItem.data.text
|
||||
else
|
||||
image = @ctnlist.data[0].Image
|
||||
console.log image
|
||||
@openDialog "KeyValueDialog", {
|
||||
title: __("Container parameters"),
|
||||
data: {
|
||||
p: "8080:80",
|
||||
restart: "always",
|
||||
name: "Container_Name",
|
||||
memory: "200m",
|
||||
cpus: "1",
|
||||
hostname: "Container_HostNamed"
|
||||
}
|
||||
}
|
||||
.then (d) =>
|
||||
@exec("create_container", {
|
||||
host: @currenthost.url,
|
||||
image: image,
|
||||
parameters: d
|
||||
})
|
||||
.then (r) =>
|
||||
return @error r.error if r.error
|
||||
@openDialog "TextDialog", {
|
||||
title:__("Command output"),
|
||||
disable: true,
|
||||
value: r.result
|
||||
}
|
||||
.then (_d_) =>
|
||||
@loadContainer(image,true)
|
||||
},
|
||||
{
|
||||
text: "",
|
||||
iconclass: "fa fa-minus",
|
||||
onbtclick: () =>
|
||||
sel = @ctnlist.selectedItem
|
||||
return unless sel and sel.data
|
||||
data = sel.data
|
||||
@ask({ title: __("Comfirm delete"), text: __("Are you sure?")})
|
||||
.then (r) =>
|
||||
return unless r
|
||||
@exec("rm_container", {
|
||||
host: @currenthost.url,
|
||||
id: data.ID
|
||||
})
|
||||
.then (r) =>
|
||||
return @error r.error if r.error
|
||||
@notify __("Container {0} removed", data.ID)
|
||||
@loadContainer(data.Image, true)
|
||||
}
|
||||
]
|
||||
|
||||
@tabbar.push v for v in @setting.hosts
|
||||
@tabbar.selected = @setting.hosts.length - 1
|
||||
|
||||
addTab: (data, refresh) ->
|
||||
id = @setting.hosts.length
|
||||
@setting.hosts.push data
|
||||
@tabbar.push data
|
||||
return unless refresh
|
||||
@tabbar.selected = id
|
||||
|
||||
exec: (action, args) ->
|
||||
cmd =
|
||||
path: "#{@path()}/api.lua",
|
||||
parameters:
|
||||
action: action,
|
||||
args: args
|
||||
return @call(cmd)
|
||||
|
||||
loadHost: () ->
|
||||
return unless @currenthost
|
||||
@resetView()
|
||||
@exec("list_image", {
|
||||
host: @currenthost.url
|
||||
})
|
||||
.then (d) =>
|
||||
return @notify d.error if d.error
|
||||
@imglist.data = d.result
|
||||
.catch (e) =>
|
||||
@error e.toString(), e
|
||||
|
||||
loadContainer: (data, cleanup) ->
|
||||
@exec("list_container", {
|
||||
host:@currenthost.url,
|
||||
image: data
|
||||
})
|
||||
.then (d) =>
|
||||
return @notify d.error if d.error
|
||||
if cleanup
|
||||
@treeview.data = {}
|
||||
@ctnlist.data = []
|
||||
@ctnlist.data = d.result
|
||||
.catch (e) =>
|
||||
@error e.toString(), e
|
||||
|
||||
getTreeData: (data) ->
|
||||
type = typeof data
|
||||
nodes = []
|
||||
switch type
|
||||
when "object"
|
||||
for key, value of data
|
||||
if key isnt "selected" and key isnt "domel"
|
||||
if typeof value isnt "object"
|
||||
nodes.push { text: "#{key}: #{value}" }
|
||||
else
|
||||
nodes.push { text: key, nodes: @getTreeData(value) }
|
||||
return nodes
|
||||
else
|
||||
return []
|
||||
|
||||
resetView: () ->
|
||||
@imglist.data = []
|
||||
@ctnlist.data = []
|
||||
@treeview.data = {}
|
||||
|
||||
this.OS.register "Dockman", Dockman
|
33
Dockman/main.css
Normal file
33
Dockman/main.css
Normal file
@ -0,0 +1,33 @@
|
||||
afx-app-window[data-id="Dockman"] .tab-wrapper button {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
afx-app-window[data-id="Dockman"] .header .label-text {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
afx-app-window[data-id="Dockman"] afx-label.header
|
||||
{
|
||||
border-bottom: 1px solid #116cd6;
|
||||
}
|
||||
|
||||
afx-app-window[data-id="Dockman"] .tab-wrapper {
|
||||
border-bottom: 1px solid #116cd6;
|
||||
}
|
||||
|
||||
afx-app-window[data-id="Dockman"] .tab-wrapper afx-list-view> .list-container {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
afx-app-window[data-id="Dockman"] afx-tree-view .afx_folder_item .itemname .label-text {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
afx-app-window[data-id="Dockman"] .running:before{
|
||||
color: green;
|
||||
}
|
||||
|
||||
afx-app-window[data-id="Dockman"] .stop:before{
|
||||
color: red;
|
||||
}
|
16
Dockman/package.json
Normal file
16
Dockman/package.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"pkgname": "Dockman",
|
||||
"app":"Dockman",
|
||||
"name":"Remote Docker Manager",
|
||||
"description":"Remote Docker Manager",
|
||||
"info":{
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "xsang.le@gmail.com"
|
||||
},
|
||||
"version":"0.1.0-b",
|
||||
"category":"Development",
|
||||
"iconclass":"fa fa-cubes",
|
||||
"mimes":["none"],
|
||||
"dependencies":[],
|
||||
"locale": {}
|
||||
}
|
7
Dockman/project.json
Normal file
7
Dockman/project.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"name": "Dockman",
|
||||
"css": ["main.css"],
|
||||
"javascripts": [],
|
||||
"coffees": ["main.coffee"],
|
||||
"copies": ["scheme.html", "api.lua", "package.json", "README.md"]
|
||||
}
|
25
Dockman/scheme.html
Normal file
25
Dockman/scheme.html
Normal file
@ -0,0 +1,25 @@
|
||||
<afx-app-window data-id="Dockman" apptitle="__(Remote Docker Manager)" width="650" height="450" >
|
||||
<afx-vbox>
|
||||
<afx-hbox data-height="23" class="tab-wrapper">
|
||||
<afx-button data-id="add" text="" iconclass="fa fa-plus-square" data-width="23"></afx-button>
|
||||
<afx-tab-bar data-id="host-tab-bar" closable="true"></afx-tab-bar>
|
||||
</afx-hbox>
|
||||
<afx-hbox>
|
||||
<afx-vbox data-width="250">
|
||||
<afx-label text = "__(Images)" class="header" iconclass='fa fa-square' data-height="23"></afx-label>
|
||||
<afx-list-view data-id="img-list"></afx-list-view>
|
||||
<afx-resizer data-height = "3"></afx-resizer>
|
||||
<afx-label text = "__(Containers)" class="header" iconclass='fa fa-square' data-height="23"></afx-label>
|
||||
<afx-list-view data-id="container-list"></afx-list-view>
|
||||
</afx-vbox>
|
||||
<afx-resizer data-width="3"></afx-resizer>
|
||||
<afx-vbox>
|
||||
<!--afx-label text = "__(Detail)" class="header" iconclass='fa fa-square' data-height="23"></afx-label-->
|
||||
<afx-tree-view data-id="obj-view"></afx-tree-view>
|
||||
<div data-height="25"></div>
|
||||
</afx-vbox>
|
||||
|
||||
</afx-hbox>
|
||||
</afx-vbox>
|
||||
|
||||
</afx-app-window>
|
@ -1,3 +1,3 @@
|
||||
# IOMail
|
||||
# GPClient
|
||||
|
||||
Simple Mail client wrapper for https://mail.iohub.dev/
|
||||
Simple Multi purpose client wrapper
|
||||
|
@ -1,3 +1,3 @@
|
||||
# IOMail
|
||||
# GPClient
|
||||
|
||||
Simple Mail client wrapper for https://mail.iohub.dev/
|
||||
Simple Multi purpose client wrapper
|
||||
|
@ -1 +1 @@
|
||||
(function(){var t,i,e;(t=class t extends this.OS.GUI.BasicDialog{constructor(){super("ClientDialog",t.scheme)}main(){var t,i,e,n;if(super.main(),e=$(this.scheme).find("input[type=text]"),this.data)for(i=0,n=e.length;i<n;i++)t=e[i],this.data[t.name]&&(t.value=this.data[t.name]);return this.find("btncancel").onbtclick=()=>this.quit(),this.find("btnok").onbtclick=i=>{var n,a,s;for(n={},a=0,s=e.length;a<s;a++){if(""===(t=e[a]).value)return this.notify(__("Please enter all the fields"));n[t.name]=t.value}return this.handle&&this.handle(n),this.quit()}}}).scheme='<afx-app-window width=\'300\' height=\'160\'>\n <afx-hbox>\n <div data-width="5"></div>\n <afx-vbox>\n <div data-height="5"></div>\n <afx-label data-height="25" text = "__(Client name)"></afx-label>\n <input type="text" name="text" data-height="25" />\n <div data-height="5"></div>\n <afx-label data-height="25" text = "__(URL)"></afx-label>\n <input type="text" name="url" data-height="25" />\n <div data-height="30" style="text-align: right;">\n <afx-button data-id="btnok" text="__(Ok)"></afx-button>\n <afx-button data-id="btncancel" text="__(Cancel)"></afx-button>\n </div>\n </afx-vbox>\n <div data-width="5"></div>\n </afx-hbox>\n</afx-app-window>',(i=class i extends this.OS.GUI.BasicDialog{constructor(){super("ClientListDialog",i.scheme)}main(){return super.main(),this.clist=this.find("client-list"),this.clist.buttons=[{text:"",iconclass:"fa fa-plus-circle",onbtclick:i=>this.openDialog(new t,{title:__("Add new client")}).then(t=>(this.parent.setting.clients.push(t),this.clist.data=this.parent.setting.clients))},{text:"",iconclass:"fa fa-minus-circle",onbtclick:t=>{var i,e;if(e=this.clist.selectedItem,i=this.clist.selected,e)return this.ask({text:__("Do you realy want to delete: `{0}`",e.data.text)}).then(t=>{if(t)return this.parent.setting.clients.splice(i,1),this.clist.data=this.parent.setting.clients})}},{text:"",iconclass:"fa fa-pencil-square-o",onbtclick:i=>{var e;if(e=this.clist.selectedItem)return this.openDialog(new t,{title:__("Add new client"),text:e.data.text,url:e.data.url}).then(t=>{if(t)return e.data.text=t.text,e.data.url=t.url,this.clist.data=this.parent.setting.clients})}}],this.find("btnswitch").onbtclick=t=>{var i;if(i=this.clist.selectedItem)return this.parent.setting.curl=i.data.url,this.parent.setting.cname=i.data.text,this.parent.switchClient(),this.quit()},this.clist.data=this.parent.setting.clients}}).scheme='<afx-app-window width=\'200\' height=\'200\'>\n <afx-vbox>\n <afx-list-view data-id="client-list"></afx-list-view>\n <div data-height="30" style="text-align: right;">\n <afx-button text="__(Switch client)" data-id="btnswitch"></afx-button>\n <div>\n </afx-vbox>\n</afx-app-window>',(e=class extends this.OS.application.BaseApplication{constructor(t){super("GPClient",t)}main(){return this.setting.clients||(this.setting.clients=[]),this.container=this.find("container"),this.bindKey("CTRL-M",()=>this.openDialog(new i,{title:__("Client Manager")})),this.switchClient()}switchClient(){return this.setting.curl?(this.container.src=this.setting.curl,this.scheme.apptitle=this.setting.cname):this.notify(__("No client selected, manager client in menu Options > Client manager"))}menu(){return[{text:"__(Options)",nodes:[{text:"__(Client manager)",shortcut:"C-M"}],onchildselect:t=>this.openDialog(new i,{title:__("Client Manager")})}]}}).singleton=!0,this.OS.register("GPClient",e)}).call(this);
|
||||
(function(){var t,i,e;(t=class t extends this.OS.GUI.BasicDialog{constructor(){super("ClientDialog",t.scheme)}main(){var t,i,e,n;if(super.main(),e=$(this.scheme).find("input[type=text]"),this.data)for(i=0,n=e.length;i<n;i++)t=e[i],this.data[t.name]&&(t.value=this.data[t.name]);return this.find("btncancel").onbtclick=()=>this.quit(),this.find("btnok").onbtclick=i=>{var n,a,s;for(n={},a=0,s=e.length;a<s;a++){if(""===(t=e[a]).value)return this.notify(__("Please enter all the fields"));n[t.name]=t.value}return this.handle&&this.handle(n),this.quit()}}}).scheme='<afx-app-window width=\'300\' height=\'160\'>\n <afx-hbox>\n <div data-width="5"></div>\n <afx-vbox>\n <div data-height="5"></div>\n <afx-label data-height="25" text = "__(Client name)"></afx-label>\n <input type="text" name="text" data-height="25" ></input>\n <div data-height="5"></div>\n <afx-label data-height="25" text = "__(URL)"></afx-label>\n <input type="text" name="url" data-height="25" ></input>\n <div data-height="30" style="text-align: right;">\n <afx-button data-id="btnok" text="__(Ok)"></afx-button>\n <afx-button data-id="btncancel" text="__(Cancel)"></afx-button>\n </div>\n </afx-vbox>\n <div data-width="5"></div>\n </afx-hbox>\n</afx-app-window>',(i=class i extends this.OS.GUI.BasicDialog{constructor(){super("ClientListDialog",i.scheme)}main(){return super.main(),this.clist=this.find("client-list"),this.clist.buttons=[{text:"",iconclass:"fa fa-plus-circle",onbtclick:i=>this.openDialog(new t,{title:__("Add new client")}).then(t=>(this.parent.setting.clients.push(t),this.clist.data=this.parent.setting.clients))},{text:"",iconclass:"fa fa-minus-circle",onbtclick:t=>{var i,e;if(e=this.clist.selectedItem,i=this.clist.selected,e)return this.ask({text:__("Do you realy want to delete: `{0}`",e.data.text)}).then(t=>{if(t)return this.parent.setting.clients.splice(i,1),this.clist.data=this.parent.setting.clients})}},{text:"",iconclass:"fa fa-pencil-square-o",onbtclick:i=>{var e;if(e=this.clist.selectedItem)return this.openDialog(new t,{title:__("Add new client"),text:e.data.text,url:e.data.url}).then(t=>{if(t)return e.data.text=t.text,e.data.url=t.url,this.clist.data=this.parent.setting.clients})}}],this.find("btnswitch").onbtclick=t=>{var i;if(i=this.clist.selectedItem)return this.parent.setting.curl=i.data.url,this.parent.setting.cname=i.data.text,this.parent.switchClient(),this.quit()},this.clist.data=this.parent.setting.clients}}).scheme='<afx-app-window width=\'200\' height=\'200\'>\n <afx-vbox>\n <afx-list-view data-id="client-list"></afx-list-view>\n <div data-height="30" style="text-align: right;">\n <afx-button text="__(Switch client)" data-id="btnswitch"></afx-button>\n <div>\n </afx-vbox>\n</afx-app-window>',(e=class extends this.OS.application.BaseApplication{constructor(t){super("GPClient",t)}main(){return this.setting.clients||(this.setting.clients=[]),this.container=this.find("container"),this.bindKey("CTRL-M",()=>this.openDialog(new i,{title:__("Client Manager")})),this.switchClient()}switchClient(){return this.setting.curl?(this.container.src=this.setting.curl,this.scheme.apptitle=this.setting.cname):this.notify(__("No client selected, manager client in menu Options > Client manager"))}menu(){return[{text:"__(Options)",nodes:[{text:"__(Client manager)",shortcut:"C-M"}],onchildselect:t=>this.openDialog(new i,{title:__("Client Manager")})}]}}).singleton=!0,this.OS.register("GPClient",e)}).call(this);
|
@ -7,9 +7,9 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "mrsang@iohub.dev"
|
||||
},
|
||||
"version":"0.1.0-a",
|
||||
"version":"0.1.2-a",
|
||||
"category":"Internet",
|
||||
"iconclass":"fa fa-globe",
|
||||
"iconclass":"bi bi-hurricane",
|
||||
"mimes":["none"],
|
||||
"dependencies":[],
|
||||
"locale": {}
|
||||
|
Binary file not shown.
@ -7,9 +7,9 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "mrsang@iohub.dev"
|
||||
},
|
||||
"version":"0.1.0-a",
|
||||
"version":"0.1.2-a",
|
||||
"category":"Internet",
|
||||
"iconclass":"fa fa-globe",
|
||||
"iconclass":"bi bi-hurricane",
|
||||
"mimes":["none"],
|
||||
"dependencies":[],
|
||||
"locale": {}
|
||||
|
@ -3,7 +3,7 @@
|
||||
Generate graph from text using mermaid
|
||||
|
||||
## Change logs
|
||||
|
||||
* v0.0.9-a: Change category
|
||||
* v0.0.8-a: Fix ace path
|
||||
* v0.0.7-a: Fix worker path
|
||||
* v0.0.6-a: Fix unable to export image from tainted canvas
|
||||
|
@ -3,7 +3,7 @@
|
||||
Generate graph from text using mermaid
|
||||
|
||||
## Change logs
|
||||
|
||||
* v0.0.9-a: Change category
|
||||
* v0.0.8-a: Fix ace path
|
||||
* v0.0.7-a: Fix worker path
|
||||
* v0.0.6-a: Fix unable to export image from tainted canvas
|
||||
|
@ -7,8 +7,8 @@
|
||||
"email": "xsang.le@gmail.com",
|
||||
"licences": "GPLv3"
|
||||
},
|
||||
"version":"0.0.8-a",
|
||||
"category":"Office",
|
||||
"version":"0.0.9-a",
|
||||
"category":"Graphics",
|
||||
"iconclass": "fa fa-sitemap",
|
||||
"mimes":["text/.*graphviz"]
|
||||
}
|
||||
|
Binary file not shown.
@ -7,8 +7,8 @@
|
||||
"email": "xsang.le@gmail.com",
|
||||
"licences": "GPLv3"
|
||||
},
|
||||
"version":"0.0.8-a",
|
||||
"category":"Office",
|
||||
"version":"0.0.9-a",
|
||||
"category":"Graphics",
|
||||
"iconclass": "fa fa-sitemap",
|
||||
"mimes":["text/.*graphviz"]
|
||||
}
|
||||
|
@ -5,5 +5,6 @@ Application for serverside code testing and analytics tool.
|
||||
It allows to execute lua code on the server from the browser
|
||||
|
||||
## Change logs
|
||||
* 0.0.7-a: Change icon and category
|
||||
* 0.0.6-a: Fix ace path error
|
||||
* 0.0.5-a: Fix worker path error
|
@ -5,5 +5,6 @@ Application for serverside code testing and analytics tool.
|
||||
It allows to execute lua code on the server from the browser
|
||||
|
||||
## Change logs
|
||||
* 0.0.7-a: Change icon and category
|
||||
* 0.0.6-a: Fix ace path error
|
||||
* 0.0.5-a: Fix worker path error
|
@ -6,8 +6,8 @@
|
||||
"author": "Xuan Sang LEs",
|
||||
"email": "xsang.le@gmail.com"
|
||||
},
|
||||
"version":"0.0.6-a",
|
||||
"category":"System",
|
||||
"iconclass":"fa fa-adn",
|
||||
"version":"0.0.7-a",
|
||||
"category":"Development",
|
||||
"iconclass":"bi gear-full",
|
||||
"mimes":["none"]
|
||||
}
|
Binary file not shown.
@ -6,8 +6,8 @@
|
||||
"author": "Xuan Sang LEs",
|
||||
"email": "xsang.le@gmail.com"
|
||||
},
|
||||
"version":"0.0.6-a",
|
||||
"category":"System",
|
||||
"iconclass":"fa fa-adn",
|
||||
"version":"0.0.7-a",
|
||||
"category":"Development",
|
||||
"iconclass":"bi gear-full",
|
||||
"mimes":["none"]
|
||||
}
|
@ -6,8 +6,8 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "xsang.le@gmail.com"
|
||||
},
|
||||
"version":"0.0.7-a",
|
||||
"category":"Utils",
|
||||
"version":"0.0.8-a",
|
||||
"category":"Office",
|
||||
"iconclass":"fa fa-leanpub",
|
||||
"dependencies": ["SimpleMDE@1.11.2-r"],
|
||||
"mimes":["text/.*"]
|
||||
|
Binary file not shown.
@ -6,8 +6,8 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "xsang.le@gmail.com"
|
||||
},
|
||||
"version":"0.0.7-a",
|
||||
"category":"Utils",
|
||||
"version":"0.0.8-a",
|
||||
"category":"Office",
|
||||
"iconclass":"fa fa-leanpub",
|
||||
"dependencies": ["SimpleMDE@1.11.2-r"],
|
||||
"mimes":["text/.*"]
|
||||
|
@ -7,7 +7,7 @@
|
||||
"email": "xsang.le@gmail.com"
|
||||
},
|
||||
"version":"0.0.8-a",
|
||||
"category":"Multimedia",
|
||||
"category":"Media",
|
||||
"iconclass":"fa fa-headphones",
|
||||
"mimes":["none"]
|
||||
}
|
File diff suppressed because one or more lines are too long
@ -6,8 +6,8 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "xsang.le@gmail.com"
|
||||
},
|
||||
"version":"0.1.3-a",
|
||||
"category":"Other",
|
||||
"version":"0.1.4-a",
|
||||
"category":"Office",
|
||||
"icon":"icon.png",
|
||||
"mimes":["application/vnd.oasis.opendocument.text"]
|
||||
}
|
Binary file not shown.
@ -6,8 +6,8 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "xsang.le@gmail.com"
|
||||
},
|
||||
"version":"0.1.3-a",
|
||||
"category":"Other",
|
||||
"version":"0.1.4-a",
|
||||
"category":"Office",
|
||||
"icon":"icon.png",
|
||||
"mimes":["application/vnd.oasis.opendocument.text"]
|
||||
}
|
@ -8,4 +8,5 @@ This application reauires the **tunel plugin** and the **ant-tunnel v4l2 publish
|
||||
on the server-side
|
||||
|
||||
## Change log
|
||||
* v0.1.4-a: change app category
|
||||
* v0.1.2-a: user worker for jpeg decoding
|
||||
|
@ -8,4 +8,5 @@ This application reauires the **tunel plugin** and the **ant-tunnel v4l2 publish
|
||||
on the server-side
|
||||
|
||||
## Change log
|
||||
* v0.1.4-a: change app category
|
||||
* v0.1.2-a: user worker for jpeg decoding
|
||||
|
@ -7,8 +7,8 @@
|
||||
"author": "",
|
||||
"email": ""
|
||||
},
|
||||
"version":"0.1.3-a",
|
||||
"category":"Other",
|
||||
"version":"0.1.4-a",
|
||||
"category":"Graphics",
|
||||
"iconclass":"fa fa-camera",
|
||||
"mimes":["none"],
|
||||
"dependencies":["libjpeg@0.1.1-a", "Antunnel@0.1.8-a"],
|
||||
|
Binary file not shown.
@ -7,8 +7,8 @@
|
||||
"author": "",
|
||||
"email": ""
|
||||
},
|
||||
"version":"0.1.3-a",
|
||||
"category":"Other",
|
||||
"version":"0.1.4-a",
|
||||
"category":"Graphics",
|
||||
"iconclass":"fa fa-camera",
|
||||
"mimes":["none"],
|
||||
"dependencies":["libjpeg@0.1.1-a", "Antunnel@0.1.8-a"],
|
||||
|
@ -7,6 +7,6 @@ Further information on **wvnc**: [https://blog.lxsang.me/post/id/23](https://blo
|
||||
|
||||
|
||||
## Change logs
|
||||
|
||||
* v0.1.6 - Change category
|
||||
* v0.1.5 - add package dependencies and use the new **libwvnc**
|
||||
* v0.1.0 - adapt to the new AntOS API
|
||||
|
@ -1,5 +1,5 @@
|
||||
# WVNC remote desktop
|
||||
![](https://os.lxsang.me/repo/RemoteDesktop/RemoteDesktop.png)
|
||||
![](https://raw.githubusercontent.com/lxsang/antosdk-apps/master/RemoteDesktop/screenshot.jpg)
|
||||
|
||||
A web based VNC client allowing to control remote VNC desktop from browser. The application is based on **wvnc**, a protocol and API that uses web socket to communicate with remote VNC server.
|
||||
|
||||
@ -7,6 +7,6 @@ Further information on **wvnc**: [https://blog.lxsang.me/post/id/23](https://blo
|
||||
|
||||
|
||||
## Change logs
|
||||
|
||||
* v0.1.6 - Change category
|
||||
* v0.1.5 - add package dependencies and use the new **libwvnc**
|
||||
* v0.1.0 - adapt to the new AntOS API
|
||||
* v0.1.0 - adapt to the new AntOS API
|
||||
|
@ -6,9 +6,9 @@
|
||||
"author": "",
|
||||
"email": ""
|
||||
},
|
||||
"version":"0.1.5-a",
|
||||
"version":"0.1.6-a",
|
||||
"dependencies": ["libwvnc@0.1.2-a"],
|
||||
"category":"Other",
|
||||
"category":"Internet",
|
||||
"icon": "icon.png",
|
||||
"mimes":["none"]
|
||||
}
|
Binary file not shown.
@ -6,9 +6,9 @@
|
||||
"author": "",
|
||||
"email": ""
|
||||
},
|
||||
"version":"0.1.5-a",
|
||||
"version":"0.1.6-a",
|
||||
"dependencies": ["libwvnc@0.1.2-a"],
|
||||
"category":"Other",
|
||||
"category":"Internet",
|
||||
"icon": "icon.png",
|
||||
"mimes":["none"]
|
||||
}
|
@ -7,8 +7,8 @@
|
||||
"email": "xsang.le@gmail.com",
|
||||
"licences": "GPLv3"
|
||||
},
|
||||
"version":"0.0.6-a",
|
||||
"category":"Other",
|
||||
"version":"0.0.7-a",
|
||||
"category":"Utility",
|
||||
"mimes":["none"],
|
||||
"iconclass": "fa fa-delicious",
|
||||
"locales": {
|
||||
|
Binary file not shown.
@ -7,8 +7,8 @@
|
||||
"email": "xsang.le@gmail.com",
|
||||
"licences": "GPLv3"
|
||||
},
|
||||
"version":"0.0.6-a",
|
||||
"category":"Other",
|
||||
"version":"0.0.7-a",
|
||||
"category":"Utility",
|
||||
"mimes":["none"],
|
||||
"iconclass": "fa fa-delicious",
|
||||
"locales": {
|
||||
|
@ -14,8 +14,8 @@
|
||||
"Antunnel@0.1.8-a"
|
||||
],
|
||||
"version":"0.1.9-a",
|
||||
"category":"Other",
|
||||
"iconclass":"fa fa-android",
|
||||
"category":"System",
|
||||
"iconclass":"fa fa-tachometer",
|
||||
"mimes":["none"],
|
||||
"locale": {}
|
||||
}
|
Binary file not shown.
@ -14,8 +14,8 @@
|
||||
"Antunnel@0.1.8-a"
|
||||
],
|
||||
"version":"0.1.9-a",
|
||||
"category":"Other",
|
||||
"iconclass":"fa fa-android",
|
||||
"category":"System",
|
||||
"iconclass":"fa fa-tachometer",
|
||||
"mimes":["none"],
|
||||
"locale": {}
|
||||
}
|
@ -8,7 +8,7 @@
|
||||
"licences": "GPLv3"
|
||||
},
|
||||
"version":"0.0.2-a",
|
||||
"category":"Office",
|
||||
"iconclass": "fa fa-sitemap",
|
||||
"category":"Graphics",
|
||||
"iconclass": "bi bi-bounding-box",
|
||||
"mimes":["text/.*graphviz"]
|
||||
}
|
||||
|
Binary file not shown.
@ -8,7 +8,7 @@
|
||||
"licences": "GPLv3"
|
||||
},
|
||||
"version":"0.0.2-a",
|
||||
"category":"Office",
|
||||
"iconclass": "fa fa-sitemap",
|
||||
"category":"Graphics",
|
||||
"iconclass": "bi bi-bounding-box",
|
||||
"mimes":["text/.*graphviz"]
|
||||
}
|
||||
|
@ -3,9 +3,9 @@
|
||||
"pkgname": "About",
|
||||
"name": "About AntOS",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/About/README.md",
|
||||
"category": "Other",
|
||||
"category": "Utility",
|
||||
"author": "Xuan Sang LE",
|
||||
"version": "0.0.6-a",
|
||||
"version": "0.0.7-a",
|
||||
"dependencies": [],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/About/build/release/About.zip"
|
||||
},
|
||||
@ -43,9 +43,9 @@
|
||||
"pkgname": "Archive",
|
||||
"name": "Archive",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/Archive/README.md",
|
||||
"category": "Other",
|
||||
"category": "Utility",
|
||||
"author": "Xuan Sang LE",
|
||||
"version": "0.0.2-a",
|
||||
"version": "0.0.3-a",
|
||||
"dependencies": [],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/Archive/build/release/Archive.zip"
|
||||
},
|
||||
@ -63,9 +63,9 @@
|
||||
"pkgname": "Booklet",
|
||||
"name": "Booklet",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/Booklet/README.md",
|
||||
"category": "Other",
|
||||
"category": "Office",
|
||||
"author": "Xuan Sang LE",
|
||||
"version": "0.2.2-a",
|
||||
"version": "0.2.3-a",
|
||||
"dependencies": ["SimpleMDE@1.11.2-r","Katex@0.11.1-r"],"mimes":["dir"],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/Booklet/build/release/Booklet.zip"
|
||||
},
|
||||
@ -73,9 +73,9 @@
|
||||
"pkgname": "Clipper",
|
||||
"name": "Clipper",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/Clipper/README.md",
|
||||
"category": "Other",
|
||||
"category": "Utility",
|
||||
"author": "Xuan Sang LE",
|
||||
"version": "0.1.2-a",
|
||||
"version": "0.1.3-a",
|
||||
"dependencies": [],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/Clipper/build/release/Clipper.zip"
|
||||
},
|
||||
@ -93,9 +93,9 @@
|
||||
"pkgname": "DiffEditor",
|
||||
"name": "Diff Editor",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/DiffEditor/README.md",
|
||||
"category": "Other",
|
||||
"category": "Development",
|
||||
"author": "",
|
||||
"version": "0.1.2-a",
|
||||
"version": "0.1.3-a",
|
||||
"dependencies": ["AceDiff@3.0.3-r"],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/DiffEditor/build/release/DiffEditor.zip"
|
||||
},
|
||||
@ -103,19 +103,29 @@
|
||||
"pkgname": "Docify",
|
||||
"name": "Docify",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/Docify/README.md",
|
||||
"category": "Other",
|
||||
"category": "Office",
|
||||
"author": "",
|
||||
"version": "0.0.6-a",
|
||||
"version": "0.0.7-a",
|
||||
"dependencies": [],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/Docify/build/release/Docify.zip"
|
||||
},
|
||||
{
|
||||
"pkgname": "Dockman",
|
||||
"name": "Remote Docker Manager",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/Dockman/README.md",
|
||||
"category": "Development",
|
||||
"author": "Xuan Sang LE",
|
||||
"version": "0.1.0-b",
|
||||
"dependencies": [],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/Dockman/build/release/Dockman.zip"
|
||||
},
|
||||
{
|
||||
"pkgname": "GPClient",
|
||||
"name": "Generic Purpose client",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/GPClient/README.md",
|
||||
"category": "Internet",
|
||||
"author": "Xuan Sang LE",
|
||||
"version": "0.1.0-a",
|
||||
"version": "0.1.2-a",
|
||||
"dependencies": [],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/GPClient/build/release/GPClient.zip"
|
||||
},
|
||||
@ -123,9 +133,9 @@
|
||||
"pkgname": "GraphEditor",
|
||||
"name": "Graph Editor",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/GraphEditor/README.md",
|
||||
"category": "Office",
|
||||
"category": "Graphics",
|
||||
"author": "Xuan Sang LE",
|
||||
"version": "0.0.8-a",
|
||||
"version": "0.0.9-a",
|
||||
"dependencies": [],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/GraphEditor/build/release/GraphEditor.zip"
|
||||
},
|
||||
@ -173,9 +183,9 @@
|
||||
"pkgname": "LuaPlayground",
|
||||
"name": "LuaPlayground",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/LuaPlayground/README.md",
|
||||
"category": "System",
|
||||
"category": "Development",
|
||||
"author": "Xuan Sang LEs",
|
||||
"version": "0.0.6-a",
|
||||
"version": "0.0.7-a",
|
||||
"dependencies": [],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/LuaPlayground/build/release/LuaPlayground.zip"
|
||||
},
|
||||
@ -183,9 +193,9 @@
|
||||
"pkgname": "MarkOn",
|
||||
"name": "Markdown editor",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/MarkOn/README.md",
|
||||
"category": "Utils",
|
||||
"category": "Office",
|
||||
"author": "Xuan Sang LE",
|
||||
"version": "0.0.7-a",
|
||||
"version": "0.0.8-a",
|
||||
"dependencies": ["SimpleMDE@1.11.2-r"],"mimes":["text/.*"],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/MarkOn/build/release/MarkOn.zip"
|
||||
},
|
||||
@ -203,9 +213,9 @@
|
||||
"pkgname": "OpenPage",
|
||||
"name": "OpenPage",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/OpenPage/README.md",
|
||||
"category": "Other",
|
||||
"category": "Office",
|
||||
"author": "Xuan Sang LE",
|
||||
"version": "0.1.3-a",
|
||||
"version": "0.1.4-a",
|
||||
"dependencies": [],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/OpenPage/build/release/OpenPage.zip"
|
||||
},
|
||||
@ -223,9 +233,9 @@
|
||||
"pkgname": "RemoteCamera",
|
||||
"name": "Remote Camera",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/RemoteCamera/README.md",
|
||||
"category": "Other",
|
||||
"category": "Graphics",
|
||||
"author": "",
|
||||
"version": "0.1.3-a",
|
||||
"version": "0.1.4-a",
|
||||
"dependencies": ["libjpeg@0.1.1-a","Antunnel@0.1.8-a"],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/RemoteCamera/build/release/RemoteCamera.zip"
|
||||
},
|
||||
@ -233,19 +243,19 @@
|
||||
"pkgname": "RemoteDesktop",
|
||||
"name": "WVNC remote desktop",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/RemoteDesktop/README.md",
|
||||
"category": "Other",
|
||||
"category": "Internet",
|
||||
"author": "",
|
||||
"version": "0.1.5-a",
|
||||
"dependencies": ["libwvnc@0.1.2-a"],"category":"Other","icon":"icon.png","mimes":["none"],
|
||||
"version": "0.1.6-a",
|
||||
"dependencies": ["libwvnc@0.1.2-a"],"category":"Internet","icon":"icon.png","mimes":["none"],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/RemoteDesktop/build/release/RemoteDesktop.zip"
|
||||
},
|
||||
{
|
||||
"pkgname": "ShowCase",
|
||||
"name": "ShowCase",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/ShowCase/README.md",
|
||||
"category": "Other",
|
||||
"category": "Utility",
|
||||
"author": "Xuan Sang LE",
|
||||
"version": "0.0.6-a",
|
||||
"version": "0.0.7-a",
|
||||
"dependencies": [],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/ShowCase/build/release/ShowCase.zip"
|
||||
},
|
||||
@ -263,10 +273,10 @@
|
||||
"pkgname": "SystemControl",
|
||||
"name": "System monitoring",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/SystemControl/README.md",
|
||||
"category": "Other",
|
||||
"category": "System",
|
||||
"author": "",
|
||||
"version": "0.1.9-a",
|
||||
"dependencies": ["Antunnel@0.1.8-a"],"version":"0.1.9-a","category":"Other","iconclass":"fafa-android","mimes":["none"],
|
||||
"dependencies": ["Antunnel@0.1.8-a"],"version":"0.1.9-a","category":"System","iconclass":"fafa-tachometer","mimes":["none"],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/SystemControl/build/release/SystemControl.zip"
|
||||
},
|
||||
{
|
||||
@ -283,7 +293,7 @@
|
||||
"pkgname": "VizApp",
|
||||
"name": "Viz editor",
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/VizApp/README.md",
|
||||
"category": "Office",
|
||||
"category": "Graphics",
|
||||
"author": "Xuan Sang LE",
|
||||
"version": "0.0.2-a",
|
||||
"dependencies": [],
|
||||
@ -295,7 +305,7 @@
|
||||
"description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/vTerm/README.md",
|
||||
"category": "System",
|
||||
"author": "Xuan Sang LE",
|
||||
"version": "0.1.13-a",
|
||||
"version": "0.1.14-a",
|
||||
"dependencies": ["Antunnel@0.1.8-a","xTerm@4.8.1-r"],
|
||||
"download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/vTerm/build/release/vTerm.zip"
|
||||
},
|
||||
|
@ -12,6 +12,7 @@ VTerm depends on the server side **tunnel** plugin and the AntOS **Antunnel**
|
||||
client side package
|
||||
|
||||
## Change logs
|
||||
- v0.1.14-a: Change app icon
|
||||
- v0.1.12-a: Add copy/paste shortcuts (CTRL+SHIFT+C/ CTRL+SHIFT+V)
|
||||
- v0.1.9-a: Update dependencies to latest
|
||||
- v0.1.6-a: Add dependencies to package meta-data
|
@ -12,6 +12,7 @@ VTerm depends on the server side **tunnel** plugin and the AntOS **Antunnel**
|
||||
client side package
|
||||
|
||||
## Change logs
|
||||
- v0.1.14-a: Change app icon
|
||||
- v0.1.12-a: Add copy/paste shortcuts (CTRL+SHIFT+C/ CTRL+SHIFT+V)
|
||||
- v0.1.9-a: Update dependencies to latest
|
||||
- v0.1.6-a: Add dependencies to package meta-data
|
@ -6,9 +6,9 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "xsang.le@gmail.com"
|
||||
},
|
||||
"version":"0.1.13-a",
|
||||
"version":"0.1.14-a",
|
||||
"category":"System",
|
||||
"iconclass":"fa fa-terminal",
|
||||
"iconclass":"bi bi-terminal-fill",
|
||||
"mimes":["none"],
|
||||
"dependencies": [
|
||||
"Antunnel@0.1.8-a",
|
||||
|
Binary file not shown.
@ -6,9 +6,9 @@
|
||||
"author": "Xuan Sang LE",
|
||||
"email": "xsang.le@gmail.com"
|
||||
},
|
||||
"version":"0.1.13-a",
|
||||
"version":"0.1.14-a",
|
||||
"category":"System",
|
||||
"iconclass":"fa fa-terminal",
|
||||
"iconclass":"bi bi-terminal-fill",
|
||||
"mimes":["none"],
|
||||
"dependencies": [
|
||||
"Antunnel@0.1.8-a",
|
||||
|
Loading…
Reference in New Issue
Block a user