{ "version": 3, "sources": ["src/app/_services/recommendation.service.ts", "src/app/_models/dashboard/stream-type.enum.ts", "src/app/dashboard/_components/dashboard.component.ts", "src/app/dashboard/_components/dashboard.component.html", "src/app/_routes/dashboard-routing.module.ts"], "sourcesContent": ["import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { map } from 'rxjs';\nimport { environment } from 'src/environments/environment';\nimport { UtilityService } from '../shared/_services/utility.service';\nimport { PaginatedResult } from '../_models/pagination';\nimport { Series } from '../_models/series';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RecommendationService {\n\n private baseUrl = environment.apiUrl;\n\n constructor(private httpClient: HttpClient, private utilityService: UtilityService) { }\n\n getQuickReads(libraryId: number, pageNum?: number, itemsPerPage?: number) {\n let params = new HttpParams();\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\n return this.httpClient.get>(this.baseUrl + 'recommended/quick-reads?libraryId=' + libraryId, {observe: 'response', params})\n .pipe(map(response => this.utilityService.createPaginatedResult(response)));\n }\n\n getQuickCatchupReads(libraryId: number, pageNum?: number, itemsPerPage?: number) {\n let params = new HttpParams();\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\n return this.httpClient.get>(this.baseUrl + 'recommended/quick-catchup-reads?libraryId=' + libraryId, {observe: 'response', params})\n .pipe(map(response => this.utilityService.createPaginatedResult(response)));\n }\n\n getHighlyRated(libraryId: number, pageNum?: number, itemsPerPage?: number) {\n let params = new HttpParams();\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\n return this.httpClient.get>(this.baseUrl + 'recommended/highly-rated?libraryId=' + libraryId, {observe: 'response', params})\n .pipe(map(response => this.utilityService.createPaginatedResult(response)));\n }\n\n getRediscover(libraryId: number, pageNum?: number, itemsPerPage?: number) {\n let params = new HttpParams();\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\n return this.httpClient.get>(this.baseUrl + 'recommended/rediscover?libraryId=' + libraryId, {observe: 'response', params})\n .pipe(map(response => this.utilityService.createPaginatedResult(response)));\n }\n\n getMoreIn(libraryId: number, genreId: number, pageNum?: number, itemsPerPage?: number) {\n let params = new HttpParams();\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\n return this.httpClient.get>(this.baseUrl + 'recommended/more-in?libraryId=' + libraryId + '&genreId=' + genreId, {observe: 'response', params})\n .pipe(map(response => this.utilityService.createPaginatedResult(response)));\n }\n}\n", "export enum StreamType {\n OnDeck = 1,\n RecentlyUpdated = 2,\n NewlyAdded = 3,\n SmartFilter = 4,\n MoreInGenre = 5\n}\n", "import {ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject, OnInit} from '@angular/core';\nimport {Title} from '@angular/platform-browser';\nimport {Router, RouterLink} from '@angular/router';\nimport {Observable, of, ReplaySubject, Subject, switchMap} from 'rxjs';\nimport {debounceTime, map, shareReplay, take, tap, throttleTime} from 'rxjs/operators';\nimport {FilterUtilitiesService} from 'src/app/shared/_services/filter-utilities.service';\nimport {Library} from 'src/app/_models/library/library';\nimport {RecentlyAddedItem} from 'src/app/_models/recently-added-item';\nimport {SortField} from 'src/app/_models/metadata/series-filter';\nimport {AccountService} from 'src/app/_services/account.service';\nimport {ImageService} from 'src/app/_services/image.service';\nimport {LibraryService} from 'src/app/_services/library.service';\nimport {EVENTS, MessageHubService} from 'src/app/_services/message-hub.service';\nimport {SeriesService} from 'src/app/_services/series.service';\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\nimport {CardItemComponent} from '../../cards/card-item/card-item.component';\nimport {SeriesCardComponent} from '../../cards/series-card/series-card.component';\nimport {CarouselReelComponent} from '../../carousel/_components/carousel-reel/carousel-reel.component';\nimport {AsyncPipe, NgForOf, NgTemplateOutlet} from '@angular/common';\nimport {\n SideNavCompanionBarComponent\n} from '../../sidenav/_components/side-nav-companion-bar/side-nav-companion-bar.component';\nimport {translate, TranslocoDirective} from \"@ngneat/transloco\";\nimport {FilterField} from \"../../_models/metadata/v2/filter-field\";\nimport {FilterComparison} from \"../../_models/metadata/v2/filter-comparison\";\nimport {DashboardService} from \"../../_services/dashboard.service\";\nimport {MetadataService} from \"../../_services/metadata.service\";\nimport {RecommendationService} from \"../../_services/recommendation.service\";\nimport {Genre} from \"../../_models/metadata/genre\";\nimport {DashboardStream} from \"../../_models/dashboard/dashboard-stream\";\nimport {StreamType} from \"../../_models/dashboard/stream-type.enum\";\nimport {LoadingComponent} from \"../../shared/loading/loading.component\";\nimport {ScrobbleProvider, ScrobblingService} from \"../../_services/scrobbling.service\";\nimport {ToastrService} from \"ngx-toastr\";\nimport {ServerService} from \"../../_services/server.service\";\n\nenum StreamId {\n OnDeck,\n RecentlyUpdatedSeries,\n NewlyAddedSeries,\n MoreInGenre,\n}\n\n\n@Component({\n selector: 'app-dashboard',\n templateUrl: './dashboard.component.html',\n styleUrls: ['./dashboard.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [SideNavCompanionBarComponent, RouterLink, CarouselReelComponent, SeriesCardComponent,\n CardItemComponent, AsyncPipe, TranslocoDirective, NgForOf, NgTemplateOutlet, LoadingComponent],\n})\nexport class DashboardComponent implements OnInit {\n\n private readonly destroyRef = inject(DestroyRef);\n private readonly filterUtilityService = inject(FilterUtilitiesService);\n private readonly metadataService = inject(MetadataService);\n private readonly recommendationService = inject(RecommendationService);\n public readonly accountService = inject(AccountService);\n private readonly libraryService = inject(LibraryService);\n private readonly seriesService = inject(SeriesService);\n private readonly router = inject(Router);\n private readonly titleService = inject(Title);\n public readonly imageService = inject(ImageService);\n private readonly messageHub = inject(MessageHubService);\n private readonly cdRef = inject(ChangeDetectorRef);\n private readonly dashboardService = inject(DashboardService);\n private readonly scrobblingService = inject(ScrobblingService);\n private readonly toastr = inject(ToastrService);\n private readonly serverService = inject(ServerService);\n\n libraries$: Observable = this.libraryService.getLibraries().pipe(take(1), takeUntilDestroyed(this.destroyRef))\n isLoadingDashboard = true;\n isAdmin$: Observable = of(false);\n\n streams: Array = [];\n genre: Genre | undefined;\n refreshStreams$ = new Subject();\n refreshStreamsFromDashboardUpdate$ = new Subject();\n\n streamCount: number = 0;\n streamsLoaded: number = 0;\n\n /**\n * We use this Replay subject to slow the amount of times we reload the UI\n */\n private loadRecentlyAdded$: ReplaySubject = new ReplaySubject();\n protected readonly StreamType = StreamType;\n protected readonly StreamId = StreamId;\n\n constructor() {\n this.loadDashboard();\n\n this.refreshStreamsFromDashboardUpdate$.pipe(takeUntilDestroyed(this.destroyRef), debounceTime(1000),\n tap(() => {\n this.loadDashboard();\n }))\n .subscribe();\n\n this.refreshStreams$.pipe(takeUntilDestroyed(this.destroyRef), throttleTime(10_000),\n tap(() => {\n this.loadDashboard()\n }))\n .subscribe();\n\n\n this.messageHub.messages$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(res => {\n // TODO: Make the event have a stream Id so I can refresh just that stream\n if (res.event === EVENTS.DashboardUpdate) {\n this.refreshStreamsFromDashboardUpdate$.next();\n } else if (res.event === EVENTS.SeriesAdded) {\n this.refreshStreams$.next();\n } else if (res.event === EVENTS.SeriesRemoved) {\n this.refreshStreams$.next();\n } else if (res.event === EVENTS.ScanSeries) {\n // We don't have events for when series are updated, but we do get events when a scan update occurs. Refresh recentlyAdded at that time.\n this.loadRecentlyAdded$.next();\n this.refreshStreams$.next();\n }\n });\n\n this.scrobblingService.hasTokenExpired(ScrobbleProvider.AniList).subscribe(hasExpired => {\n if (hasExpired) {\n this.toastr.error(translate('toasts.anilist-token-expired'));\n }\n this.cdRef.markForCheck();\n });\n\n\n this.isAdmin$ = this.accountService.currentUser$.pipe(\n takeUntilDestroyed(this.destroyRef),\n map(user => (user && this.accountService.hasAdminRole(user)) || false),\n shareReplay({bufferSize: 1, refCount: true})\n );\n }\n\n ngOnInit(): void {\n this.titleService.setTitle('Kavita');\n }\n\n\n loadDashboard() {\n this.isLoadingDashboard = true;\n this.streamsLoaded = 0;\n this.streamCount = 0;\n this.cdRef.markForCheck();\n this.dashboardService.getDashboardStreams().subscribe(streams => {\n this.streams = streams;\n this.streamCount = streams.length;\n this.streams.forEach(s => {\n switch (s.streamType) {\n case StreamType.OnDeck:\n s.api = this.seriesService.getOnDeck(0, 1, 20)\n .pipe(map(d => d.result), tap(() => this.increment()), takeUntilDestroyed(this.destroyRef), shareReplay({bufferSize: 1, refCount: true}));\n break;\n case StreamType.NewlyAdded:\n s.api = this.seriesService.getRecentlyAdded(1, 20)\n .pipe(map(d => d.result), tap(() => this.increment()), takeUntilDestroyed(this.destroyRef), shareReplay({bufferSize: 1, refCount: true}));\n break;\n case StreamType.RecentlyUpdated:\n s.api = this.seriesService.getRecentlyUpdatedSeries().pipe(tap(() => this.increment()), takeUntilDestroyed(this.destroyRef), shareReplay({bufferSize: 1, refCount: true}));\n break;\n case StreamType.SmartFilter:\n s.api = this.filterUtilityService.decodeFilter(s.smartFilterEncoded!).pipe(\n switchMap(filter => {\n return this.seriesService.getAllSeriesV2(0, 20, filter);\n }))\n .pipe(map(d => d.result),tap(() => this.increment()), takeUntilDestroyed(this.destroyRef), shareReplay({bufferSize: 1, refCount: true}));\n break;\n case StreamType.MoreInGenre:\n s.api = this.metadataService.getAllGenres().pipe(\n map(genres => {\n this.genre = genres[Math.floor(Math.random() * genres.length)];\n return this.genre;\n }),\n switchMap(genre => this.recommendationService.getMoreIn(0, genre.id, 0, 30)),\n map(p => p.result),\n tap(() => this.increment()),\n takeUntilDestroyed(this.destroyRef),\n shareReplay({bufferSize: 1, refCount: true})\n );\n break;\n }\n });\n this.isLoadingDashboard = false;\n this.cdRef.markForCheck();\n });\n }\n\n increment() {\n this.streamsLoaded++;\n this.cdRef.markForCheck();\n }\n\n reloadStream(streamId: number, onDeck = false) {\n const index = this.streams.findIndex(s => s.id === streamId);\n if (index < 0) return;\n if (onDeck) {\n // TODO: Need to figure out a better way to refresh just one stream\n this.refreshStreams$.next();\n this.cdRef.markForCheck();\n } else {\n this.streams[index] = {...this.streams[index]};\n this.cdRef.markForCheck();\n }\n }\n\n async handleRecentlyAddedChapterClick(item: RecentlyAddedItem) {\n await this.router.navigate(['library', item.libraryId, 'series', item.seriesId]);\n }\n\n async handleFilterSectionClick(stream: DashboardStream) {\n await this.router.navigateByUrl('all-series?' + stream.smartFilterEncoded);\n }\n\n handleSectionClick(streamId: StreamId) {\n if (streamId === StreamId.RecentlyUpdatedSeries) {\n const params: any = {};\n params['page'] = 1;\n params['title'] = translate('dashboard.recently-updated-title');\n const filter = this.filterUtilityService.createSeriesV2Filter();\n if (filter.sortOptions) {\n filter.sortOptions.sortField = SortField.LastChapterAdded;\n filter.sortOptions.isAscending = false;\n }\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params).subscribe();\n } else if (streamId === StreamId.OnDeck) {\n const params: any = {};\n params['page'] = 1;\n params['title'] = translate('dashboard.on-deck-title');\n\n const filter = this.filterUtilityService.createSeriesV2Filter();\n filter.statements.push({field: FilterField.ReadProgress, comparison: FilterComparison.GreaterThan, value: '0'});\n filter.statements.push({field: FilterField.ReadProgress, comparison: FilterComparison.LessThan, value: '100'});\n if (filter.sortOptions) {\n filter.sortOptions.sortField = SortField.LastChapterAdded;\n filter.sortOptions.isAscending = false;\n }\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params).subscribe();\n } else if (streamId === StreamId.NewlyAddedSeries) {\n const params: any = {};\n params['page'] = 1;\n params['title'] = translate('dashboard.recently-added-title');\n const filter = this.filterUtilityService.createSeriesV2Filter();\n if (filter.sortOptions) {\n filter.sortOptions.sortField = SortField.Created;\n filter.sortOptions.isAscending = false;\n }\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params).subscribe();\n } else if (streamId === StreamId.MoreInGenre) {\n const params: any = {};\n params['page'] = 1;\n params['title'] = translate('dashboard.more-in-genre-title', {genre: this.genre?.title});\n const filter = this.filterUtilityService.createSeriesV2Filter();\n filter.statements.push({field: FilterField.Genres, value: this.genre?.id + '', comparison: FilterComparison.MustContains});\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params).subscribe();\n }\n }\n}\n", "\n\n\n @if (libraries$ | async; as libraries) {\n @if (libraries.length === 0) {\n @if (isAdmin$ | async; as isAdmin) {\n
\n @if (isAdmin) {\n
\n

{{t('no-libraries')}} {{t('server-settings-link')}}.

\n
\n } @else {\n
\n

{{t('not-granted')}}

\n
\n }\n
\n }\n }\n }\n\n @for(stream of streams; track stream.id) {\n @switch (stream.streamType) {\n @case (StreamType.OnDeck) {\n \n }\n @case (StreamType.RecentlyUpdated) {\n \n }\n @case (StreamType.NewlyAdded) {\n \n }\n @case (StreamType.SmartFilter) {\n \n }\n @case (StreamType.MoreInGenre) {\n \n }\n }\n\n\n \n @if(stream.api | async; as data) {\n \n \n \n \n \n }\n \n\n \n @if(stream.api | async; as data) {\n \n \n \n \n \n }\n \n\n \n @if(stream.api | async; as data) {\n \n \n \n \n \n }\n \n\n \n @if(stream.api | async; as data) {\n \n \n \n \n \n }\n \n\n \n @if(stream.api | async; as data) {\n \n \n \n \n \n }\n \n }\n\n \n
\n\n", "import { Routes } from '@angular/router';\nimport { DashboardComponent } from '../dashboard/_components/dashboard.component';\n\n\nexport const routes: Routes = [\n {\n path: '',\n component: DashboardComponent,\n }\n];\n"], "mappings": "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", "names": ["RecommendationService", "constructor", "httpClient", "utilityService", "baseUrl", "environment", "apiUrl", "getQuickReads", "libraryId", "pageNum", "itemsPerPage", "params", "HttpParams", "addPaginationIfExists", "get", "observe", "pipe", "map", "response", "createPaginatedResult", "getQuickCatchupReads", "getHighlyRated", "getRediscover", "getMoreIn", "genreId", "\u0275\u0275inject", "HttpClient", "UtilityService", "factory", "\u0275fac", "providedIn", "_RecommendationService", "StreamType", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "t_r1", "\u0275\u0275textInterpolate", "\u0275\u0275template", "DashboardComponent_ng_container_1_Conditional_1_Conditional_0_Conditional_0_Conditional_1_Template", "DashboardComponent_ng_container_1_Conditional_1_Conditional_0_Conditional_0_Conditional_2_Template", "\u0275\u0275conditional", "ctx", "DashboardComponent_ng_container_1_Conditional_1_Conditional_0_Conditional_0_Template", "tmp_5_0", "\u0275\u0275pipeBind1", "ctx_r1", "isAdmin$", "DashboardComponent_ng_container_1_Conditional_1_Conditional_0_Template", "length", "\u0275\u0275elementContainer", "\u0275\u0275property", "onDeck_r4", "\u0275\u0275pureFunction1", "_c0", "stream_r3", "recentlyUpdated_r5", "newlyUpdated_r6", "smartFilter_r7", "moreInGenre_r8", "\u0275\u0275listener", "item_r11", "\u0275\u0275restoreView", "_r10", "$implicit", "\u0275\u0275nextContext", "\u0275\u0275resetView", "reloadStream", "id", "libraryId", "_r9", "handleFilterSectionClick", "DashboardComponent_ng_container_1_For_4_ng_template_5_Conditional_0_ng_template_1_Template", "\u0275\u0275templateRefExtractor", "name", "DashboardComponent_ng_container_1_For_4_ng_template_5_Conditional_0_Template", "tmp_19_0", "api", "_r13", "item_r14", "_r12", "handleSectionClick", "StreamId", "OnDeck", "DashboardComponent_ng_container_1_For_4_ng_template_7_Conditional_0_ng_template_1_Template", "DashboardComponent_ng_container_1_For_4_ng_template_7_Conditional_0_Template", "item_r17", "_r16", "handleRecentlyAddedChapterClick", "seriesName", "imageService", "getSeriesCoverImage", "seriesId", "count", "_r15", "RecentlyUpdatedSeries", "DashboardComponent_ng_container_1_For_4_ng_template_9_Conditional_0_ng_template_1_Template", "DashboardComponent_ng_container_1_For_4_ng_template_9_Conditional_0_Template", "_r19", "item_r20", "_r18", "NewlyAddedSeries", "DashboardComponent_ng_container_1_For_4_ng_template_11_Conditional_0_ng_template_1_Template", "DashboardComponent_ng_container_1_For_4_ng_template_11_Conditional_0_Template", "_r22", "item_r23", "_r21", "MoreInGenre", "DashboardComponent_ng_container_1_For_4_ng_template_13_Conditional_0_ng_template_1_Template", "_c1", "genre", "title", "DashboardComponent_ng_container_1_For_4_ng_template_13_Conditional_0_Template", "DashboardComponent_ng_container_1_For_4_Case_0_Template", "DashboardComponent_ng_container_1_For_4_Case_1_Template", "DashboardComponent_ng_container_1_For_4_Case_2_Template", "DashboardComponent_ng_container_1_For_4_Case_3_Template", "DashboardComponent_ng_container_1_For_4_Case_4_Template", "DashboardComponent_ng_container_1_For_4_ng_template_5_Template", "DashboardComponent_ng_container_1_For_4_ng_template_7_Template", "DashboardComponent_ng_container_1_For_4_ng_template_9_Template", "DashboardComponent_ng_container_1_For_4_ng_template_11_Template", "DashboardComponent_ng_container_1_For_4_ng_template_13_Template", "tmp_17_0", "streamType", "StreamType", "RecentlyUpdated", "NewlyAdded", "SmartFilter", "\u0275\u0275elementContainerStart", "DashboardComponent_ng_container_1_Conditional_1_Template", "\u0275\u0275repeaterCreate", "DashboardComponent_ng_container_1_For_4_Template", "_forTrack0", "\u0275\u0275element", "tmp_2_0", "libraries$", "\u0275\u0275repeater", "streams", "isLoadingDashboard", "streamCount", "streamsLoaded", "DashboardComponent", "constructor", "destroyRef", "inject", "DestroyRef", "filterUtilityService", "FilterUtilitiesService", "metadataService", "MetadataService", "recommendationService", "RecommendationService", "accountService", "AccountService", "libraryService", "LibraryService", "seriesService", "SeriesService", "router", "Router", "titleService", "Title", "ImageService", "messageHub", "MessageHubService", "cdRef", "ChangeDetectorRef", "dashboardService", "DashboardService", "scrobblingService", "ScrobblingService", "toastr", "ToastrService", "serverService", "ServerService", "getLibraries", "pipe", "take", "takeUntilDestroyed", "of", "refreshStreams$", "Subject", "refreshStreamsFromDashboardUpdate$", "loadRecentlyAdded$", "ReplaySubject", "loadDashboard", "debounceTime", "tap", "subscribe", "throttleTime", "messages$", "res", "event", "EVENTS", "DashboardUpdate", "next", "SeriesAdded", "SeriesRemoved", "ScanSeries", "hasTokenExpired", "ScrobbleProvider", "AniList", "hasExpired", "error", "translate", "markForCheck", "currentUser$", "map", "user", "hasAdminRole", "shareReplay", "bufferSize", "refCount", "ngOnInit", "setTitle", "getDashboardStreams", "forEach", "s", "getOnDeck", "d", "result", "increment", "getRecentlyAdded", "getRecentlyUpdatedSeries", "decodeFilter", "smartFilterEncoded", "switchMap", "filter", "getAllSeriesV2", "getAllGenres", "genres", "Math", "floor", "random", "getMoreIn", "p", "streamId", "onDeck", "index", "findIndex", "__spreadValues", "item", "__async", "navigate", "stream", "navigateByUrl", "params", "createSeriesV2Filter", "sortOptions", "sortField", "SortField", "LastChapterAdded", "isAscending", "applyFilterWithParams", "statements", "push", "field", "FilterField", "ReadProgress", "comparison", "FilterComparison", "GreaterThan", "value", "LessThan", "Created", "Genres", "MustContains", "selectors", "standalone", "features", "\u0275\u0275StandaloneFeature", "decls", "vars", "consts", "template", "rf", "DashboardComponent_ng_container_1_Template", "SideNavCompanionBarComponent", "RouterLink", "CarouselReelComponent", "SeriesCardComponent", "CardItemComponent", "AsyncPipe", "TranslocoDirective", "NgTemplateOutlet", "LoadingComponent", "changeDetection", "_DashboardComponent", "routes", "path", "component", "DashboardComponent"] }