diff --git a/src/assets/car-cargo-unknown.png b/src/assets/icon-car-cargo.png
similarity index 100%
rename from src/assets/car-cargo-unknown.png
rename to src/assets/icon-car-cargo.png
diff --git a/src/assets/car-passenger-unknown.png b/src/assets/icon-car-passenger.png
similarity index 100%
rename from src/assets/car-passenger-unknown.png
rename to src/assets/icon-car-passenger.png
diff --git a/src/assets/loco-e-unknown.png b/src/assets/icon-loco-e.png
similarity index 100%
rename from src/assets/loco-e-unknown.png
rename to src/assets/icon-loco-e.png
diff --git a/src/assets/loco-ezt-unknown.png b/src/assets/icon-loco-ezt.png
similarity index 100%
rename from src/assets/loco-ezt-unknown.png
rename to src/assets/icon-loco-ezt.png
diff --git a/src/assets/loco-s-unknown.png b/src/assets/icon-loco-s.png
similarity index 100%
rename from src/assets/loco-s-unknown.png
rename to src/assets/icon-loco-s.png
diff --git a/src/assets/icon-unknown.png b/src/assets/icon-unknown.png
new file mode 100644
index 0000000..0a930b9
Binary files /dev/null and b/src/assets/icon-unknown.png differ
diff --git a/src/components/Global/TrainThumbnail.vue b/src/components/Global/TrainThumbnail.vue
new file mode 100644
index 0000000..86a9540
--- /dev/null
+++ b/src/components/Global/TrainThumbnail.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
diff --git a/src/components/JournalView/JournalTimetables/TimetableExtra.vue b/src/components/JournalView/JournalTimetables/TimetableExtra.vue
index b59fac7..0e74000 100644
--- a/src/components/JournalView/JournalTimetables/TimetableExtra.vue
+++ b/src/components/JournalView/JournalTimetables/TimetableExtra.vue
@@ -60,11 +60,7 @@
).split(';')"
:key="i"
>
-
+
{{ car.replace(/_/g, ' ').split(':')[0] }}
@@ -75,28 +71,25 @@
import { PropType, defineComponent } from 'vue';
import { TimetableHistory } from '../../../scripts/interfaces/api/TimetablesAPIData';
import imageMixin from '../../../mixins/imageMixin';
+import TrainThumbnail from '../../Global/TrainThumbnail.vue';
export default defineComponent({
mixins: [imageMixin],
-
props: {
showExtraInfo: {
type: Boolean,
required: true,
},
-
timetable: {
type: Object as PropType,
required: true,
},
},
-
data() {
return {
currentHistoryIndex: 0,
};
},
-
computed: {
stockHistory() {
return this.timetable.stockHistory
@@ -116,13 +109,13 @@ export default defineComponent({
});
},
},
-
methods: {
onImageError(e: Event) {
const imageEl = e.target as HTMLImageElement;
imageEl.src = this.getImage('unknown.png');
},
},
+ components: { TrainThumbnail },
});
diff --git a/src/components/TrainsView/TrainInfo.vue b/src/components/TrainsView/TrainInfo.vue
index 829c87f..ce6ce64 100644
--- a/src/components/TrainsView/TrainInfo.vue
+++ b/src/components/TrainsView/TrainInfo.vue
@@ -62,15 +62,13 @@
-
-
![Loco image not found]()
-
+
{{ train.locoType }}
-
+
• {{ $t('trains.cars') }}:
- {{ train.cars.length }}
+ {{ train.stockList.length }}
@@ -91,6 +89,7 @@ import styleMixin from '../../mixins/styleMixin';
import trainInfoMixin from '../../mixins/trainInfoMixin';
import Train from '../../scripts/interfaces/Train';
import ProgressBar from '../Global/ProgressBar.vue';
+import TrainThumbnail from '../Global/TrainThumbnail.vue';
export default defineComponent({
props: {
@@ -104,7 +103,7 @@ export default defineComponent({
},
},
mixins: [trainInfoMixin, imageMixin, styleMixin],
- components: { ProgressBar },
+ components: { ProgressBar, TrainThumbnail },
});
@@ -127,7 +126,7 @@ export default defineComponent({
text-align: center;
img {
- margin: 0.5em 0;
+ margin: 0.5em auto;
width: 12em;
}
}
diff --git a/src/components/TrainsView/TrainSchedule.vue b/src/components/TrainsView/TrainSchedule.vue
index a47a719..babb222 100644
--- a/src/components/TrainsView/TrainSchedule.vue
+++ b/src/components/TrainsView/TrainSchedule.vue
@@ -2,12 +2,12 @@
- -
+
-
-
+
-
-
-
+
- {{ car.replace(/_/g, ' ').split(':')[0] }}
+
+ {{ stockName.replace(/_/g, ' ').split(':')[0] }}
@@ -91,9 +92,10 @@ import Train from '../../scripts/interfaces/Train';
import TrainStop from '../../scripts/interfaces/TrainStop';
import { useStore } from '../../store/store';
import StopDate from '../Global/StopDate.vue';
+import TrainThumbnail from '../Global/TrainThumbnail.vue';
export default defineComponent({
- components: { StopDate },
+ components: { StopDate, TrainThumbnail },
props: {
train: {
type: Object as PropType
,
@@ -426,4 +428,3 @@ ul.stop_list > li.stop {
}
}
-
diff --git a/src/scripts/interfaces/Train.ts b/src/scripts/interfaces/Train.ts
index b4e4dfb..f1a08f0 100644
--- a/src/scripts/interfaces/Train.ts
+++ b/src/scripts/interfaces/Train.ts
@@ -15,12 +15,11 @@ export default interface Train {
driverLevel: number;
currentStationName: string;
currentStationHash: string;
- locoURL: string;
locoType: string;
online: boolean;
lastSeen: number;
region: string;
- cars: string[];
+ stockList: string[];
isTimeout: boolean;
isSupporter: boolean;
diff --git a/src/scripts/interfaces/api/StationAPIData.ts b/src/scripts/interfaces/api/StationAPIData.ts
index 464eebf..6ddabe9 100644
--- a/src/scripts/interfaces/api/StationAPIData.ts
+++ b/src/scripts/interfaces/api/StationAPIData.ts
@@ -11,7 +11,7 @@ export default interface StationAPIData {
lastSeen: number;
dispatcherExp: number;
nameFromHeader: string;
- spawnString: string;
+ spawnString: string | null;
networkConnectionString: string;
isOnline: number;
dispatcherRate: number;
diff --git a/src/scripts/interfaces/github_api/StockInfoGithubData.ts b/src/scripts/interfaces/github_api/StockInfoGithubData.ts
new file mode 100644
index 0000000..f30602f
--- /dev/null
+++ b/src/scripts/interfaces/github_api/StockInfoGithubData.ts
@@ -0,0 +1,13 @@
+export interface RollingStockGithubData {
+ usage: Record;
+ info: RollingStockInfo;
+}
+
+export interface RollingStockInfo {
+ 'loco-e': [string, string, string, string, boolean][];
+ 'loco-s': [string, string, string, string, boolean][];
+ 'loco-szt': [string, string, string, string, boolean][];
+ 'loco-ezt': [string, string, string, string, boolean][];
+ 'car-passenger': [string, string, boolean, boolean, string][];
+ 'car-cargo': [string, string, boolean, boolean, string][];
+}
diff --git a/src/scripts/interfaces/store/storeTypes.ts b/src/scripts/interfaces/store/storeTypes.ts
index 4a49ed4..61cbe85 100644
--- a/src/scripts/interfaces/store/storeTypes.ts
+++ b/src/scripts/interfaces/store/storeTypes.ts
@@ -6,7 +6,7 @@ import Station from '../Station';
import Train from '../Train';
import { DispatcherStatsAPIData } from '../api/DispatcherStatsAPIData';
import { DriverStatsAPIData } from '../api/DriverStatsAPIData';
-import { Ref } from 'vue';
+import { RollingStockGithubData } from '../github_api/StockInfoGithubData';
export type Availability = 'default' | 'unavailable' | 'nonPublic' | 'abandoned' | 'nonDefault';
@@ -14,6 +14,7 @@ export interface StoreState {
stationList: Station[];
trainList: Train[];
apiData: APIData;
+ rollingStockData?: RollingStockGithubData;
lastDispatcherStatuses: { hash: string; statusTimestamp: number; statusID: string }[];
diff --git a/src/scripts/utils/apiURLs.ts b/src/scripts/utils/apiURLs.ts
index 1211a68..35d88c9 100644
--- a/src/scripts/utils/apiURLs.ts
+++ b/src/scripts/utils/apiURLs.ts
@@ -1,6 +1,6 @@
export const URLs = {
stacjownikAPI:
- import.meta.env.VITE_APP_API_DEV == 1 && !import.meta.env.PROD
+ import.meta.env.VITE_APP_API_DEV === "1" && !import.meta.env.PROD
? 'http://localhost:3001'
: 'https://stacjownik.spythere.pl',
stacjownikAPIDev: 'localhost:3000',
diff --git a/src/store/journalFiltersStore.ts b/src/store/journalFiltersStore.ts
deleted file mode 100644
index 0a7e033..0000000
--- a/src/store/journalFiltersStore.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { defineStore } from 'pinia';
-
-export const useJournalFiltersStore = defineStore('journalFiltersStore', {
- state: () => ({
- timetableFilters: {
-
- },
- }),
-});
diff --git a/src/store/store.ts b/src/store/store.ts
index e723ccb..a67375b 100644
--- a/src/store/store.ts
+++ b/src/store/store.ts
@@ -8,14 +8,16 @@ import Station from '../scripts/interfaces/Station';
import StationRoutes from '../scripts/interfaces/StationRoutes';
import Train from '../scripts/interfaces/Train';
import { URLs } from '../scripts/utils/apiURLs';
-import { getLocoURL, getStatusTimestamp, getStatusID, getScheduledTrain, parseSpawns } from '../scripts/utils/storeUtils';
+import { getStatusTimestamp, getStatusID, getScheduledTrain, parseSpawns } from '../scripts/utils/storeUtils';
import { APIData, StationJSONData, StoreState } from '../scripts/interfaces/store/storeTypes';
import packageInfo from '../../package.json';
+import { RollingStockInfo, RollingStockGithubData } from '../scripts/interfaces/github_api/StockInfoGithubData';
export const useStore = defineStore('store', {
state: () =>
({
apiData: {} as unknown,
+ rollingStockData: undefined,
stationList: [],
trainList: [],
@@ -351,6 +353,7 @@ export const useStore = defineStore('store', {
async connectToAPI() {
await this.fetchStationsGeneralInfo();
+ await this.fetchStockInfoData();
this.connectToWebsocket();
},
@@ -361,6 +364,14 @@ export const useStore = defineStore('store', {
await this.setOnlineData();
},
+ async fetchStockInfoData() {
+ try {
+ this.rollingStockData = (await axios.get('https://raw.githubusercontent.com/Spythere/api/main/td2/data/stockInfo.json')).data;
+ } catch (error) {
+ console.error('Ups! Wystąpił błąd podczas pobierania informacji o taborze z API:', error);
+ }
+ },
+
async setOnlineData() {
if (!this.apiData.stations) {
this.dataStatuses.sceneries = DataStatus.Error;
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
index 6966ac5..150bac4 100644
--- a/src/vite-env.d.ts
+++ b/src/vite-env.d.ts
@@ -1,19 +1,15 @@
///
declare module '*.vue' {
- import type { DefineComponent } from 'vue'
- const component: DefineComponent<{}, {}, any>
- export default component
-
+ import type { DefineComponent } from 'vue';
+ const component: DefineComponent<{}, {}, any>;
+ export default component;
}
interface ImportMetaEnv {
- readonly VITE_APP_API_DEV: number;
- readonly VITE_APP_WS_DEV: number;
+ readonly VITE_APP_API_DEV: string;
+ readonly VITE_APP_WS_DEV: string;
}
interface ImportMeta {
readonly env: ImportMetaEnv;
}
-
-
-