diff --git a/libantosdk/README.md b/libantosdk/README.md index 6806f4b..336aef9 100644 --- a/libantosdk/README.md +++ b/libantosdk/README.md @@ -2,4 +2,5 @@ AntOSDK: development API for AntOS based applications/projects ## Change logs +- 0.0.5: add API that supports running Linux commands on server - 0.0.4: support automatic locale generation \ No newline at end of file diff --git a/libantosdk/build.json b/libantosdk/build.json index 3c1881b..3a00aab 100644 --- a/libantosdk/build.json +++ b/libantosdk/build.json @@ -78,6 +78,18 @@ } } ] + }, + "list": { + "require": ["linux"], + "jobs": [ + { + "name": "linux-exec", + "data": { + "cmd": "ls -al .", + "pwd": "home://" + } + } + ] } } } \ No newline at end of file diff --git a/libantosdk/build/debug/README.md b/libantosdk/build/debug/README.md index 6806f4b..336aef9 100644 --- a/libantosdk/build/debug/README.md +++ b/libantosdk/build/debug/README.md @@ -2,4 +2,5 @@ AntOSDK: development API for AntOS based applications/projects ## Change logs +- 0.0.5: add API that supports running Linux commands on server - 0.0.4: support automatic locale generation \ No newline at end of file diff --git a/libantosdk/build/debug/core/worker.js b/libantosdk/build/debug/core/worker.js index 3322d7f..6ee2f5b 100644 --- a/libantosdk/build/debug/core/worker.js +++ b/libantosdk/build/debug/core/worker.js @@ -72,7 +72,18 @@ class AntOSDKBaseJob { id: this.job.id, type: "log", error: false, - result: data + result: data, + show_time: true + }); + } + + log_print(data) { + postMessage({ + id: this.job.id, + type: "log", + error: false, + result: data, + show_time: false }); } @@ -81,7 +92,8 @@ class AntOSDKBaseJob { id: this.job.id, type: "log", error: true, - result: data + result: data, + show_time: true }); } diff --git a/libantosdk/build/debug/main.js b/libantosdk/build/debug/main.js index 966a176..d23a2cc 100644 --- a/libantosdk/build/debug/main.js +++ b/libantosdk/build/debug/main.js @@ -1 +1 @@ -var OS;!function(e){let t;!function(t){class r{constructor(t){this.worker=new Worker(t.asFileHandle().getlink()),this.jobs={},this.worker.onmessage=e=>{let t=e.data,r=this.jobs[t.id];r?"log"===t.type?r.logger&&(t.error?r.logger.error(t.result):r.logger.info(t.result)):(r.callback(t),delete this.jobs[t.id]):console.log("Unable to identify result of job",t.id,t)};const r={};for(const t in e.setting.system.packages){const o=e.setting.system.packages[t];r[t]={path:o.path,name:o.pkgname}}this.submit("sdk-setup",{REST:e.API.REST,pkgs:r})}newJobID(){return"job_"+Math.random().toString(36).replace(".","")}exectue_job(e,t,r,o,s){const n=this.newJobID(),i={id:n,cmd:e,data:t,root:r};this.jobs[n]={callback:o,logger:s},this.worker.postMessage(i)}submit(e,t,r,o){return new Promise((s,n)=>{this.exectue_job(e,t,r,e=>{if(e.error)return n(e.error);s(e.result)},o)})}terminate(){this.worker.terminate()}}class o{constructor(e,t){this.root=t,this.logger=e,o.worker||(o.worker=new r("pkg://libantosdk/core/worker.js"))}require(e){return this.run("sdk-import",e.map(e=>e+".worker.js"))}compile(e,t){return new Promise(async(r,o)=>{try{await this.require([e]),r(await this.run(e+"-compile",t))}catch(e){o(__e(e))}})}run(t,r){return"sdk-run-app"===t?new Promise(async(t,o)=>{try{let o=r;1==o.split("://").length&&(o=`${this.root}/${r}`);const s=await(o+"/package.json").asFileHandle().read("json");return s.text=s.name,s.path=o,s.filename=s.pkgname,s.type="app",s.mime="antos/app",s.icon&&(s.icon=`${s.path}/${s.icon}`),s.iconclass||s.icon||(s.iconclass="fa fa-adn"),this.logger.info(__("Installing...")),e.setting.system.packages[s.pkgname]=s,s.app?(this.logger.info(__("Running {0}...",s.app)),e.GUI.forceLaunch(s.app,[])):this.logger.error(__("{0} is not an application",s.pkgname)),t(void 0)}catch(e){o(e)}}):o.worker.submit(t,r,this.root,this.logger)}batch(e,t){return t.root&&(this.root=t.root),new Promise(async(r,o)=>{try{t.targets||o("No target found");for(const r of e){const e=t.targets[r];if(!e)return o(__("No target: {0}",r));if(e.depend&&await this.batch(e.depend,t),e.require&&await this.require(e.require),this.logger&&this.logger.info(__("### RUNNING STAGE: {0}###",r).__()),e.jobs)for(const t of e.jobs)await this.run(t.name,t.data)}r(void 0)}catch(e){o(e)}})}}let s;t.AntOSDKBuilder=o,function(e){class t extends e.RemoteFileHandle{constructor(e){super(e);const t="pkg://libantosdk/"+this.genealogy.join("/");this.setPath(t.asFileHandle().path)}}e.SDKFileHandle=t,e.register("^sdk$",t)}(s=t.VFS||(t.VFS={}))}(t=e.API||(e.API={}))}(OS||(OS={})); \ No newline at end of file +var OS;!function(e){let t;!function(t){class r{constructor(t){this.worker=new Worker(t.asFileHandle().getlink()),this.jobs={},this.worker.onmessage=e=>{let t=e.data,r=this.jobs[t.id];r?"log"===t.type?r.logger&&(t.error?r.logger.error(t.result):!1===t.show_time&&r.logger.print?r.logger.print(t.result):r.logger.info(t.result)):(r.callback(t),delete this.jobs[t.id]):console.log("Unable to identify result of job",t.id,t)};const r={};for(const t in e.setting.system.packages){const o=e.setting.system.packages[t];r[t]={path:o.path,name:o.pkgname}}this.submit("sdk-setup",{REST:e.API.REST,pkgs:r})}newJobID(){return"job_"+Math.random().toString(36).replace(".","")}exectue_job(e,t,r,o,s){const i=this.newJobID(),n={id:i,cmd:e,data:t,root:r};this.jobs[i]={callback:o,logger:s},this.worker.postMessage(n)}submit(e,t,r,o){return new Promise((s,i)=>{this.exectue_job(e,t,r,e=>{if(e.error)return i(e.error);s(e.result)},o)})}terminate(){this.worker.terminate()}}class o{constructor(e,t){this.root=t,this.logger=e,o.worker||(o.worker=new r("pkg://libantosdk/core/worker.js"))}require(e){return this.run("sdk-import",e.map(e=>e+".worker.js"))}compile(e,t){return new Promise(async(r,o)=>{try{await this.require([e]),r(await this.run(e+"-compile",t))}catch(e){o(__e(e))}})}run(t,r){return"sdk-run-app"===t?new Promise(async(t,o)=>{try{let o=r;1==o.split("://").length&&(o=`${this.root}/${r}`);const s=await(o+"/package.json").asFileHandle().read("json");return s.text=s.name,s.path=o,s.filename=s.pkgname,s.type="app",s.mime="antos/app",s.icon&&(s.icon=`${s.path}/${s.icon}`),s.iconclass||s.icon||(s.iconclass="fa fa-adn"),this.logger.info(__("Installing...")),e.setting.system.packages[s.pkgname]=s,s.app?(this.logger.info(__("Running {0}...",s.app)),e.GUI.forceLaunch(s.app,[])):this.logger.error(__("{0} is not an application",s.pkgname)),t(void 0)}catch(e){o(e)}}):o.worker.submit(t,r,this.root,this.logger)}batch(e,t){return t.root&&(this.root=t.root),new Promise(async(r,o)=>{try{t.targets||o("No target found");for(const r of e){const e=t.targets[r];if(!e)return o(__("No target: {0}",r));if(e.depend&&await this.batch(e.depend,t),e.require&&await this.require(e.require),this.logger&&this.logger.info(__("### RUNNING STAGE: {0}###",r).__()),e.jobs)for(const t of e.jobs)await this.run(t.name,t.data)}r(void 0)}catch(e){o(e)}})}}let s;t.AntOSDKBuilder=o,function(e){class t extends e.RemoteFileHandle{constructor(e){super(e);const t="pkg://libantosdk/"+this.genealogy.join("/");this.setPath(t.asFileHandle().path)}}e.SDKFileHandle=t,e.register("^sdk$",t)}(s=t.VFS||(t.VFS={}))}(t=e.API||(e.API={}))}(OS||(OS={})); \ No newline at end of file diff --git a/libantosdk/build/debug/package.json b/libantosdk/build/debug/package.json index 8f9ce9d..280dfee 100644 --- a/libantosdk/build/debug/package.json +++ b/libantosdk/build/debug/package.json @@ -6,7 +6,7 @@ "author": "Xuan Sang LE", "email": "mrsang@iohub.dev" }, - "version": "0.0.4-a", + "version": "0.0.5-a", "category": "Other", "iconclass": "fa fa-cog", "mimes": [ diff --git a/libantosdk/build/release/libantosdk.zip b/libantosdk/build/release/libantosdk.zip index 1e2d7b8..f07892a 100644 Binary files a/libantosdk/build/release/libantosdk.zip and b/libantosdk/build/release/libantosdk.zip differ diff --git a/libantosdk/core/worker.js b/libantosdk/core/worker.js index 3322d7f..6ee2f5b 100644 --- a/libantosdk/core/worker.js +++ b/libantosdk/core/worker.js @@ -72,7 +72,18 @@ class AntOSDKBaseJob { id: this.job.id, type: "log", error: false, - result: data + result: data, + show_time: true + }); + } + + log_print(data) { + postMessage({ + id: this.job.id, + type: "log", + error: false, + result: data, + show_time: false }); } @@ -81,7 +92,8 @@ class AntOSDKBaseJob { id: this.job.id, type: "log", error: true, - result: data + result: data, + show_time: true }); } diff --git a/libantosdk/package.json b/libantosdk/package.json index 8f9ce9d..280dfee 100644 --- a/libantosdk/package.json +++ b/libantosdk/package.json @@ -6,7 +6,7 @@ "author": "Xuan Sang LE", "email": "mrsang@iohub.dev" }, - "version": "0.0.4-a", + "version": "0.0.5-a", "category": "Other", "iconclass": "fa fa-cog", "mimes": [ diff --git a/libantosdk/ts/main.ts b/libantosdk/ts/main.ts index 99243fc..f69ba03 100644 --- a/libantosdk/ts/main.ts +++ b/libantosdk/ts/main.ts @@ -13,6 +13,7 @@ namespace OS { type: "result"|"log"; error?: any; result?: any; + show_time?:boolean; } interface AntOSDKWorkerJob { @@ -44,7 +45,12 @@ namespace OS { if(ret.error) job.logger.error(ret.result); else - job.logger.info(ret.result); + { + if(ret.show_time === false && job.logger.print) + job.logger.print(ret.result); + else + job.logger.info(ret.result); + } } } else @@ -77,7 +83,7 @@ namespace OS { return `job_${Math.random().toString(36).replace(".","")}`; } - private exectue_job(cmd: string, data: any, root:string, callback: (AntOSDKWorkerResult) => void, logger?: AntOSDKLogger): void + private exectue_job(cmd: string, data: any, root:string, callback: (arg: AntOSDKWorkerResult) => void, logger?: AntOSDKLogger): void { const id = this.newJobID(); const job: AntOSDKWorkerJob = { diff --git a/packages.json b/packages.json index ee79712..65c734f 100644 --- a/packages.json +++ b/packages.json @@ -195,7 +195,7 @@ "description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/libantosdk/README.md", "category": "Other", "author": "Xuan Sang LE", - "version": "0.0.4-a", + "version": "0.0.5-a", "dependencies": [], "download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/libantosdk/build/release/libantosdk.zip" },