From 3a3f55e7c8a4b57be893475af14dd96504e5e073 Mon Sep 17 00:00:00 2001 From: DanyLE Date: Sun, 23 Jul 2023 13:18:43 +0200 Subject: [PATCH] RemoteDesktop: allow saving current connection to setting --- RemoteDesktop/README.md | 1 + RemoteDesktop/build.json | 4 ++ RemoteDesktop/build/debug/README.md | 1 + RemoteDesktop/build/debug/main.js | 2 +- RemoteDesktop/build/debug/package.json | 2 +- RemoteDesktop/build/release/RemoteDesktop.zip | Bin 78238 -> 78402 bytes RemoteDesktop/coffees/main.coffee | 41 ++++++++++++------ RemoteDesktop/package.json | 2 +- packages.json | 2 +- release/RemoteDesktop.md | 1 + release/RemoteDesktop.zip | Bin 78238 -> 78402 bytes release/packages.json | 2 +- 12 files changed, 40 insertions(+), 18 deletions(-) diff --git a/RemoteDesktop/README.md b/RemoteDesktop/README.md index d445657..601c8b6 100644 --- a/RemoteDesktop/README.md +++ b/RemoteDesktop/README.md @@ -7,6 +7,7 @@ Further information on **wvnc**: [https://blog.lxsang.me/post/id/23](https://blo ## Change logs +* v0.1.17 - Allow to save current connection to setting * v0.1.16 - Allow to enable/disable mouse capture in remote desktop, remove some unused toolbar buttons * v0.1.15 - Only send ACK command when finish rendering the received frame, this allows to vastly improve performance and bandwidth * v0.1.14 - Add toolbar for canvas size control diff --git a/RemoteDesktop/build.json b/RemoteDesktop/build.json index 7421317..60a2a07 100644 --- a/RemoteDesktop/build.json +++ b/RemoteDesktop/build.json @@ -3,6 +3,10 @@ "targets": { "init": { "jobs": [ + { + "name": "vfs-rm_no_error", + "data": ["build/debug","build/release"] + }, { "name": "vfs-mkdir", "data": [ diff --git a/RemoteDesktop/build/debug/README.md b/RemoteDesktop/build/debug/README.md index d445657..601c8b6 100644 --- a/RemoteDesktop/build/debug/README.md +++ b/RemoteDesktop/build/debug/README.md @@ -7,6 +7,7 @@ Further information on **wvnc**: [https://blog.lxsang.me/post/id/23](https://blo ## Change logs +* v0.1.17 - Allow to save current connection to setting * v0.1.16 - Allow to enable/disable mouse capture in remote desktop, remove some unused toolbar buttons * v0.1.15 - Only send ACK command when finish rendering the received frame, this allows to vastly improve performance and bandwidth * v0.1.14 - Add toolbar for canvas size control diff --git a/RemoteDesktop/build/debug/main.js b/RemoteDesktop/build/debug/main.js index e8b2e74..24378ab 100644 --- a/RemoteDesktop/build/debug/main.js +++ b/RemoteDesktop/build/debug/main.js @@ -1 +1 @@ -(function(){var e,t,n,s;(e=class e extends this.OS.GUI.BasicDialog{constructor(){super("ConnectionDialog",e.scheme)}main(){return super.main(),this.find("bbp").data=[{text:"16 bits",value:16,selected:!0},{text:"32 bits",value:32}],this.find("jq").value=40,this.find("bt-ok").onbtclick=e=>{var t;if(this.handle)return t={wvnc:this.find("txtWVNC").value,server:this.find("txtServer").value,bbp:this.find("bbp").selectedItem.data.value,quality:this.find("jq").value},this.handle(t),this.quit()},this.find("bt-cancel").onbtclick=e=>this.quit()}}).scheme='\n \n \n \n
\n \n \n
\n \n \n
\n \n
\n \n \n
\n
\n
\n
\n',(t=class e extends this.OS.GUI.BasicDialog{constructor(){super("CredentialDialog",e.scheme)}main(){return this.find("bt-ok").onbtclick=()=>{var e;return this.handle?(e={username:this.find("txtUser").value,password:this.find("txtPass").value},this.handle(e),this.quit()):this.quit()},this.find("bt-cancel").onbtclick=()=>this.quit()}}).scheme='\n \n \n \n
\n \n
\n \n \n
\n
\n
\n
',n=class extends this.OS.application.BaseApplication{constructor(e){super("RemoteDesktop",e)}main(){return this.canvas=this.find("screen"),this.container=this.find("container"),this.zoom=this.find("zoom"),this.btreset=this.find("btreset"),this.zoom.max=200,this.zoom.value=100,this.zoom.onvaluechange=e=>this.setScale(),this.switch=this.find("capture_mouse"),this.switch.onswchange=e=>this.client.mouseCapture=this.switch.swon,this.btreset.onbtclick=e=>{var t,n,s,i;return i=$(this.container).width(),t=$(this.container).height(),n=i/this.client.resolution.w,s=t/this.client.resolution.h,this.zoom.value=n>s?100*s:100*n,this.setScale()},this.client=new s({element:this.canvas}),this.bindKey("CTRL-SHIFT-V",e=>this.pasteText()),this.client.ondisconnect=()=>this.showConnectionDialog(),this.client.onresize=()=>this.setScale(),this.client.onpassword=()=>new Promise((e,t)=>this.openDialog("PromptDialog",{title:__("VNC password"),label:__("VNC password"),value:"password",type:"password"}).then((function(t){return e(t)}))),this.client.oncopy=e=>this._api.setClipboard(e),this.client.oncredential=()=>new Promise((e,n)=>this.openDialog(new t,{title:__("User credential")}).then((function(t){return e(t.username,t.password)}))),this.on("focus",e=>$(this.canvas).focus()),this.client.init().then(()=>this.showConnectionDialog())}pasteText(){var e;if(this.client)return e=e=>{if(e&&""!==e)return this.client.sendTextAsClipboard(e)},this._api.getClipboard().then(t=>e(t)).catch(t=>(this.error(__("Unable to paste"),t),this.openDialog("TextDialog",{title:"Paste text"}).then(t=>e(t)).catch(e=>this.error(e.toString(),e))))}setScale(){if(console.log("scale changed"),this.client&&this.client.resolution)return this.client.setScale(this.zoom.value/100),this.container.scrollLeft=0,this.container.scrollTop=0}menu(){return[{text:"__(Connection)",nodes:[{text:"__(New Connection)",dataid:this.name+"-new"},{text:"__(Disconnect)",dataid:this.name+"-close"}],onchildselect:e=>{if(this.client)return this.client.disconnect(!1)}}]}showConnectionDialog(){if(this.client)return this.openDialog(new e,{title:__("Connection")}).then(e=>(this.client.ws=e.wvnc,this.client.connect(e.server,e)))}cleanup(){return this.client&&this.client.disconnect(!0),this.client=void 0}},this.OS.register("RemoteDesktop",n),s=class{constructor(e){var t,n;this.socket=void 0,this.ws=void 0,this.canvas=void 0,n="pkg://RemoteDesktop/decoder_asm.js".asFileHandle().getlink(),this.scale=1,e.ws&&(this.ws=e.ws),this.canvas=e.element,"string"==typeof this.canvas&&(this.canvas=document.getElementById(this.canvas)),this.decoder=new Worker(n),this.enableEvent=!1,this.mouseCapture=!0,this.pingto=!1,t=this,this.mouseMask=0,this.decoder.onmessage=function(e){return t.process(e.data)}}init(){var e;return e=this,new Promise((function(t,n){return e.canvas?($(e.canvas).attr("tabindex","1"),$(e.canvas).on("focus",()=>e.resetModifierKeys()),e.initInputEvent(),t()):n("Canvas is not set")}))}initInputEvent(){var e,t,n,s;if(n=this,this.canvas&&(t=function(e){var t;return t=n.canvas.getBoundingClientRect(),{x:Math.floor((e.clientX-t.left)/n.scale),y:Math.floor((e.clientY-t.top)/n.scale)}},s=function(e){var s;if(n.enableEvent)return s=t(e),n.sendPointEvent(s.x,s.y,n.mouseMask)},n.canvas))return n.canvas.oncontextmenu=function(e){return e.preventDefault(),!1},n.canvas.onmousemove=function(e){if(n.mouseCapture)return s(e)},n.canvas.onmousedown=function(e){var t;if(n.mouseCapture)return t=1<this.disconnect(!0),window.addEventListener("unload",e),window.addEventListener("beforeunload",e)}initCanvas(e,t,n){return this.canvas.width=e,this.canvas.height=t,this.resolution={w:e,h:t},this.decoder.postMessage(this.resolution),this.setScale(this.scale)}process(e){var t,n,s;if(this.socket)return n=new Uint8Array(e.pixels),(s=(t=this.canvas.getContext("2d",{alpha:!1})).createImageData(e.w,e.h)).data.set(n),t.putImageData(s,e.x,e.y),this.socket.send(this.buildCommand(4,1));this.socket.send(this.buildCommand(4,1))}setScale(e){if(this.scale=e,this.canvas)return this.canvas.style.transformOrigin="0 0",this.canvas.style.transform="scale("+e+")"}connect(e,t){var n;if(n=this,this.disconnect(!1),this.ws)return this.socket=new WebSocket(this.ws),this.socket.binaryType="arraybuffer",this.socket.onopen=function(){return console.log("socket opened"),n.initConnection(e,t)},this.socket.onmessage=function(e){return n.consume(e)},this.socket.onerror=e=>n.onerror("Websocket error"),this.socket.onclose=function(){return n.socket=null,n.canvas.style.cursor="auto",n.canvas&&n.resolution&&n.canvas.getContext("2d").clearRect(0,0,n.resolution.w,n.resolution.h),n.pingto&&clearTimeout(n.pingto),n.pingto=void 0,n.ondisconnect(),console.log("socket closed")}}disconnect(e){return this.socket&&this.socket.close(),this.socket=void 0,e&&this.decoder.terminate(),this.enableEvent=!1}initConnection(e,t){var n;return(n=new Uint8Array(e.length+2))[0]=16,n[1]=50,t&&(t.bbp&&(n[0]=t.bbp),t.quality&&(n[1]=t.quality)),n.set((new TextEncoder).encode(e),2),this.socket.send(this.buildCommand(1,n))}resetModifierKeys(){if(this.socket&&this.enableEvent)return this.sendKeyEvent(65511,0),this.sendKeyEvent(65512,0),this.sendKeyEvent(65505,0),this.sendKeyEvent(65507,0),this.sendKeyEvent(65513,0)}sendPointEvent(e,t,n){var s;if(this.socket&&this.enableEvent)return(s=new Uint8Array(5))[0]=255&e,s[1]=e>>8,s[2]=255&t,s[3]=t>>8,s[4]=n,this.socket.send(this.buildCommand(5,s))}sendKeyEvent(e,t){var n;if(this.socket&&this.enableEvent)return(n=new Uint8Array(3))[0]=255&e,n[1]=e>>8&255,n[2]=t,this.socket.send(this.buildCommand(6,n))}sendPing(){if(this.socket)return this.socket.send(this.buildCommand(8,"PING WVNC"))}buildCommand(e,t){var n,s;switch(s=void 0,typeof t){case"string":s=(new TextEncoder).encode(t);break;case"number":s=new Uint8Array([t]);break;default:s=t}return(n=new Uint8Array(s.length+3))[0]=e,n[2]=s.length>>8,n[1]=15&s.length,n.set(s,3),n.buffer}oncopy(e){return console.log("Get clipboard text: "+e)}onpassword(){return new Promise((function(e,t){return t("onpassword is not implemented")}))}sendTextAsClipboard(e){var t;if(this.socket)return this.socket.send(this.buildCommand(7,e)),t="v".charCodeAt(0),this.sendKeyEvent(65507,1),this.sendKeyEvent(t,1),this.sendKeyEvent(t,0),this.sendKeyEvent(65507,0)}oncredential(){return new Promise((function(e,t){return t("oncredential is not implemented")}))}onerror(e){return console.log("Error",e)}onresize(){return console.log("resize")}ondisconnect(){return console.log("disconnect")}consume(e){var t,n,s,i,a,o,r;switch(t=(n=new Uint8Array(e.data))[0],o=this,t){case 254:return n=n.subarray(1,n.length-1),s=new TextDecoder("utf-8"),this.onerror(s.decode(n));case 129:return console.log("Request for password"),this.enableEvent=!1,this.onpassword().then((function(e){return o.socket.send(o.buildCommand(2,e)),o.enableEvent=!0}));case 130:return console.log("Request for login"),this.enableEvent=!1,this.oncredential().then((function(e,t){var n;return(n=new Uint8Array(e.length+t.length+1)).set((new TextEncoder).encode(e),0),n.set(["\0"],e.length),n.set((new TextEncoder).encode(t),e.length+1),o.socket.send(o.buildCommand(3,n)),o.enableEvent=!0}));case 131:if(r=n[1]|n[2]<<8,a=n[3]|n[4]<<8,this.initCanvas(r,a),this.socket.send(this.buildCommand(4,1)),this.enableEvent=!0,this.onresize(),this.pingto)return;return i=()=>(this.sendPing(),this.pingto=setTimeout(i,5e3)),this.pingto=setTimeout(i,5e3);case 132:return this.decoder.postMessage(n.buffer,[n.buffer]);case 133:return n=n.subarray(1),s=new TextDecoder("utf-8"),this.oncopy(s.decode(n)),this.socket.send(this.buildCommand(4,1));default:return console.log(t)}}},window.WVNC=s}).call(this); \ No newline at end of file +(function(){var t,e,n,s;(t=class t extends this.OS.GUI.BasicDialog{constructor(){super("ConnectionDialog",t.scheme)}main(){var t;return super.main(),this.find("bbp").data=[{text:"16 bits",value:16},{text:"32 bits",value:32}],this.find("txtWVNC").value=this.parent.setting.wvnc,this.find("txtServer").value=this.parent.setting.server,t=0,32===this.parent.setting.bbc&&(t=1),this.find("bbp").selected=t,this.find("jq").value=this.parent.setting.quality,this.find("bt-ok").onbtclick=t=>{if(this.handle)return this.parent.setting.wvnc=this.find("txtWVNC").value,this.parent.setting.server=this.find("txtServer").value,this.parent.setting.bbc=this.find("bbp").selectedItem.data.value,this.parent.setting.quality=this.find("jq").value,this.handle(void 0),this.quit()},this.find("bt-cancel").onbtclick=t=>this.quit()}}).scheme='\n \n \n \n
\n \n \n
\n \n \n
\n \n
\n \n \n
\n
\n
\n
\n',(e=class t extends this.OS.GUI.BasicDialog{constructor(){super("CredentialDialog",t.scheme)}main(){return this.find("bt-ok").onbtclick=()=>{var t;return this.handle?(t={username:this.find("txtUser").value,password:this.find("txtPass").value},this.handle(t),this.quit()):this.quit()},this.find("bt-cancel").onbtclick=()=>this.quit()}}).scheme='\n \n \n \n
\n \n
\n \n \n
\n
\n
\n
',n=class extends this.OS.application.BaseApplication{constructor(t){super("RemoteDesktop",t)}main(){var t,n;return this.canvas=this.find("screen"),this.container=this.find("container"),this.zoom=this.find("zoom"),this.btreset=this.find("btreset"),this.zoom.max=200,this.zoom.value=100,this.zoom.onvaluechange=t=>this.setScale(),this.switch=this.find("capture_mouse"),this.switch.onswchange=t=>this.client.mouseCapture=this.switch.swon,n="ws",window.location.protocol.startsWith("https")&&(n+="s"),t=""+window.location.host,window.location.port&&""!==window.location.port&&(t+=":"+window.location.port),this.setting.wvnc||(this.setting.wvnc=`${n}://${t}/wvnc`),this.setting.server||(this.setting.server="127.0.0.1:5900"),this.setting.bbp||(this.setting.bbp=16),this.setting.quality||(this.setting.quality=40),this.btreset.onbtclick=t=>{var e,n,s,i;return i=$(this.container).width(),e=$(this.container).height(),n=i/this.client.resolution.w,s=e/this.client.resolution.h,this.zoom.value=n>s?100*s:100*n,this.setScale()},this.client=new s({element:this.canvas}),this.bindKey("CTRL-SHIFT-V",t=>this.pasteText()),this.client.ondisconnect=()=>this.showConnectionDialog(),this.client.onresize=()=>this.setScale(),this.client.onpassword=()=>new Promise((t,e)=>this.openDialog("PromptDialog",{title:__("VNC password"),label:__("VNC password"),value:"password",type:"password"}).then((function(e){return t(e)}))),this.client.oncopy=t=>this._api.setClipboard(t),this.client.oncredential=()=>new Promise((t,n)=>this.openDialog(new e,{title:__("User credential")}).then((function(e){return t(e.username,e.password)}))),this.on("focus",t=>$(this.canvas).focus()),this.client.init().then(()=>this.showConnectionDialog())}pasteText(){var t;if(this.client)return t=t=>{if(t&&""!==t)return this.client.sendTextAsClipboard(t)},this._api.getClipboard().then(e=>t(e)).catch(e=>(this.error(__("Unable to paste"),e),this.openDialog("TextDialog",{title:"Paste text"}).then(e=>t(e)).catch(t=>this.error(t.toString(),t))))}setScale(){if(console.log("scale changed"),this.client&&this.client.resolution)return this.client.setScale(this.zoom.value/100),this.container.scrollLeft=0,this.container.scrollTop=0}menu(){return[{text:"__(Connection)",nodes:[{text:"__(New Connection)",dataid:this.name+"-new"},{text:"__(Disconnect)",dataid:this.name+"-close"}],onchildselect:t=>{if(this.client)return this.client.disconnect(!1)}}]}showConnectionDialog(){if(this.client)return this.openDialog(new t,{title:__("Connection"),data:this.setting}).then(t=>(this.client.ws=this.setting.wvnc,this.client.connect(this.setting.server,this.setting)))}cleanup(){return this.client&&this.client.disconnect(!0),this.client=void 0}},this.OS.register("RemoteDesktop",n),s=class{constructor(t){var e,n;this.socket=void 0,this.ws=void 0,this.canvas=void 0,n="pkg://RemoteDesktop/decoder_asm.js".asFileHandle().getlink(),this.scale=1,t.ws&&(this.ws=t.ws),this.canvas=t.element,"string"==typeof this.canvas&&(this.canvas=document.getElementById(this.canvas)),this.decoder=new Worker(n),this.enableEvent=!1,this.mouseCapture=!0,this.pingto=!1,e=this,this.mouseMask=0,this.decoder.onmessage=function(t){return e.process(t.data)}}init(){var t;return t=this,new Promise((function(e,n){return t.canvas?($(t.canvas).attr("tabindex","1"),$(t.canvas).on("focus",()=>t.resetModifierKeys()),t.initInputEvent(),e()):n("Canvas is not set")}))}initInputEvent(){var t,e,n,s;if(n=this,this.canvas&&(e=function(t){var e;return e=n.canvas.getBoundingClientRect(),{x:Math.floor((t.clientX-e.left)/n.scale),y:Math.floor((t.clientY-e.top)/n.scale)}},s=function(t){var s;if(n.enableEvent)return s=e(t),n.sendPointEvent(s.x,s.y,n.mouseMask)},n.canvas))return n.canvas.oncontextmenu=function(t){return t.preventDefault(),!1},n.canvas.onmousemove=function(t){if(n.mouseCapture)return s(t)},n.canvas.onmousedown=function(t){var e;if(n.mouseCapture)return e=1<this.disconnect(!0),window.addEventListener("unload",t),window.addEventListener("beforeunload",t)}initCanvas(t,e,n){return this.canvas.width=t,this.canvas.height=e,this.resolution={w:t,h:e},this.decoder.postMessage(this.resolution),this.setScale(this.scale)}process(t){var e,n,s;if(this.socket)return n=new Uint8Array(t.pixels),(s=(e=this.canvas.getContext("2d",{alpha:!1})).createImageData(t.w,t.h)).data.set(n),e.putImageData(s,t.x,t.y),this.socket.send(this.buildCommand(4,1));this.socket.send(this.buildCommand(4,1))}setScale(t){if(this.scale=t,this.canvas)return this.canvas.style.transformOrigin="0 0",this.canvas.style.transform="scale("+t+")"}connect(t,e){var n;if(n=this,this.disconnect(!1),this.ws)return this.socket=new WebSocket(this.ws),this.socket.binaryType="arraybuffer",this.socket.onopen=function(){return console.log("socket opened"),n.initConnection(t,e)},this.socket.onmessage=function(t){return n.consume(t)},this.socket.onerror=t=>n.onerror("Websocket error"),this.socket.onclose=function(){return n.socket=null,n.canvas.style.cursor="auto",n.canvas&&n.resolution&&n.canvas.getContext("2d").clearRect(0,0,n.resolution.w,n.resolution.h),n.pingto&&clearTimeout(n.pingto),n.pingto=void 0,n.ondisconnect(),console.log("socket closed")}}disconnect(t){return this.socket&&this.socket.close(),this.socket=void 0,t&&this.decoder.terminate(),this.enableEvent=!1}initConnection(t,e){var n;return(n=new Uint8Array(t.length+2))[0]=16,n[1]=50,e&&(e.bbp&&(n[0]=e.bbp),e.quality&&(n[1]=e.quality)),n.set((new TextEncoder).encode(t),2),this.socket.send(this.buildCommand(1,n))}resetModifierKeys(){if(this.socket&&this.enableEvent)return this.sendKeyEvent(65511,0),this.sendKeyEvent(65512,0),this.sendKeyEvent(65505,0),this.sendKeyEvent(65507,0),this.sendKeyEvent(65513,0)}sendPointEvent(t,e,n){var s;if(this.socket&&this.enableEvent)return(s=new Uint8Array(5))[0]=255&t,s[1]=t>>8,s[2]=255&e,s[3]=e>>8,s[4]=n,this.socket.send(this.buildCommand(5,s))}sendKeyEvent(t,e){var n;if(this.socket&&this.enableEvent)return(n=new Uint8Array(3))[0]=255&t,n[1]=t>>8&255,n[2]=e,this.socket.send(this.buildCommand(6,n))}sendPing(){if(this.socket)return this.socket.send(this.buildCommand(8,"PING WVNC"))}buildCommand(t,e){var n,s;switch(s=void 0,typeof e){case"string":s=(new TextEncoder).encode(e);break;case"number":s=new Uint8Array([e]);break;default:s=e}return(n=new Uint8Array(s.length+3))[0]=t,n[2]=s.length>>8,n[1]=15&s.length,n.set(s,3),n.buffer}oncopy(t){return console.log("Get clipboard text: "+t)}onpassword(){return new Promise((function(t,e){return e("onpassword is not implemented")}))}sendTextAsClipboard(t){var e;if(this.socket)return this.socket.send(this.buildCommand(7,t)),e="v".charCodeAt(0),this.sendKeyEvent(65507,1),this.sendKeyEvent(e,1),this.sendKeyEvent(e,0),this.sendKeyEvent(65507,0)}oncredential(){return new Promise((function(t,e){return e("oncredential is not implemented")}))}onerror(t){return console.log("Error",t)}onresize(){return console.log("resize")}ondisconnect(){return console.log("disconnect")}consume(t){var e,n,s,i,a,o,r;switch(e=(n=new Uint8Array(t.data))[0],o=this,e){case 254:return n=n.subarray(1,n.length-1),s=new TextDecoder("utf-8"),this.onerror(s.decode(n));case 129:return console.log("Request for password"),this.enableEvent=!1,this.onpassword().then((function(t){return o.socket.send(o.buildCommand(2,t)),o.enableEvent=!0}));case 130:return console.log("Request for login"),this.enableEvent=!1,this.oncredential().then((function(t,e){var n;return(n=new Uint8Array(t.length+e.length+1)).set((new TextEncoder).encode(t),0),n.set(["\0"],t.length),n.set((new TextEncoder).encode(e),t.length+1),o.socket.send(o.buildCommand(3,n)),o.enableEvent=!0}));case 131:if(r=n[1]|n[2]<<8,a=n[3]|n[4]<<8,this.initCanvas(r,a),this.socket.send(this.buildCommand(4,1)),this.enableEvent=!0,this.onresize(),this.pingto)return;return i=()=>(this.sendPing(),this.pingto=setTimeout(i,5e3)),this.pingto=setTimeout(i,5e3);case 132:return this.decoder.postMessage(n.buffer,[n.buffer]);case 133:return n=n.subarray(1),s=new TextDecoder("utf-8"),this.oncopy(s.decode(n)),this.socket.send(this.buildCommand(4,1));default:return console.log(e)}}},window.WVNC=s}).call(this); \ No newline at end of file diff --git a/RemoteDesktop/build/debug/package.json b/RemoteDesktop/build/debug/package.json index bc2fab3..5a22f22 100644 --- a/RemoteDesktop/build/debug/package.json +++ b/RemoteDesktop/build/debug/package.json @@ -7,7 +7,7 @@ "author": "Dany LE", "email": "contact@iohub.dev" }, - "version":"0.1.16-b", + "version":"0.1.17-b", "dependencies": [], "category":"Internet", "icon": "icon.png", diff --git a/RemoteDesktop/build/release/RemoteDesktop.zip b/RemoteDesktop/build/release/RemoteDesktop.zip index a2787d6e994024c9e5642ed1184ec6b2e1bd448b..62fd7c19bde2b3d8296f7afef2f9c44a797567aa 100644 GIT binary patch delta 5124 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 delta 4999 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 diff --git a/RemoteDesktop/coffees/main.coffee b/RemoteDesktop/coffees/main.coffee index 1682182..01de20c 100644 --- a/RemoteDesktop/coffees/main.coffee +++ b/RemoteDesktop/coffees/main.coffee @@ -6,18 +6,23 @@ class ConnectionDialog extends this.OS.GUI.BasicDialog main: () -> super.main() @find("bbp").data = [ - { text: "16 bits", value: 16, selected: true }, + { text: "16 bits", value: 16}, { text: "32 bits", value: 32 } ] - @find("jq").value = 40 + (@find "txtWVNC").value = @parent.setting.wvnc + (@find "txtServer").value = @parent.setting.server + sel = 0 + sel = 1 if @parent.setting.bbc is 32 + (@find "bbp").selected = sel + (@find "jq").value = @parent.setting.quality + @find("bt-ok").onbtclick = (e) => return unless @handle - data = - wvnc: (@find "txtWVNC").value - server: (@find "txtServer").value - bbp: (@find "bbp").selectedItem.data.value, - quality:(@find "jq").value - @handle data + @parent.setting.wvnc = (@find "txtWVNC").value + @parent.setting.server = (@find "txtServer").value + @parent.setting.bbc = (@find "bbp").selectedItem.data.value + @parent.setting.quality = (@find "jq").value + @handle undefined @quit() @find("bt-cancel").onbtclick = (e) => @@ -26,8 +31,8 @@ class ConnectionDialog extends this.OS.GUI.BasicDialog ConnectionDialog.scheme = """ - - + +
@@ -92,6 +97,16 @@ class RemoteDesktop extends this.OS.application.BaseApplication @switch = @find "capture_mouse" @switch.onswchange = (e) => @client.mouseCapture = @switch.swon + + proto = "ws" + proto += "s" if window.location.protocol.startsWith "https" + host = "#{window.location.host}" + if window.location.port and window.location.port isnt "" + host += ":#{window.location.port}" + @setting.wvnc = "#{proto}://#{host}/wvnc" unless @setting.wvnc + @setting.server = "127.0.0.1:5900" unless @setting.server + @setting.bbp = 16 unless @setting.bbp + @setting.quality = 40 unless @setting.quality @btreset.onbtclick = (e) => w = $(@container).width() h = $(@container).height() @@ -177,10 +192,10 @@ class RemoteDesktop extends this.OS.application.BaseApplication showConnectionDialog: () -> return unless @client - @openDialog new ConnectionDialog, { title: __("Connection")} + @openDialog new ConnectionDialog, { title: __("Connection"), data: @setting} .then (d) => - @client.ws = d.wvnc - @client.connect d.server, d + @client.ws = @setting.wvnc + @client.connect @setting.server, @setting cleanup: () -> @client.disconnect(true) if @client diff --git a/RemoteDesktop/package.json b/RemoteDesktop/package.json index bc2fab3..5a22f22 100644 --- a/RemoteDesktop/package.json +++ b/RemoteDesktop/package.json @@ -7,7 +7,7 @@ "author": "Dany LE", "email": "contact@iohub.dev" }, - "version":"0.1.16-b", + "version":"0.1.17-b", "dependencies": [], "category":"Internet", "icon": "icon.png", diff --git a/packages.json b/packages.json index 6c53f5a..bd58827 100644 --- a/packages.json +++ b/packages.json @@ -375,7 +375,7 @@ "description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/2.0.x/RemoteDesktop/README.md", "category": "Internet", "author": "Dany LE", - "version": "0.1.16-b", + "version": "0.1.17-b", "dependencies": [],"category":"Internet","icon":"icon.png","mimes":["none"], "download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/2.0.x/RemoteDesktop/build/release/RemoteDesktop.zip" }, diff --git a/release/RemoteDesktop.md b/release/RemoteDesktop.md index d445657..601c8b6 100644 --- a/release/RemoteDesktop.md +++ b/release/RemoteDesktop.md @@ -7,6 +7,7 @@ Further information on **wvnc**: [https://blog.lxsang.me/post/id/23](https://blo ## Change logs +* v0.1.17 - Allow to save current connection to setting * v0.1.16 - Allow to enable/disable mouse capture in remote desktop, remove some unused toolbar buttons * v0.1.15 - Only send ACK command when finish rendering the received frame, this allows to vastly improve performance and bandwidth * v0.1.14 - Add toolbar for canvas size control diff --git a/release/RemoteDesktop.zip b/release/RemoteDesktop.zip index a2787d6e994024c9e5642ed1184ec6b2e1bd448b..62fd7c19bde2b3d8296f7afef2f9c44a797567aa 100644 GIT binary patch delta 5124 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 delta 4999 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 diff --git a/release/packages.json b/release/packages.json index 6aa5b9c..16f3b75 100644 --- a/release/packages.json +++ b/release/packages.json @@ -1 +1 @@ -[{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Archive.zip","name":"Archive","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Archive.md","author":"Xuan Sang LE","version":"0.0.4-a","dependencies":[],"pkgname":"Archive","category":"Utility"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libwvnc.zip","name":"libwvnc","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libwvnc.md","author":"","version":"0.1.2-a","dependencies":["libjpeg@0.1.1-a"],"pkgname":"libwvnc","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/About.zip","name":"About AntOS","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/About.md","author":"Xuan Sang LE","version":"0.1.2-b","dependencies":[],"pkgname":"About","category":"Utility"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Blogger.zip","name":"Blogging application","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Blogger.md","author":"Xuan Sang LE","version":"0.2.13-a","dependencies":["SimpleMDE@2.18.0-r","Katex@0.11.1-r","SQLiteDB@0.1.0-a"],"pkgname":"Blogger","category":"Internet"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GitGraph.zip","name":"GIT Visualization","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GitGraph.md","author":"Dany LE","version":"0.1.5-b","dependencies":[],"pkgname":"GitGraph","category":"Development"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/LibreOffice.zip","name":"Libre Office Online","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/LibreOffice.md","author":"Dany LE","version":"0.1.5-a","dependencies":[],"pkgname":"LibreOffice","category":"Office"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AceDiff.zip","name":"AceDiff addon library","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AceDiff.md","author":"","version":"3.0.3-r","dependencies":["ACECore@1.4.12-r"],"pkgname":"AceDiff","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/OnlyOffice.zip","name":"Office Suite","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/OnlyOffice.md","author":"Xuan Sang LE","version":"0.1.8-a","dependencies":[],"pkgname":"OnlyOffice","category":"Office"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/vfsx.zip","name":"AntOS VFS handles","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/vfsx.md","author":"Dany LE","version":"0.1.1-b","dependencies":[],"pkgname":"vfsx","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/PDFLib.zip","name":"PDFLib","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/PDFLib.md","author":"pdf-lib.js.org","version":"1.17.1","dependencies":[],"pkgname":"PDFLib","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Antedit.zip","name":"Antos Editor","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Antedit.md","author":"Xuan Sang LE","version":"0.2.6-b","dependencies":["MonacoCore@0.33.0-r"],"pkgname":"Antedit","category":"Development"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Booklet.zip","name":"Booklet","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Booklet.md","author":"Xuan Sang LE","version":"0.2.5-a","dependencies":["SimpleMDE@2.18.0-r","Katex@0.11.1-r"],"pkgname":"Booklet","category":"Office"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Docify.zip","name":"Docify","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Docify.md","author":"Dany LE","version":"0.1.1-b","dependencies":["SQLiteDB@0.1.0-a","libpdfjs@2.6.347-r","PDFLib@1.17.1"],"pkgname":"Docify","category":"Office"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AntunnelPlugins.zip","name":"Antunnel Plugins","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AntunnelPlugins.md","author":"Dany LE","version":"0.1.2-a","dependencies":["Antunnel@0.2.0-b"],"pkgname":"AntunnelPlugins","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ShowCase.zip","name":"ShowCase","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ShowCase.md","author":"Xuan Sang LE","version":"0.0.8-a","dependencies":[],"pkgname":"ShowCase","category":"Utility"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/RemoteDesktop.zip","name":"WVNC remote desktop","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/RemoteDesktop.md","author":"Dany LE","version":"0.1.16-b","dependencies":[],"pkgname":"RemoteDesktop","category":"Internet"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Clipper.zip","name":"Clipper","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Clipper.md","author":"Xuan Sang LE","version":"0.1.4-a","dependencies":[],"pkgname":"Clipper","category":"Utility"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Antunnel.zip","name":"Antunnel","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Antunnel.md","author":"Xuan Sang LE","version":"0.2.1-b","dependencies":[],"pkgname":"Antunnel","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/RemoteCamera.zip","name":"Remote Camera","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/RemoteCamera.md","author":"","version":"0.1.5-a","dependencies":["libjpeg@0.1.1-a","Antunnel@0.1.8-a"],"pkgname":"RemoteCamera","category":"Graphics"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/DiffEditor.zip","name":"Diff Editor","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/DiffEditor.md","author":"","version":"0.1.6-a","dependencies":["AceDiff@3.0.3-r"],"pkgname":"DiffEditor","category":"Development"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libthreejs.zip","name":"libthreejs","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libthreejs.md","author":"","version":"0.0.129-r","dependencies":[],"pkgname":"libthreejs","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SimpleMDE.zip","name":"EasyMDE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SimpleMDE.md","author":"","version":"2.18.0-r","dependencies":[],"pkgname":"SimpleMDE","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SQLiteDB.zip","name":"SQLite3 Browser","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SQLiteDB.md","author":"Dany LE","version":"0.1.0-a","dependencies":[],"pkgname":"SQLiteDB","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GPClient.zip","name":"Generic Purpose client","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GPClient.md","author":"Xuan Sang LE","version":"0.1.5-a","dependencies":[],"pkgname":"GPClient","category":"Internet"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/vTerm.zip","name":"Virtual Terminal","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/vTerm.md","author":"Xuan Sang LE","version":"0.1.20-a","dependencies":["Antunnel@0.2.1-b","xTerm@5.1.0-r"],"pkgname":"vTerm","category":"System"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ActivityMonitor.zip","name":"Activity monitor","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ActivityMonitor.md","author":"Xuan Sang LE","version":"0.0.8-b","dependencies":[],"pkgname":"ActivityMonitor","category":"System"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ShaderPlayground.zip","name":"OpenGL Shader Playground","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ShaderPlayground.md","author":"Xuan Sang LE","version":"0.0.4-a","dependencies":["libthreejs@0.0.129-r"],"pkgname":"ShaderPlayground","category":"Development"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/MonacoCore.zip","name":"Monaco editor core","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/MonacoCore.md","author":"","version":"0.33.0-r","dependencies":[],"pkgname":"MonacoCore","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/LuaPlayground.zip","name":"LuaPlayground","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/LuaPlayground.md","author":"Xuan Sang LE","version":"0.1.2-a","dependencies":["ACECore@1.4.12-r"],"pkgname":"LuaPlayground","category":"Development"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/VizApp.zip","name":"Viz editor","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/VizApp.md","author":"Xuan Sang LE","version":"0.1.0-a","dependencies":["ACECore@1.4.12-r"],"pkgname":"VizApp","category":"Graphics"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ServerLogClient.zip","name":"Server log monitor","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ServerLogClient.md","author":"","version":"0.1.3-b","dependencies":["Antunnel@0.2.1-b"],"pkgname":"ServerLogClient","category":"System"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Dockman.zip","name":"Remote Docker Manager","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Dockman.md","author":"Xuan Sang LE","version":"0.1.1-b","dependencies":[],"pkgname":"Dockman","category":"Development"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SystemControl.zip","name":"System monitoring","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SystemControl.md","author":"","version":"0.1.13-a","dependencies":["Antunnel@0.2.1-b"],"pkgname":"SystemControl","category":"System"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libpdfjs.zip","name":"PDF JS library","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libpdfjs.md","author":"Xuan Sang LE","version":"2.6.347-r","dependencies":[],"pkgname":"libpdfjs","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ImageEditor.zip","name":"Image editor","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ImageEditor.md","author":"Xuan Sang LE","version":"0.1.0-a","dependencies":["libfabric@4.4.0-r"],"pkgname":"ImageEditor","category":"Graphics"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/DBDecoder.zip","name":"DBDecoder","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/DBDecoder.md","author":"","version":"0.0.2-a","dependencies":[],"pkgname":"DBDecoder","category":"Other"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Katex.zip","name":"Katex","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Katex.md","author":"","version":"0.11.1-r","dependencies":[],"pkgname":"Katex","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libplotly.zip","name":"Plotly","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libplotly.md","author":"Dany LE","version":"2.6.2-r","dependencies":[],"pkgname":"libplotly","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/CodePad.zip","name":"Code","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/CodePad.md","author":"Xuan Sang LE","version":"0.1.8-b","dependencies":["ACECore@1.4.12-r"],"pkgname":"CodePad","category":"Development"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AntunnelTestClient.zip","name":"AntunnelTestClient","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AntunnelTestClient.md","author":"Dany LE","version":"0.1.0-a","dependencies":["Antunnel@0.2.1-b"],"pkgname":"AntunnelTestClient","category":"Development"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libjpeg.zip","name":"libjpeg","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libjpeg.md","author":"","version":"0.1.1-a","dependencies":[],"pkgname":"libjpeg","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libfabric.zip","name":"Fabric.js library","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libfabric.md","author":"","version":"4.4.0-r","dependencies":[],"pkgname":"libfabric","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libantosdk.zip","name":"AntOS SDK builder","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libantosdk.md","author":"Xuan Sang LE","version":"0.1.2-b","dependencies":[],"pkgname":"libantosdk","category":"Development"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/xTerm.zip","name":"xTerm Library","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/xTerm.md","author":"","version":"5.1.0-r","dependencies":[],"pkgname":"xTerm","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/TinyEditor.zip","name":"Tiny editor","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/TinyEditor.md","author":"Xuan Sang LE","version":"0.0.4-a","dependencies":[],"pkgname":"TinyEditor","category":"Other"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ACECore.zip","name":"ACE Editor core","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ACECore.md","author":"","version":"1.4.12-r","dependencies":[],"pkgname":"ACECore","category":"Library"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Preview.zip","name":"Preview","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Preview.md","author":"Xuan Sang LE","version":"0.1.3-a","dependencies":["libpdfjs@2.6.347-r"],"pkgname":"Preview","category":"Graphics"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GraphEditor.zip","name":"Graph Editor","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GraphEditor.md","author":"Xuan Sang LE","version":"0.1.2-a","dependencies":["ACECore@1.4.12-r"],"pkgname":"GraphEditor","category":"Graphics"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/MarkOn.zip","name":"Markdown editor","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/MarkOn.md","author":"Xuan Sang LE","version":"0.1.1-a","dependencies":["SimpleMDE@2.18.0-r"],"pkgname":"MarkOn","category":"Office"}] \ No newline at end of file +[{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Archive.zip","dependencies":[],"category":"Utility","author":"Xuan Sang LE","pkgname":"Archive","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Archive.md","name":"Archive","version":"0.0.4-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libwvnc.zip","dependencies":["libjpeg@0.1.1-a"],"category":"Library","author":"","pkgname":"libwvnc","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libwvnc.md","name":"libwvnc","version":"0.1.2-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/About.zip","dependencies":[],"category":"Utility","author":"Xuan Sang LE","pkgname":"About","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/About.md","name":"About AntOS","version":"0.1.2-b"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Blogger.zip","dependencies":["SimpleMDE@2.18.0-r","Katex@0.11.1-r","SQLiteDB@0.1.0-a"],"category":"Internet","author":"Xuan Sang LE","pkgname":"Blogger","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Blogger.md","name":"Blogging application","version":"0.2.13-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GitGraph.zip","dependencies":[],"category":"Development","author":"Dany LE","pkgname":"GitGraph","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GitGraph.md","name":"GIT Visualization","version":"0.1.5-b"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/LibreOffice.zip","dependencies":[],"category":"Office","author":"Dany LE","pkgname":"LibreOffice","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/LibreOffice.md","name":"Libre Office Online","version":"0.1.5-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AceDiff.zip","dependencies":["ACECore@1.4.12-r"],"category":"Library","author":"","pkgname":"AceDiff","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AceDiff.md","name":"AceDiff addon library","version":"3.0.3-r"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/OnlyOffice.zip","dependencies":[],"category":"Office","author":"Xuan Sang LE","pkgname":"OnlyOffice","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/OnlyOffice.md","name":"Office Suite","version":"0.1.8-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/vfsx.zip","dependencies":[],"category":"Library","author":"Dany LE","pkgname":"vfsx","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/vfsx.md","name":"AntOS VFS handles","version":"0.1.1-b"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/PDFLib.zip","dependencies":[],"category":"Library","author":"pdf-lib.js.org","pkgname":"PDFLib","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/PDFLib.md","name":"PDFLib","version":"1.17.1"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Antedit.zip","dependencies":["MonacoCore@0.33.0-r"],"category":"Development","author":"Xuan Sang LE","pkgname":"Antedit","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Antedit.md","name":"Antos Editor","version":"0.2.6-b"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Booklet.zip","dependencies":["SimpleMDE@2.18.0-r","Katex@0.11.1-r"],"category":"Office","author":"Xuan Sang LE","pkgname":"Booklet","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Booklet.md","name":"Booklet","version":"0.2.5-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Docify.zip","dependencies":["SQLiteDB@0.1.0-a","libpdfjs@2.6.347-r","PDFLib@1.17.1"],"category":"Office","author":"Dany LE","pkgname":"Docify","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Docify.md","name":"Docify","version":"0.1.1-b"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AntunnelPlugins.zip","dependencies":["Antunnel@0.2.0-b"],"category":"Library","author":"Dany LE","pkgname":"AntunnelPlugins","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AntunnelPlugins.md","name":"Antunnel Plugins","version":"0.1.2-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ShowCase.zip","dependencies":[],"category":"Utility","author":"Xuan Sang LE","pkgname":"ShowCase","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ShowCase.md","name":"ShowCase","version":"0.0.8-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/RemoteDesktop.zip","dependencies":[],"category":"Internet","author":"Dany LE","pkgname":"RemoteDesktop","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/RemoteDesktop.md","name":"WVNC remote desktop","version":"0.1.17-b"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Clipper.zip","dependencies":[],"category":"Utility","author":"Xuan Sang LE","pkgname":"Clipper","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Clipper.md","name":"Clipper","version":"0.1.4-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Antunnel.zip","dependencies":[],"category":"Library","author":"Xuan Sang LE","pkgname":"Antunnel","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Antunnel.md","name":"Antunnel","version":"0.2.1-b"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/RemoteCamera.zip","dependencies":["libjpeg@0.1.1-a","Antunnel@0.1.8-a"],"category":"Graphics","author":"","pkgname":"RemoteCamera","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/RemoteCamera.md","name":"Remote Camera","version":"0.1.5-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/DiffEditor.zip","dependencies":["AceDiff@3.0.3-r"],"category":"Development","author":"","pkgname":"DiffEditor","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/DiffEditor.md","name":"Diff Editor","version":"0.1.6-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libthreejs.zip","dependencies":[],"category":"Library","author":"","pkgname":"libthreejs","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libthreejs.md","name":"libthreejs","version":"0.0.129-r"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SimpleMDE.zip","dependencies":[],"category":"Library","author":"","pkgname":"SimpleMDE","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SimpleMDE.md","name":"EasyMDE","version":"2.18.0-r"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SQLiteDB.zip","dependencies":[],"category":"Library","author":"Dany LE","pkgname":"SQLiteDB","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SQLiteDB.md","name":"SQLite3 Browser","version":"0.1.0-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GPClient.zip","dependencies":[],"category":"Internet","author":"Xuan Sang LE","pkgname":"GPClient","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GPClient.md","name":"Generic Purpose client","version":"0.1.5-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/vTerm.zip","dependencies":["Antunnel@0.2.1-b","xTerm@5.1.0-r"],"category":"System","author":"Xuan Sang LE","pkgname":"vTerm","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/vTerm.md","name":"Virtual Terminal","version":"0.1.20-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ActivityMonitor.zip","dependencies":[],"category":"System","author":"Xuan Sang LE","pkgname":"ActivityMonitor","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ActivityMonitor.md","name":"Activity monitor","version":"0.0.8-b"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ShaderPlayground.zip","dependencies":["libthreejs@0.0.129-r"],"category":"Development","author":"Xuan Sang LE","pkgname":"ShaderPlayground","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ShaderPlayground.md","name":"OpenGL Shader Playground","version":"0.0.4-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/MonacoCore.zip","dependencies":[],"category":"Library","author":"","pkgname":"MonacoCore","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/MonacoCore.md","name":"Monaco editor core","version":"0.33.0-r"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/LuaPlayground.zip","dependencies":["ACECore@1.4.12-r"],"category":"Development","author":"Xuan Sang LE","pkgname":"LuaPlayground","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/LuaPlayground.md","name":"LuaPlayground","version":"0.1.2-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/VizApp.zip","dependencies":["ACECore@1.4.12-r"],"category":"Graphics","author":"Xuan Sang LE","pkgname":"VizApp","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/VizApp.md","name":"Viz editor","version":"0.1.0-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ServerLogClient.zip","dependencies":["Antunnel@0.2.1-b"],"category":"System","author":"","pkgname":"ServerLogClient","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ServerLogClient.md","name":"Server log monitor","version":"0.1.3-b"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Dockman.zip","dependencies":[],"category":"Development","author":"Xuan Sang LE","pkgname":"Dockman","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Dockman.md","name":"Remote Docker Manager","version":"0.1.1-b"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SystemControl.zip","dependencies":["Antunnel@0.2.1-b"],"category":"System","author":"","pkgname":"SystemControl","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/SystemControl.md","name":"System monitoring","version":"0.1.13-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libpdfjs.zip","dependencies":[],"category":"Library","author":"Xuan Sang LE","pkgname":"libpdfjs","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libpdfjs.md","name":"PDF JS library","version":"2.6.347-r"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ImageEditor.zip","dependencies":["libfabric@4.4.0-r"],"category":"Graphics","author":"Xuan Sang LE","pkgname":"ImageEditor","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ImageEditor.md","name":"Image editor","version":"0.1.0-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/DBDecoder.zip","dependencies":[],"category":"Other","author":"","pkgname":"DBDecoder","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/DBDecoder.md","name":"DBDecoder","version":"0.0.2-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Katex.zip","dependencies":[],"category":"Library","author":"","pkgname":"Katex","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Katex.md","name":"Katex","version":"0.11.1-r"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libplotly.zip","dependencies":[],"category":"Library","author":"Dany LE","pkgname":"libplotly","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libplotly.md","name":"Plotly","version":"2.6.2-r"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/CodePad.zip","dependencies":["ACECore@1.4.12-r"],"category":"Development","author":"Xuan Sang LE","pkgname":"CodePad","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/CodePad.md","name":"Code","version":"0.1.8-b"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AntunnelTestClient.zip","dependencies":["Antunnel@0.2.1-b"],"category":"Development","author":"Dany LE","pkgname":"AntunnelTestClient","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/AntunnelTestClient.md","name":"AntunnelTestClient","version":"0.1.0-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libjpeg.zip","dependencies":[],"category":"Library","author":"","pkgname":"libjpeg","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libjpeg.md","name":"libjpeg","version":"0.1.1-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libfabric.zip","dependencies":[],"category":"Library","author":"","pkgname":"libfabric","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libfabric.md","name":"Fabric.js library","version":"4.4.0-r"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libantosdk.zip","dependencies":[],"category":"Development","author":"Xuan Sang LE","pkgname":"libantosdk","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/libantosdk.md","name":"AntOS SDK builder","version":"0.1.2-b"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/xTerm.zip","dependencies":[],"category":"Library","author":"","pkgname":"xTerm","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/xTerm.md","name":"xTerm Library","version":"5.1.0-r"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/TinyEditor.zip","dependencies":[],"category":"Other","author":"Xuan Sang LE","pkgname":"TinyEditor","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/TinyEditor.md","name":"Tiny editor","version":"0.0.4-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ACECore.zip","dependencies":[],"category":"Library","author":"","pkgname":"ACECore","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/ACECore.md","name":"ACE Editor core","version":"1.4.12-r"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Preview.zip","dependencies":["libpdfjs@2.6.347-r"],"category":"Graphics","author":"Xuan Sang LE","pkgname":"Preview","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/Preview.md","name":"Preview","version":"0.1.3-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GraphEditor.zip","dependencies":["ACECore@1.4.12-r"],"category":"Graphics","author":"Xuan Sang LE","pkgname":"GraphEditor","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/GraphEditor.md","name":"Graph Editor","version":"0.1.2-a"},{"download":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/MarkOn.zip","dependencies":["SimpleMDE@2.18.0-r"],"category":"Office","author":"Xuan Sang LE","pkgname":"MarkOn","description":"https://ci.iohub.dev/public/antos-release/packages/2.0.x/MarkOn.md","name":"Markdown editor","version":"0.1.1-a"}] \ No newline at end of file