{ "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, 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, NgTemplateOutlet} from '@angular/common';\nimport {\n SideNavCompanionBarComponent\n} from '../../sidenav/_components/side-nav-companion-bar/side-nav-companion-bar.component';\nimport {translate, TranslocoDirective} from \"@jsverse/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 {SettingsTabId} from \"../../sidenav/preference-nav/preference-nav.component\";\nimport {ReaderService} from \"../../_services/reader.service\";\nimport {QueryContext} from \"../../_models/metadata/v2/query-context\";\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, 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 protected 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 readerService = inject(ReaderService);\n\n libraries$: Observable = this.libraryService.getLibraries().pipe(take(1), takeUntilDestroyed(this.destroyRef))\n isLoadingDashboard = true;\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 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, QueryContext.Dashboard);\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([], QueryContext.Dashboard).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 handleRecentlyAddedChapterRead(item: RecentlyAddedItem) {\n // Get Continue Reading point and open directly\n this.readerService.getCurrentChapter(item.seriesId).subscribe(chapter => {\n this.readerService.readChapter(item.libraryId, item.seriesId, chapter, false);\n });\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 protected readonly SettingsTabId = SettingsTabId;\n}\n", "
\n\n\n \n @if (libraries$ | async; as libraries) {\n @if (libraries.length === 0) {\n @if (accountService.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\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\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", "StreamType", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "t_r1", "\u0275\u0275property", "ctx_r1", "SettingsTabId", "Libraries", "\u0275\u0275textInterpolate", "\u0275\u0275template", "DashboardComponent_ng_container_2_Conditional_1_Conditional_0_Conditional_0_Conditional_1_Template", "DashboardComponent_ng_container_2_Conditional_1_Conditional_0_Conditional_0_Conditional_2_Template", "\u0275\u0275conditional", "ctx", "DashboardComponent_ng_container_2_Conditional_1_Conditional_0_Conditional_0_Template", "tmp_5_0", "\u0275\u0275pipeBind1", "accountService", "isAdmin$", "DashboardComponent_ng_container_2_Conditional_1_Conditional_0_Template", "length", "\u0275\u0275elementContainer", "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_2_For_4_ng_template_5_Conditional_0_ng_template_1_Template", "\u0275\u0275templateRefExtractor", "name", "DashboardComponent_ng_container_2_For_4_ng_template_5_Conditional_0_Template", "tmp_19_0", "api", "_r13", "item_r14", "_r12", "handleSectionClick", "StreamId", "OnDeck", "DashboardComponent_ng_container_2_For_4_ng_template_7_Conditional_0_ng_template_1_Template", "DashboardComponent_ng_container_2_For_4_ng_template_7_Conditional_0_Template", "item_r17", "_r16", "handleRecentlyAddedChapterClick", "handleRecentlyAddedChapterRead", "seriesName", "imageService", "getSeriesCoverImage", "seriesId", "count", "_r15", "RecentlyUpdatedSeries", "DashboardComponent_ng_container_2_For_4_ng_template_9_Conditional_0_ng_template_1_Template", "DashboardComponent_ng_container_2_For_4_ng_template_9_Conditional_0_Template", "_r19", "item_r20", "_r18", "NewlyAddedSeries", "DashboardComponent_ng_container_2_For_4_ng_template_11_Conditional_0_ng_template_1_Template", "DashboardComponent_ng_container_2_For_4_ng_template_11_Conditional_0_Template", "_r22", "item_r23", "_r21", "MoreInGenre", "DashboardComponent_ng_container_2_For_4_ng_template_13_Conditional_0_ng_template_1_Template", "_c1", "genre", "title", "DashboardComponent_ng_container_2_For_4_ng_template_13_Conditional_0_Template", "DashboardComponent_ng_container_2_For_4_Case_0_Template", "DashboardComponent_ng_container_2_For_4_Case_1_Template", "DashboardComponent_ng_container_2_For_4_Case_2_Template", "DashboardComponent_ng_container_2_For_4_Case_3_Template", "DashboardComponent_ng_container_2_For_4_Case_4_Template", "DashboardComponent_ng_container_2_For_4_ng_template_5_Template", "DashboardComponent_ng_container_2_For_4_ng_template_7_Template", "DashboardComponent_ng_container_2_For_4_ng_template_9_Template", "DashboardComponent_ng_container_2_For_4_ng_template_11_Template", "DashboardComponent_ng_container_2_For_4_ng_template_13_Template", "tmp_17_0", "streamType", "StreamType", "RecentlyUpdated", "NewlyAdded", "SmartFilter", "\u0275\u0275elementContainerStart", "DashboardComponent_ng_container_2_Conditional_1_Template", "\u0275\u0275repeaterCreate", "DashboardComponent_ng_container_2_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", "libraryService", "LibraryService", "seriesService", "SeriesService", "router", "Router", "titleService", "Title", "ImageService", "messageHub", "MessageHubService", "cdRef", "ChangeDetectorRef", "dashboardService", "DashboardService", "scrobblingService", "ScrobblingService", "toastr", "ToastrService", "readerService", "ReaderService", "getLibraries", "pipe", "take", "takeUntilDestroyed", "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", "ngOnInit", "setTitle", "getDashboardStreams", "forEach", "s", "getOnDeck", "map", "d", "result", "increment", "shareReplay", "bufferSize", "refCount", "getRecentlyAdded", "getRecentlyUpdatedSeries", "decodeFilter", "smartFilterEncoded", "switchMap", "filter", "getAllSeriesV2", "QueryContext", "Dashboard", "getAllGenres", "genres", "Math", "floor", "random", "getMoreIn", "p", "streamId", "onDeck", "index", "findIndex", "__spreadValues", "item", "__async", "navigate", "getCurrentChapter", "chapter", "readChapter", "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_2_Template", "SideNavCompanionBarComponent", "RouterLink", "CarouselReelComponent", "SeriesCardComponent", "CardItemComponent", "AsyncPipe", "TranslocoDirective", "NgTemplateOutlet", "LoadingComponent", "styles", "changeDetection", "routes", "path", "component", "DashboardComponent"] }