File: /var/www/vhost/disk-apps/pwa.sports-crowd.com/src/app/services/networking/networking.service.ts
import { TranslateService } from '@ngx-translate/core';
import { Injectable } from '@angular/core';
import { Network } from '@capacitor/network';
import { AlertController } from '@ionic/angular';
import { Router } from '@angular/router';
import { UtilsService } from '../utils.service';
import { StorageService } from '../storage.service';
@Injectable({
providedIn: 'root'
})
export class NetworkingService {
isOnline: boolean = true;
isSlowNetwork: boolean = false;
private alert;
constructor(
private alertController: AlertController,
private translateService: TranslateService,
private router: Router,
public utilsService: UtilsService,
private storage: StorageService
) {
this.initNetworkListener();
}
public async initNetworkListener() {
// Check the initial network status
const status = await Network.getStatus();
this.setNetworkStatus(status);
// Listen for network status changes
Network.addListener('networkStatusChange', (status) => {
this.setNetworkStatus(status);
});
}
setNetworkStatus(status) {
if (this.alert) {
this.alert.dismiss();
this.alert = null;
}
if (!this.isOnline && status.connected){
window.location.reload();
}
this.isOnline = status.connected;
this.checkNetworkSpeed();
if (!this.isOnline || this.isSlowNetwork) {
this.showSlowSpeedNetworkAlert();
}
}
public checkNetworkSpeed() {
const connection = (navigator as any).connection;
if (connection) {
const effectiveType = connection.effectiveType;
// Determine if the network is slow
this.isSlowNetwork = ['slow-2g', '2g', '3g'].includes(effectiveType);
} else {
console.log('Network information API not supported in this browser.');
}
}
private async showSlowSpeedNetworkAlert() {
console.log('hola');
var buttons = [];
let token = await this.storage.get("token");
var message = this.translateService.instant('NETWORKING.OFFLINE_MESSAGE');
if (token) {
buttons.push({
text: this.translateService.instant('GO_TO_TICKETS'),
role: 'confirm',
handler: () => {
this.router.navigateByUrl("/tickets-list", {
replaceUrl: true
});
},
});
} else {
message = this.translateService.instant('NETWORKING.OFFLINE_WITHOUT_LOGIN_MESSAGE');
}
if (this.isSlowNetwork) {
buttons.push({
text: this.translateService.instant('WAIT'),
role: 'cancel'
})
}
this.alert = await this.alertController.create({
header: this.translateService.instant('NETWORKING.OFFLINE_TITLE'),
message: message,
backdropDismiss: false,
buttons: buttons
});
await this.alert.present();
}
}