Update fetch function in Stations class

This commit is contained in:
Christer Warén 2021-11-29 19:05:01 +02:00
parent e229b91812
commit 7f791e0075

View File

@ -17,7 +17,11 @@ module.exports = class Stations extends Array {
if(list){ if(list){
this.length = 0; this.length = 0;
list.forEach(station => { list.forEach(station => {
this.push(station); try {
this.push(station);
} catch (error) {
}
}); });
if(options.show){ if(options.show){
@ -27,6 +31,16 @@ module.exports = class Stations extends Array {
}); });
console.log("\n"); console.log("\n");
} }
list.forEach(async station => {
try {
let stationTest = await fetch(station.stream[station.stream.default]);
if(stationTest.ok === true) return;
this.splice(this.indexOf(station),1);
} catch (error) {
this.splice(this.indexOf(station),1);
}
});
} }
this.logger('Stations', 'Successfully fetched list'); this.logger('Stations', 'Successfully fetched list');
@ -48,64 +62,65 @@ module.exports = class Stations extends Array {
search(key) { search(key) {
if (this === null) return false; if (this === null) return false;
let foundStations = [];
if (!key) return false; if (!key) return false;
if (key == "radio") return false;
this let foundStations = [];
.filter( if (key == "radio") return false;
x => x.name.toUpperCase().includes(key.toUpperCase()) || x === key
)
.forEach(x =>
foundStations.push({ station: x, name: x.name, probability: 100 })
);
if (key.startsWith("radio ")) key = key.slice(6);
const probabilityIncrement = 100 / key.split(" ").length / 2;
for (let i = 0; i < key.split(" ").length; i++) {
this this
.filter( .filter(
x => x.name.toUpperCase().includes(key.split(" ")[i].toUpperCase()) || x === key x => x.name.toUpperCase().includes(key.toUpperCase()) || x === key
) )
.forEach(x => .forEach(x =>
foundStations.push({ station: x, name: x.name, probability: probabilityIncrement }) foundStations.push({ station: x, name: x.name, probability: 100 })
); );
}
if (foundStations.length === 0) return false;
for (let i = 0; i < foundStations.length; i++) {
for (let j = 0; j < foundStations.length; j++) {
if (foundStations[i] === foundStations[j] && i !== j) foundStations.splice(i, 1);
}
}
for (let i = 0; i < foundStations.length; i++) {
if (foundStations[i].name.length > key.length) {
foundStations[i].probability -=
(foundStations[i].name.split(" ").length - key.split(" ").length) *
(probabilityIncrement * 0.5);
} else if (foundStations[i].name.length === key.length) {
foundStations[i].probability += probabilityIncrement * 0.9;
}
for (let j = 0; j < key.split(" ").length; j++) { if (key.startsWith("radio ")) key = key.slice(6);
if (!foundStations[i].name.toUpperCase().includes(key.toUpperCase().split(" ")[j])) { const probabilityIncrement = 100 / key.split(" ").length / 2;
foundStations[i].probability -= probabilityIncrement * 0.5; for (let i = 0; i < key.split(" ").length; i++) {
this
.filter(
x => x.name.toUpperCase().includes(key.split(" ")[i].toUpperCase()) || x === key
)
.forEach(x =>
foundStations.push({ station: x, name: x.name, probability: probabilityIncrement })
);
}
if (foundStations.length === 0) return false;
for (let i = 0; i < foundStations.length; i++) {
for (let j = 0; j < foundStations.length; j++) {
if (foundStations[i] === foundStations[j] && i !== j) foundStations.splice(i, 1);
} }
} }
} for (let i = 0; i < foundStations.length; i++) {
let highestProbabilityStation; if (foundStations[i].name.length > key.length) {
for (let i = 0; i < foundStations.length; i++) { foundStations[i].probability -=
if ( (foundStations[i].name.split(" ").length - key.split(" ").length) *
!highestProbabilityStation || (probabilityIncrement * 0.5);
highestProbabilityStation.probability < foundStations[i].probability } else if (foundStations[i].name.length === key.length) {
) foundStations[i].probability += probabilityIncrement * 0.9;
highestProbabilityStation = foundStations[i]; }
if (
highestProbabilityStation && for (let j = 0; j < key.split(" ").length; j++) {
highestProbabilityStation.probability === foundStations[i].probability if (!foundStations[i].name.toUpperCase().includes(key.toUpperCase().split(" ")[j])) {
) { foundStations[i].probability -= probabilityIncrement * 0.5;
highestProbabilityStation = foundStations[i].station; }
}
} }
} let highestProbabilityStation;
return highestProbabilityStation; for (let i = 0; i < foundStations.length; i++) {
if (
!highestProbabilityStation ||
highestProbabilityStation.probability < foundStations[i].probability
)
highestProbabilityStation = foundStations[i];
if (
highestProbabilityStation &&
highestProbabilityStation.probability === foundStations[i].probability
) {
highestProbabilityStation = foundStations[i].station;
}
}
return highestProbabilityStation;
} }
}; };