mapcomplete/Logic/Web/LiveQueryHandler.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

48 lines
1.7 KiB
TypeScript
Raw Normal View History

2020-10-12 01:25:27 +02:00
import { UIEventSource } from "../UIEventSource"
2021-07-03 22:24:12 +02:00
import { Utils } from "../../Utils"
/**
* 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
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]
}
}