{ "version": 3, "sources": ["src/app/_services/statistics.service.ts"], "sourcesContent": ["import { HttpClient } from '@angular/common/http';\r\nimport {Inject, inject, Injectable} from '@angular/core';\r\nimport { environment } from 'src/environments/environment';\r\nimport { UserReadStatistics } from '../statistics/_models/user-read-statistics';\r\nimport { PublicationStatusPipe } from '../_pipes/publication-status.pipe';\r\nimport {asyncScheduler, finalize, map, tap} from 'rxjs';\r\nimport { MangaFormatPipe } from '../_pipes/manga-format.pipe';\r\nimport { FileExtensionBreakdown } from '../statistics/_models/file-breakdown';\r\nimport { TopUserRead } from '../statistics/_models/top-reads';\r\nimport { ReadHistoryEvent } from '../statistics/_models/read-history-event';\r\nimport { ServerStatistics } from '../statistics/_models/server-statistics';\r\nimport { StatCount } from '../statistics/_models/stat-count';\r\nimport { PublicationStatus } from '../_models/metadata/publication-status';\r\nimport { MangaFormat } from '../_models/manga-format';\r\nimport { TextResonse } from '../_types/text-response';\r\nimport {TranslocoService} from \"@jsverse/transloco\";\r\nimport {KavitaPlusMetadataBreakdown} from \"../statistics/_models/kavitaplus-metadata-breakdown\";\r\nimport {throttleTime} from \"rxjs/operators\";\r\nimport {DEBOUNCE_TIME} from \"../shared/_services/download.service\";\r\nimport {download} from \"../shared/_models/download\";\r\nimport {Saver, SAVER} from \"../_providers/saver.provider\";\r\n\r\nexport enum DayOfWeek\r\n{\r\n Sunday = 0,\r\n Monday = 1,\r\n Tuesday = 2,\r\n Wednesday = 3,\r\n Thursday = 4,\r\n Friday = 5,\r\n Saturday = 6,\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class StatisticsService {\r\n\r\n baseUrl = environment.apiUrl;\r\n translocoService = inject(TranslocoService);\r\n publicationStatusPipe = new PublicationStatusPipe(this.translocoService);\r\n mangaFormatPipe = new MangaFormatPipe(this.translocoService);\r\n\r\n constructor(private httpClient: HttpClient, @Inject(SAVER) private save: Saver) { }\r\n\r\n getUserStatistics(userId: number, libraryIds: Array = []) {\r\n // TODO: Convert to httpParams object\r\n let url = 'stats/user/' + userId + '/read';\r\n if (libraryIds.length > 0) url += '?libraryIds=' + libraryIds.join(',');\r\n\r\n return this.httpClient.get(this.baseUrl + url);\r\n }\r\n\r\n getServerStatistics() {\r\n return this.httpClient.get(this.baseUrl + 'stats/server/stats');\r\n }\r\n\r\n getYearRange() {\r\n return this.httpClient.get[]>(this.baseUrl + 'stats/server/count/year').pipe(\r\n map(spreads => spreads.map(spread => {\r\n return {name: spread.value + '', value: spread.count};\r\n })));\r\n }\r\n\r\n getTopYears() {\r\n return this.httpClient.get[]>(this.baseUrl + 'stats/server/top/years').pipe(\r\n map(spreads => spreads.map(spread => {\r\n return {name: spread.value + '', value: spread.count};\r\n })));\r\n }\r\n\r\n getPagesPerYear(userId = 0) {\r\n return this.httpClient.get[]>(this.baseUrl + 'stats/pages-per-year?userId=' + userId).pipe(\r\n map(spreads => spreads.map(spread => {\r\n return {name: spread.value + '', value: spread.count};\r\n })));\r\n }\r\n\r\n getWordsPerYear(userId = 0) {\r\n return this.httpClient.get[]>(this.baseUrl + 'stats/words-per-year?userId=' + userId).pipe(\r\n map(spreads => spreads.map(spread => {\r\n return {name: spread.value + '', value: spread.count};\r\n })));\r\n }\r\n\r\n getTopUsers(days: number = 0) {\r\n return this.httpClient.get(this.baseUrl + 'stats/server/top/users?days=' + days);\r\n }\r\n\r\n getReadingHistory(userId: number) {\r\n return this.httpClient.get(this.baseUrl + 'stats/user/reading-history?userId=' + userId);\r\n }\r\n\r\n getPublicationStatus() {\r\n return this.httpClient.get[]>(this.baseUrl + 'stats/server/count/publication-status').pipe(\r\n map(spreads => spreads.map(spread => {\r\n return {name: this.publicationStatusPipe.transform(spread.value), value: spread.count};\r\n })));\r\n }\r\n\r\n getMangaFormat() {\r\n return this.httpClient.get[]>(this.baseUrl + 'stats/server/count/manga-format').pipe(\r\n map(spreads => spreads.map(spread => {\r\n return {name: this.mangaFormatPipe.transform(spread.value), value: spread.count};\r\n })));\r\n }\r\n\r\n getTotalSize() {\r\n return this.httpClient.get(this.baseUrl + 'stats/server/file-size', TextResonse);\r\n }\r\n\r\n getFileBreakdown() {\r\n return this.httpClient.get(this.baseUrl + 'stats/server/file-breakdown');\r\n }\r\n\r\n downloadFileBreakdown(extension: string) {\r\n return this.httpClient.get(this.baseUrl + 'stats/server/file-extension?fileExtension=' + encodeURIComponent(extension),\r\n {observe: 'events', responseType: 'blob', reportProgress: true}\r\n ).pipe(\r\n throttleTime(DEBOUNCE_TIME, asyncScheduler, { leading: true, trailing: true }),\r\n download((blob, filename) => {\r\n this.save(blob, decodeURIComponent(filename));\r\n }),\r\n // tap((d) => this.updateDownloadState(d, downloadType, subtitle, 0)),\r\n // finalize(() => this.finalizeDownloadState(downloadType, subtitle))\r\n );\r\n\r\n }\r\n\r\n getReadCountByDay(userId: number = 0, days: number = 0) {\r\n return this.httpClient.get>(this.baseUrl + 'stats/reading-count-by-day?userId=' + userId + '&days=' + days);\r\n }\r\n\r\n getDayBreakdown( userId = 0) {\r\n return this.httpClient.get>>(this.baseUrl + 'stats/day-breakdown?userId=' + userId);\r\n }\r\n\r\n getKavitaPlusMetadataBreakdown() {\r\n return this.httpClient.get(this.baseUrl + 'stats/kavitaplus-metadata-breakdown');\r\n }\r\n}\r\n"], "mappings": "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", "names": ["DayOfWeek", "StatisticsService", "constructor", "httpClient", "save", "baseUrl", "environment", "apiUrl", "translocoService", "inject", "TranslocoService", "publicationStatusPipe", "PublicationStatusPipe", "mangaFormatPipe", "MangaFormatPipe", "getUserStatistics", "userId", "libraryIds", "url", "length", "join", "get", "getServerStatistics", "getYearRange", "pipe", "map", "spreads", "spread", "name", "value", "count", "getTopYears", "getPagesPerYear", "getWordsPerYear", "getTopUsers", "days", "getReadingHistory", "getPublicationStatus", "transform", "getMangaFormat", "getTotalSize", "TextResonse", "getFileBreakdown", "downloadFileBreakdown", "extension", "encodeURIComponent", "observe", "responseType", "reportProgress", "throttleTime", "DEBOUNCE_TIME", "asyncScheduler", "leading", "trailing", "download", "blob", "filename", "decodeURIComponent", "getReadCountByDay", "getDayBreakdown", "getKavitaPlusMetadataBreakdown", "\u0275\u0275inject", "HttpClient", "SAVER", "factory", "\u0275fac", "providedIn"] }