import { Injectable, EventEmitter } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { URLSearchParams, Http } from '@angular/http'; import { Observable } from 'rxjs'; import { map, take } from 'rxjs/operators'; import { PluginDescription, State, Slide, ServiceItem } from './responses'; let deserialize = (json, cls) => { var inst = new cls(); for(var p in json) { if(!json.hasOwnProperty(p)) { continue; } inst[p] = json[p]; } return inst; } @Injectable() export class OpenLPService { private apiURL: string = 'http://localhost:4316'; public stateChanged$: EventEmitter; constructor(private http: HttpClient) { this.stateChanged$ = new EventEmitter(); let state:State = null; let ws:WebSocket = new WebSocket('ws://localhost:4317/state') ws.onmessage = (event) => { let reader = new FileReader() reader.onload = () => { state = deserialize(JSON.parse(reader.result).results, State); this.stateChanged$.emit(state); } reader.readAsText(event.data); } } getItemSlides(): Observable { return this.http.get(`${this.apiURL}/controller/live/text`); } getServiceItems(): Observable { return this.http.get(`${this.apiURL}/service/list`); } getSearchablePlugins(): Observable { return this.http.get(`${this.apiURL}/plugin/search`); } setServiceItem(id:number): Observable { return this.http.get(`${this.apiURL}/service/set?id=${id}`); } search(plugin, text): Observable { return this.http.get(`${this.apiURL}/${plugin}/search?q=${text}`); } setSlide(id): Observable { return this.http.get(`${this.apiURL}/controller/live/set?id=${id}`); } nextItem(): Observable { return this.http.get(`${this.apiURL}/service/next`); } previousItem(): Observable { return this.http.get(`${this.apiURL}/service/previous`); } nextSlide(): Observable { return this.http.get(`${this.apiURL}/controller/live/next`); } previousSlide(): Observable { return this.http.get(`${this.apiURL}/controller/live/previous`); } blankDisplay(): Observable { return this.http.get(`${this.apiURL}/display/blank`); } themeDisplay(): Observable { return this.http.get(`${this.apiURL}/display/theme`); } desktopDisplay(): Observable { return this.http.get(`${this.apiURL}/display/desktop`); } showDisplay(): Observable { return this.http.get(`${this.apiURL}/display/show`); } showAlert(text): Observable { return this.http.get(`${this.apiURL}/alert?text=${text}`); } sendItemLive(plugin, id): Observable { return this.http.get(`${this.apiURL}/${plugin}/live?id=${id}`); } addItemToService(plugin, id): Observable { return this.http.get(`${this.apiURL}/${plugin}/add?id=${id}`); } }