import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import { Observable } from 'rxjs/Observable';
+import 'rxjs/add/operator/catch';
+import 'rxjs/add/operator/map';
import { Search } from '../../shared';
import { SortField } from './sort-field.type';
-import { AuthHttp, AuthService, RestExtractor, RestPagination, RestService, ResultList } from '../../shared';
+import { RateType } from './rate-type.type';
+import { AuthService } from '../../core';
+import {
+ AuthHttp,
+ RestExtractor,
+ RestPagination,
+ RestService,
+ ResultList,
+ UserService
+} from '../../shared';
import { Video } from './video.model';
@Injectable()
export class VideoService {
private static BASE_VIDEO_URL = '/api/v1/videos/';
+ videoCategories: Array<{ id: number, label: string }> = [];
+ videoLicences: Array<{ id: number, label: string }> = [];
+ videoLanguages: Array<{ id: number, label: string }> = [];
+
constructor(
private authService: AuthService,
private authHttp: AuthHttp,
private restService: RestService
) {}
+ loadVideoCategories() {
+ return this.http.get(VideoService.BASE_VIDEO_URL + 'categories')
+ .map(this.restExtractor.extractDataGet)
+ .subscribe(data => {
+ Object.keys(data).forEach(categoryKey => {
+ this.videoCategories.push({
+ id: parseInt(categoryKey),
+ label: data[categoryKey]
+ });
+ });
+ });
+ }
+
+ loadVideoLicences() {
+ return this.http.get(VideoService.BASE_VIDEO_URL + 'licences')
+ .map(this.restExtractor.extractDataGet)
+ .subscribe(data => {
+ Object.keys(data).forEach(licenceKey => {
+ this.videoLicences.push({
+ id: parseInt(licenceKey),
+ label: data[licenceKey]
+ });
+ });
+ });
+ }
+
+ loadVideoLanguages() {
+ return this.http.get(VideoService.BASE_VIDEO_URL + 'languages')
+ .map(this.restExtractor.extractDataGet)
+ .subscribe(data => {
+ Object.keys(data).forEach(languageKey => {
+ this.videoLanguages.push({
+ id: parseInt(languageKey),
+ label: data[languageKey]
+ });
+ });
+ });
+ }
+
getVideo(id: string): Observable<Video> {
return this.http.get(VideoService.BASE_VIDEO_URL + id)
.map(this.restExtractor.extractDataGet)
+ .map(video_hash => new Video(video_hash))
.catch((res) => this.restExtractor.handleError(res));
}
.catch((res) => this.restExtractor.handleError(res));
}
+ reportVideo(id: string, reason: string) {
+ const url = VideoService.BASE_VIDEO_URL + id + '/abuse';
+ const body = {
+ reason
+ };
+
+ return this.authHttp.post(url, body)
+ .map(this.restExtractor.extractDataBool)
+ .catch((res) => this.restExtractor.handleError(res));
+ }
+
+ setVideoLike(id: string) {
+ return this.setVideoRate(id, 'like');
+ }
+
+ setVideoDislike(id: string) {
+ return this.setVideoRate(id, 'dislike');
+ }
+
+ getUserVideoRating(id: string) {
+ const url = UserService.BASE_USERS_URL + '/me/videos/' + id + '/rating';
+
+ return this.authHttp.get(url)
+ .map(this.restExtractor.extractDataGet)
+ .catch((res) => this.restExtractor.handleError(res));
+ }
+
+ private setVideoRate(id: string, rateType: RateType) {
+ const url = VideoService.BASE_VIDEO_URL + id + '/rate';
+ const body = {
+ rating: rateType
+ };
+
+ return this.authHttp.put(url, body)
+ .map(this.restExtractor.extractDataBool)
+ .catch((res) => this.restExtractor.handleError(res));
+ }
+
private extractVideos(result: ResultList) {
const videosJson = result.data;
const totalVideos = result.total;