{"version":3,"file":"metromobilite-m-features-webcam.mjs","sources":["../../../projects/lib-m-features/webcam/src/webcam.service.ts","../../../projects/lib-m-features/webcam/src/webcam-player/webcam-player.component.ts","../../../projects/lib-m-features/webcam/src/webcam.module.ts","../../../projects/lib-m-features/webcam/src/webcam.resolver.ts","../../../projects/lib-m-features/webcam/metromobilite-m-features-webcam.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { DOMAIN } from '@metromobilite/m-features';\r\nimport { Interval, IntervalBuilderService } from '@metromobilite/m-features/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { Webcam } from './webcam.model';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root'\r\n})\r\nexport class WebcamService {\r\n\r\n\twebcams: Webcam[] = [];\r\n\r\n\tconstructor(\r\n\t\tprivate http: HttpClient,\r\n\t\tprivate intervalBuilder: IntervalBuilderService,\r\n\t\t@Inject(DOMAIN) private domain: string\r\n\t) { }\r\n\r\n\tgetWebcams(): Observable<Webcam[]> {\r\n\t\treturn this.http.get<Webcam[]>(`@domain/@api/cam`).pipe(map((webcams: any[]) => {\r\n\t\t\tconst now = Date.now();\r\n\t\t\twebcams.map(cam => {\r\n\t\t\t\tcam.time = parseInt(cam.time, 10);\r\n\t\t\t\tcam.url += `&key=${cam.time}`;\r\n\t\t\t\tcam.completeUrl = `${this.domain}${cam.url}`;\r\n\t\t\t});\r\n\t\t\tthis.webcams = webcams.filter((cam: any) => now - 3600 > cam.time);\r\n\t\t\treturn this.webcams;\r\n\t\t}));\r\n\t}\r\n\r\n\tfind(name: string): Webcam | null {\r\n\t\treturn this.webcams.find(cam => cam.name === name);\r\n\t}\r\n\r\n\t/**\r\n\t * @deprecated Use the core interval feature yourself, it's better ^^.\r\n\t */\r\n\tstartPolling(period = 60000): Interval {\r\n\t\tconst interval = this.intervalBuilder.build(period);\r\n\t\tinterval.onTick$.subscribe(() => this.getWebcams());\r\n\t\treturn interval;\r\n\t}\r\n\r\n}\r\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { Interval, IntervalBuilderService } from '@metromobilite/m-features/core';\r\nimport { Webcam, WebcamPoi } from '../webcam.model';\r\nimport { WebcamService } from '../webcam.service';\r\n\r\n@Component({\r\n\tselector: 'mf-webcam-player',\r\n\ttemplate: `\r\n\t\t<video width=\"320\" height=\"240\" controls loop playsinline #player [attr.src]=\"webcam && webcam.completeUrl\" type=\"video/mp4\"></video>\r\n\t`,\r\n\tstyles: [\r\n\t]\r\n})\r\nexport class WebcamPlayerComponent implements OnInit, OnDestroy {\r\n\r\n\t@Input() set data(value: WebcamPoi) {\r\n\t\tthis._data = value;\r\n\t\tthis.webcamService.getWebcams().subscribe(() => {\r\n\t\t\tthis.webcam = this.webcamService.find(value.properties.id);\r\n\t\t});\r\n\t}\r\n\tget data() {\r\n\t\treturn this._data;\r\n\t}\r\n\r\n\tprivate _data: WebcamPoi;\r\n\tprivate interval: Interval;\r\n\r\n\twebcam: Webcam;\r\n\r\n\tconstructor(\r\n\t\tprivate webcamService: WebcamService,\r\n\t\tprivate intervalBuilder: IntervalBuilderService\r\n\t) { }\r\n\r\n\tngOnInit(): void {\r\n\t\tthis.interval = this.intervalBuilder.build(60000);\r\n\t\tthis.interval.on(this.webcamService.getWebcams()).subscribe(() => {\r\n\t\t\tthis.webcam = this.webcamService.find(this.data.properties.id);\r\n\t\t});\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.interval.destroy();\r\n\t}\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { CoreModule } from '@metromobilite/m-features/core';\r\nimport { WebcamPlayerComponent } from './webcam-player/webcam-player.component';\r\n\r\n\r\n@NgModule({\r\n\tdeclarations: [\r\n\t\tWebcamPlayerComponent,\r\n\t],\r\n\timports: [\r\n\t\tCommonModule,\r\n\t\tCoreModule,\r\n\t],\r\n\texports: [\r\n\t\tWebcamPlayerComponent,\r\n\t]\r\n})\r\nexport class WebcamModule { }\r\n","import {Injectable} from '@angular/core';\r\nimport {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from '@angular/router';\r\nimport {of} from 'rxjs';\r\nimport {catchError} from 'rxjs/operators';\r\nimport {Webcam} from './webcam.model';\r\nimport {WebcamService} from './webcam.service';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class WebcamResolver implements Resolve<Webcam[]> {\r\n\r\n\tconstructor(private webcamService: WebcamService) {\r\n\t}\r\n\r\n\tresolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<Webcam[]> {\r\n\t\treturn new Promise<Webcam[]>(resolve => {\r\n\t\t\tthis.webcamService.getWebcams()\r\n\t\t\t.pipe(catchError((error) => {\r\n\t\t\t\t// console.error('Error fetching getWebcams in WebcamResolver: ', error);\r\n\t\t\t\treturn of([] as Webcam[]);\r\n\t\t\t}))\r\n\t\t\t.subscribe((webcams: Webcam[]) => resolve(webcams));\r\n\t\t});\r\n\t}\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.WebcamService"],"mappings":"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"}