From da34370a43e53924d9beae4e43b96a79068047d1 Mon Sep 17 00:00:00 2001 From: Spythere Date: Tue, 1 Mar 2022 08:25:19 +0100 Subject: [PATCH] =?UTF-8?q?Przygotowanie=20pod=20nowsz=C4=85=20wersj=C4=99?= =?UTF-8?q?=20pliku=20JSON?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/StationsView/StationTable.vue | 38 +++++++-------- src/scripts/interfaces/Station.ts | 20 +++----- src/scripts/interfaces/StationRoutes.ts | 23 +++++++++ src/scripts/managers/stationFilterManager.ts | 19 ++++---- src/scripts/utils/apiURLs.ts | 2 +- src/store/index.ts | 51 ++++++++++++++------ 6 files changed, 96 insertions(+), 57 deletions(-) create mode 100644 src/scripts/interfaces/StationRoutes.ts diff --git a/src/components/StationsView/StationTable.vue b/src/components/StationsView/StationTable.vue index c381e85..bdb5312 100644 --- a/src/components/StationsView/StationTable.vue +++ b/src/components/StationsView/StationTable.vue @@ -64,7 +64,7 @@ !station.generalInfo.nonPublic && !station.generalInfo.unavailable " - :style="calculateExpStyle(station.generalInfo.reqLevel, station.generalInfo.supportersOnly)" + :style="calculateExpStyle(station.generalInfo.reqLevel)" > {{ station.generalInfo.reqLevel >= 2 ? station.generalInfo.reqLevel : 'L' }} @@ -109,43 +109,43 @@ - {{ station.generalInfo.routes.twoWay.catenary }} + {{ station.generalInfo.routes.twoWayCatenaryRouteNames.length }} - {{ station.generalInfo.routes.twoWay.noCatenary }} + {{ station.generalInfo.routes.twoWayNoCatenaryRouteNames.length }} - {{ station.generalInfo.routes.oneWay.catenary }} + {{ station.generalInfo.routes.oneWayCatenaryRouteNames.length }} - {{ station.generalInfo.routes.oneWay.noCatenary }} + {{ station.generalInfo.routes.oneWayNoCatenaryRouteNames.length }} @@ -175,10 +175,10 @@ /> SBL icon-unknown @@ -296,11 +296,11 @@ export default defineComponent({ }, openForumSite(e: Event, url: string | undefined) { - if(!url) return; + if (!url) return; - e.preventDefault(); - window.open(url, '_blank'); - } + e.preventDefault(); + window.open(url, '_blank'); + }, }, }); diff --git a/src/scripts/interfaces/Station.ts b/src/scripts/interfaces/Station.ts index 6265180..091bbda 100644 --- a/src/scripts/interfaces/Station.ts +++ b/src/scripts/interfaces/Station.ts @@ -1,4 +1,5 @@ import ScheduledTrain from "./ScheduledTrain"; +import StationRoutes from "./StationRoutes"; export default interface Station { name: string; @@ -8,13 +9,11 @@ export default interface Station { url: string; reqLevel: number; - supportersOnly: boolean; + // supportersOnly: boolean; lines: string; project: string; - SBL: string; - TWB: string; signalType: string; controlType: string; @@ -24,17 +23,14 @@ export default interface Station { nonPublic: boolean; unavailable: boolean; - routes: { - oneWay: { catenary: number; noCatenary: number }; - twoWay: { catenary: number; noCatenary: number }; - }; + routes: StationRoutes; checkpoints: { checkpointName: string; scheduledTrains: ScheduledTrain[]; }[]; }; - + onlineInfo?: { hash: string; name: string; @@ -42,23 +38,23 @@ export default interface Station { maxUsers: number; currentUsers: number; - spawns: { spawnName: string; spawnLength: number }[]; + spawns: { spawnName: string; spawnLength: number }[]; dispatcherRate: number; dispatcherName: string; dispatcherExp: number; dispatcherId: number; dispatcherIsSupporter: boolean; - + statusTimestamp: number; statusTimeString: string; statusID: string; - + stationTrains?: { driverName: string; trainNo: number; stopStatus?: string; }[]; - + scheduledTrains?: ScheduledTrain[]; } diff --git a/src/scripts/interfaces/StationRoutes.ts b/src/scripts/interfaces/StationRoutes.ts new file mode 100644 index 0000000..662329a --- /dev/null +++ b/src/scripts/interfaces/StationRoutes.ts @@ -0,0 +1,23 @@ +export default interface StationRoutes { + oneWay: + { + name: string; + catenary: boolean; + SBL: boolean; + TWB: boolean + }[]; + + twoWay: { + name: string; + catenary: boolean; + SBL: boolean; + TWB: boolean + }[]; + + /* [catenary, noCatenary] */ + oneWayCatenaryRouteNames: string[]; + oneWayNoCatenaryRouteNames: string[]; + twoWayCatenaryRouteNames: string[]; + twoWayNoCatenaryRouteNames: string[]; + sblRouteNames: string[]; +} \ No newline at end of file diff --git a/src/scripts/managers/stationFilterManager.ts b/src/scripts/managers/stationFilterManager.ts index 253bd57..89c5734 100644 --- a/src/scripts/managers/stationFilterManager.ts +++ b/src/scripts/managers/stationFilterManager.ts @@ -77,26 +77,25 @@ const filterStations = (station: Station, filters: Filter) => { if (station.generalInfo?.unavailable && filters['unavailable']) return returnMode; if (station.generalInfo) { + const routes = station.generalInfo.routes; + if (station.generalInfo.default && filters['default']) return returnMode; if (!station.generalInfo.default && filters['notDefault']) return returnMode; if (filters['real'] && station.generalInfo.lines != '') return returnMode; if (filters['fictional'] && station.generalInfo.lines == '') return returnMode; - // if (station.generalInfo.reqLevel == -1) return true; - // if (station.generalInfo.reqLevel == -1 && filters['minLevel'] == 0) return true; - if (station.generalInfo.reqLevel + ((station.generalInfo.nonPublic || station.generalInfo.unavailable) ? 1 : 0) < filters['minLevel']) return returnMode; if (station.generalInfo.reqLevel + ((station.generalInfo.nonPublic || station.generalInfo.unavailable) ? 1 : 0) > filters['maxLevel']) return returnMode; - if (filters['no-1track'] && (station.generalInfo.routes.oneWay.catenary != 0 || station.generalInfo.routes.oneWay.noCatenary != 0)) return returnMode; - if (filters['no-2track'] && (station.generalInfo.routes.twoWay.catenary != 0 || station.generalInfo.routes.twoWay.noCatenary != 0)) return returnMode; + if (filters['no-1track'] && (routes.oneWayCatenaryRouteNames.length != 0 || routes.oneWayNoCatenaryRouteNames.length != 0)) return returnMode; + if (filters['no-2track'] && (routes.twoWayCatenaryRouteNames.length != 0 || routes.twoWayNoCatenaryRouteNames.length != 0)) return returnMode; - if (station.generalInfo.routes.oneWay.catenary < filters['minOneWayCatenary']) return returnMode; - if (station.generalInfo.routes.oneWay.noCatenary < filters['minOneWay']) return returnMode; + if (routes.oneWayCatenaryRouteNames.length < filters['minOneWayCatenary']) return returnMode; + if (routes.oneWayNoCatenaryRouteNames.length < filters['minOneWay']) return returnMode; - if (station.generalInfo.routes.twoWay.catenary < filters['minTwoWayCatenary']) return returnMode; - if (station.generalInfo.routes.twoWay.noCatenary < filters['minTwoWay']) return returnMode; + if (routes.twoWayCatenaryRouteNames.length < filters['minTwoWayCatenary']) return returnMode; + if (routes.twoWayNoCatenaryRouteNames.length < filters['minTwoWay']) return returnMode; if (filters[station.generalInfo.controlType]) return returnMode; if (filters[station.generalInfo.signalType]) return returnMode; @@ -112,7 +111,7 @@ const filterStations = (station: Station, filters: Filter) => { if (filters['ręczne'] && station.generalInfo.controlType.includes('ręczne')) return returnMode; - if (filters['SBL'] && station.generalInfo.SBL) return returnMode; + if (filters['SBL'] && routes.sblRouteNames.length > 0) return returnMode; } return true; diff --git a/src/scripts/utils/apiURLs.ts b/src/scripts/utils/apiURLs.ts index 1279798..be84faf 100644 --- a/src/scripts/utils/apiURLs.ts +++ b/src/scripts/utils/apiURLs.ts @@ -1,5 +1,5 @@ export const URLs = { - sceneryData: "https://spythere.github.io/api/stationDataDev.json", + sceneryData: "https://spythere.github.io/api/stationDataNew.json", sceneryDataDev: "http://127.0.0.1:8000/data", stations: "https://api.td2.info.pl:9640/?method=getStationsOnline", trains: "https://api.td2.info.pl:9640/?method=getTrainsOnline", diff --git a/src/store/index.ts b/src/store/index.ts index 8c58626..36e3c6d 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -22,6 +22,7 @@ import { DataStatus } from "@/scripts/enums/DataStatus"; import { getLocoURL, getStatusID, getStatusTimestamp, getTimestamp, getTrainStopStatus, parseSpawns, timestampToString } from "@/scripts/utils/storeUtils"; import { URLs } from '@/scripts/utils/apiURLs'; import ScheduledTrain from '@/scripts/interfaces/ScheduledTrain'; +import StationRoutes from '@/scripts/interfaces/StationRoutes'; export interface State { stationList: Station[], @@ -52,27 +53,14 @@ interface StationJSONData { reqLevel: number; - supportersOnly: boolean; + // supportersOnly: boolean; signalType: string; controlType: string; SUP: boolean; - SBL: string; - TWB: string; - - routes: { - oneWay: { - catenary: number; - noCatenary: number; - }; - twoWay: { - catenary: number; - noCatenary: number; - } - }; - + routes: string; checkpoints: string | null; default: boolean; @@ -351,11 +339,44 @@ export const store = createStore({ mutations: { SET_SCENERY_DATA(state, data: StationJSONData[]) { + state.stationList = data.map(stationData => ({ name: stationData.name, generalInfo: { ...stationData, + routes: stationData.routes?.split(";").filter(routeString => routeString).reduce((acc, routeString) => { + const name = routeString.split("_")[0]; + const specs = routeString.split("_")[1].split(""); + + const twoWay = specs[0] == "2"; + const catenary = specs[1] == "E"; + const SBL = specs[2] == "S"; + const TWB = specs[3] ? true : false; + + const propName = twoWay + ? catenary + ? 'twoWayCatenaryRouteNames' + : 'twoWayNoCatenaryRouteNames' + : catenary + ? 'oneWayCatenaryRouteNames' + : 'oneWayNoCatenaryRouteNames'; + + acc[twoWay ? 'twoWay' : 'oneWay'].push({ name, SBL, TWB, catenary }); + acc[propName].push(name); + + if (SBL) acc['sblRouteNames'].push(name); + + return acc; + }, { + oneWay: [], + twoWay: [], + sblRouteNames: [], + oneWayCatenaryRouteNames: [], + oneWayNoCatenaryRouteNames: [], + twoWayCatenaryRouteNames: [], + twoWayNoCatenaryRouteNames: [] + } as StationRoutes) || {}, checkpoints: stationData.checkpoints ? stationData.checkpoints.split(";").map(sub => ({ checkpointName: sub, scheduledTrains: [] })) : [], } }));