diff --git a/public/favicon-64.png b/public/favicon-64.png index 5964110..8ab84b4 100644 Binary files a/public/favicon-64.png and b/public/favicon-64.png differ diff --git a/src/scripts/interfaces/Timetable.ts b/src/scripts/interfaces/Timetable.ts index 0503560..e010186 100644 --- a/src/scripts/interfaces/Timetable.ts +++ b/src/scripts/interfaces/Timetable.ts @@ -2,16 +2,22 @@ import TrainStop from "./TrainStop"; export default interface Timetable { trainNo: number; - driverName: string; - driverId: number; - currentStationName: string; - currentStationHash: string; - timetableId: number; - category: string; - route: string; - TWR: boolean; - SKR: boolean; - routeDistance: number; - followingStops: TrainStop[]; - followingSceneries: string[]; + + success: boolean; + + data?: { + trainNo: number; + driverName: string; + driverId: number; + currentStationName: string; + currentStationHash: string; + timetableId: number; + category: string; + route: string; + TWR: boolean; + SKR: boolean; + routeDistance: number; + followingStops: TrainStop[]; + followingSceneries: string[]; + } } diff --git a/src/scripts/utils/storeUtils.ts b/src/scripts/utils/storeUtils.ts index cabe166..1d256c3 100644 --- a/src/scripts/utils/storeUtils.ts +++ b/src/scripts/utils/storeUtils.ts @@ -1,4 +1,5 @@ import Station from "../interfaces/Station"; +import Timetable from "../interfaces/Timetable"; import TrainStop from "../interfaces/TrainStop"; export const getLocoURL = (locoType: string): string => (`https://rj.td2.info.pl/dist/img/thumbnails/${locoType.includes("EN") ? locoType + "rb" : locoType}.png`) @@ -79,7 +80,7 @@ export const timestampToString = (timestamp: number | null): string => }) : ""; -export const getTrainStopStatus = (stopInfo: TrainStop, timetableData: { currentStationName: string }, station: Station) => { +export const getTrainStopStatus = (stopInfo: TrainStop, currentStationName: string, station: Station) => { let stopStatus = "", stopLabel = "", stopStatusID = -1; @@ -88,23 +89,23 @@ export const getTrainStopStatus = (stopInfo: TrainStop, timetableData: { current stopStatus = "terminated"; stopLabel = "Skończył bieg"; stopStatusID = 5; - } else if (!stopInfo.terminatesHere && stopInfo.confirmed && timetableData.currentStationName == station.name) { + } else if (!stopInfo.terminatesHere && stopInfo.confirmed && currentStationName == station.name) { stopStatus = "departed"; stopLabel = "Odprawiony"; stopStatusID = 2; - } else if (!stopInfo.terminatesHere && stopInfo.confirmed && timetableData.currentStationName != station.name) { + } else if (!stopInfo.terminatesHere && stopInfo.confirmed && currentStationName != station.name) { stopStatus = "departed-away"; stopLabel = "Odjechał"; stopStatusID = 4; - } else if (timetableData.currentStationName == station.name && !stopInfo.stopped) { + } else if (currentStationName == station.name && !stopInfo.stopped) { stopStatus = "online"; stopLabel = "Na stacji"; stopStatusID = 0; - } else if (timetableData.currentStationName == station.name && stopInfo.stopped) { + } else if (currentStationName == station.name && stopInfo.stopped) { stopStatus = "stopped"; stopLabel = "Postój"; stopStatusID = 1; - } else if (timetableData.currentStationName != station.name) { + } else if (currentStationName != station.name) { stopStatus = "arriving"; stopLabel = "W drodze"; stopStatusID = 3; diff --git a/src/store/index.ts b/src/store/index.ts index 4c35c40..8c58626 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -26,6 +26,7 @@ import ScheduledTrain from '@/scripts/interfaces/ScheduledTrain'; export interface State { stationList: Station[], trainList: Train[], + timetableList: Timetable[], sceneryData: any[][], @@ -85,6 +86,7 @@ export const store = createStore({ state: () => ({ stationList: [], trainList: [], + timetableList: [], sceneryData: [], @@ -237,11 +239,17 @@ export const store = createStore({ async fetchTimetableData({ commit }) { let warnings = 0; - const reducedList = this.state.trainList.reduce(async (acc: Promise, train: Train) => { + const timetableList = this.state.trainList.reduce(async (acc: Promise, train: Train) => { const data: { success: boolean; message: TimetableAPIData } = await (await axios.get(URLs.getTimetableURL(train.trainNo, this.state.region.id))).data; if (!data.success) { warnings++; + + (await acc).push({ + trainNo: train.trainNo, + success: false + }); + return acc; } @@ -312,25 +320,30 @@ export const store = createStore({ }, []); (await acc).push({ + data: { + trainNo: train.trainNo, + driverName: train.driverName, + driverId: train.driverId, + currentStationName: train.currentStationName, + currentStationHash: train.currentStationHash, + timetableId: trainInfo.timetableId, + category: trainInfo.trainCategoryCode, + route: trainInfo.route, + TWR: trainInfo.twr, + SKR: trainInfo.skr, + routeDistance: timetable.stopPoints[timetable.stopPoints.length - 1].pointDistance, + followingStops, + followingSceneries: trainInfo.sceneries + }, + trainNo: train.trainNo, - driverName: train.driverName, - driverId: train.driverId, - currentStationName: train.currentStationName, - currentStationHash: train.currentStationHash, - timetableId: trainInfo.timetableId, - category: trainInfo.trainCategoryCode, - route: trainInfo.route, - TWR: trainInfo.twr, - SKR: trainInfo.skr, - routeDistance: timetable.stopPoints[timetable.stopPoints.length - 1].pointDistance, - followingStops, - followingSceneries: trainInfo.sceneries + success: true }); return acc; }, Promise.resolve([])); - commit(MUTATIONS.UPDATE_TIMETABLES, (await reducedList)); + commit(MUTATIONS.UPDATE_TIMETABLES, (await timetableList)); commit(MUTATIONS.SET_TIMETABLE_DATA_STATUS, warnings == 0 ? DataStatus.Loaded : DataStatus.Warning); } @@ -346,9 +359,6 @@ export const store = createStore({ checkpoints: stationData.checkpoints ? stationData.checkpoints.split(";").map(sub => ({ checkpointName: sub, scheduledTrains: [] })) : [], } })); - - console.log(state.stationList); - }, @@ -441,9 +451,12 @@ export const store = createStore({ const stationName = station.name.toLowerCase(); const scheduledTrains: ScheduledTrain[] = timetableList.reduce((acc: ScheduledTrain[], timetable: Timetable) => { - if (!timetable.followingSceneries.includes(station.onlineInfo?.hash || "")) return acc; + if (!timetable.data) + return acc; - const stopInfoIndex = timetable.followingStops.findIndex(stop => { + if (!timetable.data.followingSceneries.includes(station.onlineInfo?.hash || "")) return acc; + + const stopInfoIndex = timetable.data.followingStops.findIndex(stop => { const stopName = stop.stopNameRAW.toLowerCase(); // if (stop.stopName == "ARKADIA ZDRÓJ" && station.name == "Arkadia Zdrój 2019" && stop.pointId != "1583014379097") return false; @@ -466,18 +479,18 @@ export const store = createStore({ if (stopInfoIndex == -1) return acc; - const trainStop = timetable.followingStops[stopInfoIndex]; - const trainStopStatus = getTrainStopStatus(trainStop, timetable, station); + const trainStop = timetable.data.followingStops[stopInfoIndex]; + const trainStopStatus = getTrainStopStatus(trainStop, timetable.data.currentStationName, station); acc.push({ - trainNo: timetable.trainNo, - driverName: timetable.driverName, - driverId: timetable.driverId, - currentStationName: timetable.currentStationName, - currentStationHash: timetable.currentStationHash, - category: timetable.category, - beginsAt: timetable.followingStops[0].stopNameRAW, - terminatesAt: timetable.followingStops[timetable.followingStops.length - 1].stopNameRAW, + trainNo: timetable.data.trainNo, + driverName: timetable.data.driverName, + driverId: timetable.data.driverId, + currentStationName: timetable.data.currentStationName, + currentStationHash: timetable.data.currentStationHash, + category: timetable.data.category, + beginsAt: timetable.data.followingStops[0].stopNameRAW, + terminatesAt: timetable.data.followingStops[timetable.data.followingStops.length - 1].stopNameRAW, nearestStop: "", stopInfo: trainStop, stopLabel: trainStopStatus.stopLabel, @@ -493,22 +506,25 @@ export const store = createStore({ for (const checkpoint of station.generalInfo.checkpoints) { timetableList.forEach(timetable => { - if (!timetable.followingSceneries.includes(station.onlineInfo?.hash || "")) return; + if (!timetable.data) return; + if (!timetable.data.followingSceneries.includes(station.onlineInfo?.hash || "")) return; - timetable.followingStops + const timetableData = timetable.data; + + timetableData.followingStops .filter(trainStop => trainStop.stopNameRAW.toLowerCase() === checkpoint.checkpointName.toLowerCase()) .forEach(trainStop => { - const trainStopStatus = getTrainStopStatus(trainStop, timetable, station); + const trainStopStatus = getTrainStopStatus(trainStop, timetableData.currentStationName, station); checkpoint.scheduledTrains.push({ trainNo: timetable.trainNo, - driverName: timetable.driverName, - driverId: timetable.driverId, - currentStationName: timetable.currentStationName, - currentStationHash: timetable.currentStationHash, - category: timetable.category, - beginsAt: timetable.followingStops[0].stopNameRAW, - terminatesAt: timetable.followingStops[timetable.followingStops.length - 1].stopNameRAW, + driverName: timetableData.driverName, + driverId: timetableData.driverId, + currentStationName: timetableData.currentStationName, + currentStationHash: timetableData.currentStationHash, + category: timetableData.category, + beginsAt: timetableData.followingStops[0].stopNameRAW, + terminatesAt: timetableData.followingStops[timetableData.followingStops.length - 1].stopNameRAW, nearestStop: "", stopInfo: trainStop, stopLabel: trainStopStatus.stopLabel, @@ -531,8 +547,10 @@ export const store = createStore({ }); state.trainList = state.trainList.reduce((acc, train) => { - const timetableData = timetableList.find(data => data && data.trainNo === train.trainNo && data.driverId === train.driverId); - const allTimetables = timetableList.filter(data => data && data.driverId === train.driverId && data.trainNo !== train.trainNo); + const timetable = timetableList.find(tt => tt.data && tt.trainNo === train.trainNo && tt.data.driverId === train.driverId); + const allTimetables = timetableList.filter(tt => tt.data && tt.data.driverId === train.driverId && tt.trainNo !== train.trainNo); + + if (!timetable || !timetable.data) return acc; if (allTimetables.length > 0) return acc; @@ -541,7 +559,7 @@ export const store = createStore({ .find(station => station.name === train.currentStationName) ?.onlineInfo?.scheduledTrains?.find(stationTrain => stationTrain.trainNo === train.trainNo); - acc.push({ ...train, timetableData, stopStatus: trainStopData?.stopStatus || "", stopLabel: trainStopData?.stopLabel || "" }); + acc.push({ ...train, timetableData: timetable.data, stopStatus: trainStopData?.stopStatus || "", stopLabel: trainStopData?.stopLabel || "" }); return acc; }, [] as Train[]);