From eabce8a3e0c9695bcb1fb00103f1877058baa4f0 Mon Sep 17 00:00:00 2001 From: Nicolas Constant Date: Wed, 2 Jun 2021 02:44:29 -0400 Subject: [PATCH 01/20] added WT G3X --- src/app/core/services/domain.service.ts | 27 ++++++++++++------- src/app/core/services/github.service.ts | 12 +++++++-- src/app/core/services/packages.service.ts | 31 +++++++++++++--------- src/assets/illustrations/g3x.jpg | Bin 0 -> 702720 bytes 4 files changed, 46 insertions(+), 24 deletions(-) create mode 100644 src/assets/illustrations/g3x.jpg diff --git a/src/app/core/services/domain.service.ts b/src/app/core/services/domain.service.ts index 880b502..06857ab 100644 --- a/src/app/core/services/domain.service.ts +++ b/src/app/core/services/domain.service.ts @@ -65,11 +65,20 @@ export class DomainService { return Promise.all([localPromise, githubPromise]) .then(result => { - p.localVersion = result[0].version; - p.availableVersion = result[1].availableVersion; - p.assetDownloadUrl = result[1].downloadUrl; - p.state = this.getState(p, result[0], result[1]); - p.publishedAt = result[1].publishedAt; + const local = result[0]; + const remote = result [1]; + + if(local){ + p.localVersion = local.version; + } + + if(remote) { + p.availableVersion = remote.availableVersion; + p.assetDownloadUrl = remote.downloadUrl; + p.publishedAt = remote.publishedAt; + } + + p.state = this.getState(p, local, remote); }); } @@ -78,13 +87,13 @@ export class DomainService { if (p.state === InstallStatusEnum.extracting) return InstallStatusEnum.extracting; if (p.state === InstallStatusEnum.installing) return InstallStatusEnum.installing; - if (local.untrackedFolderFound) return InstallStatusEnum.untrackedPackageFound; - if (!local.folderFound) return InstallStatusEnum.notFound; - if (local.version && info.availableVersion) { + if (local && local.untrackedFolderFound) return InstallStatusEnum.untrackedPackageFound; + if (local && !local.folderFound) return InstallStatusEnum.notFound; + if (local && local.version && info && info.availableVersion) { if (local.version === info.availableVersion) return InstallStatusEnum.installed; if (local.version !== info.availableVersion) return InstallStatusEnum.updateAvailable; } - return InstallStatusEnum.notFound; + return InstallStatusEnum.unknown; } private processDownloadedFile(r: FileDownloadInfo): void { diff --git a/src/app/core/services/github.service.ts b/src/app/core/services/github.service.ts index 02d738f..2099a10 100644 --- a/src/app/core/services/github.service.ts +++ b/src/app/core/services/github.service.ts @@ -11,7 +11,7 @@ export class GithubService { constructor(private http: HttpClient) { } retrievePackageInfo(p: Package): Promise { - const route = `https://api.github.com/repos/${p.githubOwner}/${p.githubRepo}/releases`; + const route = `https://api.github.com/repos/${p.githubOwner}/${p.githubRepo}/releases?per_page=100`; return this.http.get(route).toPromise() .then((rel: GithubRelease[]) => { const lastRelease = rel @@ -19,6 +19,9 @@ export class GithubService { return new Date(b.published_at).getTime() - new Date(a.published_at).getTime(); }) .find(x => this.isCandidate(x, p)); + + if(!lastRelease) return null; + const asset = lastRelease.assets.find(y => y.name.includes(p.assetName)); let downloadUrl = lastRelease.zipball_url; @@ -32,8 +35,13 @@ export class GithubService { } private isCandidate(rel: GithubRelease, p: Package): boolean { + let keepPrerelease = false; + if(p.isPrerelease) { + keepPrerelease = true; + } + return rel.draft === false - && rel.prerelease === false + && rel.prerelease === keepPrerelease && (!p.assetName || rel.assets.findIndex(y => y.name.includes(p.assetName)) !== -1); } } diff --git a/src/app/core/services/packages.service.ts b/src/app/core/services/packages.service.ts index 9844764..b9f03d6 100644 --- a/src/app/core/services/packages.service.ts +++ b/src/app/core/services/packages.service.ts @@ -49,6 +49,21 @@ export class PackagesService { wtg3000.summary = "Fixes and enhancements for the stock G3000 avionics package"; wtg3000.webpageUrl = "https://www.workingtitle.aero/packages/g3000/"; + const wtg3x = new Package(); + wtg3x.id = "wt-g3x"; + wtg3x.name = "WT G3X"; + wtg3x.description = "Working Title G3X Touch"; + wtg3x.githubOwner = "Working-Title-MSFS-Mods"; + wtg3x.githubRepo = "fspackages"; + wtg3x.illustration = "assets/illustrations/g3x.jpg"; + wtg3x.folderName = "workingtitle-gx"; + wtg3x.assetName = "workingtitle-gx-v"; + wtg3x.versionPatternToRemove = "gx-"; + wtg3x.state = InstallStatusEnum.unknown; + wtg3x.summary = "This is an early release of what is intended to eventually be the reworking of several of the smaller Garmin units in the game.

At the moment the only thing that has been updated is the G3X Touch, but future modifications to the non-touch G3X, and to the touch-based Aera which uses much of the same code, are possible."; + wtg3x.webpageUrl = "https://www.workingtitle.aero/packages/g3x/"; + wtg3x.isPrerelease = true; + const a32nx = new Package(); a32nx.id = "a32nx"; a32nx.name = "FBW A32NX"; @@ -62,17 +77,6 @@ export class PackagesService { a32nx.summary = "The A32NX Project is a community-driven open source project to create a free Airbus A320neo in Microsoft Flight Simulator that is as close to reality as possible.

The following aircraft configuration is currently simulated:

Model  A320-251N
Engine  CFM LEAP 1A-26
FMGS  Honeywell Pegasus II
FWC Std.  H2F9C

Please note that this configuration may change in the future as the A32NX project evolves and changes."; a32nx.webpageUrl = "https://flybywiresim.com/"; - // const wtg3x = new Package(); - // wtg3x.id = "wt-g3x"; - // wtg3x.name = "WT G3X"; - // wtg3x.description = "Working Title G3X Touch"; - // wtg3x.githubOwner = "Working-Title-MSFS-Mods"; - // wtg3x.githubRepo = "fspackages"; - // wtg3x.illustration = "assets/illustrations/aa.jpg"; - // wtg3x.folderName = "workingtitle-g3000"; - // wtg3x.assetName = "workingtitle-g3000-v"; - // wtg3x.state = InstallStatusEnum.unknown; - const b787xe = new Package(); b787xe.id = "b787xe"; b787xe.name = "HD B78XH"; @@ -134,7 +138,7 @@ export class PackagesService { jplc152.state = InstallStatusEnum.unknown; jplc152.summary = "A MSFS Addon to improve the Cessna C152 "; - return Promise.resolve([wtcj4, wtg1000, wtg3000, a32nx, b787xe, salty747, aa, tfg36p, jplc152]); + return Promise.resolve([wtcj4, wtg1000, wtg3000, wtg3x, a32nx, b787xe, salty747, aa, tfg36p, jplc152]); // new Package(); // "aa-liv", @@ -189,6 +193,7 @@ export class Package { public githubOwner: string; public githubRepo: string; public assetName: string; + public isPrerelease: boolean; public versionPatternToRemove: string; public folderName: string; public assetDownloadUrl: string; @@ -201,7 +206,7 @@ export class Package { public summary: string; public webpageUrl: string; - public oldFolderNames: string[]; //TODO + public oldFolderNames: string[]; } export enum InstallStatusEnum { diff --git a/src/assets/illustrations/g3x.jpg b/src/assets/illustrations/g3x.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df169d6a13611d54aa5a044f91e3cd7287068b3f GIT binary patch literal 702720 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