Skip to content

Commit

Permalink
Merge pull request #20 from Ja-Tar/dev
Browse files Browse the repository at this point in the history
Zmiany w viaStations i całym kodzie przetwarzania danych
  • Loading branch information
Ja-Tar authored Sep 7, 2024
2 parents 8d07827 + 2670e6c commit a3582b1
Show file tree
Hide file tree
Showing 4 changed files with 139 additions and 90 deletions.
2 changes: 1 addition & 1 deletion index.css
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ input[type="checkbox"]:checked::after {
padding: 20px;
border: none;
width: 80%;
max-width: 400px;
max-width: 550px;
border-radius: 10px; /* Zaokrąglone rogi */
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); /* Cień */
}
Expand Down
4 changes: 4 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ <h3>Ustawienia</h3>
<label for="display_train_with_cargo">Pokaż pociągi towarowe:</label>
<input type="checkbox" id="display_train_with_cargo">
</div>
<div class="checkbox_div">
<label for="display_train_without_stop">Pokaż pociągi które nie zatrzymują się na danym przystanku/stacji: </label>
<input type="checkbox" id="display_train_without_stop">
</div>
<div class="checkbox_div">
<label for="display_train_without_track_nr">Pokaż pociągi kiedy nie mają wpisanego toru: </label>
<input type="checkbox" id="display_train_without_track_nr">
Expand Down
215 changes: 126 additions & 89 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ window.operatorFullNames = {
"SKMT": "SKM Trójmiasto",
"PR": "POLREGIO",
"KŚ": "Koleje Śląskie",
"ŁKA": "Łódzka Kolej Aglomeracyjna"
"ŁKA": "Łódzka Kolej Aglomeracyjna",
"": " "
}

window.refreshRoutine = null;
Expand Down Expand Up @@ -145,10 +146,12 @@ function applySettings(load = false) {
let settings = localStorage.getItem("settings");
let displayTrainsWithCargo = document.getElementById("display_train_with_cargo");
let displayTrainWithoutTrackNr = document.getElementById("display_train_without_track_nr");
let displayTrainThatDoesNotStop = document.getElementById("display_train_without_stop");

const defaultSettings = {
"displayTrainsWithCargo": false,
"displayTrainWithoutTrackNr": true,
"displayTrainThatDoesNotStop": true
};

if (settings) {
Expand All @@ -157,14 +160,17 @@ function applySettings(load = false) {
window.settings = settings;
} else {
settings = defaultSettings;
window.settings = settings;
}

if (load) {
displayTrainsWithCargo.checked = settings.displayTrainsWithCargo;
displayTrainWithoutTrackNr.checked = settings.displayTrainWithoutTrackNr;
displayTrainThatDoesNotStop.checked = settings.displayTrainThatDoesNotStop;
} else {
settings.displayTrainsWithCargo = displayTrainsWithCargo.checked;
settings.displayTrainWithoutTrackNr = displayTrainWithoutTrackNr.checked;
settings.displayTrainThatDoesNotStop = displayTrainThatDoesNotStop.checked;
}

localStorage.setItem("settings", JSON.stringify(settings));
Expand Down Expand Up @@ -266,24 +272,24 @@ function loadFrames() {
}

function getProcessedData(display_id, smallestDisplayId) {
const checkpoint = document.getElementById("point").value;
let checkpoint = document.getElementById("point").value;

let dataToDisplay = window.dataToDisplay;

let json = {};
json.time = "None";
json.train_number = "None";
json.destination = "None";
json.firstStation = "None";
json.via_stations = "None";
json.operator = "";
json.train_name = "";
json.info_bar = "Uwaga, na stacji trwają testy systemu informacji pasażerskiej" //`Tor: ${display_id}`;
json.delay = 0;
json.colorbar = "#2f353d";
json.colorfont = "#ffffff";
json.empty = "true";
json.terminatesHere = false;
let processedData = {};
processedData.time = "None";
processedData.train_number = "None";
processedData.destination = "None";
processedData.firstStation = "None";
processedData.via_stations = "None";
processedData.operator = "";
processedData.train_name = "";
processedData.info_bar = "Uwaga, na stacji trwają testy systemu informacji pasażerskiej" //`Tor: ${display_id}`;
processedData.delay = 0;
processedData.colorbar = "#2f353d";
processedData.colorfont = "#ffffff";
processedData.empty = "true";
processedData.terminatesHere = false;

let closestArrivalTime = Infinity;

Expand All @@ -295,14 +301,27 @@ function getProcessedData(display_id, smallestDisplayId) {

if (dataToDisplay[i].track === display_id) {
let trainNo = dataToDisplay[i].trainNo;
const stockString = dataToDisplay[i].stockString;
let delay = dataToDisplay[i].delay;
let stockString = dataToDisplay[i].stockString;
let arrivalDelay = dataToDisplay[i].arrivalDelay;
let departureDelay = dataToDisplay[i].departureDelay;
let viaStations = dataToDisplay[i].viaStations;
let viaStationsMain = dataToDisplay[i].viaStationsMain;
let arrivalTimestamp = dataToDisplay[i].arrivalTimestamp;
const departureTimestamp = dataToDisplay[i].departureTimestamp;
let arrivalRealTimestamp = dataToDisplay[i].arrivalRealTimestamp;
let departureTimestamp = dataToDisplay[i].departureTimestamp;
let firstStation = dataToDisplay[i].firstStation;
let lastStation = dataToDisplay[i].lastStation;
let terminatesHere = dataToDisplay[i].terminatesHere;

// Train time recognition

if (arrivalRealTimestamp > closestArrivalTime) {
console.debug("Not closest arrival time: ", arrivalRealTimestamp, trainNo);
continue;
} else {
console.debug("Closest arrival time: ", arrivalRealTimestamp, trainNo);
closestArrivalTime = arrivalRealTimestamp;
}

// Operator recognition

Expand All @@ -318,121 +337,128 @@ function getProcessedData(display_id, smallestDisplayId) {
}
}

let commonOperators = [];

// Get most common operator
if (operatorList.length > 0) {
//
let counts = {};
operatorList.forEach(function (operators) {
operators.forEach(function (operator) {
counts[operator] = (counts[operator] || 0) + 1;
});
});

commonOperators = Object.keys(counts).filter(function (a) {
return counts[a] >= 1;
});

const mostCommonOperator = Object.keys(counts).reduce(function (a, b) {
return counts[a] > counts[b] ? a : b;
});

json.operator = mostCommonOperator;
processedData.operator = mostCommonOperator;
console.debug("Most common operator: ", mostCommonOperator);
console.debug("Common operators: ", commonOperators);
}

// Train name recognition and operator overwrite
// Train name recognition

for (let j = 0; j < window.operatorConvertData.trainNames.length; j++) {
let trainNameData = window.operatorConvertData.trainNames[j];
const trainOperatorBefore = json.operator;
const trainNoStartsWith = trainNameData.trainNo;
let trainOperatorBefore = processedData.operator;
let trainNoIs = trainNameData.trainNo;

if (trainNoStartsWith) {
for (let k = 0; k < trainNoStartsWith.length; k++) {
if (!(trainOperatorBefore in commonOperators)) {
json.operator = trainOperatorBefore;
break;
}
if (trainNo.toString().startsWith(trainNoStartsWith[k]) || trainNoStartsWith[k] === trainNo) {
for (let k = 0; k < trainNoIs.length; k++) {
if (processedData.operator === trainOperatorBefore) {
if (trainNoIs[k] === trainNo.toString()) {
const operator = trainNameData.operator;
const train_name = trainNameData.trainName;

json.train_name = train_name;
json.operator = operator;
processedData.train_name = train_name;
processedData.operator = operator;
console.debug(`Train name: ${train_name}, Operator: ${operator}, Train no: ${trainNo}`);
if (trainNoStartsWith[k] === trainNo) {
break;
}
break;
}
} else {
console.debug("Operator not in common operators");
break;
}
}

}

// Train prefix recognition

// TODO: Add train prefix recognition

// Train time recognition
// Train name and prefix override

if (arrivalTimestamp < closestArrivalTime) {
closestArrivalTime = arrivalTimestamp;
// TODO: Add train name and prefix override

for (let j = 0; j < viaStations.length; j++) {
viaStations[j] = stationTextFixes(viaStations[j]);
}
// viaStations recognition

for (let j = 0; j < viaStationsMain.length; j++) {
viaStationsMain[j] = stationTextFixes(viaStationsMain[j]);
for (let j = 0; j < viaStations.length; j++) {
viaStations[j] = stationTextFixes(viaStations[j]);
}

for (let j = 0; j < viaStationsMain.length; j++) {
viaStationsMain[j] = stationTextFixes(viaStationsMain[j]);
}

// Usunięcie wszystkich stacji przed oraz aktualną stację (checkpoint) w viaStations
const checkpointIndex = viaStations.findIndex(station => station.toLowerCase() === checkpoint.toLowerCase());
if (checkpointIndex !== -1) {
viaStations.splice(0, checkpointIndex + 1);
}

// Znalezienie pierwszej wspólnej stacji w viaStations i viaStationsMain
let firstCommonStation = null;
for (let station of viaStationsMain) {
if (viaStations.includes(station)) {
firstCommonStation = station;
break;
}
}

viaStations.pop(); // remove last station from viaStations
viaStationsMain.pop(); // remove last station from viaStationsMain
// Usunięcie wszystkich stacji w viaStationsMain do momentu znalezienia pierwszej wspólnej stacji
if (firstCommonStation) {
const firstCommonIndex = viaStationsMain.indexOf(firstCommonStation);
viaStationsMain.splice(0, firstCommonIndex);
} else {
viaStationsMain = [];
}

viaStations.forEach((station, index) => {
if (station.toLowerCase() === checkpoint.toLowerCase()) {
viaStations.splice(0, index);
for (let j = 0; j < viaStationsMain.length; j++) {
viaStationsMain[j] = viaStationsMain[j].split(",")[0];
}

let firstMainStation = viaStationsMain.find(_station => viaStations.includes(_station));
let indexMain = viaStationsMain.indexOf(firstMainStation);
viaStationsMain.splice(0, indexMain);
let timeTimestamp = 0;

if (viaStationsMain.includes(station)) {
const _index = viaStationsMain.indexOf(station);
viaStationsMain.splice(_index, 1);
}
if (terminatesHere === true) {
timeTimestamp = arrivalTimestamp;
} else {
timeTimestamp = departureTimestamp;
}

if (viaStations.includes(station)) {
const _index = viaStations.indexOf(station);
viaStations.splice(_index, 1);
}
}
});
processedData.time = new Date(timeTimestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); // "HH:MM"
processedData.train_number = trainNo;
processedData.destination = stationTextFixes(lastStation);
processedData.firstStation = stationTextFixes(firstStation);
processedData.via_stations = viaStationsMain.join(", ");

console.debug("Closest arrival time: ", arrivalTimestamp, trainNo);
json.time = new Date(departureTimestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); // "HH:MM"
json.train_number = trainNo;
json.destination = stationTextFixes(lastStation);
json.firstStation = stationTextFixes(firstStation);
json.via_stations = viaStationsMain.join(", ");

if (delay < 0) {
json.delay = 0;
} else {
json.delay = delay;
}
if (departureDelay < 0) {
processedData.delay = 0;
} else {
processedData.delay = departureDelay;
console.debug("Departure delay: ", departureDelay);
}

json.empty = "false";
json.terminatesHere = dataToDisplay[i].terminatesHere;
if (arrivalDelay < 0 && terminatesHere === true) {
processedData.delay = 0;
} else {
console.debug("Not closest arrival time: ", arrivalTimestamp, trainNo);
processedData.delay = arrivalDelay;
console.debug("Arrival delay: ", arrivalDelay);
}

processedData.empty = "false";
processedData.terminatesHere = terminatesHere;
}
}

return json;
return processedData;
}

function processTimetablesData() {
Expand Down Expand Up @@ -466,12 +492,18 @@ function processTimetablesData() {
let comments = stopList[j].comments; // search for [peron],[tor] in comments

viaStations.push(stopList[j].stopNameRAW);
if (stopList[j].mainStop === true) {
if (stopList[j].stopType.includes("ph") && stopList[j].confirmed === 0) {
viaStationsMain.push(stopList[j].stopNameRAW);
}

if (stopList[j].stopNameRAW.toLowerCase() === checkpoint.toLowerCase()) {
if (stopList[j].confirmed === 0) {
if (window.settings.displayTrainThatDoesNotStop === false) {
if (!stopList[j].stopType.includes("ph") && stopList[j].terminatesHere === false && stopList[j].beginsHere === false) {
continue;
}
}

//if (stopList[j].stopped === 0) {
let platform = "0"
let track = "0"
Expand All @@ -482,19 +514,24 @@ function processTimetablesData() {
} else if (!comments && window.settings.displayTrainWithoutTrackNr === false) {
continue;
}
let delay = stopList[j].departureDelay;
let arrivalTimestamp = stopList[j].arrivalRealTimestamp;

let arrivalDelay = stopList[j].arrivalDelay;
let departureDelay = stopList[j].departureDelay;
let arrivalTimestamp = stopList[j].arrivalTimestamp;
let arrivalRealTimestamp = stopList[j].arrivalRealTimestamp;
let departureTimestamp = stopList[j].departureTimestamp;

dataToDisplay.push({
"trainNo": trainNo,
"stockString": stockString,
"platform": platform,
"track": track,
"delay": delay,
"arrivalDelay": arrivalDelay,
"departureDelay": departureDelay,
"viaStations": viaStations,
"viaStationsMain": viaStationsMain,
"arrivalTimestamp": arrivalTimestamp,
"arrivalRealTimestamp": arrivalRealTimestamp,
"departureTimestamp": departureTimestamp,
//"stopped": stopList[j].stopped, // NOT USED
//"confirmed": stopList[j].confirmed, // NOT USED
Expand Down
8 changes: 8 additions & 0 deletions index_en.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,14 @@ <h3>Settings</h3>
<label for="display_train_with_cargo">Display cargo trains:</label>
<input type="checkbox" id="display_train_with_cargo">
</div>
<div class="checkbox_div"></div>
<label for="display_train_without_stop">Display trains that do not stop at the selected stop/station: </label>
<input type="checkbox" id="display_train_without_stop">
</div>
<div class="checkbox_div">
<label for="display_train_without_track_nr">Display trains without track number: </label>
<input type="checkbox" id="display_train_without_track_nr">
</div>
<br>
<div id="buttons_div_settings">
<button id="save_settings" class="green_button">Save settings</button>
Expand Down

0 comments on commit a3582b1

Please sign in to comment.