File: /var/www/vhost/disk-apps/pwa.sports-crowd.com/src/app/services/parameter.service.ts
import { Injectable } from '@angular/core';
import { ApiService } from "./api.service";
import { StorageService } from './storage.service';
import { TranslateService } from "@ngx-translate/core";
import { NavController, Platform, AlertController } from "@ionic/angular";
import { App } from '@capacitor/app';
import { NativeMarket } from "@capacitor-community/native-market";
import { Capacitor } from "@capacitor/core";
@Injectable({
providedIn: 'root'
})
export class ParameterService {
parameters: any;
backButtonSubscription: any;
lastValidationDate: any;
minimumValidationTime: number = 1000 * 60 * 60 * 24;
constructor(
private storage: StorageService,
private platform: Platform,
private translate: TranslateService,
public navCtrl: NavController,
public alertController: AlertController,
public api: ApiService
) { }
getParameters(keys?: any) {
return new Promise(async (resolve, reject) => {
let seq = await this.api.getFree("parameters/info" + (keys ? '?keys=' + keys : ''));
seq.subscribe(
(res: any) => {
if (res.status == "success") {
if (!keys) {
this.parameters = res.parameters;
this.storage.set("parameters", res.parameters);
}
}
resolve(res);
},
(err) => {
console.error("Error provider getParameters", err);
reject(err);
}
);
});
}
async startApp(isNavigator: boolean) {
if (Capacitor.isNativePlatform()) {
this.getParameters().then(
(resp: any) => {
this.runNavigation(resp["parameters"], isNavigator);
}).catch(error => {
console.log("error startApp service: ", error);
});
} else {
if (isNavigator) {
this.navCtrl.navigateRoot("/welcome");
}
}
}
async runNavigation(parameters, isNavigator) {
var versionNumber = (await App.getInfo()).version;
let minimal_version = parseInt(parameters.minimal_version.split(".").join(""));
let versionInApp = parseInt(versionNumber.split(".").join(""));
let platform = Capacitor.getPlatform();
if (platform == "android" && minimal_version > versionInApp) {
this.showConfirmVersionAppOld(parameters.android_play_store, parameters.optional_app_upgrade, true, isNavigator);
} else if (platform == "ios" && minimal_version > versionInApp) {
this.showConfirmVersionAppOld(parameters.ios_app_store, parameters.optional_app_upgrade_ios, false, isNavigator);
} else {
if (isNavigator) {
this.navCtrl.navigateRoot("/welcome");
}
}
}
async showConfirmVersionAppOld(appId, optionalAppUpgrade = false, enableCloseApp = false, isNavigator = false) {
let buttons = [];
if (optionalAppUpgrade) {
buttons.push({
text: this.translate.instant("BUTTON3_ALERT_UPDATE_APP"),
handler: () => {
this.lastValidationDate = new Date().getTime();
if (isNavigator) {
this.navCtrl.navigateRoot("/welcome");
}
}
});
}
if (enableCloseApp) {
buttons.push({
text: this.translate.instant("BUTTON1_ALERT_UPDATE_APP"),
handler: () => {
this.exitApp();
this.navCtrl.navigateRoot("/welcome");
}
});
}
buttons.push({
text: this.translate.instant("BUTTON2_ALERT_UPDATE_APP"),
handler: () => {
NativeMarket.openStoreListing({ appId: appId });
this.showConfirmVersionAppOld(appId, optionalAppUpgrade, enableCloseApp, isNavigator);
}
});
const alert = await this.alertController.create({
header: this.translate.instant("TITLE_ALERT_UPDATE_APP"),
message: this.translate.instant("TEXT_ALERT_UPDATE_APP"),
backdropDismiss: false,
buttons: buttons
});
if (!this.lastValidationDate || (new Date().getTime() - this.lastValidationDate > this.minimumValidationTime)) {
this.lastValidationDate = null;
await alert.present();
}
}
exitApp() {
this.backButtonSubscription = this.platform.backButton.subscribe(() => {
navigator["app"].exitApp();
});
}
}