import { Mode, type StopTime } from './motis-types'; import { m } from './paraglide/messages'; export const getPictogram = (mode: Mode) => { switch (true) { case mode === Mode.Bike: return 'Velo_l'; case mode === Mode.ODM: case mode === Mode.Rental: return 'Taxi_l'; case mode === Mode.Car: case mode === Mode.CarDropoff: case mode === Mode.CarParking: return 'Auto_l'; // Transit // case mode === Mode.Airplane: return 'Abflug_l'; case mode === Mode.LongDistanceRail: case mode === Mode.RegionalFastRail: case mode === Mode.RegionalRail: case mode === Mode.Metro: case mode === Mode.HighspeedRail: return 'Zug_l'; case mode === Mode.NightRail: return 'Schlafwagen'; case mode === Mode.Subway: return 'Metro_l_' + (m.lang_short() === 'en' ? 'de' : m.lang_short()); case mode === Mode.Bus: return 'Bus_l'; case mode === Mode.Coach: return 'Fernbus_l'; case mode === Mode.Tram: case mode === Mode.CableTram: return 'Tram_l'; case mode === Mode.Funicular: return 'Zahnradbahn_l'; case mode === Mode.AerialLift: // return 'Gondelbahn_l'; return 'Luftseilbahn_l'; case mode === Mode.Ferry: return 'Schiff_l'; case mode === Mode.Other: default: return 'Licht'; } }; export const stopTimeToShortName = (stopTime: StopTime) => { let n = stopTime.routeShortName; if (n.startsWith('EC ')) n = n.replace('EC ', 'EC'); if (stopTime.mode === 'TRAM' && !isNaN(parseInt(n))) n = 'T ' + n; if (stopTime.mode === 'BUS' && !isNaN(parseInt(n))) n = 'B ' + n; if ( stopTime.routeShortName === 'European Sleeper' && stopTime.agencyName === 'Eu Sleeper' ) n = 'EN'; // TODO: validate these are real euronights if (n === '?') n = ''; if (n.startsWith('FlixTrain ')) n = n.substring(10); // Note: may also catch ECs/ICs/EXTs operated by DB if ( stopTime.agencyId === '12681' && stopTime.agencyName === 'DB Fernverkehr AG' && stopTime.mode === 'HIGHSPEED_RAIL' && stopTime.source.startsWith('de_DELFI.gtfs.zip/') && !isNaN(parseInt(n)) ) n = `ICE ${n}`; return n; }; export const stopTimeShouldRenderGlyph = ( stopTime: StopTime, routeShortName: string ) => ([ Mode.NightRail, Mode.HighspeedRail, Mode.LongDistanceRail, Mode.RegionalFastRail, Mode.RegionalRail, ].includes(stopTime.mode) || (stopTime.mode === 'BUS' && routeShortName.startsWith('EV')) || (stopTime.mode === 'METRO' && stopTime.routeShortName.startsWith('S'))) && !stopTime.routeShortName.startsWith('FlixTrain'); export const blacklistedAgencyURLs = ['http://www.rta.ae']; export const getNotices = ( stopTime: StopTime, delayMinutes: number, isArrivals: boolean ) => { let notices = [] as [pictogram: string[], content: string][]; if (stopTime.cancelled) notices.push([['Cancellation', 'Attention'], m.connection_cancelled()]); if (delayMinutes < -0.5) { notices.push([ ['Hint'], m.connection_early({ minutes: -delayMinutes, arrival: isArrivals.toString(), }), ]); } else if (delayMinutes >= 1) { notices.push([ delayMinutes >= 3 ? ['Delay', 'Attention'] : delayMinutes >= 2 ? ['Delay', 'Hint'] : ['Hint'], m.connection_delayed({ minutes: delayMinutes.toFixed(0), }), ]); } return notices; };