Преглед изворни кода

Use transport type instead of provider to get location from locationId + add some tram stations (still reversing)

DocSystem пре 11 месеци
родитељ
комит
36f6cb6736
77 измењених фајлова са 104 додато и 18 уклоњено
  1. 101 18
      api/calypso/transit/navigo.c
  2. 0 0
      files/navigo/stations/metro/stations_1.txt
  3. 0 0
      files/navigo/stations/metro/stations_10.txt
  4. 0 0
      files/navigo/stations/metro/stations_11.txt
  5. 0 0
      files/navigo/stations/metro/stations_12.txt
  6. 0 0
      files/navigo/stations/metro/stations_13.txt
  7. 1 0
      files/navigo/stations/metro/stations_14.txt
  8. 0 0
      files/navigo/stations/metro/stations_15.txt
  9. 0 0
      files/navigo/stations/metro/stations_16.txt
  10. 0 0
      files/navigo/stations/metro/stations_17.txt
  11. 0 0
      files/navigo/stations/metro/stations_18.txt
  12. 0 0
      files/navigo/stations/metro/stations_19.txt
  13. 0 0
      files/navigo/stations/metro/stations_2.txt
  14. 0 0
      files/navigo/stations/metro/stations_20.txt
  15. 0 0
      files/navigo/stations/metro/stations_21.txt
  16. 0 0
      files/navigo/stations/metro/stations_22.txt
  17. 0 0
      files/navigo/stations/metro/stations_23.txt
  18. 0 0
      files/navigo/stations/metro/stations_24.txt
  19. 0 0
      files/navigo/stations/metro/stations_25.txt
  20. 0 0
      files/navigo/stations/metro/stations_26.txt
  21. 0 0
      files/navigo/stations/metro/stations_27.txt
  22. 0 0
      files/navigo/stations/metro/stations_28.txt
  23. 0 0
      files/navigo/stations/metro/stations_29.txt
  24. 0 0
      files/navigo/stations/metro/stations_3.txt
  25. 0 0
      files/navigo/stations/metro/stations_30.txt
  26. 0 0
      files/navigo/stations/metro/stations_31.txt
  27. 0 0
      files/navigo/stations/metro/stations_4.txt
  28. 0 0
      files/navigo/stations/metro/stations_5.txt
  29. 0 0
      files/navigo/stations/metro/stations_6.txt
  30. 0 0
      files/navigo/stations/metro/stations_7.txt
  31. 0 0
      files/navigo/stations/metro/stations_8.txt
  32. 0 0
      files/navigo/stations/metro/stations_9.txt
  33. 0 0
      files/navigo/stations/train/stations_1.txt
  34. 0 0
      files/navigo/stations/train/stations_14.txt
  35. 0 0
      files/navigo/stations/train/stations_15.txt
  36. 0 0
      files/navigo/stations/train/stations_16.txt
  37. 0 0
      files/navigo/stations/train/stations_17.txt
  38. 0 0
      files/navigo/stations/train/stations_18.txt
  39. 0 0
      files/navigo/stations/train/stations_20.txt
  40. 0 0
      files/navigo/stations/train/stations_21.txt
  41. 0 0
      files/navigo/stations/train/stations_22.txt
  42. 0 0
      files/navigo/stations/train/stations_23.txt
  43. 0 0
      files/navigo/stations/train/stations_26.txt
  44. 0 0
      files/navigo/stations/train/stations_28.txt
  45. 0 0
      files/navigo/stations/train/stations_3.txt
  46. 0 0
      files/navigo/stations/train/stations_30.txt
  47. 0 0
      files/navigo/stations/train/stations_31.txt
  48. 0 0
      files/navigo/stations/train/stations_32.txt
  49. 0 0
      files/navigo/stations/train/stations_33.txt
  50. 0 0
      files/navigo/stations/train/stations_35.txt
  51. 0 0
      files/navigo/stations/train/stations_40.txt
  52. 0 0
      files/navigo/stations/train/stations_41.txt
  53. 0 0
      files/navigo/stations/train/stations_42.txt
  54. 0 0
      files/navigo/stations/train/stations_43.txt
  55. 0 0
      files/navigo/stations/train/stations_44.txt
  56. 0 0
      files/navigo/stations/train/stations_45.txt
  57. 0 0
      files/navigo/stations/train/stations_50.txt
  58. 0 0
      files/navigo/stations/train/stations_51.txt
  59. 0 0
      files/navigo/stations/train/stations_52.txt
  60. 0 0
      files/navigo/stations/train/stations_53.txt
  61. 0 0
      files/navigo/stations/train/stations_54.txt
  62. 0 0
      files/navigo/stations/train/stations_55.txt
  63. 0 0
      files/navigo/stations/train/stations_56.txt
  64. 0 0
      files/navigo/stations/train/stations_57.txt
  65. 0 0
      files/navigo/stations/train/stations_6.txt
  66. 0 0
      files/navigo/stations/train/stations_60.txt
  67. 0 0
      files/navigo/stations/train/stations_61.txt
  68. 0 0
      files/navigo/stations/train/stations_63.txt
  69. 0 0
      files/navigo/stations/train/stations_64.txt
  70. 0 0
      files/navigo/stations/train/stations_65.txt
  71. 0 0
      files/navigo/stations/train/stations_70.txt
  72. 0 0
      files/navigo/stations/train/stations_72.txt
  73. 0 0
      files/navigo/stations/train/stations_73.txt
  74. 0 0
      files/navigo/stations/train/stations_75.txt
  75. 0 0
      files/navigo/stations/train/stations_76.txt
  76. 1 0
      files/navigo/stations/tram/stations_0.txt
  77. 1 0
      files/navigo/stations/tram/stations_1.txt

+ 101 - 18
api/calypso/transit/navigo.c

@@ -147,9 +147,9 @@ char* get_navigo_station(
     int station_group_id,
     int station_id,
     int station_sub_id,
-    int service_provider) {
-    switch(service_provider) {
-    case NAVIGO_PROVIDER_SNCF: {
+    int transport_type) {
+    switch(transport_type) {
+    case COMMUTER_TRAIN: {
         if(station_group_id < 77 && station_id < 19) {
             char* file_path = malloc(256 * sizeof(char));
             if(!file_path) {
@@ -158,7 +158,7 @@ char* get_navigo_station(
             snprintf(
                 file_path,
                 256,
-                APP_ASSETS_PATH("navigo/stations/sncf/stations_%d.txt"),
+                APP_ASSETS_PATH("navigo/stations/train/stations_%d.txt"),
                 station_group_id);
             const char* sncf_stations_path = file_path;
             Storage* storage = furi_record_open(RECORD_STORAGE);
@@ -191,7 +191,7 @@ char* get_navigo_station(
                     free(string_line_copy);
                 }
             } else {
-                FURI_LOG_E("Metroflip:Scene:Calypso", "Failed to open sncf_stations.txt");
+                FURI_LOG_E("Metroflip:Scene:Calypso", "Failed to open train stations file");
             }
 
             furi_string_free(line);
@@ -211,8 +211,73 @@ char* get_navigo_station(
         snprintf(station, 10, "%d-%d-%d", station_group_id, station_id, station_sub_id);
         return station;
     }
-    case NAVIGO_PROVIDER_RATP:
-    case NAVIGO_PROVIDER_ORA: {
+    case TRAM: {
+        char* file_path = malloc(256 * sizeof(char));
+        if(!file_path) {
+            return "Unknown";
+        }
+        snprintf(
+            file_path,
+            256,
+            APP_ASSETS_PATH("navigo/stations/tram/stations_%d.txt"),
+            station_group_id);
+        const char* sncf_stations_path = file_path;
+        Storage* storage = furi_record_open(RECORD_STORAGE);
+
+        Stream* stream = file_stream_alloc(storage);
+        FuriString* line = furi_string_alloc();
+
+        char* found_station_name = NULL;
+
+        if(file_stream_open(stream, sncf_stations_path, FSAM_READ, FSOM_OPEN_EXISTING)) {
+            while(stream_read_line(stream, line)) {
+                // file is in csv format: station_id,station_sub_id,station_name
+                // search for the station
+                furi_string_replace_all(line, "\r", "");
+                furi_string_replace_all(line, "\n", "");
+                const char* string_line = furi_string_get_cstr(line);
+                char* string_line_copy = strdup(string_line);
+                if(!string_line_copy) {
+                    return "Unknown";
+                }
+                int line_station_id = atoi(get_token(string_line_copy, ",", string_line_copy));
+                int line_station_sub_id = atoi(get_token(string_line_copy, ",", string_line_copy));
+                if(line_station_id == station_id && line_station_sub_id == station_sub_id) {
+                    found_station_name =
+                        strdup(get_token(string_line_copy, ",", string_line_copy));
+                    free(string_line_copy);
+                    break;
+                }
+                free(string_line_copy);
+            }
+        } else {
+            FURI_LOG_E("Metroflip:Scene:Calypso", "Failed to open tram stations file");
+        }
+
+        furi_string_free(line);
+        file_stream_close(stream);
+        stream_free(stream);
+        free(file_path);
+
+        if(found_station_name) {
+            return found_station_name;
+        }
+
+        // cast station_group_id-station_id-station_sub_id to a string
+        char* station = malloc(12 * sizeof(char));
+        if(!station) {
+            return "Unknown";
+        }
+        if(station_sub_id != 0) {
+            snprintf(station, 10, "%d-%d-%d", station_group_id, station_id, station_sub_id);
+        } else if(station_id != 0) {
+            snprintf(station, 10, "%d-%d", station_group_id, station_id);
+        } else {
+            snprintf(station, 10, "%d", station_group_id);
+        }
+        return station;
+    }
+    case METRO: {
         if(station_group_id < 32 && station_id < 16) {
             char* file_path = malloc(256 * sizeof(char));
             if(!file_path) {
@@ -221,7 +286,7 @@ char* get_navigo_station(
             snprintf(
                 file_path,
                 256,
-                APP_ASSETS_PATH("navigo/stations/ratp/stations_%d.txt"),
+                APP_ASSETS_PATH("navigo/stations/metro/stations_%d.txt"),
                 station_group_id);
             const char* ratp_stations_path = file_path;
             Storage* storage = furi_record_open(RECORD_STORAGE);
@@ -252,7 +317,7 @@ char* get_navigo_station(
                     free(string_line_copy);
                 }
             } else {
-                FURI_LOG_E("Metroflip:Scene:Calypso", "Failed to open ratp_stations.txt");
+                FURI_LOG_E("Metroflip:Scene:Calypso", "Failed to open metro stations file");
             }
 
             furi_string_free(line);
@@ -269,7 +334,13 @@ char* get_navigo_station(
         if(!station) {
             return "Unknown";
         }
-        snprintf(station, 10, "%d-%d", station_group_id, station_id);
+        if(station_sub_id != 0) {
+            snprintf(station, 10, "%d-%d-%d", station_group_id, station_id, station_sub_id);
+        } else if(station_id != 0) {
+            snprintf(station, 10, "%d-%d", station_group_id, station_id);
+        } else {
+            snprintf(station, 10, "%d", station_group_id);
+        }
         return station;
     }
     default: {
@@ -278,13 +349,19 @@ char* get_navigo_station(
         if(!station) {
             return "Unknown";
         }
-        snprintf(station, 10, "%d-%d", station_group_id, station_id);
+        if(station_sub_id != 0) {
+            snprintf(station, 10, "%d-%d-%d", station_group_id, station_id, station_sub_id);
+        } else if(station_id != 0) {
+            snprintf(station, 10, "%d-%d", station_group_id, station_id);
+        } else {
+            snprintf(station, 10, "%d", station_group_id);
+        }
         return station;
     }
     }
 }
 
-char* get_navigo_sncf_sector(int station_group_id) {
+char* get_navigo_train_sector(int station_group_id) {
     // group id is in format XY where X is the sector
     const char* station_name = NAVIGO_SNCF_SECTORS_LIST[station_group_id / 10];
     return strdup(station_name);
@@ -293,6 +370,7 @@ char* get_navigo_sncf_sector(int station_group_id) {
 const char* get_navigo_tram_line(int route_number) {
     switch(route_number) {
     case 1:
+    case 13:
         return "T3a";
     case 9:
         return "T9";
@@ -320,12 +398,12 @@ void show_navigo_event_info(
         return;
     }
     char* station = get_navigo_station(
-        event->station_group_id, event->station_id, event->station_sub_id, event->service_provider);
+        event->station_group_id, event->station_id, event->station_sub_id, event->transport_type);
     char* sector = NULL;
-    if(event->service_provider == NAVIGO_PROVIDER_SNCF) {
-        sector = get_navigo_sncf_sector(event->station_group_id);
+    if(event->transport_type == COMMUTER_TRAIN) {
+        sector = get_navigo_train_sector(event->station_group_id);
     } else {
-        sector = get_navigo_station(event->station_group_id, 0, 0, event->service_provider);
+        sector = get_navigo_station(event->station_group_id, 0, 0, event->transport_type);
     }
 
     if(event->transport_type == URBAN_BUS || event->transport_type == INTERURBAN_BUS ||
@@ -474,8 +552,13 @@ void show_navigo_event_info(
 
 void show_navigo_special_event_info(NavigoCardSpecialEvent* event, FuriString* parsed_data) {
     char* station = get_navigo_station(
-        event->station_group_id, event->station_id, event->station_sub_id, event->service_provider);
-    char* sector = get_navigo_station(event->station_group_id, 0, 0, event->service_provider);
+        event->station_group_id, event->station_id, event->station_sub_id, event->transport_type);
+    char* sector = NULL;
+    if(event->transport_type == COMMUTER_TRAIN) {
+        sector = get_navigo_train_sector(event->station_group_id);
+    } else {
+        sector = get_navigo_station(event->station_group_id, 0, 0, event->transport_type);
+    }
 
     if(event->transport_type == URBAN_BUS || event->transport_type == INTERURBAN_BUS ||
        event->transport_type == METRO || event->transport_type == TRAM) {

+ 0 - 0
files/navigo/stations/ratp/stations_1.txt → files/navigo/stations/metro/stations_1.txt


+ 0 - 0
files/navigo/stations/ratp/stations_10.txt → files/navigo/stations/metro/stations_10.txt


+ 0 - 0
files/navigo/stations/ratp/stations_11.txt → files/navigo/stations/metro/stations_11.txt


+ 0 - 0
files/navigo/stations/ratp/stations_12.txt → files/navigo/stations/metro/stations_12.txt


+ 0 - 0
files/navigo/stations/ratp/stations_13.txt → files/navigo/stations/metro/stations_13.txt


+ 1 - 0
files/navigo/stations/ratp/stations_14.txt → files/navigo/stations/metro/stations_14.txt

@@ -2,6 +2,7 @@
 2,Porte de Choisy
 3,Porte d'Italie
 4,Cite universitaire
+8,Maison Blanche
 9,Maison Blanche
 10,Tolbiac
 11,Nationale

+ 0 - 0
files/navigo/stations/ratp/stations_15.txt → files/navigo/stations/metro/stations_15.txt


+ 0 - 0
files/navigo/stations/ratp/stations_16.txt → files/navigo/stations/metro/stations_16.txt


+ 0 - 0
files/navigo/stations/ratp/stations_17.txt → files/navigo/stations/metro/stations_17.txt


+ 0 - 0
files/navigo/stations/ratp/stations_18.txt → files/navigo/stations/metro/stations_18.txt


+ 0 - 0
files/navigo/stations/ratp/stations_19.txt → files/navigo/stations/metro/stations_19.txt


+ 0 - 0
files/navigo/stations/ratp/stations_2.txt → files/navigo/stations/metro/stations_2.txt


+ 0 - 0
files/navigo/stations/ratp/stations_20.txt → files/navigo/stations/metro/stations_20.txt


+ 0 - 0
files/navigo/stations/ratp/stations_21.txt → files/navigo/stations/metro/stations_21.txt


+ 0 - 0
files/navigo/stations/ratp/stations_22.txt → files/navigo/stations/metro/stations_22.txt


+ 0 - 0
files/navigo/stations/ratp/stations_23.txt → files/navigo/stations/metro/stations_23.txt


+ 0 - 0
files/navigo/stations/ratp/stations_24.txt → files/navigo/stations/metro/stations_24.txt


+ 0 - 0
files/navigo/stations/ratp/stations_25.txt → files/navigo/stations/metro/stations_25.txt


+ 0 - 0
files/navigo/stations/ratp/stations_26.txt → files/navigo/stations/metro/stations_26.txt


+ 0 - 0
files/navigo/stations/ratp/stations_27.txt → files/navigo/stations/metro/stations_27.txt


+ 0 - 0
files/navigo/stations/ratp/stations_28.txt → files/navigo/stations/metro/stations_28.txt


+ 0 - 0
files/navigo/stations/ratp/stations_29.txt → files/navigo/stations/metro/stations_29.txt


+ 0 - 0
files/navigo/stations/ratp/stations_3.txt → files/navigo/stations/metro/stations_3.txt


+ 0 - 0
files/navigo/stations/ratp/stations_30.txt → files/navigo/stations/metro/stations_30.txt


+ 0 - 0
files/navigo/stations/ratp/stations_31.txt → files/navigo/stations/metro/stations_31.txt


+ 0 - 0
files/navigo/stations/ratp/stations_4.txt → files/navigo/stations/metro/stations_4.txt


+ 0 - 0
files/navigo/stations/ratp/stations_5.txt → files/navigo/stations/metro/stations_5.txt


+ 0 - 0
files/navigo/stations/ratp/stations_6.txt → files/navigo/stations/metro/stations_6.txt


+ 0 - 0
files/navigo/stations/ratp/stations_7.txt → files/navigo/stations/metro/stations_7.txt


+ 0 - 0
files/navigo/stations/ratp/stations_8.txt → files/navigo/stations/metro/stations_8.txt


+ 0 - 0
files/navigo/stations/ratp/stations_9.txt → files/navigo/stations/metro/stations_9.txt


+ 0 - 0
files/navigo/stations/sncf/stations_1.txt → files/navigo/stations/train/stations_1.txt


+ 0 - 0
files/navigo/stations/sncf/stations_14.txt → files/navigo/stations/train/stations_14.txt


+ 0 - 0
files/navigo/stations/sncf/stations_15.txt → files/navigo/stations/train/stations_15.txt


+ 0 - 0
files/navigo/stations/sncf/stations_16.txt → files/navigo/stations/train/stations_16.txt


+ 0 - 0
files/navigo/stations/sncf/stations_17.txt → files/navigo/stations/train/stations_17.txt


+ 0 - 0
files/navigo/stations/sncf/stations_18.txt → files/navigo/stations/train/stations_18.txt


+ 0 - 0
files/navigo/stations/sncf/stations_20.txt → files/navigo/stations/train/stations_20.txt


+ 0 - 0
files/navigo/stations/sncf/stations_21.txt → files/navigo/stations/train/stations_21.txt


+ 0 - 0
files/navigo/stations/sncf/stations_22.txt → files/navigo/stations/train/stations_22.txt


+ 0 - 0
files/navigo/stations/sncf/stations_23.txt → files/navigo/stations/train/stations_23.txt


+ 0 - 0
files/navigo/stations/sncf/stations_26.txt → files/navigo/stations/train/stations_26.txt


+ 0 - 0
files/navigo/stations/sncf/stations_28.txt → files/navigo/stations/train/stations_28.txt


+ 0 - 0
files/navigo/stations/sncf/stations_3.txt → files/navigo/stations/train/stations_3.txt


+ 0 - 0
files/navigo/stations/sncf/stations_30.txt → files/navigo/stations/train/stations_30.txt


+ 0 - 0
files/navigo/stations/sncf/stations_31.txt → files/navigo/stations/train/stations_31.txt


+ 0 - 0
files/navigo/stations/sncf/stations_32.txt → files/navigo/stations/train/stations_32.txt


+ 0 - 0
files/navigo/stations/sncf/stations_33.txt → files/navigo/stations/train/stations_33.txt


+ 0 - 0
files/navigo/stations/sncf/stations_35.txt → files/navigo/stations/train/stations_35.txt


+ 0 - 0
files/navigo/stations/sncf/stations_40.txt → files/navigo/stations/train/stations_40.txt


+ 0 - 0
files/navigo/stations/sncf/stations_41.txt → files/navigo/stations/train/stations_41.txt


+ 0 - 0
files/navigo/stations/sncf/stations_42.txt → files/navigo/stations/train/stations_42.txt


+ 0 - 0
files/navigo/stations/sncf/stations_43.txt → files/navigo/stations/train/stations_43.txt


+ 0 - 0
files/navigo/stations/sncf/stations_44.txt → files/navigo/stations/train/stations_44.txt


+ 0 - 0
files/navigo/stations/sncf/stations_45.txt → files/navigo/stations/train/stations_45.txt


+ 0 - 0
files/navigo/stations/sncf/stations_50.txt → files/navigo/stations/train/stations_50.txt


+ 0 - 0
files/navigo/stations/sncf/stations_51.txt → files/navigo/stations/train/stations_51.txt


+ 0 - 0
files/navigo/stations/sncf/stations_52.txt → files/navigo/stations/train/stations_52.txt


+ 0 - 0
files/navigo/stations/sncf/stations_53.txt → files/navigo/stations/train/stations_53.txt


+ 0 - 0
files/navigo/stations/sncf/stations_54.txt → files/navigo/stations/train/stations_54.txt


+ 0 - 0
files/navigo/stations/sncf/stations_55.txt → files/navigo/stations/train/stations_55.txt


+ 0 - 0
files/navigo/stations/sncf/stations_56.txt → files/navigo/stations/train/stations_56.txt


+ 0 - 0
files/navigo/stations/sncf/stations_57.txt → files/navigo/stations/train/stations_57.txt


+ 0 - 0
files/navigo/stations/sncf/stations_6.txt → files/navigo/stations/train/stations_6.txt


+ 0 - 0
files/navigo/stations/sncf/stations_60.txt → files/navigo/stations/train/stations_60.txt


+ 0 - 0
files/navigo/stations/sncf/stations_61.txt → files/navigo/stations/train/stations_61.txt


+ 0 - 0
files/navigo/stations/sncf/stations_63.txt → files/navigo/stations/train/stations_63.txt


+ 0 - 0
files/navigo/stations/sncf/stations_64.txt → files/navigo/stations/train/stations_64.txt


+ 0 - 0
files/navigo/stations/sncf/stations_65.txt → files/navigo/stations/train/stations_65.txt


+ 0 - 0
files/navigo/stations/sncf/stations_70.txt → files/navigo/stations/train/stations_70.txt


+ 0 - 0
files/navigo/stations/sncf/stations_72.txt → files/navigo/stations/train/stations_72.txt


+ 0 - 0
files/navigo/stations/sncf/stations_73.txt → files/navigo/stations/train/stations_73.txt


+ 0 - 0
files/navigo/stations/sncf/stations_75.txt → files/navigo/stations/train/stations_75.txt


+ 0 - 0
files/navigo/stations/sncf/stations_76.txt → files/navigo/stations/train/stations_76.txt


+ 1 - 0
files/navigo/stations/tram/stations_0.txt

@@ -0,0 +1 @@
+26,11,L'Onde

+ 1 - 0
files/navigo/stations/tram/stations_1.txt

@@ -0,0 +1 @@
+11,7,Cite Universitaire