diff --git a/src/core/gui.ts b/src/core/gui.ts index 6bfc8a7..6f4a7fa 100644 --- a/src/core/gui.ts +++ b/src/core/gui.ts @@ -447,18 +447,37 @@ namespace OS { * This function fist loads and registers the application prototype * definition in the [[application]] namespace, then update * the system packages meta-data + * + * First it tries to load the package with the app name is also the + * pkgname, if its fail, it will search the app name by pkg name and load + * it * * @param {string} app application class name * @returns {Promise} */ function loadApp(app: string): Promise { return new Promise(async function (resolve, reject) { - let path: string; - if (setting.system.packages[app].path) { - path = setting.system.packages[app].path; - } - const js = path + "/main.js"; + let path: string = undefined; try { + if(!setting.system.packages[app]) + { + for(const key in setting.system.packages) + { + const pkg = setting.system.packages[key]; + if(pkg.app == app && pkg.path) + { + path = pkg.path; + } + } + } + else if (setting.system.packages[app].path) { + path = setting.system.packages[app].path; + } + if(!path) + { + throw __("Unable to locate package of {0}", app).__(); + } + const js = path + "/main.js"; const d = await js.asFileHandle().read("script"); const data: API.PackageMetaType = await `${path}/package.json` .asFileHandle() diff --git a/src/packages/MarketPlace/README.md b/src/packages/MarketPlace/README.md index 7888bf3..0703bd0 100644 --- a/src/packages/MarketPlace/README.md +++ b/src/packages/MarketPlace/README.md @@ -5,5 +5,6 @@ This application is icluded in the AntOS delivery and cannot be removed/uinstalled by regular user ## Change logs +- 0.2.7-b: only launch application - 0.2.6-b: improve install process - v0.2.5-b: add README.md \ No newline at end of file diff --git a/src/packages/MarketPlace/main.ts b/src/packages/MarketPlace/main.ts index ef33b89..e780064 100644 --- a/src/packages/MarketPlace/main.ts +++ b/src/packages/MarketPlace/main.ts @@ -41,7 +41,7 @@ namespace OS { main(): void { this.installdir = this.systemsetting.system.pkgpaths.user; // test repository - this.apps_meta = []; + this.apps_meta = {}; this.applist = this.find("applist") as GUI.tag.ListViewTag; this.catlist = this.find("catlist") as GUI.tag.ListViewTag; @@ -108,8 +108,8 @@ namespace OS { return; } const app = el.data; - if (app.pkgname) { - return this._gui.launch(app.pkgname, []); + if (app.app) { + return this._gui.launch(app.app, []); } }; @@ -273,6 +273,7 @@ namespace OS { if (this.apps_meta[name]) { pkg.icon = this.apps_meta[name].icon; pkg.iconclass = this.apps_meta[name].iconclass; + pkg.app = this.apps_meta[name].app; } this.apps_meta[name] = pkg; } @@ -328,7 +329,25 @@ namespace OS { this.catlist.data = cat_list_data; this.catlist.selected = 0; } - + private add_meta_from(k:string, v: API.PackageMetaType) + { + const mt = { + pkgname: v.pkgname ? v.pkgname : v.app, + app: v.app, + name: v.name, + text: `${v.name} ${v.version}`, + icon: v.icon, + iconclass: v.iconclass, + category: v.category, + author: v.info.author, + version: v.version, + description: `${v.path}/README.md`, + dependencies: v.dependencies ? Array.from(v.dependencies) : [], + dependBy: [] + }; + this.apps_meta[`${k}@${v.version}`] = mt; + return mt; + } fetchApps(): Promise> { return new Promise((resolve, _reject) => { let v: API.PackageMetaType; @@ -336,19 +355,7 @@ namespace OS { const pkgcache = this.systemsetting.system.packages; for (let k in pkgcache) { v = pkgcache[k]; - this.apps_meta[`${k}@${v.version}`] = { - pkgname: v.pkgname ? v.pkgname : v.app, - name: v.name, - text: `${v.name} ${v.version}`, - icon: v.icon, - iconclass: v.iconclass, - category: v.category, - author: v.info.author, - version: v.version, - description: `${v.path}/README.md`, - dependencies: v.dependencies ? Array.from(v.dependencies) : [], - dependBy: [] - }; + this.add_meta_from(k,v); } const list: string[] = [] @@ -551,7 +558,8 @@ namespace OS { return reject(this._api.throwe(__("Unable to find package: {0}", pkgname))); } try { - const n = await this.install(meta.download + "?_=" + new Date().getTime(), meta); + const mt = await this.install(meta.download + "?_=" + new Date().getTime(), meta); + meta.app = mt.app; return resolve(meta); } catch (e_1) { return reject(__e(e_1)); @@ -621,13 +629,19 @@ namespace OS { mimes: [".*/zip"], }); const n = await this.install(d.file.path); + const name = n.pkgname?n.pkgname:n.app; const apps = this.applist.data.map( (v) => v.pkgname ); - const idx = apps.indexOf(n); + const idx = apps.indexOf(name); if (idx >= 0) { this.applist.selected = idx; } + else + { + const mt = this.add_meta_from(name,n); + this.appDetail(mt); + } return resolve(n.name); } catch (error) { reject(__e(error)); @@ -638,7 +652,7 @@ namespace OS { private install( zfile: string, meta?: GenericObject - ): Promise> { + ): Promise { return new Promise(async (resolve, reject) => { try { let v: API.PackageMetaType; @@ -657,22 +671,6 @@ namespace OS { }); }); - const app_meta = { - pkgname: v.pkgname ? v.pkgname : v.app, - name: v.name, - text: v.name, - icon: v.icon, - iconclass: v.iconclass, - category: v.category, - author: v.info.author, - version: v.version, - description: meta - ? meta.description - : undefined, - download: meta - ? meta.download - : undefined, - }; v.text = v.name; v.filename = v.pkgname ? v.pkgname : v.app; v.type = "app"; @@ -692,7 +690,7 @@ namespace OS { this.systemsetting.system.packages[ v.pkgname ? v.pkgname : v.app ] = v; - return resolve(app_meta); + return resolve(v); } catch (error) { reject(__e(error)); } @@ -708,20 +706,21 @@ namespace OS { private uninstallPkg(pkgname: string): Promise { return new Promise(async (resolve, reject) => { const meta = this.apps_meta[pkgname]; - if (!meta) { - return reject(this._api.throwe(__("Unable to find application meta-data: {0}", pkgname))); - } - const app = this.systemsetting.system.packages[meta.pkgname]; - if (!app) { - return reject(this._api.throwe(__("Application {0} is not installed", pkgname))); - } + // got the app meta try { + if (!meta) { + throw __("Unable to find application meta-data: {0}", pkgname).__(); + } + const app = this.systemsetting.system.packages[meta.pkgname]; + if (!app) { + throw __("Application {0} is not installed", pkgname).__(); + } const r = await app.path .asFileHandle() .remove(); if (r.error) { - return reject(this._api.throwe(__("Cannot uninstall package: {0}", r.error))); + throw __("Cannot uninstall package: {0}", r.error).__(); } this.notify(__("Package uninstalled")); // stop all the services if any @@ -739,6 +738,7 @@ namespace OS { if (meta.domel) this.applist.delete(meta.domel); $(this.container).css("visibility", "hidden"); + delete this.apps_meta[pkgname]; } return resolve(meta); } diff --git a/src/packages/MarketPlace/package.json b/src/packages/MarketPlace/package.json index 07c5887..e2c9ec1 100644 --- a/src/packages/MarketPlace/package.json +++ b/src/packages/MarketPlace/package.json @@ -7,7 +7,7 @@ "author": "Xuan Sang LE", "email": "xsang.le@gmail.com" }, - "version":"0.2.6-b", + "version":"0.2.7-b", "category":"System", "iconclass":"fa fa-shopping-bag", "mimes":["none"],