@zeppos/zml
Version:
A Mini Library of ZeppOS MiniApp
2 lines (1 loc) • 3.75 kB
JavaScript
let e=null;function s(e){if(!e||"object"!=typeof e)throw new Error("obj is required and must be an object");const s=[];for(let[r,t]of Object.entries(e))r=encodeURIComponent(r),Array.isArray(t)?t.forEach((e=>{s.push(`${r}[]=${encodeURIComponent(e)}`)})):s.push(`${r}=${encodeURIComponent(t)}`);return s.join("&")}e="undefined"!=typeof __$$R$$__?__$$R$$__:()=>({}),e("@zos/utils").qs.parse;const{queryPermission:r,requestPermission:t}=e("@zos/app"),{showToast:n}=e("@zos/interaction");class i{static PermissionStatus={unauthorized:0,error:1,authorized:2};static RequestPermissionResult={cancel:0,error:1,granted:2};static request(e,s){const o=r({permissions:e})[0];switch(o){case i.PermissionStatus.unauthorized:t({permissions:e,callback([e]){switch(e){case i.RequestPermissionResult.granted:n({content:"permission: granted"}),s&&s({code:e});break;case i.RequestPermissionResult.cancel:n({content:"permission: canceled"}),s&&s({error:new Error(e)});break;default:n({content:"permission: request error"}),s&&s({error:new Error(e)})}}});break;case i.PermissionStatus.authorized:s&&s({code:o});break;default:n({content:"permission: query error"}),s&&s({error:new Error(o)})}}}const{showToast:o}=e("@zos/interaction"),{EventBus:a}=e("@zos/utils"),c=e("@zos/app-service"),u=["device:os.bg_service"];class l{constructor(e){this.url=e,this._onMessage=null,this.BgService=null}get onMessage(){return this._onMessage}set onMessage(e){e?(this._onMessage=e,this.BgService._eventBus.on("bgServiceMessage",this._onMessage)):(this._onMessage=null,this.BgService._eventBus.off("bgServiceMessage"))}get isRunning(){return c.getAllAppServices().includes(this.url)}postMessage(e){this.BgService._eventBus.emit("clientMessage",e)}postEvent(e,r){if(!e)return r({error:new Error("postEvent need params")});if(!this.isRunning)return this.start(e,r);const t=c.start({url:this.url,param:`_u=${this.url}&_s=m&_a=running&`+s(e),complete_func:e=>{if(!e.result)return o({content:"start service error"}),void(r&&r({error:new Error(e.file)}));r&&r(e)}});0!==t&&r&&r({error:new Error(t)})}start(e,s){this.isRunning?this.postEvent(e,s):i.request(u,(r=>{r.error?s&&s(r):this._start(e,s)}))}_start(e,r){const t=c.start({url:this.url,param:`_u=${this.url}&_s=m&_a=start&`+s(e??{}),complete_func:e=>{if(!e.result)return o({content:"start service error"}),void(r&&r({error:new Error(e.file)}));o({content:"start service success"}),r&&r(e)}});0!==t&&r&&r({error:new Error(t)})}stop(e,r){if(!this.isRunning)return void r({file:this.url});const t=c.stop({url:this.url,param:`_u=${this.url}&_s=m&_a=stop&`+s(e??{}),complete_func:e=>{if(!e.result)return o({content:`stop service[${this.url}] error`}),void(r&&r({error:new Error(e.file)}));r&&r(e)}});0!==t&&r&&r({error:new Error(t)})}toString(){return`BgService {url=${this.url} status=${this.isRunning?"running":"stop"}}`}}class h{constructor(){this._instance=new Map,this._eventBus=new a,this._onMessage=null}instance(e){if(this._instance.has(e)){const s=this._instance.get(e);return s.BgService=this,s}const s=new l(e);return s.BgService=this,this._instance.set(e,s),s}postMessage(e){this._eventBus.emit("bgServiceMessage",e)}get onMessage(){return this._onMessage}set onMessage(e){e?(this._onMessage=e,this._eventBus.on("clientMessage",e)):(this._onMessage=null,this._eventBus.off("clientMessage"))}stopAll(){this._instance.forEach((e=>{e.stop()})),this._instance.clear()}offMessage(){this.onMessage=null}disposePage(){this._instance.forEach((e=>{e.onMessage=null,e.BgService=null})),this._instance.clear()}disposeService(){this.offMessage()}disposeApp(){this.disposePage(),this.disposeService()}}function g(e){return e.$m.BgService=new h,{onDestroy(){e.$m.BgService.disposeApp()}}}const _=__API_LEVEL__;export{_ as API_LEVEL,g as appPlugin};