import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { of } from 'rxjs'; import { map } from 'rxjs/operators'; import { environment } from 'src/environments/environment'; import { UtilityService } from '../shared/_services/utility.service'; import { Genre } from '../_models/metadata/genre'; import { AgeRating } from '../_models/metadata/age-rating'; import { AgeRatingDto } from '../_models/metadata/age-rating-dto'; import { Language } from '../_models/metadata/language'; import { PublicationStatusDto } from '../_models/metadata/publication-status-dto'; import { Person } from '../_models/metadata/person'; import { Tag } from '../_models/tag'; import { TextResonse } from '../_types/text-response'; @Injectable({ providedIn: 'root' }) export class MetadataService { baseUrl = environment.apiUrl; private ageRatingTypes: {[key: number]: string} | undefined = undefined; private validLanguages: Array = []; constructor(private httpClient: HttpClient) { } getAgeRating(ageRating: AgeRating) { if (this.ageRatingTypes != undefined && this.ageRatingTypes.hasOwnProperty(ageRating)) { return of(this.ageRatingTypes[ageRating]); } return this.httpClient.get(this.baseUrl + 'series/age-rating?ageRating=' + ageRating, TextResonse).pipe(map(ratingString => { if (this.ageRatingTypes === undefined) { this.ageRatingTypes = {}; } this.ageRatingTypes[ageRating] = ratingString; return this.ageRatingTypes[ageRating]; })); } getAllAgeRatings(libraries?: Array) { let method = 'metadata/age-ratings' if (libraries != undefined && libraries.length > 0) { method += '?libraryIds=' + libraries.join(','); } return this.httpClient.get>(this.baseUrl + method); } getAllPublicationStatus(libraries?: Array) { let method = 'metadata/publication-status' if (libraries != undefined && libraries.length > 0) { method += '?libraryIds=' + libraries.join(','); } return this.httpClient.get>(this.baseUrl + method); } getAllTags(libraries?: Array) { let method = 'metadata/tags' if (libraries != undefined && libraries.length > 0) { method += '?libraryIds=' + libraries.join(','); } return this.httpClient.get>(this.baseUrl + method); } getAllGenres(libraries?: Array) { let method = 'metadata/genres' if (libraries != undefined && libraries.length > 0) { method += '?libraryIds=' + libraries.join(','); } return this.httpClient.get>(this.baseUrl + method); } getAllLanguages(libraries?: Array) { let method = 'metadata/languages' if (libraries != undefined && libraries.length > 0) { method += '?libraryIds=' + libraries.join(','); } return this.httpClient.get>(this.baseUrl + method); } /** * All the potential language tags there can be */ getAllValidLanguages() { if (this.validLanguages != undefined && this.validLanguages.length > 0) { return of(this.validLanguages); } return this.httpClient.get>(this.baseUrl + 'metadata/all-languages').pipe(map(l => this.validLanguages = l)); } getAllPeople(libraries?: Array) { let method = 'metadata/people' if (libraries != undefined && libraries.length > 0) { method += '?libraryIds=' + libraries.join(','); } return this.httpClient.get>(this.baseUrl + method); } getChapterSummary(chapterId: number) { return this.httpClient.get(this.baseUrl + 'metadata/chapter-summary?chapterId=' + chapterId, TextResonse); } }