* Common: getVehicles

Fragt alle Fahrzeuge ab, speichert sie im SessionStorage ab und stellt eine Funktion zum Abrufen zur Verfügung

Tento skript by neměl být instalován přímo. Jedná se o knihovnu, kterou by měly jiné skripty využívat pomocí meta příkazu // @require https://update.greatest.deepsurf.us/scripts/484898/1311830/%2A%20Common%3A%20getVehicles.js

  1. // ==UserScript==
  2. // @name * Common: getVehicles
  3. // @namespace bos-ernie.leitstellenspiel.de
  4. // @version 1.0.0
  5. // @license BSD-3-Clause
  6. // @author BOS-Ernie
  7. // @description Fragt alle Fahrzeuge ab, speichert sie im SessionStorage ab und stellt eine Funktion zum Abrufen zur Verfügung
  8. // @icon https://www.google.com/s2/favicons?sz=64&domain=leitstellenspiel.de
  9. // @run-at document-idle
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. async function getVehicles() {
  14. if (
  15. !sessionStorage.bosErnieVehicles ||
  16. JSON.parse(sessionStorage.bosErnieVehicles).lastUpdate < new Date().getTime() - 5 * 1000 * 60
  17. ) {
  18. return updateVehiclesCache();
  19. }
  20.  
  21. return JSON.parse(LZString.decompress(JSON.parse(sessionStorage.bosErnieVehicles).value));
  22. }
  23.  
  24. async function updateVehiclesCache() {
  25. let vehicles = [];
  26. let nextPage = null;
  27. let page = 0;
  28. let totalPages = null;
  29.  
  30. do {
  31. page++;
  32.  
  33. if (page === 1) {
  34. nextPage = "/api/v2/vehicles";
  35. }
  36.  
  37. const response = await fetch(nextPage).then(response => response.json());
  38.  
  39. vehicles = vehicles.concat(
  40. response.result.map(vehicle => ({
  41. id: vehicle.id,
  42. caption: vehicle.caption,
  43. building_id: vehicle.building_id,
  44. vehicle_type: vehicle.vehicle_type,
  45. assigned_personnel_count: vehicle.assigned_personnel_count,
  46. tractive_vehicle_id: vehicle.tractive_vehicle_id,
  47. })),
  48. );
  49.  
  50. nextPage = response.paging.next_page;
  51.  
  52. if (totalPages === null) {
  53. totalPages = Math.ceil(response.paging.count_total / 10000);
  54. }
  55. } while (nextPage);
  56.  
  57. const lastUpdate = new Date();
  58.  
  59. try {
  60. const compressedVehicleData = LZString.compress(JSON.stringify(vehicles));
  61.  
  62. const uncompressedSize = JSON.stringify(vehicles).length;
  63. const compressedSize = compressedVehicleData.length;
  64.  
  65. sessionStorage.setItem(
  66. "bosErnieVehicles",
  67. JSON.stringify({
  68. lastUpdate: lastUpdate.getTime(),
  69. value: compressedVehicleData,
  70. uncompressedSize: uncompressedSize,
  71. compressedSize: compressedSize,
  72. }),
  73. );
  74. } catch (e) {}
  75.  
  76. return vehicles;
  77. }