{ "version": 3, "sources": ["src/app/_services/image.service.ts"], "sourcesContent": ["import {DestroyRef, inject, Injectable} from '@angular/core';\r\nimport { environment } from 'src/environments/environment';\r\nimport { ThemeService } from './theme.service';\r\nimport { RecentlyAddedItem } from '../_models/recently-added-item';\r\nimport { AccountService } from './account.service';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ImageService {\r\n private readonly destroyRef = inject(DestroyRef);\r\n baseUrl = environment.apiUrl;\r\n apiKey: string = '';\r\n encodedKey: string = '';\r\n public placeholderImage = 'assets/images/image-placeholder.dark-min.png';\r\n public errorImage = 'assets/images/error-placeholder2.dark-min.png';\r\n public resetCoverImage = 'assets/images/image-reset-cover-min.png';\r\n public errorWebLinkImage = 'assets/images/broken-white-32x32.png';\r\n public nextChapterImage = 'assets/images/image-placeholder.dark-min.png'\r\n\r\n constructor(private accountService: AccountService, private themeService: ThemeService) {\r\n this.themeService.currentTheme$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(theme => {\r\n if (this.themeService.isDarkTheme()) {\r\n this.placeholderImage = 'assets/images/image-placeholder.dark-min.png';\r\n this.errorImage = 'assets/images/error-placeholder2.dark-min.png';\r\n this.errorWebLinkImage = 'assets/images/broken-white-32x32.png';\r\n } else {\r\n this.placeholderImage = 'assets/images/image-placeholder-min.png';\r\n this.errorImage = 'assets/images/error-placeholder2-min.png';\r\n this.errorWebLinkImage = 'assets/images/broken-black-32x32.png';\r\n }\r\n });\r\n\r\n this.accountService.currentUser$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(user => {\r\n if (user) {\r\n this.apiKey = user.apiKey;\r\n this.encodedKey = encodeURIComponent(this.apiKey);\r\n }\r\n });\r\n }\r\n\r\n getRecentlyAddedItem(item: RecentlyAddedItem) {\r\n if (item.chapterId === 0) {\r\n return this.getVolumeCoverImage(item.volumeId);\r\n }\r\n return this.getChapterCoverImage(item.chapterId);\r\n }\r\n\r\n /**\r\n * Returns the entity type from a cover image url. Undefied if not applicable\r\n * @param url\r\n * @returns\r\n */\r\n getEntityTypeFromUrl(url: string) {\r\n if (url.indexOf('?') < 0) return undefined;\r\n const part = url.split('?')[1];\r\n const equalIndex = part.indexOf('=');\r\n return part.substring(0, equalIndex).replace('Id', '');\r\n }\r\n\r\n getLibraryCoverImage(libraryId: number) {\r\n return `${this.baseUrl}image/library-cover?libraryId=${libraryId}&apiKey=${this.encodedKey}`;\r\n }\r\n\r\n getVolumeCoverImage(volumeId: number) {\r\n return `${this.baseUrl}image/volume-cover?volumeId=${volumeId}&apiKey=${this.encodedKey}`;\r\n }\r\n\r\n getSeriesCoverImage(seriesId: number) {\r\n return `${this.baseUrl}image/series-cover?seriesId=${seriesId}&apiKey=${this.encodedKey}`;\r\n }\r\n\r\n getCollectionCoverImage(collectionTagId: number) {\r\n return `${this.baseUrl}image/collection-cover?collectionTagId=${collectionTagId}&apiKey=${this.encodedKey}`;\r\n }\r\n\r\n getReadingListCoverImage(readingListId: number) {\r\n return `${this.baseUrl}image/readinglist-cover?readingListId=${readingListId}&apiKey=${this.encodedKey}`;\r\n }\r\n\r\n getChapterCoverImage(chapterId: number) {\r\n return `${this.baseUrl}image/chapter-cover?chapterId=${chapterId}&apiKey=${this.encodedKey}`;\r\n }\r\n\r\n getBookmarkedImage(chapterId: number, pageNum: number) {\r\n return `${this.baseUrl}image/bookmark?chapterId=${chapterId}&apiKey=${this.encodedKey}&pageNum=${pageNum}`;\r\n }\r\n\r\n getWebLinkImage(url: string) {\r\n return `${this.baseUrl}image/web-link?url=${encodeURIComponent(url)}&apiKey=${this.encodedKey}`;\r\n }\r\n\r\n getCoverUploadImage(filename: string) {\r\n return `${this.baseUrl}image/cover-upload?filename=${encodeURIComponent(filename)}&apiKey=${this.encodedKey}`;\r\n }\r\n\r\n updateErroredWebLinkImage(event: any) {\r\n event.target.src = this.errorWebLinkImage;\r\n }\r\n\r\n /**\r\n * Used to refresh an existing loaded image (lazysizes). If random already attached, will append another number onto it.\r\n * @param url Existing request url from ImageService only\r\n * @returns Url with a random parameter attached\r\n */\r\n randomize(url: string) {\r\n const r = Math.round(Math.random() * 100 + 1);\r\n if (url.indexOf('&random') >= 0) {\r\n return url + 1;\r\n }\r\n return url + '&random=' + r;\r\n }\r\n}\r\n"], "mappings": "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", "names": ["ImageService", "constructor", "accountService", "themeService", "destroyRef", "inject", "DestroyRef", "baseUrl", "environment", "apiUrl", "apiKey", "encodedKey", "placeholderImage", "errorImage", "resetCoverImage", "errorWebLinkImage", "nextChapterImage", "currentTheme$", "pipe", "takeUntilDestroyed", "subscribe", "theme", "isDarkTheme", "currentUser$", "user", "encodeURIComponent", "getRecentlyAddedItem", "item", "chapterId", "getVolumeCoverImage", "volumeId", "getChapterCoverImage", "getEntityTypeFromUrl", "url", "indexOf", "part", "split", "equalIndex", "substring", "replace", "getLibraryCoverImage", "libraryId", "getSeriesCoverImage", "seriesId", "getCollectionCoverImage", "collectionTagId", "getReadingListCoverImage", "readingListId", "getBookmarkedImage", "pageNum", "getWebLinkImage", "getCoverUploadImage", "filename", "updateErroredWebLinkImage", "event", "target", "src", "randomize", "r", "Math", "round", "random", "\u0275\u0275inject", "AccountService", "ThemeService", "factory", "\u0275fac", "providedIn", "_ImageService"] }