From 8280d03d5a2dbc0475495045edc03287421b2ee7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=BCbleitner?= Date: Tue, 27 Aug 2019 04:42:58 +0200 Subject: [PATCH] now its time for me --- src/backend/UpdateManger.ts | 88 +++++++++++++++++++++++++++++++------ 1 file changed, 75 insertions(+), 13 deletions(-) diff --git a/src/backend/UpdateManger.ts b/src/backend/UpdateManger.ts index 1856bbd..4e29914 100644 --- a/src/backend/UpdateManger.ts +++ b/src/backend/UpdateManger.ts @@ -11,6 +11,7 @@ import { promises as fs, mkdirSync as mkdir } from "fs" import { version } from "punycode"; import * as git from "simple-git/promise" import * as trash from "trash" +import { type } from "os"; var exec = require('child-process-promise').exec; @@ -134,6 +135,11 @@ export abstract class FSExtension extends Extension{ + if (force) await this.uninstall() + return await this.install() + } + public async isEmpty(): Promise{ if (!this.isInstalled()) return true try { @@ -157,27 +163,29 @@ export abstract class FSExtension extends Extension{ constructor( - name: string, + pkgName: string, prefix: string){ - super(name, prefix) + super(pkgName, prefix) } public async status(): Promise { const fsStatus = await super.status() - const latest = await this.getLatest() + const latest = await this.getLatestVersion() const author = await this.getAuthor() + const current = await this.getCurrentVersion() return { ...fsStatus, latest: latest, - author: author + author: author, + current: current } } @@ -194,7 +202,7 @@ export class NPMExtension extends FSExtension{ } } - public async uninstall(): Promise { + public async uninstall(force?: boolean): Promise { super.uninstall() logger.info("npm uninstall", this.name, 'from', path.resolve(this.prefix, this.name)) const { error, stdout, stderr } = await exec('npm uninstall --prefix '+ this.prefix + ' ' + this.name) @@ -205,7 +213,8 @@ export class NPMExtension extends FSExtension{ } } - public async update(): Promise { + public async update(force?: boolean): Promise { + super.update(force) logger.info("npm update", path.resolve(this.prefix, this.name)) const { error, stdout, stderr } = await exec('npm update --prefix '+ this.prefix + ' ' + this.name) if (error) { @@ -247,7 +256,7 @@ export class NPMExtension extends FSExtension{ } } - private async getLatest(): Promise{ + private async getLatestVersion(): Promise{ const { error, stdout, @@ -261,6 +270,10 @@ export class NPMExtension extends FSExtension{ return stdout } } + + private async getCurrentVersion(): Promise{ + return //TODO + } } export type GitStatus = FSStatus & { @@ -272,12 +285,12 @@ export type GitStatus = FSStatus & { export class GitExtension extends FSExtension{ protected repo: git.SimpleGit constructor( - name:string, - prefix:string, + repoName:string, + localPrefix:string, protected gitCloneURL: string, protected credentials?: [string, string] ){ - super(name, version) + super(repoName, localPrefix) } public async status(): Promise{ @@ -292,7 +305,7 @@ export class GitExtension extends FSExtension{ } public async install(): Promise { - if (!this.isInstalled()){ + if (super.install()){ if (this.credentials){ } else { @@ -305,7 +318,7 @@ export class GitExtension extends FSExtension{ public async update(): Promise { - return true + return true // do git pull remote origin && git checkout } public async isOutdated(): Promise { @@ -313,6 +326,55 @@ export class GitExtension extends FSExtension{ } } +export type PluginStatus = GitStatus & { + hasFrontend: boolean, + hasBackend: boolean, + isFrontendLoaded: boolean, + isBackendLoaded: boolean +} + +export class PluginExtension extends GitExtension { + protected frontendLoaded: boolean + protected backendLoaded: boolean + + constructor( + pluginName: string, + gitCloneURL: string, + localPrefix: string = './plugins', + credentials?: [string, string], + protected hasBackend: boolean = true, + protected hasFrontend: boolean = true){ + super(pluginName,localPrefix,gitCloneURL,credentials) + } + + public async load(): Promise{ + if (this.hasFrontend) await this.loadFrontend() + if (this.hasBackend) await this.loadBackend() + } + + public async loadFrontend(): Promise{ + return //TODO + } + + public async loadBackend(): Promise{ + return //TODO + } + + public async unload(): Promise{ + if (this.hasFrontend) await this.unloadFrontend() + if (this.hasBackend) await this.unloadBackend() + } + + public async unloadFrontend(): Promise{ + return //TODO + } + + public async unloadBackend(): Promise{ + return //TODO + } + +} + export class UpdateManager extends Plugin{ private loadedPlugins:{[name in string]:Plugin} = {}