mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-20 08:33:11 +00:00
63 lines
2.0 KiB
TypeScript
63 lines
2.0 KiB
TypeScript
import {Injectable} from '@angular/core';
|
|
import {StorageProvider} from '../storage/storage.provider';
|
|
import {ConfigProvider} from '../config/config.provider';
|
|
import {ModalController} from '@ionic/angular';
|
|
import {Capacitor} from '@capacitor/core';
|
|
import {ReleaseNotesComponent} from './release-notes.component';
|
|
import {SCAppVersionInfo} from '@openstapps/core';
|
|
import {App} from '@capacitor/app';
|
|
import {coerce} from 'semver';
|
|
|
|
export const RELEASE_NOTES_SHOWN_KEY = 'release_notes_shown';
|
|
|
|
@Injectable({providedIn: 'root'})
|
|
export class AppVersionService {
|
|
constructor(
|
|
private storage: StorageProvider,
|
|
private config: ConfigProvider,
|
|
private modalController: ModalController,
|
|
) {}
|
|
|
|
/**
|
|
* Get the latest release notes that have not been presented yet
|
|
*/
|
|
async getPendingReleaseNotes() {
|
|
if (Capacitor.getPlatform() === 'web') {
|
|
return;
|
|
}
|
|
const storedVersion = coerce(
|
|
(await this.storage.has(RELEASE_NOTES_SHOWN_KEY))
|
|
? await this.storage.get<string>(RELEASE_NOTES_SHOWN_KEY)
|
|
: '0.0.0',
|
|
)!;
|
|
const currentVersion = coerce(await App.getInfo().then(info => info.version))!;
|
|
|
|
return this.config.config.app.versionHistory
|
|
?.filter(({version}) => {
|
|
const semanticVersion = coerce(version)!;
|
|
const wasNotShown = semanticVersion.compare(storedVersion) === 1;
|
|
const isNotFutureVersion = semanticVersion.compare(currentVersion) <= 0;
|
|
return wasNotShown && isNotFutureVersion;
|
|
})
|
|
?.sort((a, b) => coerce(a.version)!.compare(b.version));
|
|
}
|
|
|
|
/**
|
|
* Present release notes
|
|
*/
|
|
async presentReleaseNotes(versions: SCAppVersionInfo[]) {
|
|
if (!versions || versions.length === 0) {
|
|
return;
|
|
}
|
|
const modal = await this.modalController.create({
|
|
component: ReleaseNotesComponent,
|
|
componentProps: {
|
|
versionInfos: versions,
|
|
},
|
|
});
|
|
await modal.present();
|
|
await modal.onDidDismiss();
|
|
await this.storage.put(RELEASE_NOTES_SHOWN_KEY, versions[0].version);
|
|
}
|
|
}
|