2020-10-12 01:25:27 +02:00
|
|
|
import { UIEventSource } from "../UIEventSource"
|
2021-07-03 22:24:12 +02:00
|
|
|
import { Utils } from "../../Utils"
|
|
|
|
|
2021-01-02 16:04:16 +01:00
|
|
|
/**
|
|
|
|
* Fetches data from random data sources, used in the metatagging
|
|
|
|
*/
|
2020-10-12 01:25:27 +02:00
|
|
|
export default class LiveQueryHandler {
|
|
|
|
private static neededShorthands = {} // url -> (shorthand:paths)[]
|
|
|
|
|
|
|
|
public static FetchLiveData(
|
|
|
|
url: string,
|
|
|
|
shorthands: string[]
|
|
|
|
): UIEventSource<any /* string -> string */> {
|
|
|
|
const shorthandsSet: string[] = LiveQueryHandler.neededShorthands[url] ?? []
|
|
|
|
|
|
|
|
for (const shorthand of shorthands) {
|
|
|
|
if (shorthandsSet.indexOf(shorthand) < 0) {
|
|
|
|
shorthandsSet.push(shorthand)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
LiveQueryHandler.neededShorthands[url] = shorthandsSet
|
|
|
|
|
|
|
|
if (LiveQueryHandler[url] === undefined) {
|
|
|
|
const source = new UIEventSource({})
|
|
|
|
LiveQueryHandler[url] = source
|
|
|
|
|
2021-09-09 00:05:51 +02:00
|
|
|
console.log("Fetching live data from a third-party (unknown) API:", url)
|
2021-07-03 22:24:12 +02:00
|
|
|
Utils.downloadJson(url).then((data) => {
|
2020-10-12 01:25:27 +02:00
|
|
|
for (const shorthandDescription of shorthandsSet) {
|
|
|
|
const descr = shorthandDescription.trim().split(":")
|
|
|
|
const shorthand = descr[0]
|
|
|
|
const path = descr[1]
|
|
|
|
const parts = path.split(".")
|
|
|
|
let trail = data
|
|
|
|
for (const part of parts) {
|
|
|
|
if (trail !== undefined) {
|
|
|
|
trail = trail[part]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
source.data[shorthand] = trail
|
|
|
|
}
|
|
|
|
source.ping()
|
|
|
|
})
|
|
|
|
}
|
|
|
|
return LiveQueryHandler[url]
|
|
|
|
}
|
|
|
|
}
|