IVAO ATC Watcher

Description

Sur le réseau IVAO, il est parfois utile de savoir quand une certaine position (ville) est ouverte. Pour se faire il faut se rendre sur le site webeye.ivao.aero et regarder la ville en question. Ce n'est pas très pratique surtout si on doit vérifier toute les 5 minutes la page.

Afin d'améliorer la surveillance d'une position j'ai donc décidé de faire une extension permettant de vérifier toute les 15 minutes si une ou plusieurs positions sont ouvertes.

 

Fonctionnement

L'utilisateur rempli dans un premier temps les options de l'extension et les sauvegardes. Lorsque l'utilisateur sauvegarde les paramètres ceux ci sont enregistrés grâce à l'API de chrome chrome.storage.

Quand l'extension se lance un minuteur de 15 minutes est déclanché avec l'API chrome.alarms, une fois le temps écoulé une requête GET est envoyée sur le fichier de IVAO permettant de récupérer l'ensemble des informations concernant les utilisateurs en ligne. Les données reçues sont formattées avec un format type CSV séparées par ":". J'utilise la bibliothèque Paparse afin de parser simplement les données.

Je récupère dans un premier temps la liste des positions rentrées par l'utilisateur dans les options avec chrome.storage.sync.get(['atcList'], function (result) {}. Puis je parse les données :

Papa.parse(URL_WAZZUP_CACHEBUSTER, {
  download: true,
  delimiter: ':',
  complete: function (results) {
    const openAtc = [];
    for (let i = 8; i < results.data.length; i++) {
      const obj = results.data[i];
      const callsign = obj[0];
      // On vérifie que le callsign n'est pas un callsign observateur
      if (obj[3] === 'ATC' && callsign.match(REGEX_NO_OBS)) {
        let objAtc = {
          position: callsign,
          grade: obj[41],
          openAt: obj[37],
          vid: obj[1]
        };
        openAtc.push(objAtc);
      }
    }
    // A la sortie on a un tableau contenant tous les ATCs en ligne

    let listOfAtc = []; 
    // On parcours les positions données par l'utilisateur pour voir
    // si elles apparaissent dans les positions ouvertes
    for (let j = 0; j < userAtcArray.length; j++) {
      const position = userAtcArray[j];
      let openPositionObj = {};
      openPositionObj = openAtc.filter(el => el.position === position);
      if (openPositionObj.length === 1) {
        openPositionObj = openPositionObj[0];
        // La position est ouverte on met donc la valeur à vraie
        openPositionObj.isOpen = true;
      } else {
        openPositionObj = {
          position: position,
          grade: null,
          openAt: null,
          vid: null,
          isOpen: false
        };
      }
      listOfAtc.push(openPositionObj);
    }
    console.debug('listOfAtc', listOfAtc);
    handleResults(listOfAtc);
  },
});

A la fin de cette fonction, j'appelle la fonction handleResult qui va prendre en paramêtre le tableau des positions ouvertes renseignées par l'utilisateur. Celle-ci va gérer l'affichage des notifications qui seront affichées si l'utilisateur a séléctionné cette fonction dans les paramètres.

Screenshots