116 lines
3.0 KiB
TypeScript

/** @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<Media> {
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<Media[]> {
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);
});
});
}
}