HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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();
  }
}