| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | import { UIEventSource } from "../UIEventSource" | 
					
						
							|  |  |  | import { Utils } from "../../Utils" | 
					
						
							| 
									
										
										
										
											2021-07-03 22:24:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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)[]
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |     public static FetchLiveData( | 
					
						
							|  |  |  |         url: string, | 
					
						
							|  |  |  |         shorthands: string[] | 
					
						
							|  |  |  |     ): UIEventSource<any /* string -> string */> { | 
					
						
							| 
									
										
										
										
											2020-10-12 01:25:27 +02:00
										 |  |  |         const shorthandsSet: string[] = LiveQueryHandler.neededShorthands[url] ?? [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         for (const shorthand of shorthands) { | 
					
						
							|  |  |  |             if (shorthandsSet.indexOf(shorthand) < 0) { | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                 shorthandsSet.push(shorthand) | 
					
						
							| 
									
										
										
										
											2020-10-12 01:25:27 +02:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |         LiveQueryHandler.neededShorthands[url] = shorthandsSet | 
					
						
							| 
									
										
										
										
											2020-10-12 01:25:27 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if (LiveQueryHandler[url] === undefined) { | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |             const source = new UIEventSource({}) | 
					
						
							|  |  |  |             LiveQueryHandler[url] = source | 
					
						
							| 
									
										
										
										
											2020-10-12 01:25:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-09 00:05:51 +02:00
										 |  |  |             console.log("Fetching live data from a third-party (unknown) API:", url) | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |             Utils.downloadJson(url).then((data) => { | 
					
						
							| 
									
										
										
										
											2020-10-12 01:25:27 +02:00
										 |  |  |                 for (const shorthandDescription of shorthandsSet) { | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     const descr = shorthandDescription.trim().split(":") | 
					
						
							|  |  |  |                     const shorthand = descr[0] | 
					
						
							|  |  |  |                     const path = descr[1] | 
					
						
							|  |  |  |                     const parts = path.split(".") | 
					
						
							|  |  |  |                     let trail = data | 
					
						
							| 
									
										
										
										
											2020-10-12 01:25:27 +02:00
										 |  |  |                     for (const part of parts) { | 
					
						
							|  |  |  |                         if (trail !== undefined) { | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                             trail = trail[part] | 
					
						
							| 
									
										
										
										
											2020-10-12 01:25:27 +02:00
										 |  |  |                         } | 
					
						
							|  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                     source.data[shorthand] = trail | 
					
						
							| 
									
										
										
										
											2020-10-12 01:25:27 +02:00
										 |  |  |                 } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |                 source.ping() | 
					
						
							| 
									
										
										
										
											2020-10-12 01:25:27 +02:00
										 |  |  |             }) | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  |         return LiveQueryHandler[url] | 
					
						
							| 
									
										
										
										
											2020-10-12 01:25:27 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-09-08 21:40:48 +02:00
										 |  |  | } |