/** @file * @author Edouard DUPIN * @copyright 2018, Edouard DUPIN, all right reserved * @license PROPRIETARY (see license file) */ import { Injectable } from '@angular/core'; import { isMedia, Media } from 'app/model'; import { NodeData } from 'common/model'; import { HttpWrapperService, BddService } from 'common/service'; import { isArrayOf } from 'common/utils'; import { GenericInterfaceModelDB } from './GenericInterfaceModelDB'; @Injectable() export class VideoService extends GenericInterfaceModelDB { constructor(http: HttpWrapperService, bdd: BddService) { super('video', http, bdd); } get(id:number): Promise { return new Promise((resolve, reject) => { super.get(id).then((data: NodeData) => { if (isMedia(data)) { resolve(data); return; } reject("model is wrong !!!") return }).catch((reason:any) => { reject(reason); }); }); } getData(): Promise { return new Promise((resolve, reject) => { super.getData().then((data: NodeData[]) => { if (isArrayOf(data, isMedia)) { resolve(data); return; } reject("model is wrong !!!") return }).catch((reason:any) => { reject(reason); }); }); } uploadFile(file:File, series?:string, seriesId?:number, season?:number, episode?:number, title?:string, typeId?:number, progress:any = null) { const formData = new FormData(); formData.append('fileName', file.name); // set the file at hte begining it will permit to abort the transmission formData.append('file', file?? null); if(seriesId !== null) { formData.append('seriesId', seriesId.toString()); } else { formData.append('seriesId', null); } formData.append('series', series?? null); if(season !== null) { formData.append('season', season.toString()); } else { formData.append('season', null); } if(episode !== null) { formData.append('episode', episode.toString()); } else { formData.append('episode', null); } formData.append('title', title?? null); if(typeId !== null) { formData.append('typeId', typeId.toString()); } else { formData.append('typeId', null); } return this.http.uploadMultipart(`${this.serviceName }/upload/`, formData, progress); } uploadCoverBlob(blob:Blob, mediaId:number, progress:any = null) { const formData = new FormData(); formData.append('fileName', 'take_screenshoot'); formData.append('typeId', mediaId.toString()); formData.append('file', blob); let self = this; return new Promise((resolve, reject) => { self.http.uploadMultipart(`${this.serviceName }/${ mediaId }/add_cover/`, formData, progress) .then((response) => { let data = response; if(data === null || data === undefined) { reject('error retrive data from server'); return; } self.bdd.asyncSetInDB(self.serviceName, mediaId, data); resolve(data); }).catch((response) => { reject(response); }); }); } }