| 
									
										
										
										
											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]; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |