{"version":3,"file":"main.43d63798ea231b9a.js","mappings":"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","names":["AdminGuard","constructor","accountService","toastr","translocoService","this","canActivate","currentUser$","pipe","take","map","user","hasAdminRole","error","translate","static","t","i0","i1","i2","i3","_angular_core__WEBPACK_IMPORTED_MODULE_3__","Yz7","factory","ɵfac","providedIn","AuthGuard","router","urlKey","errorMessage","errorMessage2","toasts","filter","toast","message","length","localStorage","setItem","window","location","pathname","navigateByUrl","i4","LibraryAccessGuard","memberService","next","state","libraryId","parseInt","url","split","isNaN","of","hasLibraryAccess","_angular_core__WEBPACK_IMPORTED_MODULE_2__","LibraryType","Manga","Comic","Book","MangaFormat","IMAGE","ARCHIVE","UNKNOWN","EPUB","PDF","PersonRole","Other","Artist","Writer","Penciller","Inker","Colorist","Letterer","CoverArtist","Editor","Publisher","Character","Translator","SortField","SortName","Created","LastModified","LastChapterAdded","TimeToRead","ReleaseYear","ReadProgress","allSortFields","Object","keys","key","Number","mangaFormatFilters","title","value","selected","FilterCombination","Or","And","FilterComparison","Equal","GreaterThan","GreaterThanEqual","LessThan","LessThanEqual","Contains","MustContains","Matches","NotContains","NotEqual","BeginsWith","EndsWith","IsBefore","IsAfter","IsInLast","IsNotInLast","FilterField","None","Summary","SeriesName","PublicationStatus","Languages","AgeRating","UserRating","Tags","CollectionTags","Translators","Characters","Writers","Genres","Libraries","Formats","ReadTime","Path","FilePath","WantToRead","ReadingDate","enumArray","sort","a","b","localeCompare","allFields","PaginatedResult","ThemeProvider","System","User","SearchResultGroup","libraries","series","collections","readingLists","persons","genres","tags","files","chapters","reset","Role","Admin","ChangePassword","Bookmark","Download","ChangeRestriction","AccountService","lastLoginKey","localeKey","httpClient","messageHub","themeService","destroyRef","inject","DestroyRef","baseUrl","environment","apiUrl","userKey","currentUserSource","ReplaySubject","asObservable","hasValidLicenseSource","hasValidLicense$","messages$","evt","event","EVENTS","UserUpdate","payload","userUpdateEvent","userName","currentUser","username","switchMap","refreshAccount","subscribe","roles","includes","hasChangePasswordRole","hasChangeAgeRestrictionRole","hasDownloadRole","hasBookmarkRole","getRoles","get","deleteLicense","delete","TextResonse","hasValidLicense","forceCheck","res","tap","catchError","throwError","hasAnyLicense","updateUserLicense","license","email","post","login","model","response","setCurrentUser","takeUntilDestroyed","getDecodedToken","token","role","Array","isArray","push","JSON","stringify","setTheme","preferences","theme","name","defaultTheme","stopRefreshTokenTimer","stopHubConnection","createHubConnection","startRefreshTokenTimer","logout","removeItem","undefined","register","isEmailConfirmed","migrateUser","confirmMigrationEmail","resendConfirmationEmail","userId","inviteUser","confirmEmail","confirmEmailUpdate","getInviteUrl","withBaseUrl","parse","atob","requestResetPasswordEmail","encodeURIComponent","confirmResetPasswordEmail","resetPassword","password","oldPassword","update","updateEmail","updateAgeRestriction","ageRating","includeUnknowns","getPreferences","pref","updatePreferences","userPreferences","settings","locale","getUserFromLocalStorage","userString","getItem","resetApiKey","apiKey","getOpdsUrl","refreshToken","refreshTokenTimeout","setInterval","clearInterval","_angular_core__WEBPACK_IMPORTED_MODULE_4__","Action","Submenu","MarkAsRead","MarkAsUnread","Scan","Delete","Edit","Info","RefreshMetadata","AnalyzeFiles","IncognitoRead","AddToReadingList","AddToCollection","DownloadBookmark","ViewSeries","Read","AddToWantToReadList","RemoveFromWantToReadList","SendTo","Import","RemoveFromOnDeck","AddRuleGroup","RemoveRuleGroup","MarkAsVisible","MarkAsInvisible","ActionFactoryService","deviceService","libraryActions","seriesActions","volumeActions","chapterActions","collectionTagActions","readingListActions","bookmarkActions","sideNavStreamActions","isAdmin","_resetActions","getLibraryActions","callback","applyCallbackToList","getSeriesActions","getSideNavStreamActions","getVolumeActions","getChapterActions","getCollectionTagActions","getReadingListActions","getBookmarkActions","getMetadataFilterActions","action","requiresAdmin","children","dummyCallback","data","filterSendToAction","actions","chapter","class","dynamicList","devices$","devices","d","shareReplay","applyCallback","forEach","childAction","list","hasAction","i","_r8","ctx_r7","tmp_b_0","listForm","setValue","t_r1","collectionTag_r10","_r15","$implicit","ctx_r14","addToCollection","BulkAddToCollectionComponent_ng_container_0_li_9_i_2_Template","promoted","_r19","ctx_r18","close","BulkAddToCollectionComponent_ng_container_0_div_7_Template","BulkAddToCollectionComponent_ng_container_0_li_9_Template","BulkAddToCollectionComponent_ng_container_0_li_11_Template","BulkAddToCollectionComponent_ng_container_0_li_12_Template","ctx_r20","create","ctx_r0","lists","filterList","collectionTitleTrackby","loading","BulkAddToCollectionComponent","modal","collectionService","cdRef","seriesIds","FormGroup","index","item","listItem","toLowerCase","indexOf","filterQuery","ngOnInit","addControl","FormControl","markForCheck","allTags","ngAfterViewInit","inputElem","nativeElement","select","tagName","addByMultiple","success","collectionName","tag","id","core","Xpm","selectors","viewQuery","rf","ctx","BulkAddToCollectionComponent_ng_container_0_Template","CommonModule","ReactiveFormsModule","i5","FilterPipe","NgbModalModule","TranslocoDirective","styles","encapsulation","changeDetection","ActionService","libraryService","seriesService","readerService","modalService","confirmService","onDestroy","Subject","readingListModalRef","collectionModalRef","ngOnDestroy","complete","scanLibrary","library","_this","_asyncToGenerator","hasOwnProperty","scan","info","refreshMetadata","_this2","confirm","editLibrary","modalRef","open","LibrarySettingsModalComponent","size","componentInstance","closed","closeResult","analyzeFiles","_this3","alert","analyze","markSeriesAsRead","markRead","pagesRead","pages","markSeriesAsUnread","markUnread","scanSeries","_this4","analyzeFilesForSeries","refreshMetdata","_this5","markVolumeAsRead","seriesId","volume","markVolumeRead","c","markVolumeAsUnread","markVolumeUnread","markChapterAsRead","saveProgress","volumeId","results","markChapterAsUnread","markMultipleAsRead","volumes","markMultipleRead","v","markMultipleAsUnread","markMultipleUnread","markMultipleSeriesAsRead","markMultipleSeriesRead","s","markMultipleSeriesAsUnread","markMultipleSeriesUnread","addMultipleToReadingList","AddToListModalComponent","scrollable","volumeIds","chapterIds","type","ADD_FLOW","Multiple","dismissed","addMultipleSeriesToWantToReadList","addSeriesToWantToRead","removeMultipleSeriesFromWantToReadList","removeSeriesToWantToRead","addMultipleSeriesToReadingList","Multiple_Series","addMultipleSeriesToCollectionTag","windowClass","addSeriesToReadingList","Series","addVolumeToReadingList","Volume","addChapterToReadingList","chapterId","Chapter","editReadingList","readingList","EditReadingListModalComponent","deleteMultipleSeries","_this6","count","deleteSeries","_this7","sendToDevice","device","sendTo","sendSeriesToDevice","sendSeriesTo","i6","i7","i8","CollectionTagService","imageService","search","query","coverImage","randomize","getCollectionCoverImage","updateTag","updateSeriesForTag","seriesIdsToRemove","tagId","tagTitle","collectionTagId","collectionTagTitle","tagNameExists","deleteTag","DashboardService","getDashboardStreams","visibleOnly","updateDashboardStreamPosition","streamName","dashboardStreamId","fromPosition","toPosition","updateDashboardStream","stream","createDashboardStream","smartFilterId","DeviceService","devicesSource","createDevice","platform","emailAddress","updateDevice","deleteDevice","getDevices","deviceId","_angular_core__WEBPACK_IMPORTED_MODULE_6__","FilterService","saveFilter","getAllFilters","deleteFilter","filterId","_angular_core__WEBPACK_IMPORTED_MODULE_1__","ImageService","encodedKey","placeholderImage","errorImage","resetCoverImage","errorWebLinkImage","currentTheme$","isDarkTheme","getRecentlyAddedItem","getVolumeCoverImage","getChapterCoverImage","getEntityTypeFromUrl","part","equalIndex","substring","replace","getLibraryCoverImage","getSeriesCoverImage","getReadingListCoverImage","readingListId","getBookmarkedImage","pageNum","getWebLinkImage","getCoverUploadImage","filename","updateErroredImage","target","src","updateErroredWebLinkImage","r","Math","round","random","LibraryService","libraryNames","libraryTypes","getLibraryNames","lib","getLibraryName","l","libraryNameExists","listDirectories","rootPath","getJumpBar","getLibraries","updateLibrariesForMember","selectedLibraries","force","forceUpdate","getLibraryType","MemberService","getMembers","includePending","getMemberNames","adminExists","deleteMember","hasReadingProgress","librayId","getMember","UpdateAvailable","ScanSeries","SeriesAdded","SeriesRemoved","ScanLibraryProgress","OnlineUsers","SeriesAddedToCollection","Error","BackupDatabaseProgress","CleanupProgress","DownloadProgress","NotificationProgress","FileScanProgress","SiteThemeProgress","CoverUpdate","CoverUpdateProgress","LibraryModified","UserProgressUpdate","ConvertBookmarksProgress","WordCountAnalyzerProgress","SendingToDevice","ScrobblingKeyExpired","DashboardUpdate","SideNavUpdate","MessageHubService","hubUrl","messagesSource","onlineUsersSource","BehaviorSubject","onlineUsers$","isEventType","eventType","hubConnection","HubConnectionBuilder","withUrl","accessTokenFactory","withAutomaticReconnect","build","start","catch","err","console","on","usernames","resp","body","stop","sendMessage","methodName","invoke","MetadataService","validLanguages","getAllAgeRatings","method","join","getAllPublicationStatus","getAllTags","getAllGenres","getAllLanguages","getAllValidLanguages","getAllPeople","getAllPeopleByRole","createDefaultFilterDto","statements","combination","limitTo","sortOptions","isAscending","sortField","createDefaultFilterStatement","field","comparison","updateFilter","arr","filterStmt","_angular_core__WEBPACK_IMPORTED_MODULE_7__","NavService","document","rendererFactory","localStorageSideNavKey","navbarVisibleSource","navbarVisible$","sideNavCollapseSource","sideNavCollapsed$","sideNavVisibilitySource","sideNavVisibility$","renderer","createRenderer","showNavBar","sideNavState","showSideNav","getSideNavStreams","updateSideNavStreamPosition","sideNavStreamId","updateSideNavStream","createSideNavStream","createSideNavStreamFromExternalSource","externalSourceId","bulkToggleSideNavStreamVisibility","streamIds","targetVisibility","ids","visibility","setStyle","querySelector","hideNavBar","removeStyle","hideSideNav","toggleSideNav","val","newVal","DOCUMENT","CHAPTER_ID_DOESNT_EXIST","CHAPTER_ID_NOT_FETCHED","ReaderService","utilityService","filterUtilityService","getNavigationArray","format","downloadPdf","bookmark","page","unbookmark","getAllBookmarks","getBookmarks","getBookmarksForVolume","getBookmarksForSeries","clearBookmarks","clearMultipleBookmarks","getBookmarkInfo","getProgress","getPageUrl","getThumbnailUrl","getBookmarkPageUrl","getChapterInfo","includeDimensions","getFileDimensions","bookScrollId","getNextChapter","currentChapterId","getPrevChapter","hasSeriesProgress","getCurrentChapter","getTimeLeft","setOverrideStyles","backgroundColor","bodyNode","originalBodyColor","style","background","setAttribute","resetOverrideStyles","imageUrlToPageNum","imageSrc","params","URLSearchParams","URL","imageUrlToChapterId","getNextChapterUrl","nextChapterId","incognitoMode","readingListMode","lastSlashIndex","lastIndexOf","newRoute","getQueryParams","getQueryParamsObject","toggleFullscreen","el","screenfull","isEnabled","toggle","checkFullscreenMode","fullscreenElement","closeReader","back","removePersonalToc","pageNumber","getPersonalToC","createPersonalToC","getElementFromXPath","path","node","evaluate","XPathResult","FIRST_ORDERED_NODE_TYPE","singleNodeValue","nodeType","Node","ELEMENT_NODE","getXPathTo","element","pureXPath","ix","siblings","parentNode","childNodes","sibling","ReadingListService","getReadingList","getReadingLists","includePromoted","sortByLastModified","itemsPerPage","HttpParams","addPaginationIfExists","observe","createPaginatedResult","getReadingListsForSeries","getListItems","createList","updateByMultiple","updateByMultipleSeries","updateBySeries","updateByVolume","updateByChapter","updatePosition","readingListItemId","deleteItem","removeRead","actionListFilter","nameExists","validateCbl","form","importCbl","getCharacters","ScrollService","scrollContainerSource","scrollContainer$","events","NavigationEnd","scrollPosition","pageYOffset","documentElement","scrollTop","scrollPositionX","pageXOffset","scrollLeft","scrollTo","top","behavior","scroll","scrollToX","left","setScrollContainer","elem","SearchService","term","getSeriesForMangaFile","mangaFileId","getSeriesForChapter","SeriesService","paginatedResults","paginatedSeriesForTagsResults","getAllSeriesV2","getSeriesForLibraryV2","getAllSeriesByIds","getSeries","getVolumes","getChapter","getChapterMetadata","updateRating","userRating","updateSeries","getRecentlyAdded","getRecentlyUpdatedSeries","getWantToRead","isWantToRead","getOnDeck","getMetadata","items","collectionTags","updateMetadata","seriesMetadata","getSeriesForTag","getRelatedForSeries","getRecommendationsForSeries","updateRelationships","adaptations","characters","contains","others","prequels","sequels","sideStories","spinOffs","alternativeSettings","alternativeVersions","doujinshis","editions","getSeriesDetail","getReviews","updateReview","tagline","getRatings","getOverallRating","removeFromOnDeck","getExternalSeriesDetails","aniListId","malId","ThemeService","domSanitizer","defaultBookTheme","currentThemeSource","themesSource","themes$","themeCache","notificationEvent","getThemes","getColorScheme","getComputedStyle","getPropertyValue","trim","getThemeColor","getTileColor","getCssVariable","variable","themes","clearThemes","unsetThemes","setDefault","themeId","setBookTheme","selector","unsetBookThemes","addClass","clearBookTheme","themeName","find","provider","hasThemeInHead","fetchThemeContent","_ref","content","styleElem","createElement","appendChild","createTextNode","head","themeColor","colorScheme","_x","apply","arguments","from","encodedCss","sanitize","SecurityContext","STYLE","classList","remove","cls","startsWith","UploadService","uploadByUrl","updateSeriesCoverImage","_cleanBase64Url","updateCollectionCoverImage","updateReadingListCoverImage","updateChapterCoverImage","updateLibraryCoverImage","resetChapterCoverLock","DynamicListPipe","transform","Yjl","pure","standalone","$event","dynamicItem_r17","_r20","action_r8","performDynamicClick","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_container_1_ng_container_1_ng_container_1_Template","dList_r15","_r24","ctx_r22","performAction","ctx_r25","closeAllSubmenus","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_container_1_ng_template_4_button_0_Template","willRenderAction","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_container_1_ng_container_1_Template","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_container_1_ng_template_4_Template","_r13","_r37","_r31","ctx_r36","preventEvent","openSubmenu","ctx_r39","ctx_r41","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_template_2_ng_container_0_button_3_Template","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_template_2_ng_container_0_ng_container_5_Template","ctx_r30","_r4","_c0","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_template_2_ng_container_0_Template","ctx_r11","shouldRenderSubMenu","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_container_1_Template","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_ng_template_2_Template","_r10","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_ng_container_0_Template","_r45","ctx_r44","CardActionablesComponent_ng_container_0_ng_container_1_ng_container_5_Template","CardActionablesComponent_ng_container_0_ng_container_1_ng_template_6_Template","ctx_r2","btnClass","labelBy","disabled","iconClass","CardActionablesComponent_ng_container_0_ng_container_1_Template","CardActionablesComponent","actionHandler","EventEmitter","canDownload","submenu","stopPropagation","preventDefault","emit","actionTitle","subMenu","k","dynamicItem","_extra","inputs","outputs","features","decls","vars","consts","template","CardActionablesComponent_ng_container_0_Template","NgbDropdown","NgbDropdownToggle","NgbDropdownMenu","NgbDropdownItem","responseType","t_r11","route_r13","_r22","index_r14","navigateTo","DirectoryPickerComponent_ng_container_0_ol_15_li_1_ng_container_1_Template","DirectoryPickerComponent_ng_container_0_ol_15_li_1_ng_template_2_Template","ctx_r12","routeStack","peek","last_r15","_r17","DirectoryPickerComponent_ng_container_0_ol_15_li_1_Template","ctx_r5","folder_r25","_r28","ctx_r27","selectNode","_c1","idx_r26","ctx_r9","helpUrl","ctx_r32","ctx_r33","focus$","ctx_r34","click$","ctx_r35","updateTable","DirectoryPickerComponent_ng_container_0_ng_template_12_Template","DirectoryPickerComponent_ng_container_0_ol_15_Template","DirectoryPickerComponent_ng_container_0_ng_template_16_Template","goBack","DirectoryPickerComponent_ng_container_0_tr_31_Template","DirectoryPickerComponent_ng_container_0_a_33_Template","ctx_r37","ctx_r38","share","_r3","_r6","folders","DirectoryPickerComponent","startingFolder","currentRoot","Stack","searching","searchFailed","text$","debouncedText$","debounceTime","distinctUntilChanged","clicksWithClosedPopup$","instance","isPopupOpen","merge","f","fullPath","folders2","endsWith","folder","loadChildren","pop","stackPeek","shareFolder","folderPath","getStem","lastPath","replaced","DirectoryPickerComponent_ng_container_0_Template","NgbTypeahead","FormsModule","NgbHighlight","NgIf","NgFor","NgClass","SettingsService","http","getServerSettings","getBaseUrl","updateServerSettings","resetServerSettings","resetIPAddressesSettings","resetBaseUrl","resetEmailServerSettings","testEmailServerSettings","emailUrl","getTaskFrequencies","getLoggingLevels","getLibraryTypes","getOpdsEnabled","executeAction","_r11","ctx_r10","BulkOperationsComponent_ng_container_0_ng_container_1_div_1_button_7_Template","BulkOperationsComponent_ng_container_0_ng_container_1_div_1_button_8_Template","_r14","ctx_r13","ctx_r15","bulkSelectionService","deselectAll","ctx_r4","topOffset","selectionCount_r3","hasMarkAsUnread","hasMarkAsRead","BulkOperationsComponent_ng_container_0_ng_container_1_div_1_Template","BulkOperationsComponent_ng_container_0_ng_container_1_Template","selections$","BulkOperationsComponent","modalMode","ChangeDetectorRef","actionFactoryService","BulkSelectionService","actions$","actionCallback","bind","foundActions","act","BulkOperationsComponent_ng_container_0_Template","TranslocoModule","NgbTooltip","actionFactory","debug","prevIndex","selectedCards","dataSourceMax","isShiftDown","actionsSource","selectionsSource","NavigationStart","handleCardSelection","dataSource","maxIndex","wasSelected","prevDataSource","debugLog","selectCards","getActions","isCardSelected","to","totalSelections","hasSelections","values","sum","getSelectedCardsForSource","ret","allowedActions","applyFilterToList","extraData","log","applyFilter","changeMode","openFileSelector_r6","openFileSelector","loadImage","mode","ctx_r16","tmp_1_0","ctx_r8","CoverImageChooserComponent_ng_container_0_ng_template_4_div_0_Template","CoverImageChooserComponent_ng_container_0_ng_template_4_ng_container_1_Template","ctx_r19","resetImage","_r23","CoverImageChooserComponent_ng_container_0_div_7_ng_container_2_Template","showApplyButton","selectedIndex","_r30","ctx_r28","applyImage","appliedIndex","_r34","selectImage","CoverImageChooserComponent_ng_container_0_div_8_ng_container_2_Template","url_r25","dropped","fileOver","fileLeave","CoverImageChooserComponent_ng_container_0_ng_template_4_Template","CoverImageChooserComponent_ng_container_0_ng_template_5_Template","CoverImageChooserComponent_ng_container_0_div_7_Template","CoverImageChooserComponent_ng_container_0_div_8_Template","acceptableExtensions","showReset","imageUrls","CoverImageChooserComponent","fb","uploadService","applyCover","resetCover","imageUrlsChange","resetClicked","imageSelected","selectedBase64Url","group","coverImageUrl","getBase64Image","img","canvas","width","height","getContext","alpha","drawImage","toDataURL","imgUrl","Image","crossOrigin","onload","e","handleUrlImageAdd","onerror","setupEnterHandler","setTimeout","focus","droppedFile","fileEntry","isFile","file","reader","FileReader","handleFileImageAdd","readAsDataURL","result","fromEvent","takeWhile","KEY_CODES","ENTER","ESC_KEY","CoverImageChooserComponent_ng_container_0_Template","NgxFileDropModule","ImageComponent","BytesPipe","bytes","si","dp","thresh","abs","units","u","fixed","toFixed","_angular_core__WEBPACK_IMPORTED_MODULE_0__","DefaultDatePipe","replacementString","Infinity","MangaFormatIconPipe","MangaFormatPipe","SafeHtmlPipe","dom","DomSanitizer","HTML","SentenceCasePipe","charAt","toUpperCase","_r5","item_r11","i_r12","itemTemplate","_c2","_r7","DraggableOrderedListComponent_ng_container_0_ng_container_1_div_4_Template","BufferAmount","parentScroll","_r9","viewPortItems","trackByIdentity","item_r14","accessibilityMode","bulkMode","_c3","i_r15","drop","DraggableOrderedListComponent_ng_container_0_ng_template_2_div_1_Template","_r27","ctx_r26","idx_r19","idx","item_r18","updateIndex","ctx_r29","ctx_r23","order","selectItem","ctx_r24","_c4","DraggableOrderedListComponent_ng_container_0_ng_template_4_div_1_ng_container_1_Template","DraggableOrderedListComponent_ng_container_0_ng_template_4_div_1_ng_container_2_Template","_c5","ctx_r21","DraggableOrderedListComponent_ng_container_0_ng_template_4_div_1_Template","DraggableOrderedListComponent_ng_container_0_ng_template_4_i_2_Template","ctx_r6","isVirtualized_r20","_r42","item_r37","idx_r38","ctx_r40","DraggableOrderedListComponent_ng_container_0_ng_template_6_button_0_Template","showRemoveButton","DraggableOrderedListComponent_ng_container_0_ng_container_1_Template","DraggableOrderedListComponent_ng_container_0_ng_template_2_Template","DraggableOrderedListComponent_ng_container_0_ng_template_4_Template","DraggableOrderedListComponent_ng_container_0_ng_template_6_Template","virtualizeAfter","DraggableOrderedListComponent","min","orderUpdated","itemRemove","previousIndex","currentIndex","moveItemInArray","fromAccessibilityMode","newIndex","position","updatedVal","contentQueries","dirIndex","DraggableOrderedListComponent_ng_container_0_Template","VirtualScrollerModule","NgTemplateOutlet","CdkDropList","CdkDrag","CdkDragHandle","NgxVirtualScrollModule","readingList_r10","addToList","AddToListModalComponent_ng_container_0_li_9_i_2_Template","AddToListModalComponent_ng_container_0_div_7_Template","AddToListModalComponent_ng_container_0_li_9_Template","AddToListModalComponent_ng_container_0_li_11_Template","AddToListModalComponent_ng_container_0_li_12_Template","readingListService","TranslocoService","AddToListModalComponent_ng_container_0_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_6_div_1_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_6_div_2_Template","tmp_0_0","reviewGroup","errors","required","duplicateName","EditReadingListModalComponent_ng_container_0_ng_template_11_ng_container_7_div_1_ng_template_6_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_ng_container_7_div_1_Template","user_r15","EditReadingListModalComponent_ng_container_0_ng_template_11_div_13_div_4_div_1_Template","formControl_r21","max","EditReadingListModalComponent_ng_container_0_ng_template_11_div_13_div_4_Template","invalid","touched","dirty","EditReadingListModalComponent_ng_container_0_ng_template_11_div_14_div_4_div_1_Template","formControl_r27","EditReadingListModalComponent_ng_container_0_ng_template_11_div_14_div_4_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_18_div_4_div_1_Template","formControl_r33","EditReadingListModalComponent_ng_container_0_ng_template_11_div_18_div_4_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_19_div_4_div_1_Template","formControl_r39","EditReadingListModalComponent_ng_container_0_ng_template_11_div_19_div_4_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_6_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_ng_container_7_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_13_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_14_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_18_Template","EditReadingListModalComponent_ng_container_0_ng_template_11_div_19_Template","ctx_r3","_r47","ctx_r46","ctx_r48","updateSelectedIndex","ctx_r49","updateSelectedImage","ctx_r50","handleReset","coverImageLocked","_r52","ctx_r51","ctx_r53","active","EditReadingListModalComponent_ng_container_0_ng_template_11_Template","EditReadingListModalComponent_ng_container_0_ng_template_15_Template","ctx_r54","ctx_r55","save","getActiveBreakpoint","Breakpoint","Mobile","TabID","General","CoverImage","_r2","ngModal","coverImageIndex","selectedCover","nonNullable","validators","Validators","summary","startingMonth","startingYear","endingMonth","endingYear","valueChanges","exists","isExistingName","setErrors","rli","dismiss","apis","forkJoin","detectChanges","EditReadingListModalComponent_ng_container_0_Template","NgbNav","NgbNavItem","NgbNavItemRole","NgbNavLink","NgbNavContent","NgbNavOutlet","AsyncPipe","CblImportResult","Fail","Partial","Success","step_r1","currentStep","icon","StepTrackerComponent","steps","StepTrackerComponent_ng_container_2_Template","CblImportReason","ChapterMissing","VolumeMissing","SeriesMissing","NameConflict","AllSeriesMissing","EmptyFile","SeriesCollision","AllChapterMissing","InvalidFile","failIcon","CblConflictReasonPipe","reason","number","readingListName","seriesLink","CblImportResultPipe","uploadForm","summary_r15","fileToProcess_r13","fileName","ImportCblModalComponent_ng_container_0_ng_container_10_ngb_panel_6_ng_container_1_ng_template_2_ng_container_0_li_4_Template","ImportCblModalComponent_ng_container_0_ng_container_10_ngb_panel_6_ng_container_1_ng_template_2_ng_container_0_Template","ImportCblModalComponent_ng_container_0_ng_container_10_ngb_panel_6_ng_container_1_ng_template_2_ng_template_1_Template","_r21","ImportCblModalComponent_ng_container_0_ng_container_10_ngb_panel_6_ng_container_1_ng_template_1_Template","ImportCblModalComponent_ng_container_0_ng_container_10_ngb_panel_6_ng_container_1_ng_template_2_Template","ImportCblModalComponent_ng_container_0_ng_container_10_ngb_panel_6_ng_container_1_Template","validateSummary","ImportCblModalComponent_ng_container_0_ng_container_10_ngb_panel_6_Template","filesToProcess","summary_r34","fileToProcess_r32","ImportCblModalComponent_ng_container_0_ng_container_11_ngb_panel_6_ng_container_1_ng_template_1_Template","ImportCblModalComponent_ng_container_0_ng_container_11_ngb_panel_6_ng_container_1_ng_template_2_Template","ImportCblModalComponent_ng_container_0_ng_container_11_ngb_panel_6_ng_container_1_Template","dryRunSummary","ImportCblModalComponent_ng_container_0_ng_container_11_ngb_panel_6_Template","summary_r45","fileToProcess_r43","ImportCblModalComponent_ng_container_0_ng_container_12_ngb_panel_4_ng_container_1_ng_template_1_Template","ImportCblModalComponent_ng_container_0_ng_container_12_ngb_panel_4_ng_container_1_ng_template_2_Template","ImportCblModalComponent_ng_container_0_ng_container_12_ngb_panel_4_ng_container_1_Template","finalizeSummary","ImportCblModalComponent_ng_container_0_ng_container_12_ngb_panel_4_Template","result_r53","ImportCblModalComponent_ng_container_0_ng_template_13_li_1_Template","summary_r51","success_r58","ImportCblModalComponent_ng_container_0_ng_template_15_ng_container_0_span_2_Template","ImportCblModalComponent_ng_container_0_ng_template_15_ng_container_0_span_3_Template","ImportCblModalComponent_ng_container_0_ng_template_15_ng_container_0_span_4_Template","summary_r55","ctx_r56","cblName","ImportCblModalComponent_ng_container_0_ng_template_15_ng_container_0_Template","ImportCblModalComponent_ng_container_0_ng_template_15_span_4_Template","filename_r54","_r68","ctx_r67","ImportCblModalComponent_ng_container_0_div_9_Template","ImportCblModalComponent_ng_container_0_ng_container_10_Template","ImportCblModalComponent_ng_container_0_ng_container_11_Template","ImportCblModalComponent_ng_container_0_ng_container_12_Template","ImportCblModalComponent_ng_container_0_ng_template_13_Template","ImportCblModalComponent_ng_container_0_ng_template_15_Template","ctx_r69","ctx_r70","prevStep","ctx_r71","nextStep","currentStepIndex","Step","Validate","DryRun","Finalize","canMoveToPrevStep","canMoveToNextStep","NextButtonLabel","ImportCblModalComponent","fileUploadControl","FileUploadValidators","accept","isLoading","failedFiles","isFileSelected","formData","FormData","append","cblImport","dryRun","import","filenamesAllowedToProcess","p","findIndex","ImportCblModalComponent_ng_container_0_Template","FileUploadModule","NgbAccordionModule","SAVER","InjectionToken","getSaver","saveAs","download","saver","source","previous","isHttpProgressEvent","HttpEventType","UploadProgress","progress","total","loaded","isHttpResponse","Response","getFilename","headers","defaultName","ext","DEBOUNCE_TIME","bytesPipe","DownloadService","SIZE_WARNING","downloadsSource","activeDownloads$","downloadSubtitle","downloadEntityType","downloadEntity","entityType","entity","sizeCheckCall","downloadCall","downloadSeriesSize","downloadSeries","downloadVolumeSize","downloadVolume","downloadChapterSize","downloadChapter","downloadBookmarks","downloadLogs","promptForDownloadSize","confirmSize","wantsToDownload","finalize","downloadType","subtitle","reportProgress","throttleTime","asyncScheduler","leading","trailing","blob","decodeURIComponent","updateDownloadState","finalizeDownloadState","entitySubtitle","getValue","subTitle","bookmarks","sortOptionsKey","statementsKey","limitToKey","combinationKey","FilterUtilitiesService","metadataService","dto","urlFromFilterV2","applyFilterWithParams","extraParams","updateUrlFromFilterV2","pagination","currentPage","href","history","replaceState","replacePaginationOnUrl","snapshot","queryParamMap","totalItems","totalPages","currentUrl","encodeSeriesFilter","encodedStatements","encodeFilterStatements","encodedSortOptions","encodeSortOptions","encodedLimitTo","encodeName","statement","decodeSeriesFilter","encodedFilter","stmtsStartIndex","endIndex","stmtsEncoded","decodeFilterStatements","optionsStartIndex","sortOptionsEncoded","decodeSortOptions","combo","filterPresetsFromUrlV2","queryParams","fullUrl","parts","sortFieldPart","isAscendingPart","statementString","comparisonStartToken","fieldStartToken","valueStartToken","o","createSeriesV2Filter","createSeriesV2DefaultStatement","_angular_core__WEBPACK_IMPORTED_MODULE_5__","RIGHT_ARROW","LEFT_ARROW","DOWN_ARROW","UP_ARROW","SPACE","G","B","F","H","BACKSPACE","DELETE","SHIFT","Tablet","Desktop","UtilityService","mangaFormatKeys","sortChapters","parseFloat","mangaFormatToText","formatChapterName","libraryType","includeHash","includeSpace","input","reg","filterMatches","isVolume","isChapter","isSeries","asVolume","asChapter","asSeries","innerWidth","isInViewport","additionalTopOffset","rect","getBoundingClientRect","bottom","innerHeight","clientHeight","right","clientWidth","deepEqual","object1","object2","keys1","keys2","val1","val2","areObjects","isObject","object","paginatedVariable","pageHeader","getWindowDimensions","ctx_r1","center","fontSize","CircularLoaderComponent_ng_container_0_div_1_Template","showIcon","currentValue","outerStrokeColor","innerStrokeColor","animation","CircularLoaderComponent","CircularLoaderComponent_ng_container_0_Template","NgCircleProgressModule","ConfirmConfig","_type","header","buttons","disableEscape","btn_r7","clickButton","text","ConfirmDialogComponent_ng_container_0_button_4_Template","ConfirmDialogComponent_ng_container_0_div_8_Template","config","ConfirmDialogComponent","_button_sort","x","y","xIsSecondary","yIsSecondary","button","ConfirmDialogComponent_ng_container_0_Template","ConfirmService","defaultConfirm","defaultAlert","Promise","resolve","reject","isEmpty","hubService","changeDetectionRef","maxWidth","maxHeight","borderRadius","objectFit","processEvents","classes","updateEvent","imageUrl","ngOnChanges","imgElem","updateData","updateUrl","UpdateNotificationModalComponent_ng_container_0_a_15_Template","updateTitle","updateBody","isDocker","UpdateNotificationModalComponent","UpdateNotificationModalComponent_ng_container_0_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_14_div_4_div_1_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_14_div_4_div_2_Template","libraryForm","opt_r25","lastScanned","LibrarySettingsModalComponent_ng_container_0_ng_template_14_div_4_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_14_ng_template_9_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_14_option_14_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_14_div_15_Template","_r16","isAddLibrary","folder_r30","_r33","removeFolder","LibrarySettingsModalComponent_ng_container_0_ng_template_18_li_3_Template","_r35","openDirectoryPicker","selectedFolders","LibrarySettingsModalComponent_ng_container_0_ng_template_22_p_0_Template","_r40","applyCoverImage","ctx_r42","_r46","ctx_r45","isNextDisabled","_r49","isDisabled","LibrarySettingsModalComponent_ng_container_0_ng_container_3_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_4_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_14_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_18_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_22_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_26_Template","forceScan","LibrarySettingsModalComponent_ng_container_0_ng_container_35_Template","LibrarySettingsModalComponent_ng_container_0_ng_template_36_Template","Folder","setupStep","Cover","Advanced","StepID","settingService","folderWatching","includeInDashboard","includeInRecommended","includeInSearch","manageCollections","manageReadingLists","allowScrobbling","collapseSeriesRelationships","madeChanges","types","disable","setValues","valid","returnVal","substr","coverUrl","_angular_core__WEBPACK_IMPORTED_MODULE_8__","LibrarySettingsModalComponent_ng_container_0_Template","i9","i10","i11","BASE_URL","getElementsByTagName","getAttribute","production","buyLink","manageLink","navService","highlighted","link","_r12","openLink","SideNavItemComponent_ng_template_1_ng_template_1_ng_container_0_Template","SideNavItemComponent_ng_template_1_ng_template_1_ng_template_1_Template","SideNavItemComponent_ng_template_1_ng_container_0_Template","SideNavItemComponent_ng_template_1_ng_template_1_Template","external","SideNavItemComponent_ng_template_3_ng_container_3_Template","SideNavItemComponent_ng_template_3_ng_template_4_Template","SideNavItemComponent","comparisonMethod","tokens","token1","token2","updateHighlight","ngContentSelectors","SideNavItemComponent_ng_container_0_Template","SideNavItemComponent_ng_template_1_Template","SideNavItemComponent_ng_template_3_Template","_r1","RouterLink","NgOptimizedImage","StreamNamePipe","smartFilterEncoded","DashboardStreamListItemComponent_ng_container_0_span_4_Template","DashboardStreamListItemComponent_ng_container_0_ng_template_5_Template","hide","DashboardStreamListItemComponent_ng_container_0_div_15_Template","isProvided","visible","DashboardStreamListItemComponent","DashboardStreamListItemComponent_ng_container_0_Template","position_r7","updateVisibility","resetFilter","filter_r14","addFilterToStream","CustomizeDashboardStreamsComponent_ng_container_0_ng_template_2_Template","CustomizeDashboardStreamsComponent_ng_container_0_div_7_Template","CustomizeDashboardStreamsComponent_ng_container_0_li_9_Template","CustomizeDashboardStreamsComponent_ng_container_0_li_11_Template","smartFilters","CustomizeDashboardStreamsComponent","dashboardService","filterService","filterVal","smartFilterStreams","Set","has","CustomizeDashboardStreamsComponent_ng_container_0_Template","SideNavStreamType","Collections","ReadingLists","Bookmarks","Library","SmartFilter","ExternalSource","AllSeries","SidenavStreamListItemComponent_ng_container_0_ng_template_15_ng_container_1_Template","SidenavStreamListItemComponent_ng_container_0_ng_template_15_ng_container_2_Template","SidenavStreamListItemComponent_ng_container_0_ng_template_15_ng_container_3_Template","streamType","ctx_r17","externalSource","host","SidenavStreamListItemComponent_ng_container_0_div_17_ng_container_2_Template","SidenavStreamListItemComponent_ng_container_0_div_17_ng_container_3_Template","SidenavStreamListItemComponent_ng_container_0_div_17_ng_container_4_Template","SidenavStreamListItemComponent_ng_container_0_span_4_Template","SidenavStreamListItemComponent_ng_container_0_ng_template_5_Template","SidenavStreamListItemComponent_ng_container_0_ng_container_14_Template","SidenavStreamListItemComponent_ng_container_0_ng_template_15_Template","SidenavStreamListItemComponent_ng_container_0_div_17_Template","SidenavStreamListItemComponent","SidenavStreamListItemComponent_ng_container_0_Template","ExternalSourceService","getExternalSources","createSource","updateSource","deleteSource","sourceExists","resetSideNavFilter","CustomizeSidenavStreamsComponent_ng_container_0_div_3_span_7_Template","tmp_2_0","position_r16","resetSmartFilterFilter","CustomizeSidenavStreamsComponent_ng_container_0_div_22_span_7_Template","filter_r25","resetExternalSourceFilter","CustomizeSidenavStreamsComponent_ng_container_0_div_29_span_7_Template","source_r35","addExternalSourceToStream","CustomizeSidenavStreamsComponent_ng_container_0_div_3_Template","_r41","CustomizeSidenavStreamsComponent_ng_container_0_ng_template_18_Template","CustomizeSidenavStreamsComponent_ng_container_0_div_22_Template","CustomizeSidenavStreamsComponent_ng_container_0_li_24_Template","CustomizeSidenavStreamsComponent_ng_container_0_li_26_Template","CustomizeSidenavStreamsComponent_ng_container_0_div_29_Template","CustomizeSidenavStreamsComponent_ng_container_0_li_31_Template","CustomizeSidenavStreamsComponent_ng_container_0_li_33_Template","pageOperationsForm","bulkActionCallback","filterSideNavStreams","filterSmartFilters","externalSources","filterExternalSources","CustomizeSidenavStreamsComponent","handleKeypress","handleKeyUp","filterSideNavStream","filterSmartFilter","filterExternalSource","selectedItems","streams","visibleState","sideNavService","externalSourceService","_","enable","existingSmartFilterStreams","existingExternalSourceStreams","hostBindings","CustomizeSidenavStreamsComponent_ng_container_0_Template","EditExternalSourceItemComponent_ng_container_0_ng_container_10_i_1_Template","isViewMode","EditExternalSourceItemComponent_ng_container_0_div_24_div_1_Template","EditExternalSourceItemComponent_ng_container_0_div_24_div_2_Template","formGroup","notUnique","EditExternalSourceItemComponent_ng_container_0_ng_container_29_div_2_Template","EditExternalSourceItemComponent_ng_container_0_ng_container_29_div_3_Template","EditExternalSourceItemComponent_ng_container_0_ng_container_29_div_4_Template","errors_r16","pattern","EditExternalSourceItemComponent_ng_container_0_div_34_div_1_Template","_r26","toggleViewMode","EditExternalSourceItemComponent_ng_container_0_ng_container_10_Template","EditExternalSourceItemComponent_ng_container_0_ng_template_11_Template","EditExternalSourceItemComponent_ng_container_0_div_24_Template","EditExternalSourceItemComponent_ng_container_0_ng_container_29_Template","EditExternalSourceItemComponent_ng_container_0_div_34_Template","saveForm","tmp_7_0","hasErrors","tmp_10_0","tmp_11_0","tmp_13_0","EditExternalSourceItemComponent","controlName","sourceUpdate","sourceDelete","ToastrService","resetForm","updatedSource","EditExternalSourceItemComponent_ng_container_0_Template","NgbCollapse","idx_r5","externalSource_r4","addNewExternalSource","ManageExternalSourcesComponent_ng_container_0_ng_container_16_Template","ManageExternalSourcesComponent_ng_container_0_li_19_Template","ManageExternalSourcesComponent","unshift","splice","ManageExternalSourcesComponent_ng_container_0_Template","f_r8","ManageSmartFiltersComponent_ng_container_0_div_2_Template","ManageSmartFiltersComponent_ng_container_0_li_4_Template","ManageSmartFiltersComponent_ng_container_0_li_6_Template","filters","ManageSmartFiltersComponent","Router","loadData","loadFilter","ManageSmartFiltersComponent_ng_container_0_Template","activeTab","CustomizeDashboardModalComponent_ng_container_0_ng_template_12_Template","CustomizeDashboardModalComponent_ng_container_0_ng_template_16_Template","CustomizeDashboardModalComponent_ng_container_0_ng_template_20_Template","CustomizeDashboardModalComponent_ng_container_0_ng_template_24_Template","Dashboard","SideNav","SmartFilters","ExternalSources","CustomizeDashboardModalComponent","NgbActiveModal","CustomizeDashboardModalComponent_ng_container_0_Template","showLess","SideNavComponent_ng_container_0_div_1_ng_container_7_ng_container_1_div_2_Template","streams_r6","navStream_r19","getLibraryTypeIcon","getLibraryImage","SideNavComponent_ng_container_0_div_1_ng_container_7_ng_container_2_ng_container_2_Template","SideNavComponent_ng_container_0_div_1_ng_container_7_ng_container_2_ng_container_3_Template","SideNavComponent_ng_container_0_div_1_ng_container_7_ng_container_2_ng_container_4_Template","SideNavComponent_ng_container_0_div_1_ng_container_7_ng_container_2_ng_container_5_Template","SideNavComponent_ng_container_0_div_1_ng_container_7_ng_container_2_ng_container_6_Template","SideNavComponent_ng_container_0_div_1_ng_container_7_ng_container_2_ng_container_7_Template","SideNavComponent_ng_container_0_div_1_ng_container_7_ng_container_2_ng_container_8_Template","SideNavComponent_ng_container_0_div_1_ng_container_7_ng_container_2_ng_container_9_Template","showMore","SideNavComponent_ng_container_0_div_1_ng_container_7_ng_container_1_Template","SideNavComponent_ng_container_0_div_1_ng_container_7_ng_container_2_Template","SideNavComponent_ng_container_0_div_1_ng_container_7_ng_container_4_Template","showAll","filterLibrary","totalSize","handleHomeActions","SideNavComponent_ng_container_0_div_1_ng_container_7_Template","homeActions","navStreams$","SideNavComponent_ng_container_0_div_1_Template","toggleNavBar","SideNavComponent_ng_container_0_app_side_nav_item_9_Template","SideNavComponent","actionService","ngbModal","cachedData","handleAction","showAllSubject","showAll$","loadDataSubject","loadData$","loadDataOnInit$","startWith","slice","collapsed","fullscreen","SideNavComponent_ng_container_0_Template","PersonRolePipe","activeEvents","activeDownloads_r6","errors_r8","infos_r10","EventsWidgetComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_1_ng_container_1_Template","infos$","EventsWidgetComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_1_Template","errors$","clearAllErrorOrInfos","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_1_ng_container_1_li_1_Template","errors_r23","infos_r25","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_1_ng_container_1_Template","prettyPrintProgress","message_r33","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_4_ng_container_1_li_1_div_3_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_4_ng_container_1_li_1_div_5_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_4_ng_container_1_ng_template_2_div_3_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_4_ng_container_1_li_1_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_4_ng_container_1_ng_template_2_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_4_ng_container_1_Template","progressUpdates_r31","_r51","singleUpdate_r46","handleUpdateAvailableClick","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_6_ng_container_1_li_2_div_3_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_6_ng_container_1_li_1_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_6_ng_container_1_li_2_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_6_ng_container_1_Template","singleUpdates_r44","download_r58","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_8_ng_container_1_div_5_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_8_ng_container_1_Template","activeDownloads_r56","error_r64","_r66","ctx_r65","seeMore","removeErrorOrInfo","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_10_ng_container_1_Template","errors_r62","info_r71","_r73","ctx_r72","ctx_r74","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_12_ng_container_1_Template","infos_r69","onlineUsers_r76","ctx_r78","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_14_li_1_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_14_li_2_Template","debugMode","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_16_li_1_Template","activeDownloads_r82","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_1_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_3_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_4_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_6_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_8_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_10_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_12_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_14_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_ng_container_16_Template","progressEvents$","singleUpdates$","downloadService","EventsWidgetComponent_ng_container_0_ng_container_1_ng_container_1_Template","EventsWidgetComponent_ng_container_0_ng_container_1_ng_template_3_Template","EventsWidgetComponent_ng_container_0_ng_container_1_Template","isAdmin$","EventsWidgetComponent","progressEventsSource","singleUpdateSource","errorSource","infoSource","updateNotificationModalRef","processNotificationProgressEvent","mergeOrUpdate","m","infoCount","errorCount","messageEvent","trunc","EventsWidgetComponent_ng_container_0_Template","NgbPopover","NgStyle","SeriesFormatComponent","SeriesFormatComponent_ng_container_0_Template","resetField","option_r21","handleResultlick","seriesTemplate","_c12","index_r22","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_2_li_5_Template","groupedData","option_r26","_r29","collectionTemplate","index_r27","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_3_li_5_Template","option_r32","ctx_r31","readingListTemplate","index_r33","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_4_li_5_Template","option_r38","libraryTemplate","index_r39","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_5_li_5_Template","option_r44","ctx_r43","genreTemplate","index_r45","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_6_li_5_Template","option_r50","_r53","ctx_r52","tagTemplate","index_r51","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_7_li_5_Template","option_r56","_r59","ctx_r58","personTemplate","index_r57","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_8_li_5_Template","option_r62","_r65","ctx_r64","ctx_r61","chapterTemplate","index_r63","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_9_li_5_Template","option_r68","_r71","fileTemplate","index_r69","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_10_li_5_Template","noResultsTemplate","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_2_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_3_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_4_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_5_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_6_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_7_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_8_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_9_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_10_Template","GroupedTypeaheadComponent_ng_container_0_div_8_ng_container_11_Template","hasData","searchTerm","_r74","ctx_r73","onInputFocus","ctx_r75","ctx_r76","GroupedTypeaheadComponent_ng_container_0_div_6_Template","GroupedTypeaheadComponent_ng_container_0_button_7_Template","GroupedTypeaheadComponent_ng_container_0_div_8_Template","typeaheadForm","_c13","hasFocus","placeholder","tmp_6_0","GroupedTypeaheadComponent","minQueryLength","initialValue","inputChanged","clearField","focusChanged","prevSearchTerm","handleDocumentClick","handleKeyPress","change","openDropdown","clear","GroupedTypeaheadComponent_ng_container_0_Template","item_r30","_r32","clickLibraryResult","item_r33","localizedName","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_8_ng_container_5_span_1_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_8_ng_container_5_ng_template_2_Template","st_r35","_r43","clickSeriesSearchResult","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_8_ng_container_5_Template","libraryName","item_r44","_r48","ctx_r47","clickCollectionSearchResult","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_10_span_6_Template","item_r49","clickReadingListSearchResult","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_12_span_4_Template","item_r54","_r56","goToOther","item_r57","goToPerson","item_r60","_r62","item_r63","_r67","ctx_r66","clickChapterSearchResult","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_20_ng_container_2_Template","titleName","item_r68","_r70","clickFileSearchResult","filePath","onChangeSearch","clearSearch","focusUpdate","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_6_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_8_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_10_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_12_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_14_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_16_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_18_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_20_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_22_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_ng_template_24_Template","searchResults","_r81","ctx_r80","scrollToTop","NavHeaderComponent_ng_container_0_nav_1_ng_container_13_ng_container_2_div_5_a_7_Template","NavHeaderComponent_ng_container_0_nav_1_ng_container_13_ng_container_2_div_5_a_12_Template","_r93","ctx_r92","user_r87","ctx_r85","NavHeaderComponent_ng_container_0_nav_1_ng_container_13_ng_container_2_a_4_Template","NavHeaderComponent_ng_container_0_nav_1_ng_container_13_ng_container_2_div_5_Template","user_r83","ctx_r79","NavHeaderComponent_ng_container_0_nav_1_ng_container_13_div_1_Template","NavHeaderComponent_ng_container_0_nav_1_ng_container_13_ng_container_2_Template","backToTopNeeded","_r96","ctx_r95","moveFocus","NavHeaderComponent_ng_container_0_nav_1_a_4_Template","NavHeaderComponent_ng_container_0_nav_1_div_11_Template","NavHeaderComponent_ng_container_0_nav_1_ng_container_13_Template","searchFocused","NavHeaderComponent_ng_container_0_nav_1_Template","NavHeaderComponent","scrollService","searchService","scrollElem","scrollContainer","checkBackToTopNeeded","offset","getElementById","goTo","searchViewRef","navigate","NavHeaderComponent_ng_container_0_Template","RouterLinkActive","AppComponent","ratingConfig","resettable","hasOpenModals","dismissAll","transitionState$","noTransitions","setDocHeight","vh","setProperty","AppComponent_app_side_nav_7_Template","AppComponent_div_11_Template","AppComponent_ng_template_13_Template","RouterOutlet","routes","all","__webpack_require__","then","AdminModule","CollectionsModule","UserSettingsModule","ReadingListModule","RegistrationModule","AnnouncementsModule","BookmarkModule","AllSeriesModule","DashboardModule","WantToReadModule","runGuardsAndResolvers","pathMatch","LibraryDetailModule","SeriesDetailModule","MangaReaderModule","BookReaderModule","PdfReaderModule","redirectTo","AppRoutingModule","oAB","cJS","RouterModule","forRoot","scrollPositionRestoration","preloadingStrategy","PreloadAllModules","JwtInterceptor","intercept","request","clone","setHeaders","Authorization","handle","ErrorInterceptor","status","handleValidationError","handleAuthError","handleNotFound","handleServerException","genericError","previousToastMessage","modalStateErrors","details","issue","description","flat","statusText","Blob","num","HttpLoader","getTranslation","langPath","disableAnimations","preLoad","provide","APP_INITIALIZER","multi","useFactory","preloadUser","userService","transloco","setActiveLang","load","localStorageLocale","deps","translocoOptions","reRenderOnLangChange","availableLangs","transformLanguageCodes","transformedArray","code","transformedCode","prodMode","defaultLang","fallbackLang","missingHandler","useFallbackTranslation","allowEmpty","bootstrapApplication","providers","importProvidersFrom","BrowserModule","BrowserAnimationsModule","withConfig","ToastrModule","positionClass","preventDuplicates","timeOut","countDuplicates","autoDismiss","provideTransloco","provideTranslocoLocale","defaultLocale","provideTranslocoPersistTranslations","loader","storage","useValue","ttl","provideTranslocoPersistLang","HTTP_INTERCEPTORS","useClass","Title","provideHttpClient","withInterceptorsFromDi"],"sourceRoot":"webpack:///","sources":["./src/app/_guards/admin.guard.ts","./src/app/_guards/auth.guard.ts","./src/app/_guards/library-access.guard.ts","./src/app/_models/library.ts","./src/app/_models/manga-format.ts","./src/app/_models/metadata/person.ts","./src/app/_models/metadata/series-filter.ts","./src/app/_models/metadata/v2/filter-combination.ts","./src/app/_models/metadata/v2/filter-comparison.ts","./src/app/_models/metadata/v2/filter-field.ts","./src/app/_models/pagination.ts","./src/app/_models/preferences/site-theme.ts","./src/app/_models/search/search-result-group.ts","./src/app/_services/account.service.ts","./src/app/_services/action-factory.service.ts","./src/app/cards/_modals/bulk-add-to-collection/bulk-add-to-collection.component.html","./src/app/cards/_modals/bulk-add-to-collection/bulk-add-to-collection.component.ts","./src/app/_services/action.service.ts","./src/app/_services/collection-tag.service.ts","./src/app/_services/dashboard.service.ts","./src/app/_services/device.service.ts","./src/app/_services/filter.service.ts","./src/app/_services/image.service.ts","./src/app/_services/library.service.ts","./src/app/_services/member.service.ts","./src/app/_services/message-hub.service.ts","./src/app/_services/metadata.service.ts","./src/app/_services/nav.service.ts","./src/app/_services/reader.service.ts","./src/app/_services/reading-list.service.ts","./src/app/_services/scroll.service.ts","./src/app/_services/search.service.ts","./src/app/_services/series.service.ts","./src/app/_services/theme.service.ts","./src/app/_services/upload.service.ts","./src/app/_single-module/card-actionables/_pipes/dynamic-list.pipe.ts","./src/app/_single-module/card-actionables/card-actionables.component.html","./src/app/_single-module/card-actionables/card-actionables.component.ts","./src/app/_types/text-response.ts","./src/app/admin/_modals/directory-picker/directory-picker.component.html","./src/app/admin/_modals/directory-picker/directory-picker.component.ts","./src/app/admin/settings.service.ts","./src/app/cards/bulk-operations/bulk-operations.component.html","./src/app/cards/bulk-operations/bulk-operations.component.ts","./src/app/cards/bulk-selection.service.ts","./src/app/cards/cover-image-chooser/cover-image-chooser.component.html","./src/app/cards/cover-image-chooser/cover-image-chooser.component.ts","./src/app/pipe/bytes.pipe.ts","./src/app/pipe/default-date.pipe.ts","./src/app/pipe/filter.pipe.ts","./src/app/pipe/manga-format-icon.pipe.ts","./src/app/pipe/manga-format.pipe.ts","./src/app/pipe/safe-html.pipe.ts","./src/app/pipe/sentence-case.pipe.ts","./src/app/reading-list/_components/draggable-ordered-list/draggable-ordered-list.component.html","./src/app/reading-list/_components/draggable-ordered-list/draggable-ordered-list.component.ts","./src/app/reading-list/_modals/add-to-list-modal/add-to-list-modal.component.html","./src/app/reading-list/_modals/add-to-list-modal/add-to-list-modal.component.ts","./src/app/reading-list/_modals/edit-reading-list-modal/edit-reading-list-modal.component.html","./src/app/reading-list/_modals/edit-reading-list-modal/edit-reading-list-modal.component.ts","./src/app/_models/reading-list/cbl/cbl-import-result.enum.ts","./src/app/reading-list/_components/step-tracker/step-tracker.component.html","./src/app/reading-list/_components/step-tracker/step-tracker.component.ts","./src/app/_models/reading-list/cbl/cbl-import-reason.enum.ts","./src/app/reading-list/_pipes/cbl-conflict-reason.pipe.ts","./src/app/reading-list/_pipes/cbl-import-result.pipe.ts","./src/app/reading-list/_modals/import-cbl-modal/import-cbl-modal.component.html","./src/app/reading-list/_modals/import-cbl-modal/import-cbl-modal.component.ts","./src/app/shared/_providers/saver.provider.ts","./src/app/shared/_models/download.ts","./src/app/shared/_services/download.service.ts","./src/app/shared/_services/filter-utilities.service.ts","./src/app/shared/_services/utility.service.ts","./src/app/shared/circular-loader/circular-loader.component.html","./src/app/shared/circular-loader/circular-loader.component.ts","./src/app/shared/confirm-dialog/_models/confirm-config.ts","./src/app/shared/confirm-dialog/confirm-dialog.component.html","./src/app/shared/confirm-dialog/confirm-dialog.component.ts","./src/app/shared/confirm.service.ts","./src/app/shared/data-structures/stack.ts","./src/app/shared/image/image.component.ts","./src/app/shared/image/image.component.html","./src/app/shared/update-notification/update-notification-modal.component.html","./src/app/shared/update-notification/update-notification-modal.component.ts","./src/app/sidenav/_modals/library-settings-modal/library-settings-modal.component.html","./src/app/sidenav/_modals/library-settings-modal/library-settings-modal.component.ts","./src/environments/environment.prod.ts","./src/app/base-url.provider.ts","./src/app/sidenav/_components/side-nav-item/side-nav-item.component.html","./src/app/sidenav/_components/side-nav-item/side-nav-item.component.ts","./src/app/pipe/stream-name.pipe.ts","./src/app/sidenav/_components/dashboard-stream-list-item/dashboard-stream-list-item.component.html","./src/app/sidenav/_components/dashboard-stream-list-item/dashboard-stream-list-item.component.ts","./src/app/sidenav/_components/customize-dashboard-streams/customize-dashboard-streams.component.html","./src/app/sidenav/_components/customize-dashboard-streams/customize-dashboard-streams.component.ts","./src/app/_models/sidenav/sidenav-stream-type.enum.ts","./src/app/sidenav/_components/sidenav-stream-list-item/sidenav-stream-list-item.component.html","./src/app/sidenav/_components/sidenav-stream-list-item/sidenav-stream-list-item.component.ts","./src/app/external-source.service.ts","./src/app/sidenav/_components/customize-sidenav-streams/customize-sidenav-streams.component.html","./src/app/sidenav/_components/customize-sidenav-streams/customize-sidenav-streams.component.ts","./src/app/sidenav/_components/edit-external-source-item/edit-external-source-item.component.html","./src/app/sidenav/_components/edit-external-source-item/edit-external-source-item.component.ts","./src/app/sidenav/_components/manage-external-sources/manage-external-sources.component.html","./src/app/sidenav/_components/manage-external-sources/manage-external-sources.component.ts","./src/app/sidenav/_components/manage-smart-filters/manage-smart-filters.component.html","./src/app/sidenav/_components/manage-smart-filters/manage-smart-filters.component.ts","./src/app/sidenav/_components/customize-dashboard-modal/customize-dashboard-modal.component.html","./src/app/sidenav/_components/customize-dashboard-modal/customize-dashboard-modal.component.ts","./src/app/sidenav/_components/side-nav/side-nav.component.html","./src/app/sidenav/_components/side-nav/side-nav.component.ts","./src/app/pipe/person-role.pipe.ts","./src/app/nav/_components/events-widget/events-widget.component.html","./src/app/nav/_components/events-widget/events-widget.component.ts","./src/app/shared/series-format/series-format.component.html","./src/app/shared/series-format/series-format.component.ts","./src/app/nav/_components/grouped-typeahead/grouped-typeahead.component.html","./src/app/nav/_components/grouped-typeahead/grouped-typeahead.component.ts","./src/app/nav/_components/nav-header/nav-header.component.html","./src/app/nav/_components/nav-header/nav-header.component.ts","./src/app/app.component.html","./src/app/app.component.ts","./src/app/app-routing.module.ts","./src/app/_interceptors/jwt.interceptor.ts","./src/app/_interceptors/error.interceptor.ts","./src/httpLoader.ts","./src/main.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { CanActivate } from '@angular/router';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Observable } from 'rxjs';\r\nimport { map, take } from 'rxjs/operators';\r\nimport { AccountService } from '../_services/account.service';\r\nimport {TranslocoService} from \"@ngneat/transloco\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AdminGuard implements CanActivate {\r\n constructor(private accountService: AccountService, private toastr: ToastrService,\r\n private translocoService: TranslocoService) {}\r\n\r\n canActivate(): Observable {\r\n // this automatically subs due to being router guard\r\n return this.accountService.currentUser$.pipe(take(1),\r\n map((user) => {\r\n if (user && this.accountService.hasAdminRole(user)) {\r\n return true;\r\n }\r\n\r\n this.toastr.error(this.translocoService.translate('toasts.unauthorized-1'));\r\n return false;\r\n })\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CanActivate, Router } from '@angular/router';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Observable } from 'rxjs';\r\nimport { map, take } from 'rxjs/operators';\r\nimport { AccountService } from '../_services/account.service';\r\nimport {TranslocoService} from \"@ngneat/transloco\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthGuard implements CanActivate {\r\n public urlKey: string = 'kavita--auth-intersection-url';\r\n constructor(private accountService: AccountService,\r\n private router: Router,\r\n private toastr: ToastrService,\r\n private translocoService: TranslocoService) {}\r\n\r\n canActivate(): Observable {\r\n return this.accountService.currentUser$.pipe(take(1),\r\n map((user) => {\r\n if (user) {\r\n return true;\r\n }\r\n // TODO: Remove the error message stuff here and just redirect them. Don't need to tell them\r\n const errorMessage = this.translocoService.translate('toasts.unauthorized-1');\r\n const errorMessage2 = this.translocoService.translate('toasts.unauthorized-2');\r\n if (this.toastr.toasts.filter(toast => toast.message === errorMessage2 || toast.message === errorMessage).length === 0) {\r\n this.toastr.error(errorMessage);\r\n }\r\n localStorage.setItem(this.urlKey, window.location.pathname);\r\n this.router.navigateByUrl('/login');\r\n return false;\r\n })\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\nimport { Observable, of } from 'rxjs';\r\nimport { MemberService } from '../_services/member.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LibraryAccessGuard implements CanActivate {\r\n\r\n constructor(private memberService: MemberService) {}\r\n\r\n canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable {\r\n const libraryId = parseInt(state.url.split('library/')[1], 10);\r\n if (isNaN(libraryId)) return of(false);\r\n return this.memberService.hasLibraryAccess(libraryId);\r\n }\r\n}\r\n","export enum LibraryType {\r\n Manga = 0,\r\n Comic = 1,\r\n Book = 2,\r\n}\r\n\r\nexport interface Library {\r\n id: number;\r\n name: string;\r\n lastScanned: string;\r\n type: LibraryType;\r\n folders: string[];\r\n coverImage?: string;\r\n folderWatching: boolean;\r\n includeInDashboard: boolean;\r\n includeInRecommended: boolean;\r\n includeInSearch: boolean;\r\n manageCollections: boolean;\r\n manageReadingLists: boolean;\r\n allowScrobbling: boolean;\r\n collapseSeriesRelationships: boolean;\r\n}\r\n","export enum MangaFormat {\r\n IMAGE = 0,\r\n ARCHIVE = 1,\r\n UNKNOWN = 2,\r\n EPUB = 3,\r\n PDF = 4\r\n}","export enum PersonRole {\r\n Other = 1,\r\n Artist = 2,\r\n Writer = 3,\r\n Penciller = 4,\r\n Inker = 5,\r\n Colorist = 6,\r\n Letterer = 7,\r\n CoverArtist = 8,\r\n Editor = 9,\r\n Publisher = 10,\r\n Character = 11,\r\n Translator = 12\r\n}\r\n\r\nexport interface Person {\r\n id: number;\r\n name: string;\r\n role: PersonRole;\r\n}","import { MangaFormat } from \"../manga-format\";\r\nimport { SeriesFilterV2 } from \"./v2/series-filter-v2\";\r\nimport {FilterField} from \"./v2/filter-field\";\r\n\r\nexport interface FilterItem {\r\n title: string;\r\n value: T;\r\n selected: boolean;\r\n}\r\n\r\nexport interface SortOptions {\r\n sortField: SortField;\r\n isAscending: boolean;\r\n}\r\n\r\nexport enum SortField {\r\n SortName = 1,\r\n Created = 2,\r\n LastModified = 3,\r\n LastChapterAdded = 4,\r\n TimeToRead = 5,\r\n ReleaseYear = 6,\r\n ReadProgress = 7,\r\n}\r\n\r\nexport const allSortFields = Object.keys(SortField)\r\n .filter(key => !isNaN(Number(key)) && parseInt(key, 10) >= 0)\r\n .map(key => parseInt(key, 10)) as SortField[];\r\n\r\nexport const mangaFormatFilters = [\r\n {\r\n title: 'Images',\r\n value: MangaFormat.IMAGE,\r\n selected: false\r\n },\r\n {\r\n title: 'EPUB',\r\n value: MangaFormat.EPUB,\r\n selected: false\r\n },\r\n {\r\n title: 'PDF',\r\n value: MangaFormat.PDF,\r\n selected: false\r\n },\r\n {\r\n title: 'ARCHIVE',\r\n value: MangaFormat.ARCHIVE,\r\n selected: false\r\n }\r\n];\r\n\r\nexport interface FilterEvent {\r\n filterV2: SeriesFilterV2;\r\n isFirst: boolean;\r\n}\r\n\r\n","export enum FilterCombination {\r\n Or = 0,\r\n And = 1\r\n}\r\n","export enum FilterComparison {\r\n Equal = 0,\r\n GreaterThan =1,\r\n GreaterThanEqual = 2,\r\n LessThan = 3,\r\n LessThanEqual = 4,\r\n /// \r\n ///\r\n /// \r\n /// Only works with IList\r\n Contains = 5,\r\n MustContains = 6,\r\n /// \r\n /// Performs a LIKE %value%\r\n /// \r\n Matches = 7,\r\n NotContains = 8,\r\n /// \r\n /// Not Equal to\r\n /// \r\n NotEqual = 9,\r\n /// \r\n /// String starts with\r\n /// \r\n BeginsWith = 10,\r\n /// \r\n /// String ends with\r\n /// \r\n EndsWith = 11,\r\n /// \r\n /// Is Date before X\r\n /// \r\n IsBefore = 12,\r\n /// \r\n /// Is Date after X\r\n /// \r\n IsAfter = 13,\r\n /// \r\n /// Is Date between now and X seconds ago\r\n /// \r\n IsInLast = 14,\r\n /// \r\n /// Is Date not between now and X seconds ago\r\n /// \r\n IsNotInLast = 15,\r\n}\r\n","export enum FilterField\r\n{\r\n None = -1,\r\n Summary = 0,\r\n SeriesName = 1,\r\n PublicationStatus = 2,\r\n Languages = 3,\r\n AgeRating = 4,\r\n UserRating = 5,\r\n Tags = 6,\r\n CollectionTags = 7,\r\n Translators = 8,\r\n Characters = 9,\r\n Publisher = 10,\r\n Editor = 11,\r\n CoverArtist = 12,\r\n Letterer = 13,\r\n Colorist = 14,\r\n Inker = 15,\r\n Penciller = 16,\r\n Writers = 17,\r\n Genres = 18,\r\n Libraries = 19,\r\n ReadProgress = 20,\r\n Formats = 21,\r\n ReleaseYear = 22,\r\n ReadTime = 23,\r\n Path = 24,\r\n FilePath = 25,\r\n WantToRead = 26,\r\n ReadingDate = 27\r\n}\r\n\r\n\r\nconst enumArray = Object.keys(FilterField)\r\n .filter(key => !isNaN(Number(key)) && parseInt(key, 10) >= 0)\r\n .map(key => {\r\n // @ts-ignore\r\n return ({key: key, value: FilterField[key]});\r\n });\r\n\r\nenumArray.sort((a, b) => a.value.localeCompare(b.value));\r\n\r\nexport const allFields = enumArray\r\n .map(key => parseInt(key.key, 10))as FilterField[];\r\n","export interface Pagination {\r\n currentPage: number;\r\n itemsPerPage: number;\r\n totalItems: number;\r\n totalPages: number;\r\n}\r\n\r\nexport class PaginatedResult {\r\n result!: T;\r\n pagination!: Pagination;\r\n}\r\n","/**\r\n * Where does the theme come from\r\n */\r\n export enum ThemeProvider {\r\n System = 1,\r\n User = 2\r\n }\r\n \r\n /**\r\n * Theme for the whole instance\r\n */\r\n export interface SiteTheme {\r\n id: number;\r\n name: string;\r\n normalizedName: string;\r\n filePath: string;\r\n isDefault: boolean;\r\n provider: ThemeProvider;\r\n /**\r\n * The actual class the root is defined against. It is generated at the backend.\r\n */\r\n selector: string;\r\n }","import { Chapter } from \"../chapter\";\r\nimport { Library } from \"../library\";\r\nimport { MangaFile } from \"../manga-file\";\r\nimport { SearchResult } from \"./search-result\";\r\nimport { Tag } from \"../tag\";\r\n\r\nexport class SearchResultGroup {\r\n libraries: Array = [];\r\n series: Array = [];\r\n collections: Array = [];\r\n readingLists: Array = [];\r\n persons: Array = [];\r\n genres: Array = [];\r\n tags: Array = [];\r\n files: Array = [];\r\n chapters: Array = [];\r\n\r\n reset() {\r\n this.libraries = [];\r\n this.series = [];\r\n this.collections = [];\r\n this.readingLists = [];\r\n this.persons = [];\r\n this.genres = [];\r\n this.tags = [];\r\n this.files = [];\r\n this.chapters = []; \r\n }\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport {DestroyRef, inject, Injectable } from '@angular/core';\r\nimport {catchError, of, ReplaySubject, throwError} from 'rxjs';\r\nimport {filter, map, switchMap, tap} from 'rxjs/operators';\r\nimport { environment } from 'src/environments/environment';\r\nimport { Preferences } from '../_models/preferences/preferences';\r\nimport { User } from '../_models/user';\r\nimport { Router } from '@angular/router';\r\nimport { EVENTS, MessageHubService } from './message-hub.service';\r\nimport { ThemeService } from './theme.service';\r\nimport { InviteUserResponse } from '../_models/auth/invite-user-response';\r\nimport { UserUpdateEvent } from '../_models/events/user-update-event';\r\nimport { UpdateEmailResponse } from '../_models/auth/update-email-response';\r\nimport { AgeRating } from '../_models/metadata/age-rating';\r\nimport { AgeRestriction } from '../_models/metadata/age-restriction';\r\nimport { TextResonse } from '../_types/text-response';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\n\r\nexport enum Role {\r\n Admin = 'Admin',\r\n ChangePassword = 'Change Password',\r\n Bookmark = 'Bookmark',\r\n Download = 'Download',\r\n ChangeRestriction = 'Change Restriction'\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AccountService {\r\n\r\n private readonly destroyRef = inject(DestroyRef);\r\n baseUrl = environment.apiUrl;\r\n userKey = 'kavita-user';\r\n public static lastLoginKey = 'kavita-lastlogin';\r\n public static localeKey = 'kavita-locale';\r\n private currentUser: User | undefined;\r\n\r\n // Stores values, when someone subscribes gives (1) of last values seen.\r\n private currentUserSource = new ReplaySubject(1);\r\n public currentUser$ = this.currentUserSource.asObservable();\r\n\r\n private hasValidLicenseSource = new ReplaySubject(1);\r\n /**\r\n * Does the user have an active license\r\n */\r\n public hasValidLicense$ = this.hasValidLicenseSource.asObservable();\r\n\r\n /**\r\n * SetTimeout handler for keeping track of refresh token call\r\n */\r\n private refreshTokenTimeout: ReturnType | undefined;\r\n\r\n constructor(private httpClient: HttpClient, private router: Router,\r\n private messageHub: MessageHubService, private themeService: ThemeService) {\r\n messageHub.messages$.pipe(filter(evt => evt.event === EVENTS.UserUpdate),\r\n map(evt => evt.payload as UserUpdateEvent),\r\n filter(userUpdateEvent => userUpdateEvent.userName === this.currentUser?.username),\r\n switchMap(() => this.refreshAccount()))\r\n .subscribe(() => {});\r\n }\r\n\r\n hasAdminRole(user: User) {\r\n return user && user.roles.includes(Role.Admin);\r\n }\r\n\r\n hasChangePasswordRole(user: User) {\r\n return user && user.roles.includes(Role.ChangePassword);\r\n }\r\n\r\n hasChangeAgeRestrictionRole(user: User) {\r\n return user && user.roles.includes(Role.ChangeRestriction);\r\n }\r\n\r\n hasDownloadRole(user: User) {\r\n return user && user.roles.includes(Role.Download);\r\n }\r\n\r\n hasBookmarkRole(user: User) {\r\n return user && user.roles.includes(Role.Bookmark);\r\n }\r\n\r\n getRoles() {\r\n return this.httpClient.get(this.baseUrl + 'account/roles');\r\n }\r\n\r\n deleteLicense() {\r\n return this.httpClient.delete(this.baseUrl + 'license', TextResonse);\r\n }\r\n\r\n hasValidLicense(forceCheck: boolean = false) {\r\n return this.httpClient.get(this.baseUrl + 'license/valid-license?forceCheck=' + forceCheck, TextResonse)\r\n .pipe(\r\n map(res => res === \"true\"),\r\n tap(res => {\r\n this.hasValidLicenseSource.next(res)\r\n }),\r\n catchError(error => {\r\n this.hasValidLicenseSource.next(false);\r\n return throwError(error); // Rethrow the error to propagate it further\r\n })\r\n );\r\n }\r\n\r\n hasAnyLicense() {\r\n return this.httpClient.get(this.baseUrl + 'license/has-license', TextResonse)\r\n .pipe(\r\n map(res => res === \"true\"),\r\n );\r\n }\r\n\r\n updateUserLicense(license: string, email: string) {\r\n return this.httpClient.post(this.baseUrl + 'license', {license, email}, TextResonse)\r\n .pipe(map(res => res === \"true\"));\r\n }\r\n\r\n login(model: {username: string, password: string, apiKey?: string}) {\r\n return this.httpClient.post(this.baseUrl + 'account/login', model).pipe(\r\n map((response: User) => {\r\n const user = response;\r\n if (user) {\r\n this.setCurrentUser(user);\r\n }\r\n }),\r\n takeUntilDestroyed(this.destroyRef)\r\n );\r\n }\r\n\r\n setCurrentUser(user?: User) {\r\n if (user) {\r\n user.roles = [];\r\n const roles = this.getDecodedToken(user.token).role;\r\n Array.isArray(roles) ? user.roles = roles : user.roles.push(roles);\r\n\r\n localStorage.setItem(this.userKey, JSON.stringify(user));\r\n localStorage.setItem(AccountService.lastLoginKey, user.username);\r\n if (user.preferences && user.preferences.theme) {\r\n this.themeService.setTheme(user.preferences.theme.name);\r\n } else {\r\n this.themeService.setTheme(this.themeService.defaultTheme);\r\n }\r\n } else {\r\n this.themeService.setTheme(this.themeService.defaultTheme);\r\n }\r\n\r\n this.currentUser = user;\r\n this.currentUserSource.next(user);\r\n\r\n this.stopRefreshTokenTimer();\r\n\r\n if (this.currentUser) {\r\n this.messageHub.stopHubConnection();\r\n this.messageHub.createHubConnection(this.currentUser);\r\n this.hasValidLicense().subscribe();\r\n this.startRefreshTokenTimer();\r\n }\r\n }\r\n\r\n logout() {\r\n localStorage.removeItem(this.userKey);\r\n this.currentUserSource.next(undefined);\r\n this.currentUser = undefined;\r\n this.stopRefreshTokenTimer();\r\n this.messageHub.stopHubConnection();\r\n // Upon logout, perform redirection\r\n this.router.navigateByUrl('/login');\r\n }\r\n\r\n\r\n /**\r\n * Registers the first admin on the account. Only used for that. All other registrations must occur through invite\r\n * @param model\r\n * @returns\r\n */\r\n register(model: {username: string, password: string, email: string}) {\r\n return this.httpClient.post(this.baseUrl + 'account/register', model).pipe(\r\n map((user: User) => {\r\n return user;\r\n }),\r\n takeUntilDestroyed(this.destroyRef)\r\n );\r\n }\r\n\r\n isEmailConfirmed() {\r\n return this.httpClient.get(this.baseUrl + 'account/email-confirmed');\r\n }\r\n\r\n migrateUser(model: {email: string, username: string, password: string, sendEmail: boolean}) {\r\n return this.httpClient.post(this.baseUrl + 'account/migrate-email', model, TextResonse);\r\n }\r\n\r\n confirmMigrationEmail(model: {email: string, token: string}) {\r\n return this.httpClient.post(this.baseUrl + 'account/confirm-migration-email', model);\r\n }\r\n\r\n resendConfirmationEmail(userId: number) {\r\n return this.httpClient.post(this.baseUrl + 'account/resend-confirmation-email?userId=' + userId, {}, TextResonse);\r\n }\r\n\r\n inviteUser(model: {email: string, roles: Array, libraries: Array, ageRestriction: AgeRestriction}) {\r\n return this.httpClient.post(this.baseUrl + 'account/invite', model);\r\n }\r\n\r\n confirmEmail(model: {email: string, username: string, password: string, token: string}) {\r\n return this.httpClient.post(this.baseUrl + 'account/confirm-email', model);\r\n }\r\n\r\n confirmEmailUpdate(model: {email: string, token: string}) {\r\n return this.httpClient.post(this.baseUrl + 'account/confirm-email-update', model);\r\n }\r\n\r\n /**\r\n * Given a user id, returns a full url for setting up the user account\r\n * @param userId\r\n * @param withBaseUrl Should base url be included in invite url\r\n * @returns\r\n */\r\n getInviteUrl(userId: number, withBaseUrl: boolean = true) {\r\n return this.httpClient.get(this.baseUrl + 'account/invite-url?userId=' + userId + '&withBaseUrl=' + withBaseUrl, TextResonse);\r\n }\r\n\r\n getDecodedToken(token: string) {\r\n return JSON.parse(atob(token.split('.')[1]));\r\n }\r\n\r\n requestResetPasswordEmail(email: string) {\r\n return this.httpClient.post(this.baseUrl + 'account/forgot-password?email=' + encodeURIComponent(email), {}, TextResonse);\r\n }\r\n\r\n confirmResetPasswordEmail(model: {email: string, token: string, password: string}) {\r\n return this.httpClient.post(this.baseUrl + 'account/confirm-password-reset', model, TextResonse);\r\n }\r\n\r\n resetPassword(username: string, password: string, oldPassword: string) {\r\n return this.httpClient.post(this.baseUrl + 'account/reset-password', {username, password, oldPassword}, TextResonse);\r\n }\r\n\r\n update(model: {email: string, roles: Array, libraries: Array, userId: number, ageRestriction: AgeRestriction}) {\r\n return this.httpClient.post(this.baseUrl + 'account/update', model);\r\n }\r\n\r\n updateEmail(email: string, password: string) {\r\n return this.httpClient.post(this.baseUrl + 'account/update/email', {email, password});\r\n }\r\n\r\n updateAgeRestriction(ageRating: AgeRating, includeUnknowns: boolean) {\r\n return this.httpClient.post(this.baseUrl + 'account/update/age-restriction', {ageRating, includeUnknowns});\r\n }\r\n\r\n /**\r\n * This will get latest preferences for a user and cache them into user store\r\n * @returns\r\n */\r\n getPreferences() {\r\n return this.httpClient.get(this.baseUrl + 'users/get-preferences').pipe(map(pref => {\r\n if (this.currentUser !== undefined && this.currentUser !== null) {\r\n this.currentUser.preferences = pref;\r\n this.setCurrentUser(this.currentUser);\r\n }\r\n return pref;\r\n }), takeUntilDestroyed(this.destroyRef));\r\n }\r\n\r\n updatePreferences(userPreferences: Preferences) {\r\n return this.httpClient.post(this.baseUrl + 'users/update-preferences', userPreferences).pipe(map(settings => {\r\n if (this.currentUser !== undefined && this.currentUser !== null) {\r\n this.currentUser.preferences = settings;\r\n this.setCurrentUser(this.currentUser);\r\n\r\n // Update the locale on disk (for logout and compact-number pipe)\r\n localStorage.setItem(AccountService.localeKey, this.currentUser.preferences.locale);\r\n }\r\n return settings;\r\n }), takeUntilDestroyed(this.destroyRef));\r\n }\r\n\r\n getUserFromLocalStorage(): User | undefined {\r\n\r\n const userString = localStorage.getItem(this.userKey);\r\n\r\n if (userString) {\r\n return JSON.parse(userString)\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n resetApiKey() {\r\n return this.httpClient.post(this.baseUrl + 'account/reset-api-key', {}, TextResonse).pipe(map(key => {\r\n const user = this.getUserFromLocalStorage();\r\n if (user) {\r\n user.apiKey = key;\r\n\r\n localStorage.setItem(this.userKey, JSON.stringify(user));\r\n\r\n this.currentUserSource.next(user);\r\n this.currentUser = user;\r\n }\r\n return key;\r\n }));\r\n }\r\n\r\n getOpdsUrl() {\r\n return this.httpClient.get(this.baseUrl + 'account/opds-url', TextResonse);\r\n }\r\n\r\n\r\n private refreshAccount() {\r\n if (this.currentUser === null || this.currentUser === undefined) return of();\r\n return this.httpClient.get(this.baseUrl + 'account/refresh-account').pipe(map((user: User) => {\r\n if (user) {\r\n this.currentUser = {...user};\r\n }\r\n\r\n this.setCurrentUser(this.currentUser);\r\n return user;\r\n }));\r\n }\r\n\r\n\r\n private refreshToken() {\r\n if (this.currentUser === null || this.currentUser === undefined) return of();\r\n return this.httpClient.post<{token: string, refreshToken: string}>(this.baseUrl + 'account/refresh-token',\r\n {token: this.currentUser.token, refreshToken: this.currentUser.refreshToken}).pipe(map(user => {\r\n if (this.currentUser) {\r\n this.currentUser.token = user.token;\r\n this.currentUser.refreshToken = user.refreshToken;\r\n }\r\n\r\n this.setCurrentUser(this.currentUser);\r\n return user;\r\n }));\r\n }\r\n\r\n /**\r\n * Every 10 mins refresh the token\r\n */\r\n private startRefreshTokenTimer() {\r\n if (this.currentUser === null || this.currentUser === undefined) {\r\n this.stopRefreshTokenTimer();\r\n return;\r\n }\r\n\r\n this.stopRefreshTokenTimer();\r\n\r\n this.refreshTokenTimeout = setInterval(() => this.refreshToken().subscribe(() => {}), (60 * 10_000));\r\n }\r\n\r\n private stopRefreshTokenTimer() {\r\n if (this.refreshTokenTimeout !== undefined) {\r\n clearInterval(this.refreshTokenTimeout);\r\n }\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { map, Observable, shareReplay } from 'rxjs';\r\nimport { Chapter } from '../_models/chapter';\r\nimport { CollectionTag } from '../_models/collection-tag';\r\nimport { Device } from '../_models/device/device';\r\nimport { Library } from '../_models/library';\r\nimport { ReadingList } from '../_models/reading-list';\r\nimport { Series } from '../_models/series';\r\nimport { Volume } from '../_models/volume';\r\nimport { AccountService } from './account.service';\r\nimport { DeviceService } from './device.service';\r\nimport {SideNavStream} from \"../_models/sidenav/sidenav-stream\";\r\n\r\nexport enum Action {\r\n Submenu = -1,\r\n /**\r\n * Mark entity as read\r\n */\r\n MarkAsRead = 0,\r\n /**\r\n * Mark entity as unread\r\n */\r\n MarkAsUnread = 1,\r\n /**\r\n * Invoke a Scan on Series/Library\r\n */\r\n Scan = 2,\r\n /**\r\n * Delete the entity\r\n */\r\n Delete = 3,\r\n /**\r\n * Open edit modal\r\n */\r\n Edit = 4,\r\n /**\r\n * Open details modal\r\n */\r\n Info = 5,\r\n /**\r\n * Invoke a refresh covers\r\n */\r\n RefreshMetadata = 6,\r\n /**\r\n * Download the entity\r\n */\r\n Download = 7,\r\n /**\r\n * Invoke an Analyze Files which calculates word count\r\n */\r\n AnalyzeFiles = 8,\r\n /**\r\n * Read in incognito mode aka no progress tracking\r\n */\r\n IncognitoRead = 9,\r\n /**\r\n * Add to reading list\r\n */\r\n AddToReadingList = 10,\r\n /**\r\n * Add to collection\r\n */\r\n AddToCollection = 11,\r\n /**\r\n * Essentially a download, but handled differently. Needed so card bubbles it up for handling\r\n */\r\n DownloadBookmark = 12,\r\n /**\r\n * Open Series detail page for said series\r\n */\r\n ViewSeries = 13,\r\n /**\r\n * Open the reader for entity\r\n */\r\n Read = 14,\r\n /**\r\n * Add to user's Want to Read List\r\n */\r\n AddToWantToReadList = 15,\r\n /**\r\n * Remove from user's Want to Read List\r\n */\r\n RemoveFromWantToReadList = 16,\r\n /**\r\n * Send to a device\r\n */\r\n SendTo = 17,\r\n /**\r\n * Import some data into Kavita\r\n */\r\n Import = 18,\r\n /**\r\n * Removes the Series from On Deck inclusion\r\n */\r\n RemoveFromOnDeck = 19,\r\n AddRuleGroup = 20,\r\n RemoveRuleGroup = 21,\r\n MarkAsVisible = 22,\r\n MarkAsInvisible = 23,\r\n}\r\n\r\nexport interface ActionItem {\r\n title: string;\r\n action: Action;\r\n callback: (action: ActionItem, data: T) => void;\r\n requiresAdmin: boolean;\r\n children: Array>;\r\n /**\r\n * An optional class which applies to an item. ie) danger on a delete action\r\n */\r\n class?: string;\r\n /**\r\n * Indicates that there exists a separate list will be loaded from an API.\r\n * Rule: If using this, only one child should exist in children with the Action for dynamicList.\r\n */\r\n dynamicList?: Observable<{title: string, data: any}[]> | undefined;\r\n /**\r\n * Extra data that needs to be sent back from the card item. Used mainly for dynamicList. This will be the item from dyanamicList return\r\n */\r\n _extra?: {title: string, data: any};\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ActionFactoryService {\r\n libraryActions: Array> = [];\r\n\r\n seriesActions: Array> = [];\r\n\r\n volumeActions: Array> = [];\r\n\r\n chapterActions: Array> = [];\r\n\r\n collectionTagActions: Array> = [];\r\n\r\n readingListActions: Array> = [];\r\n\r\n bookmarkActions: Array> = [];\r\n\r\n sideNavStreamActions: Array> = [];\r\n\r\n isAdmin = false;\r\n hasDownloadRole = false;\r\n\r\n constructor(private accountService: AccountService, private deviceService: DeviceService) {\r\n this.accountService.currentUser$.subscribe((user) => {\r\n if (user) {\r\n this.isAdmin = this.accountService.hasAdminRole(user);\r\n this.hasDownloadRole = this.accountService.hasDownloadRole(user);\r\n } else {\r\n this._resetActions();\r\n return; // If user is logged out, we don't need to do anything\r\n }\r\n\r\n this._resetActions();\r\n });\r\n }\r\n\r\n getLibraryActions(callback: (action: ActionItem, library: Library) => void) {\r\n\t\treturn this.applyCallbackToList(this.libraryActions, callback);\r\n }\r\n\r\n getSeriesActions(callback: (action: ActionItem, series: Series) => void) {\r\n\t\treturn this.applyCallbackToList(this.seriesActions, callback);\r\n }\r\n\r\n getSideNavStreamActions(callback: (action: ActionItem, series: SideNavStream) => void) {\r\n return this.applyCallbackToList(this.sideNavStreamActions, callback);\r\n }\r\n\r\n getVolumeActions(callback: (action: ActionItem, volume: Volume) => void) {\r\n\t\treturn this.applyCallbackToList(this.volumeActions, callback);\r\n }\r\n\r\n getChapterActions(callback: (action: ActionItem, chapter: Chapter) => void) {\r\n return this.applyCallbackToList(this.chapterActions, callback);\r\n }\r\n\r\n getCollectionTagActions(callback: (action: ActionItem, collectionTag: CollectionTag) => void) {\r\n\t\treturn this.applyCallbackToList(this.collectionTagActions, callback);\r\n }\r\n\r\n getReadingListActions(callback: (action: ActionItem, readingList: ReadingList) => void) {\r\n return this.applyCallbackToList(this.readingListActions, callback);\r\n }\r\n\r\n getBookmarkActions(callback: (action: ActionItem, series: Series) => void) {\r\n return this.applyCallbackToList(this.bookmarkActions, callback);\r\n }\r\n\r\n getMetadataFilterActions(callback: (action: ActionItem, data: any) => void) {\r\n const actions = [\r\n {title: 'add-rule-group-and', action: Action.AddRuleGroup, requiresAdmin: false, children: [], callback: this.dummyCallback},\r\n {title: 'add-rule-group-or', action: Action.AddRuleGroup, requiresAdmin: false, children: [], callback: this.dummyCallback},\r\n {title: 'remove-rule-group', action: Action.RemoveRuleGroup, requiresAdmin: false, children: [], callback: this.dummyCallback},\r\n ];\r\n return this.applyCallbackToList(actions, callback);\r\n }\r\n\r\n dummyCallback(action: ActionItem, data: any) {}\r\n\r\n filterSendToAction(actions: Array>, chapter: Chapter) {\r\n // if (chapter.files.filter(f => f.format === MangaFormat.EPUB || f.format === MangaFormat.PDF).length !== chapter.files.length) {\r\n // // Remove Send To as it doesn't apply\r\n // return actions.filter(item => item.title !== 'Send To');\r\n // }\r\n return actions;\r\n }\r\n\r\n private _resetActions() {\r\n this.libraryActions = [\r\n {\r\n action: Action.Scan,\r\n title: 'scan-library',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n {\r\n action: Action.Submenu,\r\n title: 'others',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [\r\n {\r\n action: Action.RefreshMetadata,\r\n title: 'refresh-covers',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n {\r\n action: Action.AnalyzeFiles,\r\n title: 'analyze-files',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n ],\r\n },\r\n {\r\n action: Action.Edit,\r\n title: 'settings',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n ];\r\n\r\n this.collectionTagActions = [\r\n {\r\n action: Action.Edit,\r\n title: 'edit',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n {\r\n action: Action.Delete,\r\n title: 'delete',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n class: 'danger',\r\n children: [],\r\n },\r\n ];\r\n\r\n this.seriesActions = [\r\n {\r\n action: Action.MarkAsRead,\r\n title: 'mark-as-read',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.MarkAsUnread,\r\n title: 'mark-as-unread',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.Scan,\r\n title: 'scan-series',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n {\r\n action: Action.Submenu,\r\n title: 'add-to',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [\r\n \t{\r\n action: Action.AddToWantToReadList,\r\n title: 'add-to-want-to-read',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.RemoveFromWantToReadList,\r\n title: 'remove-from-want-to-read',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.AddToReadingList,\r\n title: 'add-to-reading-list',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.AddToCollection,\r\n title: 'add-to-collection',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n ],\r\n },\r\n {\r\n action: Action.Submenu,\r\n title: 'send-to',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [\r\n {\r\n action: Action.SendTo,\r\n title: '',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n dynamicList: this.deviceService.devices$.pipe(map((devices: Array) => devices.map(d => {\r\n return {'title': d.name, 'data': d};\r\n }), shareReplay())),\r\n children: []\r\n }\r\n ],\r\n },\r\n {\r\n action: Action.Submenu,\r\n title: 'others',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [\r\n {\r\n action: Action.RefreshMetadata,\r\n title: 'refresh-covers',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n {\r\n action: Action.AnalyzeFiles,\r\n title: 'analyze-files',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n {\r\n action: Action.Delete,\r\n title: 'delete',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n class: 'danger',\r\n children: [],\r\n },\r\n ],\r\n },\r\n {\r\n action: Action.Download,\r\n title: 'download',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.Edit,\r\n title: 'edit',\r\n callback: this.dummyCallback,\r\n requiresAdmin: true,\r\n children: [],\r\n },\r\n ];\r\n\r\n this.volumeActions = [\r\n {\r\n action: Action.IncognitoRead,\r\n title: 'read-incognito',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.MarkAsRead,\r\n title: 'mark-as-read',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.MarkAsUnread,\r\n title: 'mark-as-unread',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n\t\t\t{\r\n\t\t\t\taction: Action.Submenu,\r\n\t\t\t\ttitle: 'add-to',\r\n\t\t\t\tcallback: this.dummyCallback,\r\n\t\t\t\trequiresAdmin: false,\r\n\t\t\t\tchildren: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\taction: Action.AddToReadingList,\r\n\t\t\t\t\t\ttitle: 'add-to-reading-list',\r\n\t\t\t\t\t\tcallback: this.dummyCallback,\r\n\t\t\t\t\t\trequiresAdmin: false,\r\n\t\t\t\t\t\tchildren: [],\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n {\r\n action: Action.Submenu,\r\n title: 'send-to',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [\r\n {\r\n action: Action.SendTo,\r\n title: '',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n dynamicList: this.deviceService.devices$.pipe(map((devices: Array) => devices.map(d => {\r\n return {'title': d.name, 'data': d};\r\n }), shareReplay())),\r\n children: []\r\n }\r\n ],\r\n },\r\n {\r\n action: Action.Download,\r\n title: 'download',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.Edit,\r\n title: 'details',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n ];\r\n\r\n this.chapterActions = [\r\n {\r\n action: Action.IncognitoRead,\r\n title: 'read-incognito',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.MarkAsRead,\r\n title: 'mark-as-read',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.MarkAsUnread,\r\n title: 'mark-as-unread',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n\t\t\t{\r\n\t\t\t\taction: Action.Submenu,\r\n\t\t\t\ttitle: 'add-to',\r\n\t\t\t\tcallback: this.dummyCallback,\r\n\t\t\t\trequiresAdmin: false,\r\n\t\t\t\tchildren: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\taction: Action.AddToReadingList,\r\n\t\t\t\t\t\ttitle: 'add-to-reading-list',\r\n\t\t\t\t\t\tcallback: this.dummyCallback,\r\n\t\t\t\t\t\trequiresAdmin: false,\r\n\t\t\t\t\t\tchildren: [],\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t},\r\n {\r\n action: Action.Submenu,\r\n title: 'send-to',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [\r\n {\r\n action: Action.SendTo,\r\n title: '',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n dynamicList: this.deviceService.devices$.pipe(map((devices: Array) => devices.map(d => {\r\n return {'title': d.name, 'data': d};\r\n }), shareReplay())),\r\n children: []\r\n }\r\n ],\r\n },\r\n // RBS will handle rendering this, so non-admins with download are appicable\r\n {\r\n action: Action.Download,\r\n title: 'download',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.Edit,\r\n title: 'details',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n ];\r\n\r\n this.readingListActions = [\r\n {\r\n action: Action.Edit,\r\n title: 'edit',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.Delete,\r\n title: 'delete',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n class: 'danger',\r\n children: [],\r\n },\r\n ];\r\n\r\n this.bookmarkActions = [\r\n {\r\n action: Action.ViewSeries,\r\n title: 'view-series',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.DownloadBookmark,\r\n title: 'download',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.Delete,\r\n title: 'clear',\r\n callback: this.dummyCallback,\r\n class: 'danger',\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n ];\r\n\r\n this.sideNavStreamActions = [\r\n {\r\n action: Action.MarkAsVisible,\r\n title: 'mark-visible',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n {\r\n action: Action.MarkAsInvisible,\r\n title: 'mark-invisible',\r\n callback: this.dummyCallback,\r\n requiresAdmin: false,\r\n children: [],\r\n },\r\n ];\r\n }\r\n\r\n private applyCallback(action: ActionItem, callback: (action: ActionItem, data: any) => void) {\r\n action.callback = callback;\r\n\r\n if (action.children === null || action.children?.length === 0) return;\r\n\r\n action.children?.forEach((childAction) => {\r\n this.applyCallback(childAction, callback);\r\n });\r\n }\r\n\r\n\tpublic applyCallbackToList(list: Array>, callback: (action: ActionItem, data: any) => void): Array> {\r\n\t\tconst actions = list.map((a) => {\r\n\t\t\treturn { ...a };\r\n\t\t});\r\n\t\tactions.forEach((action) => this.applyCallback(action, callback));\r\n\t\treturn actions;\r\n\t}\r\n\r\n // Checks the whole tree for the action and returns true if it exists\r\n public hasAction(actions: Array>, action: Action) {\r\n if (actions.length === 0) return false;\r\n\r\n for (let i = 0; i < actions.length; i++)\r\n {\r\n if (actions[i].action === action) return true;\r\n if (this.hasAction(actions[i].children, action)) return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n}\r\n","\r\n\r\n
\r\n

{{t('title')}}

\r\n \r\n
\r\n
\r\n
\r\n
= 5\">\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
    \r\n
  • \r\n {{collectionTag.title}} \r\n
  • \r\n
  • {{t('no-data')}}
  • \r\n
  • \r\n
    \r\n {{t('loading')}}\r\n
    \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnInit,\r\n ViewChild,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport {FormGroup, FormControl, ReactiveFormsModule} from '@angular/forms';\r\nimport {NgbActiveModal, NgbModalModule} from '@ng-bootstrap/ng-bootstrap';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { CollectionTag } from 'src/app/_models/collection-tag';\r\nimport { ReadingList } from 'src/app/_models/reading-list';\r\nimport { CollectionTagService } from 'src/app/_services/collection-tag.service';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {FilterPipe} from \"../../../pipe/filter.pipe\";\r\nimport {translate, TranslocoDirective, TranslocoService} from \"@ngneat/transloco\";\r\n\r\n@Component({\r\n selector: 'app-bulk-add-to-collection',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, FilterPipe, NgbModalModule, TranslocoDirective],\r\n templateUrl: './bulk-add-to-collection.component.html',\r\n styleUrls: ['./bulk-add-to-collection.component.scss'],\r\n encapsulation: ViewEncapsulation.None, // This is needed as per the bootstrap modal documentation to get styles to work.\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class BulkAddToCollectionComponent implements OnInit, AfterViewInit {\r\n\r\n @Input({required: true}) title!: string;\r\n /**\r\n * Series Ids to add to Collection Tag\r\n */\r\n @Input() seriesIds: Array = [];\r\n\r\n /**\r\n * All existing collections sorted by recent use date\r\n */\r\n lists: Array = [];\r\n loading: boolean = false;\r\n listForm: FormGroup = new FormGroup({});\r\n\r\n collectionTitleTrackby = (index: number, item: CollectionTag) => `${item.title}`;\r\n\r\n\r\n @ViewChild('title') inputElem!: ElementRef;\r\n\r\n\r\n constructor(private modal: NgbActiveModal, private collectionService: CollectionTagService,\r\n private toastr: ToastrService, private readonly cdRef: ChangeDetectorRef) { }\r\n\r\n ngOnInit(): void {\r\n\r\n this.listForm.addControl('title', new FormControl(this.title, []));\r\n this.listForm.addControl('filterQuery', new FormControl('', []));\r\n\r\n this.loading = true;\r\n this.cdRef.markForCheck();\r\n this.collectionService.allTags().subscribe(tags => {\r\n this.lists = tags;\r\n this.loading = false;\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n // Shift focus to input\r\n if (this.inputElem) {\r\n this.inputElem.nativeElement.select();\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n\r\n close() {\r\n this.modal.close();\r\n }\r\n\r\n create() {\r\n const tagName = this.listForm.value.title;\r\n this.collectionService.addByMultiple(0, this.seriesIds, tagName).subscribe(() => {\r\n this.toastr.success(translate('toasts.series-added-to-collection', {collectionName: tagName}));\r\n this.modal.close();\r\n });\r\n }\r\n\r\n addToCollection(tag: CollectionTag) {\r\n if (this.seriesIds.length === 0) return;\r\n\r\n this.collectionService.addByMultiple(tag.id, this.seriesIds, '').subscribe(() => {\r\n this.toastr.success(translate('toasts.series-added-to-collection', {collectionName: tag.title}));\r\n this.modal.close();\r\n });\r\n\r\n }\r\n\r\n filterList = (listItem: ReadingList) => {\r\n return listItem.title.toLowerCase().indexOf((this.listForm.value.filterQuery || '').toLowerCase()) >= 0;\r\n }\r\n\r\n}\r\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Subject } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { BulkAddToCollectionComponent } from '../cards/_modals/bulk-add-to-collection/bulk-add-to-collection.component';\r\nimport { AddToListModalComponent, ADD_FLOW } from '../reading-list/_modals/add-to-list-modal/add-to-list-modal.component';\r\nimport { EditReadingListModalComponent } from '../reading-list/_modals/edit-reading-list-modal/edit-reading-list-modal.component';\r\nimport { ConfirmService } from '../shared/confirm.service';\r\nimport { LibrarySettingsModalComponent } from '../sidenav/_modals/library-settings-modal/library-settings-modal.component';\r\nimport { Chapter } from '../_models/chapter';\r\nimport { Device } from '../_models/device/device';\r\nimport { Library } from '../_models/library';\r\nimport { ReadingList } from '../_models/reading-list';\r\nimport { Series } from '../_models/series';\r\nimport { Volume } from '../_models/volume';\r\nimport { DeviceService } from './device.service';\r\nimport { LibraryService } from './library.service';\r\nimport { MemberService } from './member.service';\r\nimport { ReaderService } from './reader.service';\r\nimport { SeriesService } from './series.service';\r\nimport {translate, TranslocoService} from \"@ngneat/transloco\";\r\n\r\nexport type LibraryActionCallback = (library: Partial) => void;\r\nexport type SeriesActionCallback = (series: Series) => void;\r\nexport type VolumeActionCallback = (volume: Volume) => void;\r\nexport type ChapterActionCallback = (chapter: Chapter) => void;\r\nexport type ReadingListActionCallback = (readingList: ReadingList) => void;\r\nexport type VoidActionCallback = () => void;\r\nexport type BooleanActionCallback = (result: boolean) => void;\r\n\r\n/**\r\n * Responsible for executing actions\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ActionService implements OnDestroy {\r\n\r\n private readonly onDestroy = new Subject();\r\n private readingListModalRef: NgbModalRef | null = null;\r\n private collectionModalRef: NgbModalRef | null = null;\r\n\r\n constructor(private libraryService: LibraryService, private seriesService: SeriesService,\r\n private readerService: ReaderService, private toastr: ToastrService, private modalService: NgbModal,\r\n private confirmService: ConfirmService, private memberService: MemberService, private deviceService: DeviceService) { }\r\n\r\n ngOnDestroy() {\r\n this.onDestroy.next();\r\n this.onDestroy.complete();\r\n }\r\n\r\n /**\r\n * Request a file scan for a given Library\r\n * @param library Partial Library, must have id and name populated\r\n * @param callback Optional callback to perform actions after API completes\r\n * @returns\r\n */\r\n async scanLibrary(library: Partial, callback?: LibraryActionCallback) {\r\n if (!library.hasOwnProperty('id') || library.id === undefined) {\r\n return;\r\n }\r\n\r\n // Prompt user if we should do a force or not\r\n const force = false; // await this.promptIfForce();\r\n\r\n this.libraryService.scan(library.id, force).pipe(take(1)).subscribe((res: any) => {\r\n this.toastr.info(translate('toasts.scan-queued', {name: library.name}));\r\n if (callback) {\r\n callback(library);\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Request a refresh of Metadata for a given Library\r\n * @param library Partial Library, must have id and name populated\r\n * @param callback Optional callback to perform actions after API completes\r\n * @returns\r\n */\r\n async refreshMetadata(library: Partial, callback?: LibraryActionCallback) {\r\n if (!library.hasOwnProperty('id') || library.id === undefined) {\r\n return;\r\n }\r\n\r\n if (!await this.confirmService.confirm(translate('toasts.confirm-regen-covers'))) {\r\n if (callback) {\r\n callback(library);\r\n }\r\n return;\r\n }\r\n\r\n const forceUpdate = true; //await this.promptIfForce();\r\n\r\n this.libraryService.refreshMetadata(library?.id, forceUpdate).pipe(take(1)).subscribe((res: any) => {\r\n this.toastr.info(translate('toasts.scan-queued', {name: library.name}));\r\n if (callback) {\r\n callback(library);\r\n }\r\n });\r\n }\r\n\r\n editLibrary(library: Partial, callback?: LibraryActionCallback) {\r\n const modalRef = this.modalService.open(LibrarySettingsModalComponent, { size: 'xl' });\r\n modalRef.componentInstance.library = library;\r\n modalRef.closed.subscribe((closeResult: {success: boolean, library: Library, coverImageUpdate: boolean}) => {\r\n if (callback) callback(library)\r\n });\r\n }\r\n\r\n /**\r\n * Request an analysis of files for a given Library (currently just word count)\r\n * @param library Partial Library, must have id and name populated\r\n * @param callback Optional callback to perform actions after API completes\r\n * @returns\r\n */\r\n async analyzeFiles(library: Partial, callback?: LibraryActionCallback) {\r\n if (!library.hasOwnProperty('id') || library.id === undefined) {\r\n return;\r\n }\r\n\r\n if (!await this.confirmService.alert(translate('toasts.alert-long-running'))) {\r\n if (callback) {\r\n callback(library);\r\n }\r\n return;\r\n }\r\n\r\n this.libraryService.analyze(library?.id).pipe(take(1)).subscribe((res: any) => {\r\n this.toastr.info(translate('toasts.library-file-analysis-queued', {name: library.name}));\r\n if (callback) {\r\n callback(library);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark a series as read; updates the series pagesRead\r\n * @param series Series, must have id and name populated\r\n * @param callback Optional callback to perform actions after API completes\r\n */\r\n markSeriesAsRead(series: Series, callback?: SeriesActionCallback) {\r\n this.seriesService.markRead(series.id).pipe(take(1)).subscribe(res => {\r\n series.pagesRead = series.pages;\r\n this.toastr.success(translate('toasts.entity-read', {name: series.name}));\r\n if (callback) {\r\n callback(series);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark a series as unread; updates the series pagesRead\r\n * @param series Series, must have id and name populated\r\n * @param callback Optional callback to perform actions after API completes\r\n */\r\n markSeriesAsUnread(series: Series, callback?: SeriesActionCallback) {\r\n this.seriesService.markUnread(series.id).pipe(take(1)).subscribe(res => {\r\n series.pagesRead = 0;\r\n this.toastr.success(translate('toasts.entity-unread', {name: series.name}));\r\n if (callback) {\r\n callback(series);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Start a file scan for a Series\r\n * @param series Series, must have libraryId and name populated\r\n * @param callback Optional callback to perform actions after API completes\r\n */\r\n async scanSeries(series: Series, callback?: SeriesActionCallback) {\r\n this.seriesService.scan(series.libraryId, series.id).pipe(take(1)).subscribe((res: any) => {\r\n this.toastr.info(translate('toasts.scan-queued', {name: series.name}));\r\n if (callback) {\r\n callback(series);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Start a file scan for analyze files for a Series\r\n * @param series Series, must have libraryId and name populated\r\n * @param callback Optional callback to perform actions after API completes\r\n */\r\n analyzeFilesForSeries(series: Series, callback?: SeriesActionCallback) {\r\n this.seriesService.analyzeFiles(series.libraryId, series.id).pipe(take(1)).subscribe((res: any) => {\r\n this.toastr.info(translate('toasts.scan-queued', {name: series.name}));\r\n if (callback) {\r\n callback(series);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Start a metadata refresh for a Series\r\n * @param series Series, must have libraryId, id and name populated\r\n * @param callback Optional callback to perform actions after API completes\r\n */\r\n async refreshMetdata(series: Series, callback?: SeriesActionCallback) {\r\n if (!await this.confirmService.confirm(translate('toasts.confirm-regen-covers'))) {\r\n if (callback) {\r\n callback(series);\r\n }\r\n return;\r\n }\r\n\r\n this.seriesService.refreshMetadata(series).pipe(take(1)).subscribe((res: any) => {\r\n this.toastr.info(translate('toasts.refresh-covers-queued', {name: series.name}));\r\n if (callback) {\r\n callback(series);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark all chapters and the volume as Read\r\n * @param seriesId Series Id\r\n * @param volume Volume, should have id, chapters and pagesRead populated\r\n * @param callback Optional callback to perform actions after API completes\r\n */\r\n markVolumeAsRead(seriesId: number, volume: Volume, callback?: VolumeActionCallback) {\r\n this.readerService.markVolumeRead(seriesId, volume.id).pipe(take(1)).subscribe(() => {\r\n volume.pagesRead = volume.pages;\r\n volume.chapters?.forEach(c => c.pagesRead = c.pages);\r\n this.toastr.success(translate('toasts.mark-read'));\r\n\r\n if (callback) {\r\n callback(volume);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark all chapters and the volume as unread\r\n * @param seriesId Series Id\r\n * @param volume Volume, should have id, chapters and pagesRead populated\r\n * @param callback Optional callback to perform actions after API completes\r\n */\r\n markVolumeAsUnread(seriesId: number, volume: Volume, callback?: VolumeActionCallback) {\r\n this.readerService.markVolumeUnread(seriesId, volume.id).subscribe(() => {\r\n volume.pagesRead = 0;\r\n volume.chapters?.forEach(c => c.pagesRead = 0);\r\n this.toastr.success(translate('toasts.mark-unread'));\r\n if (callback) {\r\n callback(volume);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark a chapter as read\r\n * @param seriesId Series Id\r\n * @param chapter Chapter, should have id, pages, volumeId populated\r\n * @param callback Optional callback to perform actions after API completes\r\n */\r\n markChapterAsRead(libraryId: number, seriesId: number, chapter: Chapter, callback?: ChapterActionCallback) {\r\n this.readerService.saveProgress(libraryId, seriesId, chapter.volumeId, chapter.id, chapter.pages).pipe(take(1)).subscribe(results => {\r\n chapter.pagesRead = chapter.pages;\r\n this.toastr.success(translate('toasts.mark-read'));\r\n if (callback) {\r\n callback(chapter);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark a chapter as unread\r\n * @param seriesId Series Id\r\n * @param chapter Chapter, should have id, pages, volumeId populated\r\n * @param callback Optional callback to perform actions after API completes\r\n */\r\n markChapterAsUnread(libraryId: number, seriesId: number, chapter: Chapter, callback?: ChapterActionCallback) {\r\n this.readerService.saveProgress(libraryId, seriesId, chapter.volumeId, chapter.id, 0).pipe(take(1)).subscribe(results => {\r\n chapter.pagesRead = 0;\r\n this.toastr.success(translate('toasts.mark-unread'));\r\n if (callback) {\r\n callback(chapter);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark all chapters and the volumes as Read. All volumes and chapters must belong to a series\r\n * @param seriesId Series Id\r\n * @param volumes Volumes, should have id, chapters and pagesRead populated\r\n * @param chapters? Chapters, should have id\r\n * @param callback Optional callback to perform actions after API completes\r\n */\r\n markMultipleAsRead(seriesId: number, volumes: Array, chapters?: Array, callback?: VoidActionCallback) {\r\n this.readerService.markMultipleRead(seriesId, volumes.map(v => v.id), chapters?.map(c => c.id)).pipe(take(1)).subscribe(() => {\r\n volumes.forEach(volume => {\r\n volume.pagesRead = volume.pages;\r\n volume.chapters?.forEach(c => c.pagesRead = c.pages);\r\n });\r\n chapters?.forEach(c => c.pagesRead = c.pages);\r\n this.toastr.success(translate('toasts.mark-read'));\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark all chapters and the volumes as Unread. All volumes must belong to a series\r\n * @param seriesId Series Id\r\n * @param volumes Volumes, should have id, chapters and pagesRead populated\r\n * @param callback Optional callback to perform actions after API completes\r\n */\r\n markMultipleAsUnread(seriesId: number, volumes: Array, chapters?: Array, callback?: VoidActionCallback) {\r\n this.readerService.markMultipleUnread(seriesId, volumes.map(v => v.id), chapters?.map(c => c.id)).pipe(take(1)).subscribe(() => {\r\n volumes.forEach(volume => {\r\n volume.pagesRead = 0;\r\n volume.chapters?.forEach(c => c.pagesRead = 0);\r\n });\r\n chapters?.forEach(c => c.pagesRead = 0);\r\n this.toastr.success(translate('toasts.mark-unread'));\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark all series as Read.\r\n * @param series Series, should have id, pagesRead populated\r\n * @param callback Optional callback to perform actions after API completes\r\n */\r\n markMultipleSeriesAsRead(series: Array, callback?: VoidActionCallback) {\r\n this.readerService.markMultipleSeriesRead(series.map(v => v.id)).pipe(take(1)).subscribe(() => {\r\n series.forEach(s => {\r\n s.pagesRead = s.pages;\r\n });\r\n this.toastr.success(translate('toasts.mark-read'));\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark all series as Unread.\r\n * @param series Series, should have id, pagesRead populated\r\n * @param callback Optional callback to perform actions after API completes\r\n */\r\n markMultipleSeriesAsUnread(series: Array, callback?: VoidActionCallback) {\r\n this.readerService.markMultipleSeriesUnread(series.map(v => v.id)).pipe(take(1)).subscribe(() => {\r\n series.forEach(s => {\r\n s.pagesRead = s.pages;\r\n });\r\n this.toastr.success(translate('toasts.mark-unread'));\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n addMultipleToReadingList(seriesId: number, volumes: Array, chapters?: Array, callback?: BooleanActionCallback) {\r\n if (this.readingListModalRef != null) { return; }\r\n this.readingListModalRef = this.modalService.open(AddToListModalComponent, { scrollable: true, size: 'md' });\r\n this.readingListModalRef.componentInstance.seriesId = seriesId;\r\n this.readingListModalRef.componentInstance.volumeIds = volumes.map(v => v.id);\r\n this.readingListModalRef.componentInstance.chapterIds = chapters?.map(c => c.id);\r\n this.readingListModalRef.componentInstance.title = 'Multiple Selections';\r\n this.readingListModalRef.componentInstance.type = ADD_FLOW.Multiple;\r\n\r\n\r\n this.readingListModalRef.closed.pipe(take(1)).subscribe(() => {\r\n this.readingListModalRef = null;\r\n if (callback) {\r\n callback(true);\r\n }\r\n });\r\n this.readingListModalRef.dismissed.pipe(take(1)).subscribe(() => {\r\n this.readingListModalRef = null;\r\n if (callback) {\r\n callback(false);\r\n }\r\n });\r\n }\r\n\r\n addMultipleSeriesToWantToReadList(seriesIds: Array, callback?: VoidActionCallback) {\r\n this.memberService.addSeriesToWantToRead(seriesIds).subscribe(() => {\r\n this.toastr.success('Series added to Want to Read list');\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n removeMultipleSeriesFromWantToReadList(seriesIds: Array, callback?: VoidActionCallback) {\r\n this.memberService.removeSeriesToWantToRead(seriesIds).subscribe(() => {\r\n this.toastr.success(translate('toasts.series-removed-want-to-read'));\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n addMultipleSeriesToReadingList(series: Array, callback?: BooleanActionCallback) {\r\n if (this.readingListModalRef != null) { return; }\r\n this.readingListModalRef = this.modalService.open(AddToListModalComponent, { scrollable: true, size: 'md' });\r\n this.readingListModalRef.componentInstance.seriesIds = series.map(v => v.id);\r\n this.readingListModalRef.componentInstance.title = 'Multiple Selections';\r\n this.readingListModalRef.componentInstance.type = ADD_FLOW.Multiple_Series;\r\n\r\n\r\n this.readingListModalRef.closed.pipe(take(1)).subscribe(() => {\r\n this.readingListModalRef = null;\r\n if (callback) {\r\n callback(true);\r\n }\r\n });\r\n this.readingListModalRef.dismissed.pipe(take(1)).subscribe(() => {\r\n this.readingListModalRef = null;\r\n if (callback) {\r\n callback(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Adds a set of series to a collection tag\r\n * @param series\r\n * @param callback\r\n * @returns\r\n */\r\n addMultipleSeriesToCollectionTag(series: Array, callback?: BooleanActionCallback) {\r\n if (this.collectionModalRef != null) { return; }\r\n this.collectionModalRef = this.modalService.open(BulkAddToCollectionComponent, { scrollable: true, size: 'md', windowClass: 'collection' });\r\n this.collectionModalRef.componentInstance.seriesIds = series.map(v => v.id);\r\n this.collectionModalRef.componentInstance.title = 'New Collection';\r\n\r\n this.collectionModalRef.closed.pipe(take(1)).subscribe(() => {\r\n this.collectionModalRef = null;\r\n if (callback) {\r\n callback(true);\r\n }\r\n });\r\n this.collectionModalRef.dismissed.pipe(take(1)).subscribe(() => {\r\n this.collectionModalRef = null;\r\n if (callback) {\r\n callback(false);\r\n }\r\n });\r\n }\r\n\r\n addSeriesToReadingList(series: Series, callback?: SeriesActionCallback) {\r\n if (this.readingListModalRef != null) { return; }\r\n this.readingListModalRef = this.modalService.open(AddToListModalComponent, { scrollable: true, size: 'md' });\r\n this.readingListModalRef.componentInstance.seriesId = series.id;\r\n this.readingListModalRef.componentInstance.title = series.name;\r\n this.readingListModalRef.componentInstance.type = ADD_FLOW.Series;\r\n\r\n\r\n this.readingListModalRef.closed.pipe(take(1)).subscribe(() => {\r\n this.readingListModalRef = null;\r\n if (callback) {\r\n callback(series);\r\n }\r\n });\r\n this.readingListModalRef.dismissed.pipe(take(1)).subscribe(() => {\r\n this.readingListModalRef = null;\r\n if (callback) {\r\n callback(series);\r\n }\r\n });\r\n }\r\n\r\n addVolumeToReadingList(volume: Volume, seriesId: number, callback?: VolumeActionCallback) {\r\n if (this.readingListModalRef != null) { return; }\r\n this.readingListModalRef = this.modalService.open(AddToListModalComponent, { scrollable: true, size: 'md' });\r\n this.readingListModalRef.componentInstance.seriesId = seriesId;\r\n this.readingListModalRef.componentInstance.volumeId = volume.id;\r\n this.readingListModalRef.componentInstance.type = ADD_FLOW.Volume;\r\n\r\n\r\n this.readingListModalRef.closed.pipe(take(1)).subscribe(() => {\r\n this.readingListModalRef = null;\r\n if (callback) {\r\n callback(volume);\r\n }\r\n });\r\n this.readingListModalRef.dismissed.pipe(take(1)).subscribe(() => {\r\n this.readingListModalRef = null;\r\n if (callback) {\r\n callback(volume);\r\n }\r\n });\r\n }\r\n\r\n addChapterToReadingList(chapter: Chapter, seriesId: number, callback?: ChapterActionCallback) {\r\n if (this.readingListModalRef != null) { return; }\r\n this.readingListModalRef = this.modalService.open(AddToListModalComponent, { scrollable: true, size: 'md' });\r\n this.readingListModalRef.componentInstance.seriesId = seriesId;\r\n this.readingListModalRef.componentInstance.chapterId = chapter.id;\r\n this.readingListModalRef.componentInstance.type = ADD_FLOW.Chapter;\r\n\r\n\r\n this.readingListModalRef.closed.pipe(take(1)).subscribe(() => {\r\n this.readingListModalRef = null;\r\n if (callback) {\r\n callback(chapter);\r\n }\r\n });\r\n this.readingListModalRef.dismissed.pipe(take(1)).subscribe(() => {\r\n this.readingListModalRef = null;\r\n if (callback) {\r\n callback(chapter);\r\n }\r\n });\r\n }\r\n\r\n editReadingList(readingList: ReadingList, callback?: ReadingListActionCallback) {\r\n const readingListModalRef = this.modalService.open(EditReadingListModalComponent, { scrollable: true, size: 'lg' });\r\n readingListModalRef.componentInstance.readingList = readingList;\r\n readingListModalRef.closed.pipe(take(1)).subscribe((list) => {\r\n if (callback && list !== undefined) {\r\n callback(readingList);\r\n }\r\n });\r\n readingListModalRef.dismissed.pipe(take(1)).subscribe((list) => {\r\n if (callback && list !== undefined) {\r\n callback(readingList);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark all chapters and the volumes as Read. All volumes and chapters must belong to a series\r\n * @param seriesId Series Id\r\n * @param volumes Volumes, should have id, chapters and pagesRead populated\r\n * @param chapters? Chapters, should have id\r\n * @param callback Optional callback to perform actions after API completes\r\n */\r\n async deleteMultipleSeries(seriesIds: Array, callback?: BooleanActionCallback) {\r\n if (!await this.confirmService.confirm(translate('toasts.confirm-delete-multiple-series', {count: seriesIds.length}))) {\r\n if (callback) {\r\n callback(false);\r\n }\r\n return;\r\n }\r\n this.seriesService.deleteMultipleSeries(seriesIds.map(s => s.id)).pipe(take(1)).subscribe(() => {\r\n this.toastr.success(translate('toasts.series-deleted'));\r\n\r\n if (callback) {\r\n callback(true);\r\n }\r\n });\r\n }\r\n\r\n async deleteSeries(series: Series, callback?: BooleanActionCallback) {\r\n if (!await this.confirmService.confirm(translate('toasts.confirm-delete-series'))) {\r\n if (callback) {\r\n callback(false);\r\n }\r\n return;\r\n }\r\n\r\n this.seriesService.delete(series.id).subscribe((res: boolean) => {\r\n if (callback) {\r\n this.toastr.success(translate('toasts.series-deleted'));\r\n callback(res);\r\n }\r\n });\r\n }\r\n\r\n sendToDevice(chapterIds: Array, device: Device, callback?: VoidActionCallback) {\r\n this.deviceService.sendTo(chapterIds, device.id).subscribe(() => {\r\n this.toastr.success(translate('toasts.file-send-to', {name: device.name}));\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n sendSeriesToDevice(seriesId: number, device: Device, callback?: VoidActionCallback) {\r\n this.deviceService.sendSeriesTo(seriesId, device.id).subscribe(() => {\r\n this.toastr.success(translate('toasts.file-send-to', {name: device.name}));\r\n if (callback) {\r\n callback();\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { map } from 'rxjs/operators';\r\nimport { environment } from 'src/environments/environment';\r\nimport { CollectionTag } from '../_models/collection-tag';\r\nimport { TextResonse } from '../_types/text-response';\r\nimport { ImageService } from './image.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CollectionTagService {\r\n\r\n baseUrl = environment.apiUrl;\r\n\r\n constructor(private httpClient: HttpClient, private imageService: ImageService) { }\r\n\r\n allTags() {\r\n return this.httpClient.get(this.baseUrl + 'collection/');\r\n }\r\n\r\n search(query: string) {\r\n return this.httpClient.get(this.baseUrl + 'collection/search?queryString=' + encodeURIComponent(query)).pipe(map(tags => {\r\n tags.forEach(s => s.coverImage = this.imageService.randomize(this.imageService.getCollectionCoverImage(s.id)));\r\n return tags;\r\n }));\r\n }\r\n\r\n updateTag(tag: CollectionTag) {\r\n return this.httpClient.post(this.baseUrl + 'collection/update', tag, TextResonse);\r\n }\r\n\r\n updateSeriesForTag(tag: CollectionTag, seriesIdsToRemove: Array) {\r\n return this.httpClient.post(this.baseUrl + 'collection/update-series', {tag, seriesIdsToRemove}, TextResonse);\r\n }\r\n\r\n addByMultiple(tagId: number, seriesIds: Array, tagTitle: string = '') {\r\n return this.httpClient.post(this.baseUrl + 'collection/update-for-series', {collectionTagId: tagId, collectionTagTitle: tagTitle, seriesIds}, TextResonse);\r\n }\r\n\r\n tagNameExists(name: string) {\r\n return this.httpClient.get(this.baseUrl + 'collection/name-exists?name=' + name);\r\n }\r\n\r\n deleteTag(tagId: number) {\r\n return this.httpClient.delete(this.baseUrl + 'collection?tagId=' + tagId, TextResonse);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {TextResonse} from \"../_types/text-response\";\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {environment} from \"../../environments/environment\";\r\nimport {DashboardStream} from \"../_models/dashboard/dashboard-stream\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DashboardService {\r\n baseUrl = environment.apiUrl;\r\n constructor(private httpClient: HttpClient) { }\r\n\r\n getDashboardStreams(visibleOnly = true) {\r\n return this.httpClient.get>(this.baseUrl + 'stream/dashboard?visibleOnly=' + visibleOnly);\r\n }\r\n\r\n updateDashboardStreamPosition(streamName: string, dashboardStreamId: number, fromPosition: number, toPosition: number) {\r\n return this.httpClient.post(this.baseUrl + 'stream/update-dashboard-position', {streamName, id: dashboardStreamId, fromPosition, toPosition}, TextResonse);\r\n }\r\n\r\n updateDashboardStream(stream: DashboardStream) {\r\n return this.httpClient.post(this.baseUrl + 'stream/update-dashboard-stream', stream, TextResonse);\r\n }\r\n\r\n createDashboardStream(smartFilterId: number) {\r\n return this.httpClient.post(this.baseUrl + 'stream/add-dashboard-stream?smartFilterId=' + smartFilterId, {});\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { ReplaySubject, shareReplay, tap } from 'rxjs';\r\nimport { environment } from 'src/environments/environment';\r\nimport { Device } from '../_models/device/device';\r\nimport { DevicePlatform } from '../_models/device/device-platform';\r\nimport { TextResonse } from '../_types/text-response';\r\nimport { AccountService } from './account.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DeviceService {\r\n\r\n baseUrl = environment.apiUrl;\r\n\r\n private devicesSource: ReplaySubject = new ReplaySubject(1);\r\n public devices$ = this.devicesSource.asObservable().pipe(shareReplay());\r\n\r\n\r\n constructor(private httpClient: HttpClient, private accountService: AccountService) {\r\n // Ensure we are authenticated before we make an authenticated api call.\r\n this.accountService.currentUser$.subscribe(user => {\r\n if (!user) {\r\n this.devicesSource.next([]);\r\n return;\r\n }\r\n\r\n this.httpClient.get(this.baseUrl + 'device', {}).subscribe(data => {\r\n this.devicesSource.next(data);\r\n });\r\n });\r\n }\r\n\r\n createDevice(name: string, platform: DevicePlatform, emailAddress: string) {\r\n return this.httpClient.post(this.baseUrl + 'device/create', {name, platform, emailAddress}, TextResonse);\r\n }\r\n\r\n updateDevice(id: number, name: string, platform: DevicePlatform, emailAddress: string) {\r\n return this.httpClient.post(this.baseUrl + 'device/update', {id, name, platform, emailAddress}, TextResonse);\r\n }\r\n\r\n deleteDevice(id: number) {\r\n return this.httpClient.delete(this.baseUrl + 'device?deviceId=' + id);\r\n }\r\n\r\n getDevices() {\r\n return this.httpClient.get(this.baseUrl + 'device', {}).pipe(tap(data => {\r\n this.devicesSource.next(data);\r\n }));\r\n }\r\n\r\n sendTo(chapterIds: Array, deviceId: number) {\r\n return this.httpClient.post(this.baseUrl + 'device/send-to', {deviceId, chapterIds}, TextResonse);\r\n }\r\n\r\n sendSeriesTo(seriesId: number, deviceId: number) {\r\n return this.httpClient.post(this.baseUrl + 'device/send-series-to', {deviceId, seriesId}, TextResonse);\r\n }\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {SeriesFilterV2} from \"../_models/metadata/v2/series-filter-v2\";\r\nimport {environment} from \"../../environments/environment\";\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {JumpKey} from \"../_models/jumpbar/jump-key\";\r\nimport {SmartFilter} from \"../_models/metadata/v2/smart-filter\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FilterService {\r\n\r\n baseUrl = environment.apiUrl;\r\n constructor(private httpClient: HttpClient) { }\r\n\r\n saveFilter(filter: SeriesFilterV2) {\r\n return this.httpClient.post(this.baseUrl + 'filter/update', filter);\r\n }\r\n getAllFilters() {\r\n return this.httpClient.get>(this.baseUrl + 'filter');\r\n }\r\n deleteFilter(filterId: number) {\r\n return this.httpClient.delete(this.baseUrl + 'filter?filterId=' + filterId);\r\n }\r\n\r\n}\r\n","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\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 updateErroredImage(event: any) {\r\n event.target.src = this.placeholderImage;\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","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { environment } from 'src/environments/environment';\r\nimport { JumpKey } from '../_models/jumpbar/jump-key';\r\nimport { Library, LibraryType } from '../_models/library';\r\nimport { DirectoryDto } from '../_models/system/directory-dto';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LibraryService {\r\n\r\n baseUrl = environment.apiUrl;\r\n\r\n private libraryNames: {[key:number]: string} | undefined = undefined;\r\n private libraryTypes: {[key: number]: LibraryType} | undefined = undefined;\r\n\r\n constructor(private httpClient: HttpClient) {}\r\n\r\n getLibraryNames() {\r\n if (this.libraryNames != undefined) {\r\n return of(this.libraryNames);\r\n }\r\n\r\n return this.httpClient.get(this.baseUrl + 'library').pipe(map(libraries => {\r\n this.libraryNames = {};\r\n libraries.forEach(lib => {\r\n if (this.libraryNames !== undefined) {\r\n this.libraryNames[lib.id] = lib.name;\r\n }\r\n });\r\n return this.libraryNames;\r\n }));\r\n }\r\n\r\n getLibraryName(libraryId: number) {\r\n if (this.libraryNames != undefined && this.libraryNames.hasOwnProperty(libraryId)) {\r\n return of(this.libraryNames[libraryId]);\r\n }\r\n return this.httpClient.get(this.baseUrl + 'library').pipe(map(l => {\r\n this.libraryNames = {};\r\n l.forEach(lib => {\r\n if (this.libraryNames !== undefined) {\r\n this.libraryNames[lib.id] = lib.name;\r\n }\r\n });\r\n return this.libraryNames[libraryId];\r\n }));\r\n }\r\n\r\n libraryNameExists(name: string) {\r\n return this.httpClient.get(this.baseUrl + 'library/name-exists?name=' + name);\r\n }\r\n\r\n listDirectories(rootPath: string) {\r\n let query = '';\r\n if (rootPath !== undefined && rootPath.length > 0) {\r\n query = '?path=' + encodeURIComponent(rootPath);\r\n }\r\n\r\n return this.httpClient.get(this.baseUrl + 'library/list' + query);\r\n }\r\n\r\n getJumpBar(libraryId: number) {\r\n return this.httpClient.get(this.baseUrl + 'library/jump-bar?libraryId=' + libraryId);\r\n }\r\n\r\n getLibraries() {\r\n return this.httpClient.get(this.baseUrl + 'library');\r\n }\r\n\r\n updateLibrariesForMember(username: string, selectedLibraries: Library[]) {\r\n return this.httpClient.post(this.baseUrl + 'library/grant-access', {username, selectedLibraries});\r\n }\r\n\r\n scan(libraryId: number, force = false) {\r\n return this.httpClient.post(this.baseUrl + 'library/scan?libraryId=' + libraryId + '&force=' + force, {});\r\n }\r\n\r\n analyze(libraryId: number) {\r\n return this.httpClient.post(this.baseUrl + 'library/analyze?libraryId=' + libraryId, {});\r\n }\r\n\r\n refreshMetadata(libraryId: number, forceUpdate = false) {\r\n return this.httpClient.post(this.baseUrl + 'library/refresh-metadata?libraryId=' + libraryId + '&force=' + forceUpdate, {});\r\n }\r\n\r\n create(model: {name: string, type: number, folders: string[]}) {\r\n return this.httpClient.post(this.baseUrl + 'library/create', model);\r\n }\r\n\r\n delete(libraryId: number) {\r\n return this.httpClient.delete(this.baseUrl + 'library/delete?libraryId=' + libraryId, {});\r\n }\r\n\r\n update(model: {name: string, folders: string[], id: number}) {\r\n return this.httpClient.post(this.baseUrl + 'library/update', model);\r\n }\r\n\r\n getLibraryType(libraryId: number) {\r\n if (this.libraryTypes != undefined && this.libraryTypes.hasOwnProperty(libraryId)) {\r\n return of(this.libraryTypes[libraryId]);\r\n }\r\n return this.httpClient.get(this.baseUrl + 'library/type?libraryId=' + libraryId).pipe(map(l => {\r\n if (this.libraryTypes === undefined) {\r\n this.libraryTypes = {};\r\n }\r\n\r\n this.libraryTypes[libraryId] = l;\r\n return this.libraryTypes[libraryId];\r\n }));\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { environment } from 'src/environments/environment';\r\nimport { Member } from '../_models/auth/member';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MemberService {\r\n\r\n baseUrl = environment.apiUrl;\r\n\r\n constructor(private httpClient: HttpClient) { }\r\n\r\n getMembers(includePending: boolean = false) {\r\n return this.httpClient.get(this.baseUrl + 'users?includePending=' + includePending);\r\n }\r\n\r\n getMemberNames() {\r\n return this.httpClient.get(this.baseUrl + 'users/names');\r\n }\r\n\r\n adminExists() {\r\n return this.httpClient.get(this.baseUrl + 'admin/exists');\r\n }\r\n\r\n deleteMember(username: string) {\r\n return this.httpClient.delete(this.baseUrl + 'users/delete-user?username=' + encodeURIComponent(username));\r\n }\r\n\r\n hasLibraryAccess(libraryId: number) {\r\n return this.httpClient.get(this.baseUrl + 'users/has-library-access?libraryId=' + libraryId);\r\n }\r\n\r\n hasReadingProgress(librayId: number) {\r\n return this.httpClient.get(this.baseUrl + 'users/has-reading-progress?libraryId=' + librayId);\r\n }\r\n\r\n addSeriesToWantToRead(seriesIds: Array) {\r\n return this.httpClient.post>(this.baseUrl + 'want-to-read/add-series', {seriesIds});\r\n }\r\n\r\n removeSeriesToWantToRead(seriesIds: Array) {\r\n return this.httpClient.post>(this.baseUrl + 'want-to-read/remove-series', {seriesIds});\r\n }\r\n\r\n getMember() {\r\n return this.httpClient.get(this.baseUrl + 'users/myself');\r\n }\r\n \r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HubConnection, HubConnectionBuilder } from '@microsoft/signalr';\r\nimport { BehaviorSubject, ReplaySubject } from 'rxjs';\r\nimport { environment } from 'src/environments/environment';\r\nimport { LibraryModifiedEvent } from '../_models/events/library-modified-event';\r\nimport { NotificationProgressEvent } from '../_models/events/notification-progress-event';\r\nimport { ThemeProgressEvent } from '../_models/events/theme-progress-event';\r\nimport { UserUpdateEvent } from '../_models/events/user-update-event';\r\nimport { User } from '../_models/user';\r\nimport {DashboardUpdateEvent} from \"../_models/events/dashboard-update-event\";\r\nimport {SideNavUpdateEvent} from \"../_models/events/sidenav-update-event\";\r\n\r\nexport enum EVENTS {\r\n UpdateAvailable = 'UpdateAvailable',\r\n ScanSeries = 'ScanSeries',\r\n SeriesAdded = 'SeriesAdded',\r\n SeriesRemoved = 'SeriesRemoved',\r\n ScanLibraryProgress = 'ScanLibraryProgress',\r\n OnlineUsers = 'OnlineUsers',\r\n SeriesAddedToCollection = 'SeriesAddedToCollection',\r\n /**\r\n * A generic error that occurs during operations on the server\r\n */\r\n Error = 'Error',\r\n BackupDatabaseProgress = 'BackupDatabaseProgress',\r\n /**\r\n * A subtype of NotificationProgress that represents maintenance cleanup on server-owned resources\r\n */\r\n CleanupProgress = 'CleanupProgress',\r\n /**\r\n * A subtype of NotificationProgress that represnts a user downloading a file or group of files.\r\n * Note: In v0.5.5, this is being replaced by an inbrowser experience. The message is changed and this will be moved to dashboard view once built\r\n */\r\n DownloadProgress = 'DownloadProgress',\r\n /**\r\n * A generic progress event\r\n */\r\n NotificationProgress = 'NotificationProgress',\r\n /**\r\n * A subtype of NotificationProgress that represents the underlying file being processed during a scan\r\n */\r\n FileScanProgress = 'FileScanProgress',\r\n /**\r\n * A custom user site theme is added or removed during a scan\r\n */\r\n SiteThemeProgress = 'SiteThemeProgress',\r\n /**\r\n * A cover is updated\r\n */\r\n CoverUpdate = 'CoverUpdate',\r\n /**\r\n * A subtype of NotificationProgress that represents a file being processed for cover image extraction\r\n */\r\n CoverUpdateProgress = 'CoverUpdateProgress',\r\n /**\r\n * A library is created or removed from the instance\r\n */\r\n LibraryModified = 'LibraryModified',\r\n /**\r\n * A user updates an entities read progress\r\n */\r\n UserProgressUpdate = 'UserProgressUpdate',\r\n /**\r\n * A user updates account or preferences\r\n */\r\n UserUpdate = 'UserUpdate',\r\n /**\r\n * When bulk bookmarks are being converted\r\n */\r\n ConvertBookmarksProgress = 'ConvertBookmarksProgress',\r\n /**\r\n * When files are being scanned to calculate word count\r\n */\r\n WordCountAnalyzerProgress = 'WordCountAnalyzerProgress',\r\n /**\r\n * When the user needs to be informed, but it's not a big deal\r\n */\r\n Info = 'Info',\r\n /**\r\n * A user is sending files to their device\r\n */\r\n SendingToDevice = 'SendingToDevice',\r\n /**\r\n * A scrobbling token has expired\r\n */\r\n ScrobblingKeyExpired = 'ScrobblingKeyExpired',\r\n /**\r\n * User's dashboard needs to be re-rendered\r\n */\r\n DashboardUpdate = 'DashboardUpdate',\r\n /**\r\n * User's sidenav needs to be re-rendered\r\n */\r\n SideNavUpdate = 'SideNavUpdate'\r\n}\r\n\r\nexport interface Message {\r\n event: EVENTS;\r\n payload: T;\r\n}\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MessageHubService {\r\n hubUrl = environment.hubUrl;\r\n private hubConnection!: HubConnection;\r\n\r\n private messagesSource = new ReplaySubject>(1);\r\n private onlineUsersSource = new BehaviorSubject([]); // UserNames\r\n\r\n /**\r\n * Any events that come from the backend\r\n */\r\n public messages$ = this.messagesSource.asObservable();\r\n /**\r\n * Users that are online\r\n */\r\n public onlineUsers$ = this.onlineUsersSource.asObservable();\r\n\r\n constructor() {}\r\n\r\n /**\r\n * Tests that an event is of the type passed\r\n * @param event\r\n * @param eventType\r\n * @returns\r\n */\r\n public isEventType(event: Message, eventType: EVENTS) {\r\n if (event.event == EVENTS.NotificationProgress) {\r\n const notification = event.payload as NotificationProgressEvent;\r\n return notification.eventType.toLowerCase() == eventType.toLowerCase();\r\n }\r\n return event.event === eventType;\r\n }\r\n\r\n createHubConnection(user: User) {\r\n this.hubConnection = new HubConnectionBuilder()\r\n .withUrl(this.hubUrl + 'messages', {\r\n accessTokenFactory: () => user.token\r\n })\r\n .withAutomaticReconnect()\r\n .build();\r\n\r\n this.hubConnection\r\n .start()\r\n .catch(err => console.error(err));\r\n\r\n this.hubConnection.on(EVENTS.OnlineUsers, (usernames: string[]) => {\r\n this.onlineUsersSource.next(usernames);\r\n });\r\n\r\n this.hubConnection.on(EVENTS.ScanSeries, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.ScanSeries,\r\n payload: resp.body\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.ScanLibraryProgress, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.ScanLibraryProgress,\r\n payload: resp.body\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.ConvertBookmarksProgress, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.ConvertBookmarksProgress,\r\n payload: resp.body\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.WordCountAnalyzerProgress, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.WordCountAnalyzerProgress,\r\n payload: resp.body\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.LibraryModified, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.LibraryModified,\r\n payload: resp.body as LibraryModifiedEvent\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.DashboardUpdate, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.DashboardUpdate,\r\n payload: resp.body as DashboardUpdateEvent\r\n });\r\n });\r\n this.hubConnection.on(EVENTS.SideNavUpdate, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.SideNavUpdate,\r\n payload: resp.body as SideNavUpdateEvent\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.NotificationProgress, (resp: NotificationProgressEvent) => {\r\n this.messagesSource.next({\r\n event: EVENTS.NotificationProgress,\r\n payload: resp\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.SiteThemeProgress, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.SiteThemeProgress,\r\n payload: resp.body as ThemeProgressEvent\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.SeriesAddedToCollection, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.SeriesAddedToCollection,\r\n payload: resp.body\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.UserProgressUpdate, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.UserProgressUpdate,\r\n payload: resp.body\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.UserUpdate, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.UserUpdate,\r\n payload: resp.body as UserUpdateEvent\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.Error, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.Error,\r\n payload: resp.body\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.Info, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.Info,\r\n payload: resp.body\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.SeriesAdded, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.SeriesAdded,\r\n payload: resp.body\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.SeriesRemoved, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.SeriesRemoved,\r\n payload: resp.body\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.CoverUpdate, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.CoverUpdate,\r\n payload: resp.body\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.UpdateAvailable, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.UpdateAvailable,\r\n payload: resp.body\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.SendingToDevice, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.SendingToDevice,\r\n payload: resp.body\r\n });\r\n });\r\n\r\n this.hubConnection.on(EVENTS.ScrobblingKeyExpired, resp => {\r\n this.messagesSource.next({\r\n event: EVENTS.ScrobblingKeyExpired,\r\n payload: resp.body\r\n });\r\n });\r\n }\r\n\r\n stopHubConnection() {\r\n if (this.hubConnection) {\r\n this.hubConnection.stop().catch(err => console.error(err));\r\n }\r\n }\r\n\r\n sendMessage(methodName: string, body?: any) {\r\n return this.hubConnection.invoke(methodName, body);\r\n }\r\n\r\n}\r\n","import {HttpClient} from '@angular/common/http';\r\nimport {Injectable} from '@angular/core';\r\nimport {map, tap} from 'rxjs/operators';\r\nimport {of, ReplaySubject, switchMap} from 'rxjs';\r\nimport {environment} from 'src/environments/environment';\r\nimport {Genre} from '../_models/metadata/genre';\r\nimport {AgeRating} from '../_models/metadata/age-rating';\r\nimport {AgeRatingDto} from '../_models/metadata/age-rating-dto';\r\nimport {Language} from '../_models/metadata/language';\r\nimport {PublicationStatusDto} from '../_models/metadata/publication-status-dto';\r\nimport {Person, PersonRole} from '../_models/metadata/person';\r\nimport {Tag} from '../_models/tag';\r\nimport {TextResonse} from '../_types/text-response';\r\nimport {FilterComparison} from '../_models/metadata/v2/filter-comparison';\r\nimport {FilterField} from '../_models/metadata/v2/filter-field';\r\nimport {Router} from \"@angular/router\";\r\nimport {SortField} from \"../_models/metadata/series-filter\";\r\nimport {FilterCombination} from \"../_models/metadata/v2/filter-combination\";\r\nimport {SeriesFilterV2} from \"../_models/metadata/v2/series-filter-v2\";\r\nimport {FilterStatement} from \"../_models/metadata/v2/filter-statement\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MetadataService {\r\n\r\n baseUrl = environment.apiUrl;\r\n private validLanguages: Array = [];\r\n\r\n constructor(private httpClient: HttpClient, private router: Router) { }\r\n\r\n getAllAgeRatings(libraries?: Array) {\r\n let method = 'metadata/age-ratings'\r\n if (libraries != undefined && libraries.length > 0) {\r\n method += '?libraryIds=' + libraries.join(',');\r\n }\r\n return this.httpClient.get>(this.baseUrl + method);\r\n }\r\n\r\n getAllPublicationStatus(libraries?: Array) {\r\n let method = 'metadata/publication-status'\r\n if (libraries != undefined && libraries.length > 0) {\r\n method += '?libraryIds=' + libraries.join(',');\r\n }\r\n return this.httpClient.get>(this.baseUrl + method);\r\n }\r\n\r\n getAllTags(libraries?: Array) {\r\n let method = 'metadata/tags'\r\n if (libraries != undefined && libraries.length > 0) {\r\n method += '?libraryIds=' + libraries.join(',');\r\n }\r\n return this.httpClient.get>(this.baseUrl + method);\r\n }\r\n\r\n getAllGenres(libraries?: Array) {\r\n let method = 'metadata/genres'\r\n if (libraries != undefined && libraries.length > 0) {\r\n method += '?libraryIds=' + libraries.join(',');\r\n }\r\n return this.httpClient.get>(this.baseUrl + method);\r\n }\r\n\r\n getAllLanguages(libraries?: Array) {\r\n let method = 'metadata/languages'\r\n if (libraries != undefined && libraries.length > 0) {\r\n method += '?libraryIds=' + libraries.join(',');\r\n }\r\n return this.httpClient.get>(this.baseUrl + method);\r\n }\r\n\r\n\r\n /**\r\n * All the potential language tags there can be\r\n */\r\n getAllValidLanguages() {\r\n if (this.validLanguages != undefined && this.validLanguages.length > 0) {\r\n return of(this.validLanguages);\r\n }\r\n return this.httpClient.get>(this.baseUrl + 'metadata/all-languages')\r\n .pipe(tap(l => this.validLanguages = l));\r\n }\r\n\r\n getAllPeople(libraries?: Array) {\r\n let method = 'metadata/people'\r\n if (libraries != undefined && libraries.length > 0) {\r\n method += '?libraryIds=' + libraries.join(',');\r\n }\r\n return this.httpClient.get>(this.baseUrl + method);\r\n }\r\n\r\n getAllPeopleByRole(role: PersonRole) {\r\n return this.httpClient.get>(this.baseUrl + 'metadata/people-by-role?role=' + role);\r\n }\r\n\r\n // getChapterSummary(chapterId: number) {\r\n // return this.httpClient.get(this.baseUrl + 'metadata/chapter-summary?chapterId=' + chapterId, TextResonse);\r\n // }\r\n\r\n createDefaultFilterDto(): SeriesFilterV2 {\r\n return {\r\n statements: [] as FilterStatement[],\r\n combination: FilterCombination.And,\r\n limitTo: 0,\r\n sortOptions: {\r\n isAscending: true,\r\n sortField: SortField.SortName\r\n }\r\n };\r\n }\r\n\r\n createDefaultFilterStatement(field: FilterField = FilterField.SeriesName, comparison = FilterComparison.Equal, value = '') {\r\n return {\r\n comparison: comparison,\r\n field: field,\r\n value: value\r\n };\r\n }\r\n\r\n updateFilter(arr: Array, index: number, filterStmt: FilterStatement) {\r\n arr[index].comparison = filterStmt.comparison;\r\n arr[index].field = filterStmt.field;\r\n arr[index].value = filterStmt.value ? filterStmt.value + '' : '';\r\n }\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\r\nimport { ReplaySubject, take } from 'rxjs';\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {environment} from \"../../environments/environment\";\r\nimport {SideNavStream} from \"../_models/sidenav/sidenav-stream\";\r\nimport {TextResonse} from \"../_types/text-response\";\r\nimport {DashboardStream} from \"../_models/dashboard/dashboard-stream\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NavService {\r\n public localStorageSideNavKey = 'kavita--sidenav--expanded';\r\n\r\n private navbarVisibleSource = new ReplaySubject(1);\r\n /**\r\n * If the top Nav bar is rendered or not\r\n */\r\n navbarVisible$ = this.navbarVisibleSource.asObservable();\r\n\r\n private sideNavCollapseSource = new ReplaySubject(1);\r\n /**\r\n * If the Side Nav is in a collapsed state or not.\r\n */\r\n sideNavCollapsed$ = this.sideNavCollapseSource.asObservable();\r\n\r\n private sideNavVisibilitySource = new ReplaySubject(1);\r\n /**\r\n * If the side nav is rendered or not into the DOM.\r\n */\r\n sideNavVisibility$ = this.sideNavVisibilitySource.asObservable();\r\n\r\n private renderer: Renderer2;\r\n baseUrl = environment.apiUrl;\r\n\r\n constructor(@Inject(DOCUMENT) private document: Document, rendererFactory: RendererFactory2, private httpClient: HttpClient) {\r\n this.renderer = rendererFactory.createRenderer(null, null);\r\n this.showNavBar();\r\n const sideNavState = (localStorage.getItem(this.localStorageSideNavKey) === 'true') || false;\r\n this.sideNavCollapseSource.next(sideNavState);\r\n this.showSideNav();\r\n }\r\n\r\n getSideNavStreams(visibleOnly = true) {\r\n return this.httpClient.get>(this.baseUrl + 'stream/sidenav?visibleOnly=' + visibleOnly);\r\n }\r\n\r\n updateSideNavStreamPosition(streamName: string, sideNavStreamId: number, fromPosition: number, toPosition: number) {\r\n return this.httpClient.post(this.baseUrl + 'stream/update-sidenav-position', {streamName, id: sideNavStreamId, fromPosition, toPosition}, TextResonse);\r\n }\r\n\r\n updateSideNavStream(stream: SideNavStream) {\r\n return this.httpClient.post(this.baseUrl + 'stream/update-sidenav-stream', stream, TextResonse);\r\n }\r\n\r\n createSideNavStream(smartFilterId: number) {\r\n return this.httpClient.post(this.baseUrl + 'stream/add-sidenav-stream?smartFilterId=' + smartFilterId, {});\r\n }\r\n\r\n createSideNavStreamFromExternalSource(externalSourceId: number) {\r\n return this.httpClient.post(this.baseUrl + 'stream/add-sidenav-stream-from-external-source?externalSourceId=' + externalSourceId, {});\r\n }\r\n\r\n bulkToggleSideNavStreamVisibility(streamIds: Array, targetVisibility: boolean) {\r\n return this.httpClient.post(this.baseUrl + 'stream/bulk-sidenav-stream-visibility', {ids: streamIds, visibility: targetVisibility});\r\n }\r\n\r\n /**\r\n * Shows the top nav bar. This should be visible on all pages except the reader.\r\n */\r\n showNavBar() {\r\n this.renderer.setStyle(this.document.querySelector('body'), 'margin-top', '56px');\r\n this.renderer.setStyle(this.document.querySelector('body'), 'height', 'calc(var(--vh)*100 - 56px)');\r\n this.renderer.setStyle(this.document.querySelector('html'), 'height', 'calc(var(--vh)*100 - 56px)');\r\n this.navbarVisibleSource.next(true);\r\n }\r\n\r\n /**\r\n * Hides the top nav bar.\r\n */\r\n hideNavBar() {\r\n this.renderer.setStyle(this.document.querySelector('body'), 'margin-top', '0px');\r\n this.renderer.removeStyle(this.document.querySelector('body'), 'height');\r\n this.renderer.removeStyle(this.document.querySelector('html'), 'height');\r\n this.navbarVisibleSource.next(false);\r\n }\r\n\r\n /**\r\n * Shows the side nav. When being visible, the side nav will automatically return to previous collapsed state.\r\n */\r\n showSideNav() {\r\n this.sideNavVisibilitySource.next(true);\r\n }\r\n\r\n /**\r\n * Hides the side nav. This is useful for the readers and login page.\r\n */\r\n hideSideNav() {\r\n this.sideNavVisibilitySource.next(false);\r\n }\r\n\r\n toggleSideNav() {\r\n this.sideNavCollapseSource.pipe(take(1)).subscribe(val => {\r\n if (val === undefined) val = false;\r\n const newVal = !(val || false);\r\n this.sideNavCollapseSource.next(newVal);\r\n localStorage.setItem(this.localStorageSideNavKey, newVal + '');\r\n });\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport {DestroyRef, inject, Injectable} from '@angular/core';\r\nimport {Location} from '@angular/common';\r\nimport { Router } from '@angular/router';\r\nimport { environment } from 'src/environments/environment';\r\nimport { ChapterInfo } from '../manga-reader/_models/chapter-info';\r\nimport { Chapter } from '../_models/chapter';\r\nimport { HourEstimateRange } from '../_models/series-detail/hour-estimate-range';\r\nimport { MangaFormat } from '../_models/manga-format';\r\nimport { BookmarkInfo } from '../_models/manga-reader/bookmark-info';\r\nimport { PageBookmark } from '../_models/readers/page-bookmark';\r\nimport { ProgressBookmark } from '../_models/readers/progress-bookmark';\r\nimport { UtilityService } from '../shared/_services/utility.service';\r\nimport { FilterUtilitiesService } from '../shared/_services/filter-utilities.service';\r\nimport { FileDimension } from '../manga-reader/_models/file-dimension';\r\nimport screenfull from 'screenfull';\r\nimport { TextResonse } from '../_types/text-response';\r\nimport { AccountService } from './account.service';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {PersonalToC} from \"../_models/readers/personal-toc\";\r\nimport {SeriesFilterV2} from \"../_models/metadata/v2/series-filter-v2\";\r\n\r\nexport const CHAPTER_ID_DOESNT_EXIST = -1;\r\nexport const CHAPTER_ID_NOT_FETCHED = -2;\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ReaderService {\r\n\r\n private readonly destroyRef = inject(DestroyRef);\r\n baseUrl = environment.apiUrl;\r\n encodedKey: string = '';\r\n\r\n // Override background color for reader and restore it onDestroy\r\n private originalBodyColor!: string;\r\n\r\n constructor(private httpClient: HttpClient, private router: Router,\r\n private location: Location, private utilityService: UtilityService,\r\n private filterUtilityService: FilterUtilitiesService, private accountService: AccountService) {\r\n this.accountService.currentUser$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(user => {\r\n if (user) {\r\n this.encodedKey = encodeURIComponent(user.apiKey);\r\n }\r\n });\r\n }\r\n\r\n\r\n getNavigationArray(libraryId: number, seriesId: number, chapterId: number, format: MangaFormat) {\r\n if (format === undefined) format = MangaFormat.ARCHIVE;\r\n\r\n if (format === MangaFormat.EPUB) {\r\n return ['library', libraryId, 'series', seriesId, 'book', chapterId];\r\n } else if (format === MangaFormat.PDF) {\r\n return ['library', libraryId, 'series', seriesId, 'pdf', chapterId];\r\n } else {\r\n return ['library', libraryId, 'series', seriesId, 'manga', chapterId];\r\n }\r\n }\r\n\r\n downloadPdf(chapterId: number) {\r\n return `${this.baseUrl}reader/pdf?chapterId=${chapterId}&apiKey=${this.encodedKey}`;\r\n }\r\n\r\n bookmark(seriesId: number, volumeId: number, chapterId: number, page: number) {\r\n return this.httpClient.post(this.baseUrl + 'reader/bookmark', {seriesId, volumeId, chapterId, page});\r\n }\r\n\r\n unbookmark(seriesId: number, volumeId: number, chapterId: number, page: number) {\r\n return this.httpClient.post(this.baseUrl + 'reader/unbookmark', {seriesId, volumeId, chapterId, page});\r\n }\r\n\r\n getAllBookmarks(filter: SeriesFilterV2 | undefined) {\r\n return this.httpClient.post(this.baseUrl + 'reader/all-bookmarks', filter);\r\n }\r\n\r\n getBookmarks(chapterId: number) {\r\n return this.httpClient.get(this.baseUrl + 'reader/chapter-bookmarks?chapterId=' + chapterId);\r\n }\r\n\r\n getBookmarksForVolume(volumeId: number) {\r\n return this.httpClient.get(this.baseUrl + 'reader/volume-bookmarks?volumeId=' + volumeId);\r\n }\r\n\r\n getBookmarksForSeries(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'reader/series-bookmarks?seriesId=' + seriesId);\r\n }\r\n\r\n clearBookmarks(seriesId: number) {\r\n return this.httpClient.post(this.baseUrl + 'reader/remove-bookmarks', {seriesId}, TextResonse);\r\n }\r\n clearMultipleBookmarks(seriesIds: Array) {\r\n return this.httpClient.post(this.baseUrl + 'reader/bulk-remove-bookmarks', {seriesIds}, TextResonse);\r\n }\r\n\r\n /**\r\n * Used exclusively for reading multiple bookmarks from a series\r\n * @param seriesId\r\n */\r\n getBookmarkInfo(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'reader/bookmark-info?seriesId=' + seriesId);\r\n }\r\n\r\n getProgress(chapterId: number) {\r\n return this.httpClient.get(this.baseUrl + 'reader/get-progress?chapterId=' + chapterId);\r\n }\r\n\r\n getPageUrl(chapterId: number, page: number) {\r\n return `${this.baseUrl}reader/image?chapterId=${chapterId}&apiKey=${this.encodedKey}&page=${page}`;\r\n }\r\n\r\n getThumbnailUrl(chapterId: number, page: number) {\r\n return `${this.baseUrl}reader/thumbnail?chapterId=${chapterId}&apiKey=${this.encodedKey}&page=${page}`;\r\n }\r\n\r\n getBookmarkPageUrl(seriesId: number, apiKey: string, page: number) {\r\n return this.baseUrl + 'reader/bookmark-image?seriesId=' + seriesId + '&page=' + page + '&apiKey=' + encodeURIComponent(apiKey);\r\n }\r\n\r\n getChapterInfo(chapterId: number, includeDimensions = false) {\r\n return this.httpClient.get(this.baseUrl + 'reader/chapter-info?chapterId=' + chapterId + '&includeDimensions=' + includeDimensions);\r\n }\r\n\r\n getFileDimensions(chapterId: number) {\r\n return this.httpClient.get>(this.baseUrl + 'reader/file-dimensions?chapterId=' + chapterId);\r\n }\r\n\r\n saveProgress(libraryId: number, seriesId: number, volumeId: number, chapterId: number, page: number, bookScrollId: string | null = null) {\r\n return this.httpClient.post(this.baseUrl + 'reader/progress', {libraryId, seriesId, volumeId, chapterId, pageNum: page, bookScrollId});\r\n }\r\n\r\n markVolumeRead(seriesId: number, volumeId: number) {\r\n return this.httpClient.post(this.baseUrl + 'reader/mark-volume-read', {seriesId, volumeId});\r\n }\r\n\r\n markMultipleRead(seriesId: number, volumeIds: Array, chapterIds?: Array) {\r\n return this.httpClient.post(this.baseUrl + 'reader/mark-multiple-read', {seriesId, volumeIds, chapterIds});\r\n }\r\n\r\n markMultipleUnread(seriesId: number, volumeIds: Array, chapterIds?: Array) {\r\n return this.httpClient.post(this.baseUrl + 'reader/mark-multiple-unread', {seriesId, volumeIds, chapterIds});\r\n }\r\n\r\n markMultipleSeriesRead(seriesIds: Array) {\r\n return this.httpClient.post(this.baseUrl + 'reader/mark-multiple-series-read', {seriesIds});\r\n }\r\n\r\n markMultipleSeriesUnread(seriesIds: Array) {\r\n return this.httpClient.post(this.baseUrl + 'reader/mark-multiple-series-unread', {seriesIds});\r\n }\r\n\r\n markVolumeUnread(seriesId: number, volumeId: number) {\r\n return this.httpClient.post(this.baseUrl + 'reader/mark-volume-unread', {seriesId, volumeId});\r\n }\r\n\r\n\r\n getNextChapter(seriesId: number, volumeId: number, currentChapterId: number, readingListId: number = -1) {\r\n if (readingListId > 0) {\r\n return this.httpClient.get(this.baseUrl + 'readinglist/next-chapter?seriesId=' + seriesId + '¤tChapterId=' + currentChapterId + '&readingListId=' + readingListId);\r\n }\r\n return this.httpClient.get(this.baseUrl + 'reader/next-chapter?seriesId=' + seriesId + '&volumeId=' + volumeId + '¤tChapterId=' + currentChapterId);\r\n }\r\n\r\n getPrevChapter(seriesId: number, volumeId: number, currentChapterId: number, readingListId: number = -1) {\r\n if (readingListId > 0) {\r\n return this.httpClient.get(this.baseUrl + 'readinglist/prev-chapter?seriesId=' + seriesId + '¤tChapterId=' + currentChapterId + '&readingListId=' + readingListId);\r\n }\r\n return this.httpClient.get(this.baseUrl + 'reader/prev-chapter?seriesId=' + seriesId + '&volumeId=' + volumeId + '¤tChapterId=' + currentChapterId);\r\n }\r\n\r\n hasSeriesProgress(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'reader/has-progress?seriesId=' + seriesId);\r\n }\r\n\r\n getCurrentChapter(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'reader/continue-point?seriesId=' + seriesId);\r\n }\r\n\r\n getTimeLeft(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'reader/time-left?seriesId=' + seriesId);\r\n }\r\n\r\n /**\r\n * Captures current body color and forces background color to be black. Call @see resetOverrideStyles() on destroy of component to revert changes\r\n */\r\n setOverrideStyles(backgroundColor: string = 'black') {\r\n const bodyNode = document.querySelector('body');\r\n if (bodyNode !== undefined && bodyNode !== null) {\r\n this.originalBodyColor = bodyNode.style.background;\r\n bodyNode.setAttribute('style', 'background-color: ' + backgroundColor + ' !important');\r\n }\r\n }\r\n\r\n resetOverrideStyles() {\r\n const bodyNode = document.querySelector('body');\r\n if (bodyNode !== undefined && bodyNode !== null && this.originalBodyColor !== undefined) {\r\n bodyNode.style.background = this.originalBodyColor;\r\n }\r\n }\r\n\r\n /**\r\n * Parses out the page number from a Image src url\r\n * @param imageSrc Src attribute of Image\r\n * @returns\r\n */\r\n imageUrlToPageNum(imageSrc: string) {\r\n if (imageSrc === undefined || imageSrc === '') { return -1; }\r\n const params = new URLSearchParams(new URL(imageSrc).search);\r\n return parseInt(params.get('page') || '-1', 10);\r\n }\r\n\r\n imageUrlToChapterId(imageSrc: string) {\r\n if (imageSrc === undefined || imageSrc === '') { return -1; }\r\n const params = new URLSearchParams(new URL(imageSrc).search);\r\n return parseInt(params.get('chapterId') || '-1', 10);\r\n }\r\n\r\n getNextChapterUrl(url: string, nextChapterId: number, incognitoMode: boolean = false, readingListMode: boolean = false, readingListId: number = -1) {\r\n const lastSlashIndex = url.lastIndexOf('/');\r\n let newRoute = url.substring(0, lastSlashIndex + 1) + nextChapterId + '';\r\n newRoute += this.getQueryParams(incognitoMode, readingListMode, readingListId);\r\n return newRoute;\r\n }\r\n\r\n\r\n getQueryParamsObject(incognitoMode: boolean = false, readingListMode: boolean = false, readingListId: number = -1) {\r\n let params: {[key: string]: any} = {};\r\n if (incognitoMode) {\r\n params['incognitoMode'] = true;\r\n }\r\n if (readingListMode) {\r\n params['readingListId'] = readingListId;\r\n }\r\n return params;\r\n }\r\n\r\n getQueryParams(incognitoMode: boolean = false, readingListMode: boolean = false, readingListId: number = -1) {\r\n let params = '';\r\n if (incognitoMode) {\r\n params += '?incognitoMode=true';\r\n }\r\n if (readingListMode) {\r\n if (params.indexOf('?') > 0) {\r\n params += '&readingListId=' + readingListId;\r\n } else {\r\n params += '?readingListId=' + readingListId;\r\n }\r\n }\r\n return params;\r\n }\r\n\r\n toggleFullscreen(el: Element, callback?: VoidFunction) {\r\n\r\n if (screenfull.isEnabled) {\r\n screenfull.toggle();\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @returns If document is in fullscreen mode\r\n */\r\n checkFullscreenMode() {\r\n return document.fullscreenElement != null;\r\n }\r\n\r\n /**\r\n * Closes the reader and causes a redirection\r\n */\r\n closeReader(readingListMode: boolean = false, readingListId: number = 0) {\r\n if (readingListMode) {\r\n this.router.navigateByUrl('lists/' + readingListId);\r\n } else {\r\n this.location.back();\r\n }\r\n }\r\n\r\n removePersonalToc(chapterId: number, pageNumber: number, title: string) {\r\n return this.httpClient.delete(this.baseUrl + `reader/ptoc?chapterId=${chapterId}&pageNum=${pageNumber}&title=${encodeURIComponent(title)}`);\r\n }\r\n\r\n getPersonalToC(chapterId: number) {\r\n return this.httpClient.get>(this.baseUrl + 'reader/ptoc?chapterId=' + chapterId);\r\n }\r\n\r\n createPersonalToC(libraryId: number, seriesId: number, volumeId: number, chapterId: number, pageNumber: number, title: string, bookScrollId: string | null) {\r\n return this.httpClient.post(this.baseUrl + 'reader/create-ptoc', {libraryId, seriesId, volumeId, chapterId, pageNumber, title, bookScrollId});\r\n }\r\n\r\n getElementFromXPath(path: string) {\r\n const node = document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;\r\n if (node?.nodeType === Node.ELEMENT_NODE) {\r\n return node as Element;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n *\r\n * @param element\r\n * @param pureXPath Will ignore shortcuts like id('')\r\n */\r\n getXPathTo(element: any, pureXPath = false): string {\r\n if (element === null) return '';\r\n if (!pureXPath) {\r\n if (element.id !== '') { return 'id(\"' + element.id + '\")'; }\r\n if (element === document.body) { return element.tagName; }\r\n }\r\n\r\n\r\n let ix = 0;\r\n const siblings = element.parentNode?.childNodes || [];\r\n for (let sibling of siblings) {\r\n if (sibling === element) {\r\n return this.getXPathTo(element.parentNode) + '/' + element.tagName + '[' + (ix + 1) + ']';\r\n }\r\n if (sibling.nodeType === 1 && sibling.tagName === element.tagName) {\r\n ix++;\r\n }\r\n\r\n }\r\n return '';\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { map } from 'rxjs/operators';\r\nimport { environment } from 'src/environments/environment';\r\nimport { UtilityService } from '../shared/_services/utility.service';\r\nimport { Person } from '../_models/metadata/person';\r\nimport { PaginatedResult } from '../_models/pagination';\r\nimport { ReadingList, ReadingListItem } from '../_models/reading-list';\r\nimport { CblImportSummary } from '../_models/reading-list/cbl/cbl-import-summary';\r\nimport { TextResonse } from '../_types/text-response';\r\nimport { ActionItem } from './action-factory.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ReadingListService {\r\n\r\n baseUrl = environment.apiUrl;\r\n\r\n constructor(private httpClient: HttpClient, private utilityService: UtilityService) { }\r\n\r\n getReadingList(readingListId: number) {\r\n return this.httpClient.get(this.baseUrl + 'readinglist?readingListId=' + readingListId);\r\n }\r\n\r\n getReadingLists(includePromoted: boolean = true, sortByLastModified: boolean = false, pageNum?: number, itemsPerPage?: number) {\r\n let params = new HttpParams();\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n\r\n return this.httpClient.post>(this.baseUrl + 'readinglist/lists?includePromoted=' + includePromoted\r\n + '&sortByLastModified=' + sortByLastModified, {}, {observe: 'response', params}).pipe(\r\n map((response: any) => {\r\n return this.utilityService.createPaginatedResult(response, new PaginatedResult());\r\n })\r\n );\r\n }\r\n\r\n getReadingListsForSeries(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'readinglist/lists-for-series?seriesId=' + seriesId);\r\n }\r\n\r\n getListItems(readingListId: number) {\r\n return this.httpClient.get(this.baseUrl + 'readinglist/items?readingListId=' + readingListId);\r\n }\r\n\r\n createList(title: string) {\r\n return this.httpClient.post(this.baseUrl + 'readinglist/create', {title});\r\n }\r\n\r\n update(model: {readingListId: number, title?: string, summary?: string, promoted: boolean}) {\r\n return this.httpClient.post(this.baseUrl + 'readinglist/update', model, TextResonse);\r\n }\r\n\r\n updateByMultiple(readingListId: number, seriesId: number, volumeIds: Array, chapterIds?: Array) {\r\n return this.httpClient.post(this.baseUrl + 'readinglist/update-by-multiple', {readingListId, seriesId, volumeIds, chapterIds}, TextResonse);\r\n }\r\n\r\n updateByMultipleSeries(readingListId: number, seriesIds: Array) {\r\n return this.httpClient.post(this.baseUrl + 'readinglist/update-by-multiple-series', {readingListId, seriesIds}, TextResonse);\r\n }\r\n\r\n updateBySeries(readingListId: number, seriesId: number) {\r\n return this.httpClient.post(this.baseUrl + 'readinglist/update-by-series', {readingListId, seriesId}, TextResonse);\r\n }\r\n\r\n updateByVolume(readingListId: number, seriesId: number, volumeId: number) {\r\n return this.httpClient.post(this.baseUrl + 'readinglist/update-by-volume', {readingListId, seriesId, volumeId}, TextResonse);\r\n }\r\n\r\n updateByChapter(readingListId: number, seriesId: number, chapterId: number) {\r\n return this.httpClient.post(this.baseUrl + 'readinglist/update-by-chapter', {readingListId, seriesId, chapterId}, TextResonse);\r\n }\r\n\r\n delete(readingListId: number) {\r\n return this.httpClient.delete(this.baseUrl + 'readinglist?readingListId=' + readingListId, TextResonse);\r\n }\r\n\r\n updatePosition(readingListId: number, readingListItemId: number, fromPosition: number, toPosition: number) {\r\n return this.httpClient.post(this.baseUrl + 'readinglist/update-position', {readingListId, readingListItemId, fromPosition, toPosition}, TextResonse);\r\n }\r\n\r\n deleteItem(readingListId: number, readingListItemId: number) {\r\n return this.httpClient.post(this.baseUrl + 'readinglist/delete-item', {readingListId, readingListItemId}, TextResonse);\r\n }\r\n\r\n removeRead(readingListId: number) {\r\n return this.httpClient.post(this.baseUrl + 'readinglist/remove-read?readingListId=' + readingListId, {}, TextResonse);\r\n }\r\n\r\n actionListFilter(action: ActionItem, readingList: ReadingList, isAdmin: boolean) {\r\n if (readingList?.promoted && !isAdmin) return false;\r\n return true;\r\n }\r\n\r\n nameExists(name: string) {\r\n return this.httpClient.get(this.baseUrl + 'readinglist/name-exists?name=' + name);\r\n }\r\n\r\n validateCbl(form: FormData) {\r\n return this.httpClient.post(this.baseUrl + 'cbl/validate', form);\r\n }\r\n\r\n importCbl(form: FormData) {\r\n return this.httpClient.post(this.baseUrl + 'cbl/import', form);\r\n }\r\n\r\n getCharacters(readingListId: number) {\r\n return this.httpClient.get>(this.baseUrl + 'readinglist/characters?readingListId=' + readingListId);\r\n }\r\n}\r\n","import { ElementRef, Injectable } from '@angular/core';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { filter, ReplaySubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ScrollService {\r\n\r\n private scrollContainerSource = new ReplaySubject>(1);\r\n /**\r\n * Exposes the current container on the active screen that is our primary overlay area. Defaults to 'body' and changes to 'body' on page loads\r\n */\r\n public scrollContainer$ = this.scrollContainerSource.asObservable();\r\n\r\n constructor(router: Router) {\r\n\r\n router.events\r\n .pipe(filter(event => event instanceof NavigationEnd))\r\n .subscribe(() => {\r\n this.scrollContainerSource.next('body');\r\n });\r\n this.scrollContainerSource.next('body');\r\n }\r\n\r\n get scrollPosition() {\r\n return (window.pageYOffset\r\n || document.documentElement.scrollTop\r\n || document.body.scrollTop || 0);\r\n }\r\n\r\n /*\r\n * When in the scroll vertical position the scroll in the horizontal position is needed\r\n */\r\n get scrollPositionX() {\r\n return (window.pageXOffset\r\n || document.documentElement.scrollLeft\r\n || document.body.scrollLeft || 0);\r\n }\r\n\r\n scrollTo(top: number, el: Element | Window = window, behavior: 'auto' | 'smooth' = 'smooth') {\r\n el.scroll({\r\n top: top,\r\n behavior: behavior\r\n });\r\n }\r\n\r\n scrollToX(left: number, el: Element | Window = window, behavior: 'auto' | 'smooth' = 'auto') {\r\n el.scroll({\r\n left: left,\r\n behavior: behavior\r\n });\r\n }\r\n\r\n setScrollContainer(elem: ElementRef | undefined) {\r\n if (elem !== undefined) {\r\n this.scrollContainerSource.next(elem);\r\n }\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { environment } from 'src/environments/environment';\r\nimport { SearchResultGroup } from '../_models/search/search-result-group';\r\nimport { Series } from '../_models/series';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SearchService {\r\n\r\n baseUrl = environment.apiUrl;\r\n\r\n constructor(private httpClient: HttpClient) { }\r\n\r\n search(term: string) {\r\n if (term === '') {\r\n return of(new SearchResultGroup());\r\n }\r\n return this.httpClient.get(this.baseUrl + 'search/search?queryString=' + encodeURIComponent(term));\r\n }\r\n\r\n getSeriesForMangaFile(mangaFileId: number) {\r\n return this.httpClient.get(this.baseUrl + 'search/series-for-mangafile?mangaFileId=' + mangaFileId);\r\n }\r\n\r\n getSeriesForChapter(chapterId: number) {\r\n return this.httpClient.get(this.baseUrl + 'search/series-for-chapter?chapterId=' + chapterId);\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { environment } from 'src/environments/environment';\r\nimport { UtilityService } from '../shared/_services/utility.service';\r\nimport { Chapter } from '../_models/chapter';\r\nimport { ChapterMetadata } from '../_models/metadata/chapter-metadata';\r\nimport { CollectionTag } from '../_models/collection-tag';\r\nimport { PaginatedResult } from '../_models/pagination';\r\nimport { Series } from '../_models/series';\r\nimport { RelatedSeries } from '../_models/series-detail/related-series';\r\nimport { SeriesDetail } from '../_models/series-detail/series-detail';\r\nimport { SeriesGroup } from '../_models/series-group';\r\nimport { SeriesMetadata } from '../_models/metadata/series-metadata';\r\nimport { Volume } from '../_models/volume';\r\nimport { ImageService } from './image.service';\r\nimport { TextResonse } from '../_types/text-response';\r\nimport { SeriesFilterV2 } from '../_models/metadata/v2/series-filter-v2';\r\nimport {UserReview} from \"../_single-module/review-card/user-review\";\r\nimport {Rating} from \"../_models/rating\";\r\nimport {Recommendation} from \"../_models/series-detail/recommendation\";\r\nimport {ExternalSeriesDetail} from \"../_models/series-detail/external-series-detail\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SeriesService {\r\n\r\n baseUrl = environment.apiUrl;\r\n paginatedResults: PaginatedResult = new PaginatedResult();\r\n paginatedSeriesForTagsResults: PaginatedResult = new PaginatedResult();\r\n\r\n constructor(private httpClient: HttpClient, private imageService: ImageService,\r\n private utilityService: UtilityService) { }\r\n\r\n getAllSeriesV2(pageNum?: number, itemsPerPage?: number, filter?: SeriesFilterV2) {\r\n let params = new HttpParams();\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n const data = filter || {};\r\n\r\n return this.httpClient.post>(this.baseUrl + 'series/all-v2', data, {observe: 'response', params}).pipe(\r\n map((response: any) => {\r\n return this.utilityService.createPaginatedResult(response, this.paginatedResults);\r\n })\r\n );\r\n }\r\n\r\n getSeriesForLibraryV2(pageNum?: number, itemsPerPage?: number, filter?: SeriesFilterV2) {\r\n let params = new HttpParams();\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n const data = filter || {};\r\n\r\n return this.httpClient.post>(this.baseUrl + 'series/v2', data, {observe: 'response', params}).pipe(\r\n map((response: any) => {\r\n return this.utilityService.createPaginatedResult(response, this.paginatedResults);\r\n })\r\n );\r\n }\r\n\r\n getAllSeriesByIds(seriesIds: Array) {\r\n return this.httpClient.post(this.baseUrl + 'series/series-by-ids', {seriesIds: seriesIds});\r\n }\r\n\r\n getSeries(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'series/' + seriesId);\r\n }\r\n\r\n getVolumes(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'series/volumes?seriesId=' + seriesId);\r\n }\r\n\r\n getChapter(chapterId: number) {\r\n return this.httpClient.get(this.baseUrl + 'series/chapter?chapterId=' + chapterId);\r\n }\r\n\r\n getChapterMetadata(chapterId: number) {\r\n return this.httpClient.get(this.baseUrl + 'series/chapter-metadata?chapterId=' + chapterId);\r\n }\r\n\r\n delete(seriesId: number) {\r\n return this.httpClient.delete(this.baseUrl + 'series/' + seriesId);\r\n }\r\n\r\n deleteMultipleSeries(seriesIds: Array) {\r\n return this.httpClient.post(this.baseUrl + 'series/delete-multiple', {seriesIds});\r\n }\r\n\r\n updateRating(seriesId: number, userRating: number) {\r\n return this.httpClient.post(this.baseUrl + 'series/update-rating', {seriesId, userRating});\r\n }\r\n\r\n updateSeries(model: any) {\r\n return this.httpClient.post(this.baseUrl + 'series/update', model);\r\n }\r\n\r\n markRead(seriesId: number) {\r\n return this.httpClient.post(this.baseUrl + 'reader/mark-read', {seriesId});\r\n }\r\n\r\n markUnread(seriesId: number) {\r\n return this.httpClient.post(this.baseUrl + 'reader/mark-unread', {seriesId});\r\n }\r\n\r\n getRecentlyAdded(pageNum?: number, itemsPerPage?: number, filter?: SeriesFilterV2) {\r\n let params = new HttpParams();\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n\r\n const data = filter || {};\r\n return this.httpClient.post(this.baseUrl + 'series/recently-added-v2', data, {observe: 'response', params}).pipe(\r\n map(response => {\r\n return this.utilityService.createPaginatedResult(response, new PaginatedResult());\r\n })\r\n );\r\n }\r\n\r\n getRecentlyUpdatedSeries() {\r\n return this.httpClient.post(this.baseUrl + 'series/recently-updated-series', {});\r\n }\r\n\r\n getWantToRead(pageNum?: number, itemsPerPage?: number, filter?: SeriesFilterV2): Observable> {\r\n let params = new HttpParams();\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n const data = filter || {};\r\n\r\n return this.httpClient.post(this.baseUrl + 'want-to-read/v2', data, {observe: 'response', params}).pipe(\r\n map(response => {\r\n return this.utilityService.createPaginatedResult(response, new PaginatedResult());\r\n }));\r\n }\r\n\r\n isWantToRead(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'want-to-read?seriesId=' + seriesId, TextResonse)\r\n .pipe(map(val => {\r\n return val === 'true';\r\n }));\r\n }\r\n\r\n getOnDeck(libraryId: number = 0, pageNum?: number, itemsPerPage?: number, filter?: SeriesFilterV2) {\r\n let params = new HttpParams();\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n const data = filter || {};\r\n\r\n return this.httpClient.post(this.baseUrl + 'series/on-deck?libraryId=' + libraryId, data, {observe: 'response', params}).pipe(\r\n map(response => {\r\n return this.utilityService.createPaginatedResult(response, new PaginatedResult());\r\n }));\r\n }\r\n\r\n\r\n refreshMetadata(series: Series) {\r\n return this.httpClient.post(this.baseUrl + 'series/refresh-metadata', {libraryId: series.libraryId, seriesId: series.id});\r\n }\r\n\r\n scan(libraryId: number, seriesId: number, force = false) {\r\n return this.httpClient.post(this.baseUrl + 'series/scan', {libraryId: libraryId, seriesId: seriesId, forceUpdate: force});\r\n }\r\n\r\n analyzeFiles(libraryId: number, seriesId: number) {\r\n return this.httpClient.post(this.baseUrl + 'series/analyze', {libraryId: libraryId, seriesId: seriesId});\r\n }\r\n\r\n getMetadata(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'series/metadata?seriesId=' + seriesId).pipe(map(items => {\r\n items?.collectionTags.forEach(tag => tag.coverImage = this.imageService.getCollectionCoverImage(tag.id));\r\n return items;\r\n }));\r\n }\r\n\r\n updateMetadata(seriesMetadata: SeriesMetadata, collectionTags: CollectionTag[]) {\r\n const data = {\r\n seriesMetadata,\r\n collectionTags,\r\n };\r\n return this.httpClient.post(this.baseUrl + 'series/metadata', data, TextResonse);\r\n }\r\n\r\n getSeriesForTag(collectionTagId: number, pageNum?: number, itemsPerPage?: number) {\r\n let params = new HttpParams();\r\n\r\n params = this.utilityService.addPaginationIfExists(params, pageNum, itemsPerPage);\r\n\r\n return this.httpClient.get>(this.baseUrl + 'series/series-by-collection?collectionId=' + collectionTagId, {observe: 'response', params}).pipe(\r\n map((response: any) => {\r\n return this.utilityService.createPaginatedResult(response, this.paginatedSeriesForTagsResults);\r\n })\r\n );\r\n }\r\n\r\n getRelatedForSeries(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'series/all-related?seriesId=' + seriesId);\r\n }\r\n\r\n getRecommendationsForSeries(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'recommended/recommendations?seriesId=' + seriesId);\r\n }\r\n\r\n updateRelationships(seriesId: number, adaptations: Array, characters: Array,\r\n contains: Array, others: Array, prequels: Array,\r\n sequels: Array, sideStories: Array, spinOffs: Array,\r\n alternativeSettings: Array, alternativeVersions: Array, doujinshis: Array, editions: Array) {\r\n return this.httpClient.post(this.baseUrl + 'series/update-related?seriesId=' + seriesId,\r\n {seriesId, adaptations, characters, sequels, prequels, contains, others, sideStories, spinOffs,\r\n alternativeSettings, alternativeVersions, doujinshis, editions});\r\n }\r\n\r\n getSeriesDetail(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'series/series-detail?seriesId=' + seriesId);\r\n }\r\n\r\n getReviews(seriesId: number) {\r\n return this.httpClient.get>(this.baseUrl + 'review?seriesId=' + seriesId);\r\n }\r\n\r\n updateReview(seriesId: number, tagline: string, body: string) {\r\n return this.httpClient.post(this.baseUrl + 'review', {\r\n seriesId, tagline, body\r\n });\r\n }\r\n\r\n getRatings(seriesId: number) {\r\n return this.httpClient.get>(this.baseUrl + 'rating?seriesId=' + seriesId);\r\n }\r\n getOverallRating(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'rating/overall?seriesId=' + seriesId);\r\n }\r\n\r\n removeFromOnDeck(seriesId: number) {\r\n return this.httpClient.post(this.baseUrl + 'series/remove-from-on-deck?seriesId=' + seriesId, {});\r\n }\r\n\r\n getExternalSeriesDetails(aniListId?: number, malId?: number, seriesId?: number) {\r\n return this.httpClient.get(this.baseUrl + 'series/external-series-detail?aniListId=' + (aniListId || 0) + '&malId=' + (malId || 0) + '&seriesId=' + (seriesId || 0));\r\n }\r\n\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n DestroyRef,\r\n inject,\r\n Inject,\r\n Injectable,\r\n Renderer2,\r\n RendererFactory2,\r\n SecurityContext\r\n} from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { map, ReplaySubject, take } from 'rxjs';\r\nimport { environment } from 'src/environments/environment';\r\nimport { ConfirmService } from '../shared/confirm.service';\r\nimport { NotificationProgressEvent } from '../_models/events/notification-progress-event';\r\nimport { SiteTheme, ThemeProvider } from '../_models/preferences/site-theme';\r\nimport { TextResonse } from '../_types/text-response';\r\nimport { EVENTS, MessageHubService } from './message-hub.service';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {translate} from \"@ngneat/transloco\";\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ThemeService {\r\n\r\n private readonly destroyRef = inject(DestroyRef);\r\n public defaultTheme: string = 'dark';\r\n public defaultBookTheme: string = 'Dark';\r\n\r\n private currentThemeSource = new ReplaySubject(1);\r\n public currentTheme$ = this.currentThemeSource.asObservable();\r\n\r\n private themesSource = new ReplaySubject(1);\r\n public themes$ = this.themesSource.asObservable();\r\n\r\n /**\r\n * Maintain a cache of themes. SignalR will inform us if we need to refresh cache\r\n */\r\n private themeCache: Array = [];\r\n\r\n private renderer: Renderer2;\r\n private baseUrl = environment.apiUrl;\r\n\r\n\r\n constructor(rendererFactory: RendererFactory2, @Inject(DOCUMENT) private document: Document, private httpClient: HttpClient,\r\n messageHub: MessageHubService, private domSanitizer: DomSanitizer, private confirmService: ConfirmService, private toastr: ToastrService) {\r\n this.renderer = rendererFactory.createRenderer(null, null);\r\n\r\n messageHub.messages$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(message => {\r\n\r\n if (message.event !== EVENTS.NotificationProgress) return;\r\n const notificationEvent = (message.payload as NotificationProgressEvent);\r\n if (notificationEvent.name !== EVENTS.SiteThemeProgress) return;\r\n\r\n if (notificationEvent.eventType === 'ended') {\r\n if (notificationEvent.name === EVENTS.SiteThemeProgress) this.getThemes().subscribe(() => {\r\n\r\n });\r\n }\r\n });\r\n }\r\n\r\n getColorScheme() {\r\n return getComputedStyle(this.document.body).getPropertyValue('--color-scheme').trim();\r\n }\r\n\r\n /**\r\n * --theme-color from theme. Updates the meta tag\r\n * @returns\r\n */\r\n getThemeColor() {\r\n return getComputedStyle(this.document.body).getPropertyValue('--theme-color').trim();\r\n }\r\n\r\n /**\r\n * --msapplication-TileColor from theme. Updates the meta tag\r\n * @returns\r\n */\r\n getTileColor() {\r\n return getComputedStyle(this.document.body).getPropertyValue('--title-color').trim();\r\n }\r\n\r\n getCssVariable(variable: string) {\r\n return getComputedStyle(this.document.body).getPropertyValue(variable).trim();\r\n }\r\n\r\n isDarkTheme() {\r\n return this.getColorScheme().toLowerCase() === 'dark';\r\n }\r\n\r\n getThemes() {\r\n return this.httpClient.get(this.baseUrl + 'theme').pipe(map(themes => {\r\n this.themeCache = themes;\r\n this.themesSource.next(themes);\r\n this.currentTheme$.pipe(take(1)).subscribe(theme => {\r\n if (themes.filter(t => t.id === theme.id).length === 0) {\r\n this.setTheme(this.defaultTheme);\r\n this.toastr.info(translate('toasts.theme-missing'));\r\n }\r\n });\r\n return themes;\r\n }));\r\n }\r\n\r\n /**\r\n * Used in book reader to remove all themes so book reader can provide custom theming options\r\n */\r\n clearThemes() {\r\n this.unsetThemes();\r\n }\r\n\r\n setDefault(themeId: number) {\r\n return this.httpClient.post(this.baseUrl + 'theme/update-default', {themeId: themeId}).pipe(map(() => {\r\n // Refresh the cache when a default state is changed\r\n this.getThemes().subscribe(() => {});\r\n }));\r\n }\r\n\r\n scan() {\r\n return this.httpClient.post(this.baseUrl + 'theme/scan', {});\r\n }\r\n\r\n /**\r\n * Sets the book theme on the body tag so css variable overrides can take place\r\n * @param selector brtheme- prefixed string\r\n */\r\n setBookTheme(selector: string) {\r\n this.unsetBookThemes();\r\n this.renderer.addClass(this.document.querySelector('body'), selector);\r\n }\r\n\r\n clearBookTheme() {\r\n this.unsetBookThemes();\r\n }\r\n\r\n\r\n /**\r\n * Sets the theme as active. Will inject a style tag into document to load a custom theme and apply the selector to the body\r\n * @param themeName\r\n */\r\n setTheme(themeName: string) {\r\n const theme = this.themeCache.find(t => t.name.toLowerCase() === themeName.toLowerCase());\r\n if (theme) {\r\n this.unsetThemes();\r\n this.renderer.addClass(this.document.querySelector('body'), theme.selector);\r\n\r\n if (theme.provider === ThemeProvider.User && !this.hasThemeInHead(theme.name)) {\r\n // We need to load the styles into the browser\r\n this.fetchThemeContent(theme.id).subscribe(async (content) => {\r\n if (content === null) {\r\n await this.confirmService.alert(translate('toasts.alert-bad-theme'));\r\n this.setTheme('dark');\r\n return;\r\n }\r\n const styleElem = this.document.createElement('style');\r\n styleElem.id = 'theme-' + theme.name;\r\n styleElem.appendChild(this.document.createTextNode(content));\r\n\r\n this.renderer.appendChild(this.document.head, styleElem);\r\n\r\n // Check if the theme has --theme-color and apply it to meta tag\r\n const themeColor = this.getThemeColor();\r\n if (themeColor) {\r\n this.document.querySelector('meta[name=\"theme-color\"]')?.setAttribute('content', themeColor);\r\n this.document.querySelector('meta[name=\"apple-mobile-web-app-status-bar-style\"]')?.setAttribute('content', themeColor);\r\n }\r\n\r\n const tileColor = this.getTileColor();\r\n if (tileColor) {\r\n this.document.querySelector('meta[name=\"msapplication-TileColor\"]')?.setAttribute('content', themeColor);\r\n }\r\n\r\n const colorScheme = this.getColorScheme();\r\n if (colorScheme) {\r\n this.document.querySelector('body')?.setAttribute('theme', colorScheme);\r\n }\r\n\r\n this.currentThemeSource.next(theme);\r\n });\r\n } else {\r\n this.currentThemeSource.next(theme);\r\n }\r\n } else {\r\n // Only time themes isn't already loaded is on first load\r\n this.getThemes().subscribe(themes => {\r\n this.setTheme(themeName);\r\n });\r\n }\r\n }\r\n\r\n private hasThemeInHead(themeName: string) {\r\n const id = 'theme-' + themeName.toLowerCase();\r\n return Array.from(this.document.head.children).filter(el => el.tagName === 'STYLE' && el.id.toLowerCase() === id).length > 0;\r\n }\r\n\r\n private fetchThemeContent(themeId: number) {\r\n return this.httpClient.get(this.baseUrl + 'theme/download-content?themeId=' + themeId, TextResonse).pipe(map(encodedCss => {\r\n return this.domSanitizer.sanitize(SecurityContext.STYLE, encodedCss);\r\n }));\r\n }\r\n\r\n private unsetThemes() {\r\n this.themeCache.forEach(theme => this.document.body.classList.remove(theme.selector));\r\n }\r\n\r\n private unsetBookThemes() {\r\n Array.from(this.document.body.classList).filter(cls => cls.startsWith('brtheme-')).forEach(c => this.document.body.classList.remove(c));\r\n }\r\n\r\n\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { environment } from 'src/environments/environment';\r\nimport { TextResonse } from '../_types/text-response';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UploadService {\r\n\r\n private baseUrl = environment.apiUrl;\r\n\r\n constructor(private httpClient: HttpClient) { }\r\n\r\n\r\n uploadByUrl(url: string) {\r\n return this.httpClient.post(this.baseUrl + 'upload/upload-by-url', {url}, TextResonse);\r\n }\r\n\r\n /**\r\n * \r\n * @param seriesId Series to overwrite cover image for\r\n * @param url A base64 encoded url\r\n * @returns \r\n */\r\n updateSeriesCoverImage(seriesId: number, url: string) {\r\n return this.httpClient.post(this.baseUrl + 'upload/series', {id: seriesId, url: this._cleanBase64Url(url)});\r\n }\r\n\r\n updateCollectionCoverImage(tagId: number, url: string) {\r\n return this.httpClient.post(this.baseUrl + 'upload/collection', {id: tagId, url: this._cleanBase64Url(url)});\r\n }\r\n\r\n updateReadingListCoverImage(readingListId: number, url: string) {\r\n return this.httpClient.post(this.baseUrl + 'upload/reading-list', {id: readingListId, url: this._cleanBase64Url(url)});\r\n }\r\n\r\n updateChapterCoverImage(chapterId: number, url: string) {\r\n return this.httpClient.post(this.baseUrl + 'upload/chapter', {id: chapterId, url: this._cleanBase64Url(url)});\r\n }\r\n\r\n updateLibraryCoverImage(libraryId: number, url: string) {\r\n return this.httpClient.post(this.baseUrl + 'upload/library', {id: libraryId, url: this._cleanBase64Url(url)});\r\n }\r\n\r\n resetChapterCoverLock(chapterId: number, ) {\r\n return this.httpClient.post(this.baseUrl + 'upload/reset-chapter-lock', {id: chapterId, url: ''});\r\n }\r\n\r\n _cleanBase64Url(url: string) {\r\n if (url.startsWith('data')) {\r\n url = url.split(',')[1];\r\n }\r\n return url;\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'dynamicList',\r\n pure: true,\r\n standalone: true\r\n})\r\nexport class DynamicListPipe implements PipeTransform {\r\n\r\n transform(value: any): Array<{title: string, data: any}> {\r\n if (value === undefined || value === null) return [];\r\n return value as {title: string, data: any}[];\r\n }\r\n\r\n}\r\n","\r\n 0\">\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport {NgbDropdown, NgbDropdownItem, NgbDropdownMenu, NgbDropdownToggle} from '@ng-bootstrap/ng-bootstrap';\r\nimport { take } from 'rxjs';\r\nimport { AccountService } from 'src/app/_services/account.service';\r\nimport { Action, ActionItem } from 'src/app/_services/action-factory.service';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\nimport {DynamicListPipe} from \"./_pipes/dynamic-list.pipe\";\r\n\r\n@Component({\r\n selector: 'app-card-actionables',\r\n standalone: true,\r\n imports: [CommonModule, NgbDropdown, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, DynamicListPipe, TranslocoDirective],\r\n templateUrl: './card-actionables.component.html',\r\n styleUrls: ['./card-actionables.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CardActionablesComponent implements OnInit {\r\n\r\n @Input() iconClass = 'fa-ellipsis-v';\r\n @Input() btnClass = '';\r\n @Input() actions: ActionItem[] = [];\r\n @Input() labelBy = 'card';\r\n @Input() disabled: boolean = false;\r\n @Output() actionHandler = new EventEmitter>();\r\n\r\n\r\n isAdmin: boolean = false;\r\n canDownload: boolean = false;\r\n submenu: {[key: string]: NgbDropdown} = {};\r\n\r\n constructor(private readonly cdRef: ChangeDetectorRef, private accountService: AccountService) { }\r\n\r\n ngOnInit(): void {\r\n this.accountService.currentUser$.pipe(take(1)).subscribe((user) => {\r\n if (!user) return;\r\n this.isAdmin = this.accountService.hasAdminRole(user);\r\n this.canDownload = this.accountService.hasDownloadRole(user);\r\n\r\n // We want to avoid an empty menu when user doesn't have access to anything\r\n if (!this.isAdmin && this.actions.filter(a => !a.requiresAdmin).length === 0) {\r\n this.actions = [];\r\n }\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n preventEvent(event: any) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n\r\n performAction(event: any, action: ActionItem) {\r\n this.preventEvent(event);\r\n\r\n if (typeof action.callback === 'function') {\r\n this.actionHandler.emit(action);\r\n }\r\n }\r\n\r\n willRenderAction(action: ActionItem) {\r\n return (action.requiresAdmin && this.isAdmin)\r\n || (action.action === Action.Download && (this.canDownload || this.isAdmin))\r\n || (!action.requiresAdmin && action.action !== Action.Download);\r\n }\r\n\r\n shouldRenderSubMenu(action: ActionItem, dynamicList: null | Array) {\r\n return (action.children[0].dynamicList === undefined || action.children[0].dynamicList === null) || (dynamicList !== null && dynamicList.length > 0);\r\n }\r\n\r\n openSubmenu(actionTitle: string, subMenu: NgbDropdown) {\r\n // We keep track when we open and when we get a request to open, if we have other keys, we close them and clear their keys\r\n if (Object.keys(this.submenu).length > 0) {\r\n const keys = Object.keys(this.submenu).filter(k => k !== actionTitle);\r\n keys.forEach(key => {\r\n this.submenu[key].close();\r\n delete this.submenu[key];\r\n });\r\n }\r\n this.submenu[actionTitle] = subMenu;\r\n subMenu.open();\r\n }\r\n\r\n closeAllSubmenus() {\r\n Object.keys(this.submenu).forEach(key => {\r\n this.submenu[key].close();\r\n delete this.submenu[key];\r\n });\r\n }\r\n\r\n performDynamicClick(event: any, action: ActionItem, dynamicItem: any) {\r\n action._extra = dynamicItem;\r\n this.performAction(event, action);\r\n }\r\n}\r\n","/**\r\n * Use when httpClient is expected to return just a string/variable and not json\r\n */\r\nexport const TextResonse = {responseType: 'text' as 'json'};","\r\n
\r\n

{{t('title')}}

\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{{t('type-header')}}{{t('name-header')}}
...
\r\n {{folder.name}}\r\n
\r\n
\r\n \r\n\r\n
\r\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { NgbActiveModal, NgbTypeahead, NgbHighlight } from '@ng-bootstrap/ng-bootstrap';\r\nimport { catchError, debounceTime, distinctUntilChanged, filter, map, merge, Observable, of, OperatorFunction, Subject, switchMap, tap } from 'rxjs';\r\nimport { Stack } from 'src/app/shared/data-structures/stack';\r\nimport { DirectoryDto } from 'src/app/_models/system/directory-dto';\r\nimport { LibraryService } from '../../../_services/library.service';\r\nimport { NgIf, NgFor, NgClass } from '@angular/common';\r\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\n\r\n\r\nexport interface DirectoryPickerResult {\r\n success: boolean;\r\n folderPath: string;\r\n}\r\n\r\n\r\n\r\n@Component({\r\n selector: 'app-directory-picker',\r\n templateUrl: './directory-picker.component.html',\r\n styleUrls: ['./directory-picker.component.scss'],\r\n standalone: true,\r\n imports: [ReactiveFormsModule, NgbTypeahead, FormsModule, NgbHighlight, NgIf, NgFor, NgClass, TranslocoDirective]\r\n})\r\nexport class DirectoryPickerComponent implements OnInit {\r\n\r\n @Input() startingFolder: string = '';\r\n /**\r\n * Url to give more information about selecting directories. Passing nothing will suppress.\r\n */\r\n @Input() helpUrl: string = 'https://wiki.kavitareader.com/en/guides/first-time-setup#adding-a-library-to-kavita';\r\n\r\n currentRoot = '';\r\n folders: DirectoryDto[] = [];\r\n routeStack: Stack = new Stack();\r\n\r\n\r\n path: string = '';\r\n @ViewChild('instance', {static: true}) instance!: NgbTypeahead;\r\n focus$ = new Subject();\r\n click$ = new Subject();\r\n searching: boolean = false;\r\n searchFailed: boolean = false;\r\n\r\n\r\n search: OperatorFunction = (text$: Observable) => {\r\n const debouncedText$ = text$.pipe(debounceTime(200), distinctUntilChanged());\r\n const clicksWithClosedPopup$ = this.click$.pipe(filter(() => !this.instance.isPopupOpen()));\r\n const inputFocus$ = this.focus$;\r\n\r\n return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$, text$).pipe(\r\n debounceTime(300),\r\n distinctUntilChanged(),\r\n tap(() => this.searching = true),\r\n switchMap(term =>\r\n this.libraryService.listDirectories(this.path).pipe(\r\n tap(() => this.searchFailed = false),\r\n tap((folders) => this.folders = folders),\r\n map(folders => folders.map(f => f.fullPath)),\r\n catchError(() => {\r\n this.searchFailed = true;\r\n return of([]);\r\n }))\r\n ),\r\n tap(() => this.searching = false)\r\n )\r\n }\r\n\r\n constructor(public modal: NgbActiveModal, private libraryService: LibraryService) {\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.startingFolder && this.startingFolder.length > 0) {\r\n let folders = this.startingFolder.split('/');\r\n let folders2 = this.startingFolder.split('\\\\');\r\n if (folders.length === 1 && folders2.length > 1) {\r\n folders = folders2;\r\n }\r\n if (!folders[0].endsWith('/')) {\r\n folders[0] = folders[0] + '/';\r\n }\r\n folders.forEach(folder => this.routeStack.push(folder));\r\n\r\n const fullPath = this.routeStack.items.join('/');\r\n this.loadChildren(fullPath);\r\n } else {\r\n this.loadChildren(this.currentRoot);\r\n }\r\n }\r\n\r\n updateTable() {\r\n this.loadChildren(this.path);\r\n }\r\n\r\n\r\n selectNode(folder: DirectoryDto) {\r\n if (folder.disabled) return;\r\n this.currentRoot = folder.name;\r\n this.routeStack.push(folder.name);\r\n this.path = folder.fullPath;\r\n this.loadChildren(this.path);\r\n }\r\n\r\n goBack() {\r\n this.routeStack.pop();\r\n const stackPeek = this.routeStack.peek();\r\n if (stackPeek !== undefined) {\r\n this.currentRoot = stackPeek;\r\n const fullPath = this.routeStack.items.join('/');\r\n this.loadChildren(fullPath);\r\n } else {\r\n this.currentRoot = '';\r\n this.loadChildren(this.currentRoot);\r\n }\r\n }\r\n\r\n loadChildren(path: string) {\r\n this.libraryService.listDirectories(path).subscribe(folders => {\r\n this.folders = folders;\r\n }, err => {\r\n // If there was an error, pop off last directory added to stack\r\n this.routeStack.pop();\r\n const item = this.folders.find(f => f.fullPath === path);\r\n if (item) {\r\n item.disabled = true;\r\n }\r\n });\r\n }\r\n\r\n shareFolder(fullPath: string, event: any) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this.modal.close({success: true, folderPath: fullPath});\r\n }\r\n\r\n share() {\r\n this.modal.close({success: true, folderPath: this.path});\r\n }\r\n\r\n close() {\r\n this.modal.close({success: false, folderPath: undefined});\r\n }\r\n\r\n getStem(path: string): string {\r\n\r\n const lastPath = this.routeStack.peek();\r\n if (lastPath && lastPath != path) {\r\n let replaced = path.replace(lastPath, '');\r\n if (replaced.startsWith('/') || replaced.startsWith('\\\\')) {\r\n replaced = replaced.substring(1, replaced.length);\r\n }\r\n return replaced;\r\n }\r\n\r\n return path;\r\n }\r\n\r\n navigateTo(index: number) {\r\n while(this.routeStack.items.length - 1 > index) {\r\n this.routeStack.pop();\r\n }\r\n\r\n const fullPath = this.routeStack.items.join('/');\r\n this.path = fullPath;\r\n this.loadChildren(fullPath);\r\n }\r\n}\r\n\r\n\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { map } from 'rxjs';\r\nimport { environment } from 'src/environments/environment';\r\nimport { TextResonse } from '../_types/text-response';\r\nimport { ServerSettings } from './_models/server-settings';\r\n\r\n/**\r\n * Used only for the Test Email Service call\r\n */\r\nexport interface EmailTestResult {\r\n successful: boolean;\r\n errorMessage: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SettingsService {\r\n\r\n baseUrl = environment.apiUrl;\r\n\r\n constructor(private http: HttpClient) { }\r\n\r\n getServerSettings() {\r\n return this.http.get(this.baseUrl + 'settings');\r\n }\r\n\r\n getBaseUrl() {\r\n return this.http.get(this.baseUrl + 'settings/base-url', TextResonse);\r\n }\r\n\r\n updateServerSettings(model: ServerSettings) {\r\n return this.http.post(this.baseUrl + 'settings', model);\r\n }\r\n\r\n resetServerSettings() {\r\n return this.http.post(this.baseUrl + 'settings/reset', {});\r\n }\r\n\r\n resetIPAddressesSettings() {\r\n return this.http.post(this.baseUrl + 'settings/reset-ip-addresses', {});\r\n }\r\n\r\n resetBaseUrl() {\r\n return this.http.post(this.baseUrl + 'settings/reset-base-url', {});\r\n }\r\n\r\n resetEmailServerSettings() {\r\n return this.http.post(this.baseUrl + 'settings/reset-email-url', {});\r\n }\r\n\r\n testEmailServerSettings(emailUrl: string) {\r\n return this.http.post(this.baseUrl + 'settings/test-email-url', {url: emailUrl});\r\n }\r\n\r\n getTaskFrequencies() {\r\n return this.http.get(this.baseUrl + 'settings/task-frequencies');\r\n }\r\n\r\n getLoggingLevels() {\r\n return this.http.get(this.baseUrl + 'settings/log-levels');\r\n }\r\n\r\n getLibraryTypes() {\r\n return this.http.get(this.baseUrl + 'settings/library-types');\r\n }\r\n\r\n getOpdsEnabled() {\r\n return this.http.get(this.baseUrl + 'settings/opds-enabled', TextResonse).pipe(map(d => d === 'true'));\r\n }\r\n}\r\n","\r\n \r\n
0\" class=\"bulk-select mb-3 {{modalMode ? '' : 'fixed-top}}\" [ngStyle]=\"{'margin-top': topOffset + 'px'}\">\r\n
\r\n\r\n \r\n \r\n {{t('items-selected',{num: selectionCount | number})}}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n Bulk Actions\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n DestroyRef,\r\n inject,\r\n Input,\r\n OnInit\r\n} from '@angular/core';\r\nimport { Action, ActionFactoryService, ActionItem } from 'src/app/_services/action-factory.service';\r\nimport { BulkSelectionService } from '../bulk-selection.service';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {AsyncPipe, CommonModule} from \"@angular/common\";\r\nimport {TranslocoModule} from \"@ngneat/transloco\";\r\nimport {NgbTooltip} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {CardActionablesComponent} from \"../../_single-module/card-actionables/card-actionables.component\";\r\n\r\n@Component({\r\n selector: 'app-bulk-operations',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n AsyncPipe,\r\n CardActionablesComponent,\r\n TranslocoModule,\r\n NgbTooltip\r\n ],\r\n templateUrl: './bulk-operations.component.html',\r\n styleUrls: ['./bulk-operations.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class BulkOperationsComponent implements OnInit {\r\n\r\n @Input({required: true}) actionCallback!: (action: ActionItem, data: any) => void;\r\n /**\r\n * Modal mode means don't fix to the top\r\n */\r\n @Input() modalMode = false;\r\n @Input() topOffset: number = 56;\r\n hasMarkAsRead: boolean = false;\r\n hasMarkAsUnread: boolean = false;\r\n actions: Array> = [];\r\n\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly actionFactoryService = inject(ActionFactoryService);\r\n public readonly bulkSelectionService = inject(BulkSelectionService);\r\n protected readonly Action = Action;\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n this.bulkSelectionService.actions$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(actions => {\r\n // We need to do a recursive callback apply\r\n this.actions = this.actionFactoryService.applyCallbackToList(actions, this.actionCallback.bind(this));\r\n this.hasMarkAsRead = this.actionFactoryService.hasAction(this.actions, Action.MarkAsRead);\r\n this.hasMarkAsUnread = this.actionFactoryService.hasAction(this.actions, Action.MarkAsUnread);\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n performAction(action: ActionItem) {\r\n this.actionCallback(action, null);\r\n }\r\n\r\n executeAction(action: Action) {\r\n const foundActions = this.actions.filter(act => act.action === action);\r\n if (foundActions.length > 0) {\r\n this.performAction(foundActions[0]);\r\n }\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {NavigationStart, Router} from '@angular/router';\r\nimport {ReplaySubject} from 'rxjs';\r\nimport {filter} from 'rxjs/operators';\r\nimport {Action, ActionFactoryService, ActionItem} from '../_services/action-factory.service';\r\n\r\ntype DataSource = 'volume' | 'chapter' | 'special' | 'series' | 'bookmark' | 'sideNavStream';\r\n\r\n/**\r\n * Responsible for handling selections on cards. Can handle multiple card sources next to each other in different loops.\r\n * This will clear selections between pages.\r\n *\r\n * Remarks: Page which renders cards is responsible for listening for shift keydown/keyup and updating our state variable.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BulkSelectionService {\r\n\r\n private debug: boolean = false;\r\n private prevIndex: number = 0;\r\n private prevDataSource!: DataSource;\r\n private selectedCards: { [key: string]: {[key: number]: boolean} } = {};\r\n private dataSourceMax: { [key: string]: number} = {};\r\n public isShiftDown: boolean = false;\r\n\r\n private actionsSource = new ReplaySubject[]>(1);\r\n public actions$ = this.actionsSource.asObservable();\r\n\r\n private selectionsSource = new ReplaySubject(1);\r\n /**\r\n * Number of active selections\r\n */\r\n public selections$ = this.selectionsSource.asObservable();\r\n\r\n constructor(router: Router, private actionFactory: ActionFactoryService) {\r\n router.events\r\n .pipe(filter(event => event instanceof NavigationStart))\r\n .subscribe(() => {\r\n this.deselectAll();\r\n this.dataSourceMax = {};\r\n this.prevIndex = 0;\r\n });\r\n }\r\n\r\n handleCardSelection(dataSource: DataSource, index: number, maxIndex: number, wasSelected: boolean) {\r\n if (this.isShiftDown) {\r\n\r\n if (dataSource === this.prevDataSource) {\r\n this.debugLog('Selecting ' + dataSource + ' cards from ' + this.prevIndex + ' to ' + index + ' as ' + !wasSelected);\r\n this.selectCards(dataSource, this.prevIndex, index, !wasSelected);\r\n } else {\r\n const isForwardSelection = index > this.prevIndex;\r\n\r\n if (isForwardSelection) {\r\n this.debugLog('Selecting ' + this.prevDataSource + ' cards from ' + this.prevIndex + ' to ' + this.dataSourceMax[this.prevDataSource]);\r\n this.selectCards(this.prevDataSource, this.prevIndex, this.dataSourceMax[this.prevDataSource], !wasSelected);\r\n this.debugLog('Selecting ' + dataSource + ' cards from ' + 0 + ' to ' + index);\r\n this.selectCards(dataSource, 0, index, !wasSelected);\r\n } else {\r\n this.debugLog('Selecting ' + this.prevDataSource + ' cards from ' + 0 + ' to ' + this.prevIndex);\r\n this.selectCards(this.prevDataSource, this.prevIndex, 0, !wasSelected);\r\n this.debugLog('Selecting ' + dataSource + ' cards from ' + index + ' to ' + maxIndex);\r\n this.selectCards(dataSource, index, maxIndex, !wasSelected);\r\n }\r\n }\r\n } else {\r\n this.debugLog('Selecting ' + dataSource + ' cards at ' + index);\r\n this.selectCards(dataSource, index, index, !wasSelected);\r\n }\r\n this.prevIndex = index;\r\n this.prevDataSource = dataSource;\r\n this.dataSourceMax[dataSource] = maxIndex;\r\n this.actionsSource.next(this.getActions(() => {}));\r\n }\r\n\r\n isCardSelected(dataSource: DataSource, index: number) {\r\n if (this.selectedCards.hasOwnProperty(dataSource) && this.selectedCards[dataSource].hasOwnProperty(index)) {\r\n return this.selectedCards[dataSource][index];\r\n }\r\n return false;\r\n }\r\n\r\n selectCards(dataSource: DataSource, from: number, to: number, value: boolean) {\r\n if (!this.selectedCards.hasOwnProperty(dataSource)) {\r\n this.selectedCards[dataSource] = {};\r\n }\r\n\r\n if (from === to) {\r\n this.selectedCards[dataSource][to] = value;\r\n this.selectionsSource.next(this.totalSelections());\r\n return;\r\n }\r\n\r\n if (from > to) {\r\n for (let i = to; i <= from; i++) {\r\n this.selectedCards[dataSource][i] = value;\r\n }\r\n }\r\n\r\n for (let i = from; i <= to; i++) {\r\n this.selectedCards[dataSource][i] = value;\r\n }\r\n this.selectionsSource.next(this.totalSelections());\r\n }\r\n\r\n deselectAll() {\r\n this.selectedCards = {};\r\n this.selectionsSource.next(0);\r\n }\r\n\r\n hasSelections() {\r\n const keys = Object.keys(this.selectedCards);\r\n return keys.filter(key => {\r\n return Object.values(this.selectedCards[key]).filter(item => item).length > 0;\r\n }).length > 0;\r\n }\r\n\r\n totalSelections() {\r\n let sum = 0;\r\n const keys = Object.keys(this.selectedCards);\r\n keys.forEach(key => {\r\n sum += Object.values(this.selectedCards[key]).filter(item => item).length;\r\n });\r\n return sum;\r\n }\r\n\r\n getSelectedCardsForSource(dataSource: DataSource) {\r\n if (!this.selectedCards.hasOwnProperty(dataSource)) return [];\r\n\r\n const ret = [];\r\n for(let k in this.selectedCards[dataSource]) {\r\n if (this.selectedCards[dataSource][k]) {\r\n ret.push(k);\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n getActions(callback: (action: ActionItem, data: any) => void) {\r\n // checks if series is present. If so, returns only series actions\r\n // else returns volume/chapter items\r\n const allowedActions = [Action.AddToReadingList, Action.MarkAsRead, Action.MarkAsUnread, Action.AddToCollection,\r\n Action.Delete, Action.AddToWantToReadList, Action.RemoveFromWantToReadList];\r\n if (Object.keys(this.selectedCards).filter(item => item === 'series').length > 0) {\r\n return this.applyFilterToList(this.actionFactory.getSeriesActions(callback), allowedActions);\r\n }\r\n\r\n if (Object.keys(this.selectedCards).filter(item => item === 'bookmark').length > 0) {\r\n return this.actionFactory.getBookmarkActions(callback);\r\n }\r\n\r\n if (Object.keys(this.selectedCards).filter(item => item === 'sideNavStream').length > 0) {\r\n return this.applyFilterToList(this.actionFactory.getSideNavStreamActions(callback), [Action.MarkAsInvisible, Action.MarkAsVisible]);\r\n }\r\n\r\n return this.applyFilterToList(this.actionFactory.getVolumeActions(callback), allowedActions);\r\n }\r\n\r\n private debugLog(message: string, extraData?: any) {\r\n if (!this.debug) return;\r\n\r\n if (extraData !== undefined) {\r\n console.log(message, extraData);\r\n } else {\r\n console.log(message);\r\n }\r\n }\r\n\r\n private applyFilter(action: ActionItem, allowedActions: Array) {\r\n\r\n var ret = false;\r\n if (action.action === Action.Submenu || allowedActions.includes(action.action)) {\r\n // Do something\r\n ret = true;\r\n }\r\n\r\n if (action.children === null || action.children?.length === 0) return ret;\r\n\r\n action.children = action.children.filter((childAction) => this.applyFilter(childAction, allowedActions));\r\n\r\n return ret;\r\n }\r\n\r\n\tprivate applyFilterToList(list: Array>, allowedActions: Array): Array> {\r\n\t\tconst actions = list.map((a) => {\r\n\t\t\treturn { ...a };\r\n\t\t});\r\n return actions.filter(action => this.applyFilter(action, allowedActions));\r\n\t}\r\n}\r\n","\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n Enter a Url\r\n •\r\n {{t('drag-n-drop')}}\r\n •\r\n {{t('upload')}} {{t('upload-continued')}}\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n 0\">\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n
\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport {FormBuilder, FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms';\r\nimport {NgxFileDropEntry, FileSystemFileEntry, NgxFileDropModule} from 'ngx-file-drop';\r\nimport { fromEvent, Subject } from 'rxjs';\r\nimport { takeWhile } from 'rxjs/operators';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { ImageService } from 'src/app/_services/image.service';\r\nimport { KEY_CODES } from 'src/app/shared/_services/utility.service';\r\nimport { UploadService } from 'src/app/_services/upload.service';\r\nimport {CommonModule, DOCUMENT} from '@angular/common';\r\nimport {ImageComponent} from \"../../shared/image/image.component\";\r\nimport {translate, TranslocoModule} from \"@ngneat/transloco\";\r\n\r\n@Component({\r\n selector: 'app-cover-image-chooser',\r\n standalone: true,\r\n imports: [\r\n ReactiveFormsModule,\r\n NgxFileDropModule,\r\n CommonModule,\r\n ImageComponent,\r\n TranslocoModule\r\n ],\r\n templateUrl: './cover-image-chooser.component.html',\r\n styleUrls: ['./cover-image-chooser.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CoverImageChooserComponent implements OnInit, OnDestroy {\r\n\r\n /**\r\n * If buttons show under images to allow immediate selection of cover images.\r\n */\r\n @Input() showApplyButton: boolean = false;\r\n /**\r\n * When a cover image is selected, this will be called with a base url representation of the file.\r\n */\r\n @Output() applyCover: EventEmitter = new EventEmitter();\r\n /**\r\n * When a cover image is reset, this will be called.\r\n */\r\n @Output() resetCover: EventEmitter = new EventEmitter();\r\n\r\n @Input() imageUrls: Array = [];\r\n @Output() imageUrlsChange: EventEmitter> = new EventEmitter>();\r\n\r\n /**\r\n * Should the control give the ability to select an image that emits the reset status for cover image\r\n */\r\n @Input() showReset: boolean = false;\r\n @Output() resetClicked: EventEmitter = new EventEmitter();\r\n\r\n /**\r\n * Emits the selected index. Used usually to check if something other than the default image was selected.\r\n */\r\n @Output() imageSelected: EventEmitter = new EventEmitter();\r\n /**\r\n * Emits a base64 encoded image\r\n */\r\n @Output() selectedBase64Url: EventEmitter = new EventEmitter();\r\n\r\n\r\n\r\n selectedIndex: number = 0;\r\n /**\r\n * Only applies for showApplyButton. Used to track which image is applied.\r\n */\r\n appliedIndex: number = 0;\r\n form!: FormGroup;\r\n files: NgxFileDropEntry[] = [];\r\n acceptableExtensions = ['.png', '.jpg', '.jpeg', '.gif', '.webp'].join(',');\r\n\r\n mode: 'file' | 'url' | 'all' = 'all';\r\n private readonly onDestroy = new Subject();\r\n\r\n constructor(public imageService: ImageService, private fb: FormBuilder, private toastr: ToastrService, private uploadService: UploadService,\r\n @Inject(DOCUMENT) private document: Document, private readonly cdRef: ChangeDetectorRef) { }\r\n\r\n ngOnInit(): void {\r\n this.form = this.fb.group({\r\n coverImageUrl: new FormControl('', [])\r\n });\r\n\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.onDestroy.next();\r\n this.onDestroy.complete();\r\n }\r\n\r\n /**\r\n * Generates a base64 encoding for an Image. Used in manual file upload flow.\r\n * @param img\r\n * @returns\r\n */\r\n getBase64Image(img: HTMLImageElement) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n const ctx = canvas.getContext(\"2d\", {alpha: false});\r\n if (!ctx) {\r\n return '';\r\n }\r\n\r\n ctx.drawImage(img, 0, 0);\r\n const dataURL = canvas.toDataURL(\"image/png\");\r\n return dataURL;\r\n }\r\n\r\n selectImage(index: number) {\r\n if (this.selectedIndex === index) { return; }\r\n\r\n // If we load custom images of series/chapters/covers, then those urls are not properly encoded, so on select we have to clean them up\r\n if (!this.imageUrls[index].startsWith('data:image/')) {\r\n const imgUrl = this.imageUrls[index];\r\n const img = new Image();\r\n img.crossOrigin = 'Anonymous';\r\n img.src = imgUrl;\r\n img.onload = (e) => this.handleUrlImageAdd(img, index);\r\n img.onerror = (e) => {\r\n this.toastr.error(translate('errors.rejected-cover-upload'));\r\n this.form.get('coverImageUrl')?.setValue('');\r\n this.cdRef.markForCheck();\r\n };\r\n this.form.get('coverImageUrl')?.setValue('');\r\n this.cdRef.markForCheck();\r\n this.selectedBase64Url.emit(this.imageUrls[this.selectedIndex]);\r\n return;\r\n }\r\n\r\n this.selectedIndex = index;\r\n this.cdRef.markForCheck();\r\n this.imageSelected.emit(this.selectedIndex);\r\n this.selectedBase64Url.emit(this.imageUrls[this.selectedIndex]);\r\n }\r\n\r\n applyImage(index: number) {\r\n if (this.showApplyButton) {\r\n this.applyCover.emit(this.imageUrls[index]);\r\n this.appliedIndex = index;\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n\r\n resetImage() {\r\n if (this.showApplyButton) {\r\n this.resetCover.emit();\r\n }\r\n }\r\n\r\n loadImage(url?: string) {\r\n url = url || this.form.get('coverImageUrl')?.value.trim();\r\n if (!url || url === '') return;\r\n\r\n this.uploadService.uploadByUrl(url).subscribe(filename => {\r\n const img = new Image();\r\n img.crossOrigin = 'Anonymous';\r\n img.src = this.imageService.getCoverUploadImage(filename);\r\n img.onload = (e) => this.handleUrlImageAdd(img);\r\n img.onerror = (e) => {\r\n this.toastr.error(translate('errors.rejected-cover-upload'));\r\n this.form.get('coverImageUrl')?.setValue('');\r\n this.cdRef.markForCheck();\r\n };\r\n this.form.get('coverImageUrl')?.setValue('');\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n\r\n\r\n changeMode(mode: 'url') {\r\n this.mode = mode;\r\n this.setupEnterHandler();\r\n this.cdRef.markForCheck();\r\n\r\n setTimeout(() => (this.document.querySelector('#load-image') as HTMLInputElement)?.focus(), 10);\r\n }\r\n\r\n public dropped(files: NgxFileDropEntry[]) {\r\n this.files = files;\r\n for (const droppedFile of files) {\r\n\r\n // Is it a file?\r\n if (droppedFile.fileEntry.isFile) {\r\n const fileEntry = droppedFile.fileEntry as FileSystemFileEntry;\r\n fileEntry.file((file: File) => {\r\n const reader = new FileReader();\r\n reader.onload = (e) => this.handleFileImageAdd(e);\r\n reader.readAsDataURL(file);\r\n });\r\n }\r\n }\r\n }\r\n\r\n handleFileImageAdd(e: any) {\r\n if (e.target == null) return;\r\n\r\n this.imageUrls.push(e.target.result); // This is base64 already\r\n this.imageUrlsChange.emit(this.imageUrls);\r\n this.selectedIndex = this.imageUrls.length - 1;\r\n this.imageSelected.emit(this.selectedIndex); // Auto select newly uploaded image\r\n this.selectedBase64Url.emit(e.target.result);\r\n setTimeout(() => {\r\n (this.document.querySelector('div.image-card[aria-label=\"Image ' + this.selectedIndex + '\"]') as HTMLElement).focus();\r\n })\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n handleUrlImageAdd(img: HTMLImageElement, index: number = -1) {\r\n const url = this.getBase64Image(img);\r\n if (index >= 0) {\r\n this.imageUrls[index] = url;\r\n } else {\r\n this.imageUrls.push(url);\r\n }\r\n\r\n this.imageUrlsChange.emit(this.imageUrls);\r\n this.cdRef.markForCheck();\r\n\r\n setTimeout(() => {\r\n // Auto select newly uploaded image and tell parent of new base64 url\r\n this.selectImage(index >= 0 ? index : this.imageUrls.length - 1);\r\n });\r\n }\r\n\r\n public fileOver(event: any){\r\n }\r\n\r\n public fileLeave(event: any){\r\n }\r\n\r\n reset() {\r\n this.resetClicked.emit();\r\n this.selectedIndex = -1;\r\n }\r\n\r\n setupEnterHandler() {\r\n setTimeout(() => {\r\n const elem = document.querySelector('input[id=\"load-image\"]');\r\n if (elem == null) return;\r\n fromEvent(elem, 'keydown')\r\n .pipe(takeWhile(() => this.mode === 'url')).subscribe((event) => {\r\n const evt = event;\r\n switch(evt.key) {\r\n case KEY_CODES.ENTER:\r\n {\r\n this.loadImage();\r\n break;\r\n }\r\n\r\n case KEY_CODES.ESC_KEY:\r\n this.mode = 'all';\r\n event.stopPropagation();\r\n break;\r\n default:\r\n break;\r\n }\r\n });\r\n });\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'bytes',\r\n standalone: true\r\n})\r\nexport class BytesPipe implements PipeTransform {\r\n\r\n /**\r\n * Format bytes as human-readable text.\r\n *\r\n * @param bytes Number of bytes.\r\n * @param si True to use metric (SI) units, aka powers of 1000. False to use\r\n * binary (IEC), aka powers of 1024.\r\n * @param dp Number of decimal places to display.\r\n *\r\n * @return Formatted string.\r\n *\r\n * Credit: https://stackoverflow.com/questions/10420352/converting-file-size-in-bytes-to-human-readable-string\r\n */\r\n transform(bytes: number, si=true, dp=1): string {\r\n const thresh = si ? 1000 : 1024;\r\n\r\n if (Math.abs(bytes) < thresh) {\r\n return bytes + ' B';\r\n }\r\n\r\n const units = si\r\n ? ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\r\n : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];\r\n let u = -1;\r\n const r = 10**dp;\r\n\r\n do {\r\n bytes /= thresh;\r\n ++u;\r\n } while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1);\r\n\r\n const fixed = bytes.toFixed(dp);\r\n if ((fixed + '').endsWith('.0')) {\r\n return bytes.toFixed(0) + ' ' + units[u];\r\n }\r\n\r\n return fixed + ' ' + units[u];\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport {TranslocoService} from \"@ngneat/transloco\";\r\n\r\n@Pipe({\r\n name: 'defaultDate',\r\n pure: true,\r\n standalone: true\r\n})\r\nexport class DefaultDatePipe implements PipeTransform {\r\n\r\n // TODO: Figure out how to translate Never\r\n constructor(private translocoService: TranslocoService) {\r\n }\r\n transform(value: any, replacementString = 'default-date-pipe.never'): string {\r\n if (value === null || value === undefined || value === '' || value === Infinity || Number.isNaN(value) || value === '1/1/01') {\r\n return this.translocoService.translate(replacementString);\r\n };\r\n return value;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'filter',\r\n pure: false,\r\n standalone: true\r\n})\r\nexport class FilterPipe implements PipeTransform {\r\n\r\n transform(items: any[], callback: (item: any) => boolean): any {\r\n if (!items || !callback) {\r\n return items;\r\n }\r\n const ret = items.filter(item => callback(item));\r\n if (ret.length === items.length) return items; // This will prevent a re-render\r\n return ret;\r\n}\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { MangaFormat } from '../_models/manga-format';\r\n\r\n/**\r\n * Returns the icon class representing the format\r\n */\r\n@Pipe({\r\n name: 'mangaFormatIcon',\r\n standalone: true\r\n})\r\nexport class MangaFormatIconPipe implements PipeTransform {\r\n\r\n transform(format: MangaFormat): string {\r\n switch (format) {\r\n case MangaFormat.EPUB:\r\n return 'fa-book';\r\n case MangaFormat.ARCHIVE:\r\n return 'fa-file-archive';\r\n case MangaFormat.IMAGE:\r\n return 'fa-image';\r\n case MangaFormat.PDF:\r\n return 'fa-file-pdf';\r\n case MangaFormat.UNKNOWN:\r\n return 'fa-question';\r\n }\r\n }\r\n\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport { MangaFormat } from '../_models/manga-format';\r\nimport {TranslocoService} from \"@ngneat/transloco\";\r\n\r\n/**\r\n * Returns the string name for the format\r\n */\r\n@Pipe({\r\n name: 'mangaFormat',\r\n standalone: true\r\n})\r\nexport class MangaFormatPipe implements PipeTransform {\r\n\r\n constructor(private translocoService: TranslocoService) {}\r\n\r\n transform(format: MangaFormat): string {\r\n switch (format) {\r\n case MangaFormat.EPUB:\r\n return this.translocoService.translate('manga-format-pipe.epub');\r\n case MangaFormat.ARCHIVE:\r\n return this.translocoService.translate('manga-format-pipe.archive');\r\n case MangaFormat.IMAGE:\r\n return this.translocoService.translate('manga-format-pipe.image');\r\n case MangaFormat.PDF:\r\n return this.translocoService.translate('manga-format-pipe.pdf');\r\n case MangaFormat.UNKNOWN:\r\n return this.translocoService.translate('manga-format-pipe.unknown');\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { Pipe, PipeTransform, SecurityContext } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'safeHtml',\r\n pure: true,\r\n standalone: true\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n private readonly dom: DomSanitizer = inject(DomSanitizer);\r\n constructor() {}\r\n\r\n transform(value: string): unknown {\r\n return this.dom.sanitize(SecurityContext.HTML, value);\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'sentenceCase',\r\n standalone: true\r\n})\r\nexport class SentenceCasePipe implements PipeTransform {\r\n\r\n transform(value: string | null): string {\r\n if (value === null || value === undefined) return '';\r\n\r\n return value.charAt(0).toUpperCase() + value.substring(1);\r\n }\r\n\r\n}\r\n","\r\n\r\n virtualizeAfter; else dragList\">\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
0 ? 'example-list list-group-flush' : ''}}\" (cdkDropListDropped)=\"drop($event)\">\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n\r\n

\r\n {{t('instructions-alt')}}\r\n

\r\n\r\n\r\n
\r\n","import { CdkDragDrop, moveItemInArray, CdkDropList, CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild, DestroyRef,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n Output,\r\n TemplateRef,\r\n TrackByFunction\r\n} from '@angular/core';\r\nimport { VirtualScrollerModule } from '@iharbeck/ngx-virtual-scroller';\r\nimport {NgIf, NgFor, NgTemplateOutlet, NgClass} from '@angular/common';\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\nimport {BulkSelectionService} from \"../../../cards/bulk-selection.service\";\r\nimport {SeriesCardComponent} from \"../../../cards/series-card/series-card.component\";\r\nimport {FormsModule} from \"@angular/forms\";\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {NgxVirtualScrollModule} from \"@lithiumjs/ngx-virtual-scroll\";\r\n\r\nexport interface IndexUpdateEvent {\r\n fromPosition: number;\r\n toPosition: number;\r\n item: any;\r\n fromAccessibilityMode: boolean;\r\n}\r\n\r\nexport interface ItemRemoveEvent {\r\n position: number;\r\n item: any;\r\n}\r\n\r\n@Component({\r\n selector: 'app-draggable-ordered-list',\r\n templateUrl: './draggable-ordered-list.component.html',\r\n styleUrls: ['./draggable-ordered-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [NgIf, VirtualScrollerModule, NgFor, NgTemplateOutlet, CdkDropList, CdkDrag,\r\n CdkDragHandle, TranslocoDirective, NgClass, SeriesCardComponent, FormsModule,\r\n NgxVirtualScrollModule, NgxVirtualScrollModule]\r\n})\r\nexport class DraggableOrderedListComponent {\r\n\r\n /**\r\n * After this many elements, drag and drop is disabled and we use a virtualized list instead\r\n */\r\n @Input() virtualizeAfter = 100;\r\n @Input() accessibilityMode: boolean = false;\r\n /**\r\n * Shows the remove button on the list item\r\n */\r\n @Input() showRemoveButton: boolean = true;\r\n @Input() items: Array = [];\r\n /**\r\n * Parent scroll for virtualize pagination\r\n */\r\n @Input() parentScroll!: Element | Window;\r\n /**\r\n * Disables drag and drop functionality. Useful if a filter is present which will skew actual index.\r\n */\r\n @Input() disabled: boolean = false;\r\n /**\r\n * When enabled, draggability is disabled and a checkbox renders instead of order box or drag handle\r\n */\r\n @Input() bulkMode: boolean = false;\r\n @Input() trackByIdentity: TrackByFunction = (index: number, item: any) => `${item.id}_${item.order}_${item.title}`;\r\n /**\r\n * After an item is re-ordered, you MUST reload from backend the new data. This is because accessibility mode will use item.order which needs to be in sync.\r\n */\r\n @Output() orderUpdated: EventEmitter = new EventEmitter();\r\n @Output() itemRemove: EventEmitter = new EventEmitter();\r\n @ContentChild('draggableItem') itemTemplate!: TemplateRef;\r\n\r\n public readonly bulkSelectionService = inject(BulkSelectionService);\r\n public readonly destroyRef = inject(DestroyRef);\r\n\r\n get BufferAmount() {\r\n return Math.min(this.items.length / 20, 20);\r\n }\r\n\r\n constructor(private readonly cdRef: ChangeDetectorRef) {\r\n this.bulkSelectionService.selections$.pipe(\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe((s) => {\r\n this.cdRef.markForCheck()\r\n });\r\n }\r\n\r\n drop(event: CdkDragDrop) {\r\n if (event.previousIndex === event.currentIndex) return;\r\n moveItemInArray(this.items, event.previousIndex, event.currentIndex);\r\n this.orderUpdated.emit({\r\n fromPosition: event.previousIndex,\r\n toPosition: event.currentIndex,\r\n item: event.item.data,\r\n fromAccessibilityMode: false\r\n });\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n updateIndex(previousIndex: number, item: any) {\r\n // get the new value of the input\r\n const inputElem = document.querySelector('#reorder-' + previousIndex);\r\n const newIndex = parseInt(inputElem.value, 10);\r\n if (item.order === newIndex) return;\r\n moveItemInArray(this.items, item.order, newIndex);\r\n this.orderUpdated.emit({\r\n fromPosition: item.order,\r\n toPosition: newIndex,\r\n item: item,\r\n fromAccessibilityMode: true\r\n });\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n removeItem(item: any, position: number) {\r\n this.itemRemove.emit({\r\n position: item!.order,\r\n item\r\n });\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n selectItem(updatedVal: Event, index: number) {\r\n const boolVal = (updatedVal.target as HTMLInputElement).value == 'true';\r\n\r\n this.bulkSelectionService.handleCardSelection('sideNavStream', index, this.items.length, boolVal);\r\n this.cdRef.markForCheck();\r\n }\r\n}\r\n","\r\n\r\n
\r\n

{{t('title')}}

\r\n \r\n
\r\n
\r\n
\r\n
= 5\">\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
    \r\n
  • \r\n {{readingList.title}} \r\n
  • \r\n
  • {{t('no-data')}}
  • \r\n
  • \r\n
    \r\n {{t('loading')}}\r\n
    \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n","import {AfterViewInit, Component, ElementRef, inject, Input, OnInit, ViewChild} from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { ReadingList } from 'src/app/_models/reading-list';\r\nimport { ReadingListService } from 'src/app/_services/reading-list.service';\r\nimport { FilterPipe } from '../../../pipe/filter.pipe';\r\nimport { NgIf, NgFor } from '@angular/common';\r\nimport {TranslocoDirective, TranslocoService} from \"@ngneat/transloco\";\r\n\r\nexport enum ADD_FLOW {\r\n Series = 0,\r\n Volume = 1,\r\n Chapter = 2,\r\n Multiple = 3,\r\n Multiple_Series\r\n}\r\n\r\n@Component({\r\n selector: 'app-add-to-list-modal',\r\n templateUrl: './add-to-list-modal.component.html',\r\n styleUrls: ['./add-to-list-modal.component.scss'],\r\n standalone: true,\r\n imports: [ReactiveFormsModule, NgIf, NgFor, FilterPipe, TranslocoDirective]\r\n})\r\nexport class AddToListModalComponent implements OnInit, AfterViewInit {\r\n\r\n @Input({required: true}) title!: string;\r\n /**\r\n * Only used in Series flow\r\n */\r\n @Input() seriesId?: number;\r\n /**\r\n * Only used in Volume flow\r\n */\r\n @Input() volumeId?: number;\r\n /**\r\n * Only used in Chapter flow\r\n */\r\n @Input() chapterId?: number;\r\n /**\r\n * Only used in Multiple flow\r\n */\r\n @Input() volumeIds?: Array;\r\n /**\r\n * Only used in Multiple flow\r\n */\r\n @Input() chapterIds?: Array;\r\n /**\r\n * Only used in Multiple_Series flow\r\n */\r\n @Input() seriesIds?: Array;\r\n\r\n /**\r\n * Determines which Input is required and which API is used to associate to the Reading List\r\n */\r\n @Input({required: true}) type!: ADD_FLOW;\r\n\r\n /**\r\n * All existing reading lists sorted by recent use date\r\n */\r\n lists: Array = [];\r\n loading: boolean = false;\r\n listForm: FormGroup = new FormGroup({});\r\n\r\n @ViewChild('title') inputElem!: ElementRef;\r\n\r\n filterList = (listItem: ReadingList) => {\r\n return listItem.title.toLowerCase().indexOf((this.listForm.value.filterQuery || '').toLowerCase()) >= 0;\r\n }\r\n\r\n translocoService = inject(TranslocoService);\r\n\r\n\r\n constructor(private modal: NgbActiveModal, private readingListService: ReadingListService, private toastr: ToastrService) { }\r\n\r\n ngOnInit(): void {\r\n\r\n this.listForm.addControl('title', new FormControl(this.title, []));\r\n this.listForm.addControl('filterQuery', new FormControl('', []));\r\n\r\n this.loading = true;\r\n this.readingListService.getReadingLists(false, true).subscribe(lists => {\r\n this.lists = lists.result;\r\n this.loading = false;\r\n });\r\n\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n // Shift focus to input\r\n if (this.inputElem) {\r\n this.inputElem.nativeElement.select();\r\n }\r\n }\r\n\r\n close() {\r\n this.modal.close();\r\n }\r\n\r\n create() {\r\n this.readingListService.createList(this.listForm.value.title).subscribe(list => {\r\n this.addToList(list);\r\n });\r\n }\r\n\r\n addToList(readingList: ReadingList) {\r\n\r\n if (this.type === ADD_FLOW.Multiple_Series && this.seriesIds !== undefined) {\r\n this.readingListService.updateByMultipleSeries(readingList.id, this.seriesIds).subscribe(() => {\r\n this.toastr.success(this.translocoService.translate('toasts.series-added-to-reading-list'));\r\n this.modal.close();\r\n });\r\n }\r\n\r\n if (this.seriesId === undefined) return;\r\n\r\n if (this.type === ADD_FLOW.Series && this.seriesId !== undefined) {\r\n this.readingListService.updateBySeries(readingList.id, this.seriesId).subscribe(() => {\r\n this.toastr.success(this.translocoService.translate('toasts.series-added-to-reading-list'));\r\n this.modal.close();\r\n });\r\n } else if (this.type === ADD_FLOW.Volume && this.volumeId !== undefined) {\r\n this.readingListService.updateByVolume(readingList.id, this.seriesId, this.volumeId).subscribe(() => {\r\n this.toastr.success(this.translocoService.translate('toasts.volumes-added-to-reading-list'));\r\n this.modal.close();\r\n });\r\n } else if (this.type === ADD_FLOW.Chapter && this.chapterId !== undefined) {\r\n this.readingListService.updateByChapter(readingList.id, this.seriesId, this.chapterId).subscribe(() => {\r\n this.toastr.success(this.translocoService.translate('toasts.chapter-added-to-reading-list'));\r\n this.modal.close();\r\n });\r\n } else if (this.type === ADD_FLOW.Multiple && this.volumeIds !== undefined && this.chapterIds !== undefined) {\r\n this.readingListService.updateByMultiple(readingList.id, this.seriesId, this.volumeIds, this.chapterIds).subscribe(() => {\r\n this.toastr.success(this.translocoService.translate('toasts.multiple-added-to-reading-list'));\r\n this.modal.close();\r\n });\r\n }\r\n\r\n }\r\n}\r\n","\r\n\r\n
\r\n

{{t('title', {name: readingList.title})}}

\r\n \r\n
\r\n
\r\n
    \r\n
  • \r\n {{t(TabID.General)}}\r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n {{t('required-field')}}\r\n
    \r\n
    \r\n {{t('name-unique-validation')}}\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n {{t('promote-tooltip')}}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    {{t('starting-title')}}
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n {{t('month-validation')}}\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n {{t('year-validation')}}\r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    {{t('ending-title')}}
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n {{t('month-validation')}}\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n {{t('year-validation')}}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
  • \r\n
  • \r\n {{t(TabID.CoverImage)}}\r\n \r\n \r\n \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n\r\n\r\n
\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n DestroyRef,\r\n inject,\r\n Input,\r\n OnInit\r\n} from '@angular/core';\r\nimport { FormGroup, FormControl, Validators, ReactiveFormsModule } from '@angular/forms';\r\nimport { NgbActiveModal, NgbNav, NgbNavItem, NgbNavItemRole, NgbNavLink, NgbNavContent, NgbTooltip, NgbNavOutlet } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { debounceTime, distinctUntilChanged, forkJoin, switchMap, tap } from 'rxjs';\r\nimport { Breakpoint, UtilityService } from 'src/app/shared/_services/utility.service';\r\nimport { ReadingList } from 'src/app/_models/reading-list';\r\nimport { AccountService } from 'src/app/_services/account.service';\r\nimport { ImageService } from 'src/app/_services/image.service';\r\nimport { ReadingListService } from 'src/app/_services/reading-list.service';\r\nimport { UploadService } from 'src/app/_services/upload.service';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport { CoverImageChooserComponent } from '../../../cards/cover-image-chooser/cover-image-chooser.component';\r\nimport { NgIf, NgTemplateOutlet, AsyncPipe } from '@angular/common';\r\nimport {translate, TranslocoDirective} from \"@ngneat/transloco\";\r\n\r\nenum TabID {\r\n General = 'general-tab',\r\n CoverImage = 'cover-image-tab'\r\n}\r\n\r\n@Component({\r\n selector: 'app-edit-reading-list-modal',\r\n templateUrl: './edit-reading-list-modal.component.html',\r\n styleUrls: ['./edit-reading-list-modal.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [NgbNav, NgbNavItem, NgbNavItemRole, NgbNavLink, NgbNavContent, ReactiveFormsModule, NgIf, NgbTooltip, NgTemplateOutlet, CoverImageChooserComponent, NgbNavOutlet, AsyncPipe, TranslocoDirective]\r\n})\r\nexport class EditReadingListModalComponent implements OnInit {\r\n\r\n @Input({required: true}) readingList!: ReadingList;\r\n private readonly destroyRef = inject(DestroyRef);\r\n reviewGroup!: FormGroup;\r\n\r\n coverImageIndex: number = 0;\r\n /**\r\n * Url of the selected cover\r\n */\r\n selectedCover: string = '';\r\n coverImageLocked: boolean = false;\r\n imageUrls: Array = [];\r\n active = TabID.General;\r\n\r\n get Breakpoint() { return Breakpoint; }\r\n get TabID() { return TabID; }\r\n\r\n constructor(private ngModal: NgbActiveModal, private readingListService: ReadingListService,\r\n public utilityService: UtilityService, private uploadService: UploadService, private toastr: ToastrService,\r\n private imageService: ImageService, private readonly cdRef: ChangeDetectorRef, public accountService: AccountService) { }\r\n\r\n ngOnInit(): void {\r\n this.reviewGroup = new FormGroup({\r\n title: new FormControl(this.readingList.title, { nonNullable: true, validators: [Validators.required] }),\r\n summary: new FormControl(this.readingList.summary, { nonNullable: true, validators: [] }),\r\n promoted: new FormControl(this.readingList.promoted, { nonNullable: true, validators: [] }),\r\n startingMonth: new FormControl(this.readingList.startingMonth, { nonNullable: true, validators: [Validators.min(1), Validators.max(12)] }),\r\n startingYear: new FormControl(this.readingList.startingYear, { nonNullable: true, validators: [Validators.min(1000)] }),\r\n endingMonth: new FormControl(this.readingList.endingMonth, { nonNullable: true, validators: [Validators.min(1), Validators.max(12)] }),\r\n endingYear: new FormControl(this.readingList.endingYear, { nonNullable: true, validators: [Validators.min(1000)] }),\r\n });\r\n\r\n this.coverImageLocked = this.readingList.coverImageLocked;\r\n\r\n this.reviewGroup.get('title')?.valueChanges.pipe(\r\n debounceTime(100),\r\n distinctUntilChanged(),\r\n switchMap(name => this.readingListService.nameExists(name)),\r\n tap(exists => {\r\n const isExistingName = this.reviewGroup.get('title')?.value === this.readingList.title;\r\n if (!exists || isExistingName) {\r\n this.reviewGroup.get('title')?.setErrors(null);\r\n } else {\r\n this.reviewGroup.get('title')?.setErrors({duplicateName: true})\r\n }\r\n this.cdRef.markForCheck();\r\n }),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe();\r\n\r\n this.imageUrls.push(this.imageService.randomize(this.imageService.getReadingListCoverImage(this.readingList.id)));\r\n if (!this.readingList.items || this.readingList.items.length === 0) {\r\n this.readingListService.getListItems(this.readingList.id).subscribe(items => {\r\n this.imageUrls.push(...(items).map(rli => this.imageService.getChapterCoverImage(rli.chapterId)));\r\n });\r\n } else {\r\n this.imageUrls.push(...(this.readingList.items).map(rli => this.imageService.getChapterCoverImage(rli.chapterId)));\r\n }\r\n }\r\n\r\n close() {\r\n this.ngModal.dismiss(undefined);\r\n }\r\n\r\n save() {\r\n if (this.reviewGroup.value.title.trim() === '') return;\r\n\r\n const model = {...this.reviewGroup.value, readingListId: this.readingList.id, coverImageLocked: this.coverImageLocked};\r\n model.startingMonth = model.startingMonth || 0;\r\n model.startingYear = model.startingYear || 0;\r\n model.endingMonth = model.endingMonth || 0;\r\n model.endingYear = model.endingYear || 0;\r\n const apis = [this.readingListService.update(model)];\r\n\r\n if (this.selectedCover !== '') {\r\n apis.push(this.uploadService.updateReadingListCoverImage(this.readingList.id, this.selectedCover))\r\n }\r\n\r\n forkJoin(apis).subscribe(results => {\r\n this.readingList.title = model.title;\r\n this.readingList.summary = model.summary;\r\n this.readingList.coverImageLocked = this.coverImageLocked;\r\n this.readingList.promoted = model.promoted;\r\n this.ngModal.close(this.readingList);\r\n this.toastr.success(translate('toasts.reading-list-updated'));\r\n });\r\n }\r\n\r\n updateSelectedIndex(index: number) {\r\n this.coverImageIndex = index;\r\n this.cdRef.detectChanges();\r\n }\r\n\r\n updateSelectedImage(url: string) {\r\n this.selectedCover = url;\r\n }\r\n\r\n handleReset() {\r\n this.coverImageLocked = false;\r\n }\r\n\r\n}\r\n","export enum CblImportResult {\r\n Fail = 0,\r\n Partial = 1,\r\n Success = 2\r\n}","\r\n
\r\n
    \r\n \r\n
  • \r\n
    \r\n {{step.title}}\r\n
  • \r\n
    \r\n
\r\n
","import { Component, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\r\nimport {CommonModule} from \"@angular/common\";\r\n\r\n\r\nexport interface TimelineStep {\r\n title: string;\r\n active: boolean;\r\n icon: string;\r\n index: number;\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'app-step-tracker',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './step-tracker.component.html',\r\n styleUrls: ['./step-tracker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class StepTrackerComponent {\r\n @Input() steps: Array = [];\r\n @Input() currentStep: number = 0;\r\n\r\n\r\n constructor(private readonly cdRef: ChangeDetectorRef) {}\r\n\r\n}\r\n","export enum CblImportReason {\r\n ChapterMissing = 0,\r\n VolumeMissing = 1,\r\n SeriesMissing = 2,\r\n NameConflict = 3,\r\n AllSeriesMissing = 4,\r\n EmptyFile = 5,\r\n SeriesCollision = 6,\r\n AllChapterMissing = 7,\r\n Success = 8,\r\n InvalidFile = 9\r\n}","import {inject, Pipe, PipeTransform} from '@angular/core';\r\nimport { CblBookResult } from 'src/app/_models/reading-list/cbl/cbl-book-result';\r\nimport { CblImportReason } from 'src/app/_models/reading-list/cbl/cbl-import-reason.enum';\r\nimport {TranslocoService} from \"@ngneat/transloco\";\r\n\r\nconst failIcon = '';\r\nconst successIcon = '';\r\n\r\n@Pipe({\r\n name: 'cblConflictReason',\r\n standalone: true\r\n})\r\nexport class CblConflictReasonPipe implements PipeTransform {\r\n\r\n translocoService = inject(TranslocoService);\r\n\r\n transform(result: CblBookResult): string {\r\n switch (result.reason) {\r\n case CblImportReason.AllSeriesMissing:\r\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.all-series-missing');\r\n case CblImportReason.ChapterMissing:\r\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.chapter-missing', {series: result.series, chapter: result.number});\r\n case CblImportReason.EmptyFile:\r\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.empty-file');\r\n case CblImportReason.NameConflict:\r\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.chapter-missing', {readingListName: result.readingListName});\r\n case CblImportReason.SeriesCollision:\r\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.series-collision', {seriesLink: `${result.series}`});\r\n case CblImportReason.SeriesMissing:\r\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.series-missing', {series: result.series});\r\n case CblImportReason.VolumeMissing:\r\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.volume-missing', {series: result.series, volume: result.volume});\r\n case CblImportReason.AllChapterMissing:\r\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.all-chapter-missing');\r\n case CblImportReason.Success:\r\n return successIcon + this.translocoService.translate('cbl-conflict-reason-pipe.volume-missing', {series: result.series, volume: result.volume, chapter: result.number});\r\n case CblImportReason.InvalidFile:\r\n return failIcon + this.translocoService.translate('cbl-conflict-reason-pipe.invalid-file');\r\n }\r\n }\r\n\r\n}\r\n","import {inject, Pipe, PipeTransform} from '@angular/core';\r\nimport { CblImportResult } from 'src/app/_models/reading-list/cbl/cbl-import-result.enum';\r\nimport {TranslocoService} from \"@ngneat/transloco\";\r\n\r\n@Pipe({\r\n name: 'cblImportResult',\r\n standalone: true\r\n})\r\nexport class CblImportResultPipe implements PipeTransform {\r\n\r\n translocoService = inject(TranslocoService);\r\n\r\n transform(result: CblImportResult): string {\r\n switch (result) {\r\n case CblImportResult.Success:\r\n return this.translocoService.translate('cbl-import-result-pipe.success');\r\n case CblImportResult.Partial:\r\n return this.translocoService.translate('cbl-import-result-pipe.partial');\r\n case CblImportResult.Fail:\r\n return this.translocoService.translate('cbl-import-result-pipe.failure');\r\n }\r\n }\r\n}\r\n","\r\n\r\n
\r\n

CBL Import

\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n
\r\n

{{t('import-description')}}

\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n

{{t('validate-description')}}

\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n 0; else noValidateIssues\">\r\n
{{t('validate-warning')}}
\r\n
    \r\n
  1. \r\n
  2. \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {{t('validate-no-issue')}}\r\n
\r\n
\r\n {{t('validate-no-issue-description')}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n

{{t('dry-run-description')}}

\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n
    \r\n
  • \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n {{success}}\r\n {{success}}\r\n {{success}}\r\n \r\n \r\n {{filename}}: ({{summary.cblName}})\r\n \r\n\r\n\r\n
\r\n
\r\n Help\r\n \r\n \r\n \r\n
\r\n\r\n\r\n\r\n
\r\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, inject, ViewChild} from '@angular/core';\r\nimport {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms';\r\nimport {FileUploadModule, FileUploadValidators} from '@iplab/ngx-file-upload';\r\nimport {\r\n NgbAccordionModule, NgbAccordionToggle,\r\n NgbActiveModal\r\n} from '@ng-bootstrap/ng-bootstrap';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { forkJoin } from 'rxjs';\r\nimport { Breakpoint, UtilityService } from 'src/app/shared/_services/utility.service';\r\nimport { CblImportResult } from 'src/app/_models/reading-list/cbl/cbl-import-result.enum';\r\nimport { CblImportSummary } from 'src/app/_models/reading-list/cbl/cbl-import-summary';\r\nimport { ReadingListService } from 'src/app/_services/reading-list.service';\r\nimport {StepTrackerComponent, TimelineStep} from '../../_components/step-tracker/step-tracker.component';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {SafeHtmlPipe} from \"../../../pipe/safe-html.pipe\";\r\nimport {CblConflictReasonPipe} from \"../../_pipes/cbl-conflict-reason.pipe\";\r\nimport {CblImportResultPipe} from \"../../_pipes/cbl-import-result.pipe\";\r\nimport {TranslocoDirective, TranslocoService} from \"@ngneat/transloco\";\r\n\r\ninterface FileStep {\r\n fileName: string;\r\n validateSummary: CblImportSummary | undefined;\r\n dryRunSummary: CblImportSummary | undefined;\r\n finalizeSummary: CblImportSummary | undefined;\r\n}\r\n\r\nenum Step {\r\n Import = 0,\r\n Validate = 1,\r\n DryRun = 2,\r\n Finalize = 3\r\n}\r\n\r\n@Component({\r\n selector: 'app-import-cbl-modal',\r\n standalone: true,\r\n imports: [CommonModule,\r\n FileUploadModule,\r\n NgbAccordionModule,\r\n SafeHtmlPipe,\r\n CblConflictReasonPipe, ReactiveFormsModule, StepTrackerComponent, CblImportResultPipe, NgbAccordionToggle, TranslocoDirective],\r\n templateUrl: './import-cbl-modal.component.html',\r\n styleUrls: ['./import-cbl-modal.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ImportCblModalComponent {\r\n\r\n @ViewChild('fileUpload') fileUpload!: ElementRef;\r\n\r\n translocoService = inject(TranslocoService);\r\n\r\n fileUploadControl = new FormControl>(undefined, [\r\n FileUploadValidators.accept(['.cbl']),\r\n ]);\r\n\r\n uploadForm = new FormGroup({\r\n files: this.fileUploadControl\r\n });\r\n\r\n isLoading: boolean = false;\r\n\r\n steps: Array = [\r\n {title: this.translocoService.translate('import-cbl-modal.import-step'), index: Step.Import, active: true, icon: 'fa-solid fa-file-arrow-up'},\r\n {title: this.translocoService.translate('import-cbl-modal.validate-cbl-step'), index: Step.Validate, active: false, icon: 'fa-solid fa-spell-check'},\r\n {title: this.translocoService.translate('import-cbl-modal.dry-run-step'), index: Step.DryRun, active: false, icon: 'fa-solid fa-gears'},\r\n {title: this.translocoService.translate('import-cbl-final-import.import-step'), index: Step.Finalize, active: false, icon: 'fa-solid fa-floppy-disk'},\r\n ];\r\n currentStepIndex = this.steps[0].index;\r\n\r\n filesToProcess: Array = [];\r\n failedFiles: Array = [];\r\n\r\n\r\n get Breakpoint() { return Breakpoint; }\r\n get Step() { return Step; }\r\n get CblImportResult() { return CblImportResult; }\r\n\r\n get NextButtonLabel() {\r\n switch(this.currentStepIndex) {\r\n case Step.DryRun:\r\n return 'import';\r\n case Step.Finalize:\r\n return 'restart'\r\n default:\r\n return 'next';\r\n }\r\n }\r\n\r\n constructor(private ngModal: NgbActiveModal, private readingListService: ReadingListService,\r\n public utilityService: UtilityService, private readonly cdRef: ChangeDetectorRef,\r\n private toastr: ToastrService) {}\r\n\r\n close() {\r\n this.ngModal.close();\r\n }\r\n\r\n nextStep() {\r\n if (this.currentStepIndex === Step.Import && !this.isFileSelected()) return;\r\n\r\n this.isLoading = true;\r\n switch (this.currentStepIndex) {\r\n case Step.Import:\r\n const files = this.uploadForm.get('files')?.value;\r\n if (!files) {\r\n this.toastr.error(this.translocoService.translate('toasts.select-files-warning'));\r\n return;\r\n }\r\n // Load each file into filesToProcess and group their data\r\n let pages = [];\r\n for (let i = 0; i < files.length; i++) {\r\n const formData = new FormData();\r\n formData.append('cbl', files[i]);\r\n formData.append('dryRun', true + '');\r\n pages.push(this.readingListService.validateCbl(formData));\r\n }\r\n forkJoin(pages).subscribe(results => {\r\n this.filesToProcess = [];\r\n results.forEach(cblImport => {\r\n this.filesToProcess.push({\r\n fileName: cblImport.fileName,\r\n validateSummary: cblImport,\r\n dryRunSummary: undefined,\r\n finalizeSummary: undefined\r\n });\r\n });\r\n\r\n this.filesToProcess = this.filesToProcess.sort((a, b) => b.validateSummary!.success - a.validateSummary!.success);\r\n this.cdRef.markForCheck();\r\n\r\n this.currentStepIndex++;\r\n this.isLoading = false;\r\n this.cdRef.markForCheck();\r\n });\r\n break;\r\n case Step.Validate:\r\n this.failedFiles = this.filesToProcess.filter(item => item.validateSummary?.success === CblImportResult.Fail);\r\n this.filesToProcess = this.filesToProcess.filter(item => item.validateSummary?.success != CblImportResult.Fail);\r\n this.dryRun();\r\n break;\r\n case Step.DryRun:\r\n this.failedFiles.push(...this.filesToProcess.filter(item => item.dryRunSummary?.success === CblImportResult.Fail));\r\n this.filesToProcess = this.filesToProcess.filter(item => item.dryRunSummary?.success != CblImportResult.Fail);\r\n this.import();\r\n break;\r\n case Step.Finalize:\r\n // Clear the models and allow user to do another import\r\n this.uploadForm.get('files')?.setValue(undefined);\r\n this.currentStepIndex = Step.Import;\r\n this.isLoading = false;\r\n this.filesToProcess = [];\r\n this.failedFiles = [];\r\n this.cdRef.markForCheck();\r\n break;\r\n }\r\n }\r\n\r\n prevStep() {\r\n if (this.currentStepIndex === Step.Import) return;\r\n this.currentStepIndex--;\r\n }\r\n\r\n canMoveToNextStep() {\r\n switch (this.currentStepIndex) {\r\n case Step.Import:\r\n return this.isFileSelected();\r\n case Step.Validate:\r\n return this.filesToProcess.filter(item => item.validateSummary?.success != CblImportResult.Fail).length > 0;\r\n case Step.DryRun:\r\n return this.filesToProcess.filter(item => item.dryRunSummary?.success != CblImportResult.Fail).length > 0;\r\n case Step.Finalize:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n canMoveToPrevStep() {\r\n switch (this.currentStepIndex) {\r\n case Step.Import:\r\n case Step.Finalize:\r\n return false;\r\n default:\r\n return true;\r\n }\r\n }\r\n\r\n\r\n isFileSelected() {\r\n const files = this.uploadForm.get('files')?.value;\r\n if (files) return files.length > 0;\r\n return false;\r\n }\r\n\r\n\r\n dryRun() {\r\n const filenamesAllowedToProcess = this.filesToProcess.map(p => p.fileName);\r\n const files = (this.uploadForm.get('files')?.value || []).filter(f => filenamesAllowedToProcess.includes(f.name));\r\n\r\n let pages = [];\r\n for (let i = 0; i < files.length; i++) {\r\n const formData = new FormData();\r\n formData.append('cbl', files[i]);\r\n formData.append('dryRun', 'true');\r\n pages.push(this.readingListService.importCbl(formData));\r\n }\r\n forkJoin(pages).subscribe(results => {\r\n results.forEach(cblImport => {\r\n const index = this.filesToProcess.findIndex(p => p.fileName === cblImport.fileName);\r\n this.filesToProcess[index].dryRunSummary = cblImport;\r\n });\r\n this.filesToProcess = this.filesToProcess.sort((a, b) => b.dryRunSummary!.success - a.dryRunSummary!.success);\r\n\r\n this.isLoading = false;\r\n this.currentStepIndex++;\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n import() {\r\n const filenamesAllowedToProcess = this.filesToProcess.map(p => p.fileName);\r\n const files = (this.uploadForm.get('files')?.value || []).filter(f => filenamesAllowedToProcess.includes(f.name));\r\n\r\n let pages = [];\r\n for (let i = 0; i < files.length; i++) {\r\n const formData = new FormData();\r\n formData.append('cbl', files[i]);\r\n formData.append('dryRun', 'false');\r\n pages.push(this.readingListService.importCbl(formData));\r\n }\r\n forkJoin(pages).subscribe(results => {\r\n results.forEach(cblImport => {\r\n const index = this.filesToProcess.findIndex(p => p.fileName === cblImport.fileName);\r\n this.filesToProcess[index].finalizeSummary = cblImport;\r\n });\r\n\r\n this.isLoading = false;\r\n this.currentStepIndex++;\r\n this.toastr.success(this.translocoService.translate('toasts.reading-list-imported'));\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n}\r\n","import {InjectionToken} from '@angular/core'\r\nimport { saveAs } from 'file-saver';\r\n\r\nexport type Saver = (blob: Blob, filename?: string) => void\r\n\r\nexport const SAVER = new InjectionToken('saver')\r\n\r\nexport function getSaver(): Saver {\r\n return saveAs;\r\n}","import {\r\n HttpEvent,\r\n HttpEventType,\r\n HttpHeaders,\r\n HttpProgressEvent,\r\n HttpResponse\r\n } from \"@angular/common/http\";\r\n import { Observable } from \"rxjs\";\r\n import { scan } from \"rxjs/operators\";\r\n \r\n function isHttpResponse(event: HttpEvent): event is HttpResponse {\r\n return event.type === HttpEventType.Response;\r\n }\r\n \r\n function isHttpProgressEvent(\r\n event: HttpEvent\r\n ): event is HttpProgressEvent {\r\n return (\r\n event.type === HttpEventType.DownloadProgress ||\r\n event.type === HttpEventType.UploadProgress\r\n );\r\n }\r\n\r\n/**\r\n * Encapsulates an inprogress download of a Blob with progress reporting activated\r\n */ \r\nexport interface Download {\r\n content: Blob | null;\r\n progress: number;\r\n state: \"PENDING\" | \"IN_PROGRESS\" | \"DONE\";\r\n filename?: string;\r\n loaded?: number;\r\n total?: number\r\n}\r\n \r\nexport function download(saver?: (b: Blob, filename: string) => void): (source: Observable>) => Observable {\r\n return (source: Observable>) =>\r\n source.pipe(\r\n scan((previous: Download, event: HttpEvent): Download => {\r\n if (isHttpProgressEvent(event)) {\r\n return {\r\n progress: event.total\r\n ? Math.round((100 * event.loaded) / event.total)\r\n : previous.progress,\r\n state: 'IN_PROGRESS',\r\n content: null,\r\n loaded: event.loaded,\r\n total: event.total\r\n }\r\n }\r\n if (isHttpResponse(event)) {\r\n if (saver && event.body) {\r\n saver(event.body, getFilename(event.headers, ''))\r\n }\r\n return {\r\n progress: 100,\r\n state: 'DONE',\r\n content: event.body,\r\n filename: getFilename(event.headers, ''),\r\n }\r\n }\r\n return previous;\r\n },\r\n {state: 'PENDING', progress: 0, content: null}\r\n )\r\n )\r\n }\r\n\r\n\r\nfunction getFilename(headers: HttpHeaders, defaultName: string) {\r\n const tokens = (headers.get('content-disposition') || '').split(';');\r\n let filename = tokens[1].replace('filename=', '').replace(/\"/ig, '').trim(); \r\n if (filename.startsWith('download_') || filename.startsWith('kavita_download_')) {\r\n const ext = filename.substring(filename.lastIndexOf('.'), filename.length);\r\n if (defaultName !== '') {\r\n return defaultName + ext;\r\n }\r\n return filename.replace('kavita_', '').replace('download_', '');\r\n //return defaultName + ext;\r\n }\r\n return filename;\r\n }","import { HttpClient } from '@angular/common/http';\r\nimport {DestroyRef, inject, Inject, Injectable} from '@angular/core';\r\nimport { Series } from 'src/app/_models/series';\r\nimport { environment } from 'src/environments/environment';\r\nimport { ConfirmService } from '../confirm.service';\r\nimport { Chapter } from 'src/app/_models/chapter';\r\nimport { Volume } from 'src/app/_models/volume';\r\nimport {\r\n asyncScheduler,\r\n BehaviorSubject,\r\n Observable,\r\n tap,\r\n finalize,\r\n of,\r\n filter,\r\n} from 'rxjs';\r\nimport { SAVER, Saver } from '../_providers/saver.provider';\r\nimport { download, Download } from '../_models/download';\r\nimport { PageBookmark } from 'src/app/_models/readers/page-bookmark';\r\nimport {switchMap, take, takeWhile, throttleTime} from 'rxjs/operators';\r\nimport { AccountService } from 'src/app/_services/account.service';\r\nimport { BytesPipe } from 'src/app/pipe/bytes.pipe';\r\nimport {translate} from \"@ngneat/transloco\";\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\n\r\nexport const DEBOUNCE_TIME = 100;\r\n\r\nconst bytesPipe = new BytesPipe();\r\n\r\nexport interface DownloadEvent {\r\n /**\r\n * Type of entity being downloaded\r\n */\r\n entityType: DownloadEntityType;\r\n /**\r\n * What to show user. For example, for Series, we might show series name.\r\n */\r\n subTitle: string;\r\n /**\r\n * Progress of the download itself\r\n */\r\n progress: number;\r\n}\r\n\r\n/**\r\n * Valid entity types for downloading\r\n */\r\nexport type DownloadEntityType = 'volume' | 'chapter' | 'series' | 'bookmark' | 'logs';\r\n/**\r\n * Valid entities for downloading. Undefined exclusively for logs.\r\n */\r\nexport type DownloadEntity = Series | Volume | Chapter | PageBookmark[] | undefined;\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DownloadService {\r\n\r\n private baseUrl = environment.apiUrl;\r\n /**\r\n * Size in bytes in which to inform the user for confirmation before download starts. Defaults to 100 MB.\r\n */\r\n public SIZE_WARNING = 104_857_600;\r\n\r\n private downloadsSource: BehaviorSubject = new BehaviorSubject([]);\r\n public activeDownloads$ = this.downloadsSource.asObservable();\r\n\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n constructor(private httpClient: HttpClient, private confirmService: ConfirmService,\r\n @Inject(SAVER) private save: Saver, private accountService: AccountService) { }\r\n\r\n\r\n /**\r\n * Returns the entity subtitle (for the event widget) for a given entity\r\n * @param downloadEntityType\r\n * @param downloadEntity\r\n * @returns\r\n */\r\n downloadSubtitle(downloadEntityType: DownloadEntityType, downloadEntity: DownloadEntity | undefined) {\r\n switch (downloadEntityType) {\r\n case 'series':\r\n return (downloadEntity as Series).name;\r\n case 'volume':\r\n return (downloadEntity as Volume).number + '';\r\n case 'chapter':\r\n return (downloadEntity as Chapter).number;\r\n case 'bookmark':\r\n return '';\r\n case 'logs':\r\n return '';\r\n }\r\n }\r\n\r\n /**\r\n * Downloads the entity to the user's system. This handles everything around downloads. This will prompt the user based on size checks and UserPreferences.PromptForDownload.\r\n * This will perform the download at a global level, if you need a handle to the download in question, use downloadService.activeDownloads$ and perform a filter on it.\r\n * @param entityType\r\n * @param entity\r\n * @param callback Optional callback. Returns the download or undefined (if the download is complete).\r\n */\r\n download(entityType: DownloadEntityType, entity: DownloadEntity, callback?: (d: Download | undefined) => void) {\r\n let sizeCheckCall: Observable;\r\n let downloadCall: Observable;\r\n switch (entityType) {\r\n case 'series':\r\n sizeCheckCall = this.downloadSeriesSize((entity as Series).id);\r\n downloadCall = this.downloadSeries(entity as Series);\r\n break;\r\n case 'volume':\r\n sizeCheckCall = this.downloadVolumeSize((entity as Volume).id);\r\n downloadCall = this.downloadVolume(entity as Volume);\r\n break;\r\n case 'chapter':\r\n sizeCheckCall = this.downloadChapterSize((entity as Chapter).id);\r\n downloadCall = this.downloadChapter(entity as Chapter);\r\n break;\r\n case 'bookmark':\r\n sizeCheckCall = of(0);\r\n downloadCall = this.downloadBookmarks(entity as PageBookmark[]);\r\n break;\r\n case 'logs':\r\n sizeCheckCall = of(0);\r\n downloadCall = this.downloadLogs();\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n\r\n this.accountService.currentUser$.pipe(take(1), switchMap(user => {\r\n if (user && user.preferences.promptForDownloadSize) {\r\n return sizeCheckCall;\r\n }\r\n return of(0);\r\n }), switchMap(async (size) => {\r\n return await this.confirmSize(size, entityType);\r\n })\r\n ).pipe(filter(wantsToDownload => {\r\n return wantsToDownload;\r\n }), switchMap(() => {\r\n return downloadCall.pipe(\r\n tap((d) => {\r\n if (callback) callback(d);\r\n }),\r\n takeWhile((val: Download) => {\r\n return val.state != 'DONE';\r\n }),\r\n finalize(() => {\r\n if (callback) callback(undefined);\r\n }))\r\n }), takeUntilDestroyed(this.destroyRef)\r\n ).subscribe(() => {});\r\n }\r\n\r\n private downloadSeriesSize(seriesId: number) {\r\n return this.httpClient.get(this.baseUrl + 'download/series-size?seriesId=' + seriesId);\r\n }\r\n\r\n private downloadVolumeSize(volumeId: number) {\r\n return this.httpClient.get(this.baseUrl + 'download/volume-size?volumeId=' + volumeId);\r\n }\r\n\r\n private downloadChapterSize(chapterId: number) {\r\n return this.httpClient.get(this.baseUrl + 'download/chapter-size?chapterId=' + chapterId);\r\n }\r\n\r\n private downloadLogs() {\r\n const downloadType = 'logs';\r\n const subtitle = this.downloadSubtitle(downloadType, undefined);\r\n return this.httpClient.get(this.baseUrl + 'server/logs',\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)),\r\n finalize(() => this.finalizeDownloadState(downloadType, subtitle))\r\n );\r\n }\r\n\r\n private downloadSeries(series: Series) {\r\n const downloadType = 'series';\r\n const subtitle = this.downloadSubtitle(downloadType, series);\r\n return this.httpClient.get(this.baseUrl + 'download/series?seriesId=' + series.id,\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)),\r\n finalize(() => this.finalizeDownloadState(downloadType, subtitle))\r\n );\r\n }\r\n\r\n private finalizeDownloadState(entityType: DownloadEntityType, entitySubtitle: string) {\r\n let values = this.downloadsSource.getValue();\r\n values = values.filter(v => !(v.entityType === entityType && v.subTitle === entitySubtitle));\r\n this.downloadsSource.next(values);\r\n }\r\n\r\n private updateDownloadState(d: Download, entityType: DownloadEntityType, entitySubtitle: string) {\r\n let values = this.downloadsSource.getValue();\r\n if (d.state === 'PENDING') {\r\n const index = values.findIndex(v => v.entityType === entityType && v.subTitle === entitySubtitle);\r\n if (index >= 0) return; // Don't let us duplicate add\r\n values.push({entityType: entityType, subTitle: entitySubtitle, progress: 0});\r\n } else if (d.state === 'IN_PROGRESS') {\r\n const index = values.findIndex(v => v.entityType === entityType && v.subTitle === entitySubtitle);\r\n if (index >= 0) {\r\n values[index].progress = d.progress;\r\n }\r\n } else if (d.state === 'DONE') {\r\n values = values.filter(v => !(v.entityType === entityType && v.subTitle === entitySubtitle));\r\n }\r\n this.downloadsSource.next(values);\r\n\r\n }\r\n\r\n private downloadChapter(chapter: Chapter) {\r\n const downloadType = 'chapter';\r\n const subtitle = this.downloadSubtitle(downloadType, chapter);\r\n return this.httpClient.get(this.baseUrl + 'download/chapter?chapterId=' + chapter.id,\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)),\r\n finalize(() => this.finalizeDownloadState(downloadType, subtitle))\r\n );\r\n }\r\n\r\n private downloadVolume(volume: Volume): Observable {\r\n const downloadType = 'volume';\r\n const subtitle = this.downloadSubtitle(downloadType, volume);\r\n return this.httpClient.get(this.baseUrl + 'download/volume?volumeId=' + volume.id,\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)),\r\n finalize(() => this.finalizeDownloadState(downloadType, subtitle))\r\n );\r\n }\r\n\r\n private async confirmSize(size: number, entityType: DownloadEntityType) {\r\n return (size < this.SIZE_WARNING ||\r\n await this.confirmService.confirm(translate('toasts.confirm-download-size', {entityType: 'entity-type.' + entityType, size: bytesPipe.transform(size)})));\r\n }\r\n\r\n private downloadBookmarks(bookmarks: PageBookmark[]) {\r\n const downloadType = 'bookmark';\r\n const subtitle = this.downloadSubtitle(downloadType, bookmarks);\r\n\r\n return this.httpClient.post(this.baseUrl + 'download/bookmarks', {bookmarks},\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)),\r\n finalize(() => this.finalizeDownloadState(downloadType, subtitle))\r\n );\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {ActivatedRouteSnapshot, Params, Router} from '@angular/router';\r\nimport {Pagination} from 'src/app/_models/pagination';\r\nimport {SortField, SortOptions} from 'src/app/_models/metadata/series-filter';\r\nimport {MetadataService} from \"../../_services/metadata.service\";\r\nimport {SeriesFilterV2} from \"../../_models/metadata/v2/series-filter-v2\";\r\nimport {FilterStatement} from \"../../_models/metadata/v2/filter-statement\";\r\nimport {FilterCombination} from \"../../_models/metadata/v2/filter-combination\";\r\nimport {FilterField} from \"../../_models/metadata/v2/filter-field\";\r\nimport {FilterComparison} from \"../../_models/metadata/v2/filter-comparison\";\r\n\r\nconst sortOptionsKey = 'sortOptions=';\r\nconst statementsKey = 'stmts=';\r\nconst limitToKey = 'limitTo=';\r\nconst combinationKey = 'combination=';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FilterUtilitiesService {\r\n\r\n constructor(private metadataService: MetadataService, private router: Router) {}\r\n\r\n applyFilter(page: Array, filter: FilterField, comparison: FilterComparison, value: string) {\r\n const dto: SeriesFilterV2 = {\r\n statements: [this.metadataService.createDefaultFilterStatement(filter, comparison, value + '')],\r\n combination: FilterCombination.Or,\r\n limitTo: 0\r\n };\r\n\r\n const url = this.urlFromFilterV2(page.join('/') + '?', dto);\r\n return this.router.navigateByUrl(url);\r\n }\r\n\r\n applyFilterWithParams(page: Array, filter: SeriesFilterV2, extraParams: Params) {\r\n let url = this.urlFromFilterV2(page.join('/') + '?', filter);\r\n url += Object.keys(extraParams).map(k => `&${k}=${extraParams[k]}`).join('');\r\n return this.router.navigateByUrl(url, extraParams);\r\n }\r\n\r\n /**\r\n * Updates the window location with a custom url based on filter and pagination objects\r\n * @param pagination\r\n * @param filter\r\n */\r\n updateUrlFromFilterV2(pagination: Pagination, filter: SeriesFilterV2 | undefined) {\r\n const params = '?page=' + pagination.currentPage + '&';\r\n\r\n const url = this.urlFromFilterV2(window.location.href.split('?')[0] + params, filter);\r\n window.history.replaceState(window.location.href, '', this.replacePaginationOnUrl(url, pagination));\r\n }\r\n\r\n\r\n private replacePaginationOnUrl(url: string, pagination: Pagination) {\r\n return url.replace(/page=\\d+/i, 'page=' + pagination.currentPage);\r\n }\r\n\r\n /**\r\n * Will fetch current page from route if present\r\n * @param snapshot to fetch page from. Must be from component else may get stale data\r\n * @param itemsPerPage If you want pagination, pass non-zero number\r\n * @returns A default pagination object\r\n */\r\n pagination(snapshot: ActivatedRouteSnapshot, itemsPerPage: number = 0): Pagination {\r\n return {currentPage: parseInt(snapshot.queryParamMap.get('page') || '1', 10), itemsPerPage, totalItems: 0, totalPages: 1};\r\n }\r\n\r\n\r\n /**\r\n * Returns the current url with query params for the filter\r\n * @param currentUrl Full url, with ?page=1 as a minimum\r\n * @param filter Filter to build url off\r\n * @returns current url with query params added\r\n */\r\n urlFromFilterV2(currentUrl: string, filter: SeriesFilterV2 | undefined) {\r\n if (filter === undefined) return currentUrl;\r\n\r\n return currentUrl + this.encodeSeriesFilter(filter);\r\n }\r\n\r\n encodeSeriesFilter(filter: SeriesFilterV2) {\r\n const encodedStatements = this.encodeFilterStatements(filter.statements);\r\n const encodedSortOptions = filter.sortOptions ? `${sortOptionsKey}${this.encodeSortOptions(filter.sortOptions)}` : '';\r\n const encodedLimitTo = `${limitToKey}${filter.limitTo}`;\r\n\r\n return `${this.encodeName(filter.name)}${encodedStatements}&${encodedSortOptions}&${encodedLimitTo}&${combinationKey}${filter.combination}`;\r\n }\r\n\r\n encodeName(name: string | undefined) {\r\n if (name === undefined || name === '') return '';\r\n return `name=${encodeURIComponent(name)}&`\r\n }\r\n\r\n\r\n encodeSortOptions(sortOptions: SortOptions) {\r\n return `sortField=${sortOptions.sortField}&isAscending=${sortOptions.isAscending}`;\r\n }\r\n\r\n encodeFilterStatements(statements: Array) {\r\n if (statements.length === 0) return '';\r\n return statementsKey + encodeURIComponent(statements.map(statement => {\r\n const encodedComparison = `comparison=${statement.comparison}`;\r\n const encodedField = `field=${statement.field}`;\r\n const encodedValue = `value=${encodeURIComponent(statement.value)}`;\r\n\r\n return `${encodedComparison}&${encodedField}&${encodedValue}`;\r\n }).join(','));\r\n }\r\n\r\n decodeSeriesFilter(encodedFilter: string) {\r\n const filter = this.metadataService.createDefaultFilterDto();\r\n\r\n if (encodedFilter.includes('name=')) {\r\n filter.name = decodeURIComponent(encodedFilter).split('name=')[1].split('&')[0];\r\n }\r\n\r\n const stmtsStartIndex = encodedFilter.indexOf(statementsKey);\r\n let endIndex = encodedFilter.indexOf('&' + sortOptionsKey);\r\n if (endIndex < 0) {\r\n endIndex = encodedFilter.indexOf('&' + limitToKey);\r\n }\r\n\r\n if (stmtsStartIndex !== -1 || endIndex !== -1) {\r\n // +1 is for the =\r\n const stmtsEncoded = encodedFilter.substring(stmtsStartIndex + statementsKey.length, endIndex);\r\n filter.statements = this.decodeFilterStatements(stmtsEncoded);\r\n }\r\n\r\n if (encodedFilter.includes(sortOptionsKey)) {\r\n const optionsStartIndex = encodedFilter.indexOf('&' + sortOptionsKey);\r\n const endIndex = encodedFilter.indexOf('&' + limitToKey);\r\n const sortOptionsEncoded = encodedFilter.substring(optionsStartIndex + sortOptionsKey.length + 1, endIndex);\r\n const sortOptions = this.decodeSortOptions(sortOptionsEncoded);\r\n if (sortOptions) {\r\n filter.sortOptions = sortOptions;\r\n }\r\n }\r\n\r\n if (encodedFilter.includes(limitToKey)) {\r\n const limitTo = decodeURIComponent(encodedFilter).split(limitToKey)[1].split('&')[0];\r\n filter.limitTo = parseInt(limitTo, 10);\r\n }\r\n\r\n if (encodedFilter.includes(combinationKey)) {\r\n const combo = decodeURIComponent(encodedFilter).split(combinationKey)[1].split('&')[0];;\r\n filter.combination = parseInt(combo, 10) as FilterCombination;\r\n }\r\n\r\n return filter;\r\n }\r\n\r\n\r\n filterPresetsFromUrlV2(snapshot: ActivatedRouteSnapshot): SeriesFilterV2 {\r\n const filter = this.metadataService.createDefaultFilterDto();\r\n if (!window.location.href.includes('?')) return filter;\r\n\r\n const queryParams = snapshot.queryParams;\r\n\r\n if (queryParams.name) {\r\n filter.name = queryParams.name;\r\n }\r\n\r\n const fullUrl = window.location.href.split('?')[1];\r\n const stmtsStartIndex = fullUrl.indexOf(statementsKey);\r\n let endIndex = fullUrl.indexOf('&' + sortOptionsKey);\r\n if (endIndex < 0) {\r\n endIndex = fullUrl.indexOf('&' + limitToKey);\r\n }\r\n\r\n if (stmtsStartIndex !== -1 || endIndex !== -1) {\r\n // +1 is for the =\r\n const stmtsEncoded = fullUrl.substring(stmtsStartIndex + statementsKey.length, endIndex);\r\n filter.statements = this.decodeFilterStatements(stmtsEncoded);\r\n }\r\n\r\n if (queryParams.sortOptions) {\r\n const optionsStartIndex = fullUrl.indexOf('&' + sortOptionsKey);\r\n const endIndex = fullUrl.indexOf('&' + limitToKey);\r\n const sortOptionsEncoded = fullUrl.substring(optionsStartIndex + sortOptionsKey.length + 1, endIndex);\r\n const sortOptions = this.decodeSortOptions(sortOptionsEncoded);\r\n if (sortOptions) {\r\n filter.sortOptions = sortOptions;\r\n }\r\n }\r\n\r\n if (queryParams.limitTo) {\r\n filter.limitTo = parseInt(queryParams.limitTo, 10);\r\n }\r\n\r\n if (queryParams.combination) {\r\n filter.combination = parseInt(queryParams.combination, 10) as FilterCombination;\r\n }\r\n\r\n return filter;\r\n }\r\n\r\n decodeSortOptions(encodedSortOptions: string): SortOptions | null {\r\n const parts = decodeURIComponent(encodedSortOptions).split('&');\r\n const sortFieldPart = parts.find(part => part.startsWith('sortField='));\r\n const isAscendingPart = parts.find(part => part.startsWith('isAscending='));\r\n\r\n if (sortFieldPart && isAscendingPart) {\r\n const sortField = parseInt(sortFieldPart.split('=')[1], 10) as SortField;\r\n const isAscending = isAscendingPart.split('=')[1] === 'true';\r\n return {sortField, isAscending};\r\n }\r\n\r\n return null;\r\n }\r\n\r\n decodeFilterStatements(encodedStatements: string): FilterStatement[] {\r\n const statementStrings = decodeURIComponent(encodedStatements).split(',');\r\n return statementStrings.map(statementString => {\r\n const parts = statementString.split('&');\r\n if (parts === null || parts.length < 3) return null;\r\n\r\n const comparisonStartToken = parts.find(part => part.startsWith('comparison='));\r\n if (!comparisonStartToken) return null;\r\n const comparison = parseInt(comparisonStartToken.split('=')[1], 10) as FilterComparison;\r\n\r\n const fieldStartToken = parts.find(part => part.startsWith('field='));\r\n if (!fieldStartToken) return null;\r\n const field = parseInt(fieldStartToken.split('=')[1], 10) as FilterField;\r\n\r\n const valueStartToken = parts.find(part => part.startsWith('value='));\r\n if (!valueStartToken) return null;\r\n const value = decodeURIComponent(valueStartToken.split('=')[1]);\r\n return {comparison, field, value};\r\n }).filter(o => o != null) as FilterStatement[];\r\n }\r\n\r\n createSeriesV2Filter(): SeriesFilterV2 {\r\n return {\r\n combination: FilterCombination.And,\r\n statements: [],\r\n limitTo: 0,\r\n sortOptions: {\r\n isAscending: true,\r\n sortField: SortField.SortName\r\n },\r\n };\r\n }\r\n\r\n createSeriesV2DefaultStatement(): FilterStatement {\r\n return {\r\n comparison: FilterComparison.Equal,\r\n value: '',\r\n field: FilterField.SeriesName\r\n }\r\n }\r\n\r\n}\r\n","import { HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Chapter } from 'src/app/_models/chapter';\r\nimport { LibraryType } from 'src/app/_models/library';\r\nimport { MangaFormat } from 'src/app/_models/manga-format';\r\nimport { PaginatedResult } from 'src/app/_models/pagination';\r\nimport { Series } from 'src/app/_models/series';\r\nimport { Volume } from 'src/app/_models/volume';\r\nimport {TranslocoService} from \"@ngneat/transloco\";\r\n\r\nexport enum KEY_CODES {\r\n RIGHT_ARROW = 'ArrowRight',\r\n LEFT_ARROW = 'ArrowLeft',\r\n DOWN_ARROW = 'ArrowDown',\r\n UP_ARROW = 'ArrowUp',\r\n ESC_KEY = 'Escape',\r\n SPACE = ' ',\r\n ENTER = 'Enter',\r\n G = 'g',\r\n B = 'b',\r\n F = 'f',\r\n H = 'h',\r\n BACKSPACE = 'Backspace',\r\n DELETE = 'Delete',\r\n SHIFT = 'Shift'\r\n}\r\n\r\nexport enum Breakpoint {\r\n Mobile = 768,\r\n Tablet = 1280,\r\n Desktop = 1440\r\n}\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UtilityService {\r\n\r\n mangaFormatKeys: string[] = [];\r\n\r\n constructor(private translocoService: TranslocoService) { }\r\n\r\n\r\n sortChapters = (a: Chapter, b: Chapter) => {\r\n return parseFloat(a.number) - parseFloat(b.number);\r\n }\r\n\r\n mangaFormatToText(format: MangaFormat): string {\r\n if (this.mangaFormatKeys === undefined || this.mangaFormatKeys.length === 0) {\r\n this.mangaFormatKeys = Object.keys(MangaFormat);\r\n }\r\n\r\n return this.mangaFormatKeys.filter(item => MangaFormat[format] === item)[0];\r\n }\r\n\r\n /**\r\n * Formats a Chapter name based on the library it's in\r\n * @param libraryType\r\n * @param includeHash For comics only, includes a # which is used for numbering on cards\r\n * @param includeSpace Add a space at the end of the string. if includeHash and includeSpace are true, only hash will be at the end.\r\n * @returns\r\n */\r\n formatChapterName(libraryType: LibraryType, includeHash: boolean = false, includeSpace: boolean = false) {\r\n switch(libraryType) {\r\n case LibraryType.Book:\r\n return this.translocoService.translate('common.book-num') + (includeSpace ? ' ' : '');\r\n case LibraryType.Comic:\r\n if (includeHash) {\r\n return this.translocoService.translate('common.issue-hash-num');\r\n }\r\n return this.translocoService.translate('common.issue-num') + (includeSpace ? ' ' : '');\r\n case LibraryType.Manga:\r\n return this.translocoService.translate('common.chapter-num') + (includeSpace ? ' ' : '');\r\n }\r\n }\r\n\r\n\r\n filter(input: string, filter: string): boolean {\r\n if (input === null || filter === null || input === undefined || filter === undefined) return false;\r\n const reg = /[_\\.\\-]/gi;\r\n return input.toUpperCase().replace(reg, '').includes(filter.toUpperCase().replace(reg, ''));\r\n }\r\n\r\n filterMatches(input: string, filter: string): boolean {\r\n if (input === null || filter === null || input === undefined || filter === undefined) return false;\r\n const reg = /[_\\.\\-]/gi;\r\n return input.toUpperCase().replace(reg, '') === filter.toUpperCase().replace(reg, '');\r\n }\r\n\r\n isVolume(d: any) {\r\n return d != null && d.hasOwnProperty('chapters');\r\n }\r\n\r\n isChapter(d: any) {\r\n return d != null && d.hasOwnProperty('volumeId');\r\n }\r\n\r\n isSeries(d: any) {\r\n return d != null && d.hasOwnProperty('originalName');\r\n }\r\n\r\n asVolume(d: any) {\r\n return d;\r\n }\r\n\r\n asChapter(d: any) {\r\n return d;\r\n }\r\n\r\n asSeries(d: any) {\r\n return d;\r\n }\r\n\r\n getActiveBreakpoint(): Breakpoint {\r\n if (window.innerWidth <= Breakpoint.Mobile) return Breakpoint.Mobile;\r\n else if (window.innerWidth > Breakpoint.Mobile && window.innerWidth <= Breakpoint.Tablet) return Breakpoint.Tablet;\r\n else if (window.innerWidth > Breakpoint.Tablet) return Breakpoint.Desktop\r\n\r\n return Breakpoint.Desktop;\r\n }\r\n\r\n isInViewport(element: Element, additionalTopOffset: number = 0) {\r\n const rect = element.getBoundingClientRect();\r\n return (\r\n rect.top >= additionalTopOffset &&\r\n rect.left >= 0 &&\r\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\r\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\r\n );\r\n }\r\n\r\n deepEqual(object1: any, object2: any) {\r\n if ((object1 === null || object1 === undefined) && (object2 !== null || object2 !== undefined)) return false;\r\n if ((object2 === null || object2 === undefined) && (object1 !== null || object1 !== undefined)) return false;\r\n if (object1 === null && object2 === null) return true;\r\n if (object1 === undefined && object2 === undefined) return true;\r\n\r\n\r\n const keys1 = Object.keys(object1);\r\n const keys2 = Object.keys(object2);\r\n if (keys1.length !== keys2.length) {\r\n return false;\r\n }\r\n for (const key of keys1) {\r\n const val1 = object1[key];\r\n const val2 = object2[key];\r\n const areObjects = this.isObject(val1) && this.isObject(val2);\r\n if (\r\n areObjects && !this.deepEqual(val1, val2) ||\r\n !areObjects && val1 !== val2\r\n ) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n private isObject(object: any) {\r\n return object != null && typeof object === 'object';\r\n }\r\n\r\n addPaginationIfExists(params: HttpParams, pageNum?: number, itemsPerPage?: number) {\r\n if (pageNum !== null && pageNum !== undefined && itemsPerPage !== null && itemsPerPage !== undefined) {\r\n params = params.append('pageNumber', pageNum + '');\r\n params = params.append('pageSize', itemsPerPage + '');\r\n }\r\n return params;\r\n }\r\n\r\n createPaginatedResult(response: any, paginatedVariable: PaginatedResult | undefined = undefined) {\r\n if (paginatedVariable === undefined) {\r\n paginatedVariable = new PaginatedResult();\r\n }\r\n if (response.body === null) {\r\n paginatedVariable.result = [];\r\n } else {\r\n paginatedVariable.result = response.body;\r\n }\r\n\r\n const pageHeader = response.headers?.get('Pagination');\r\n if (pageHeader !== null) {\r\n paginatedVariable.pagination = JSON.parse(pageHeader);\r\n }\r\n\r\n return paginatedVariable;\r\n }\r\n\r\n getWindowDimensions() {\r\n const windowWidth = window.innerWidth\r\n || document.documentElement.clientWidth\r\n || document.body.clientWidth;\r\n const windowHeight = window.innerHeight\r\n || document.documentElement.clientHeight\r\n || document.body.clientHeight;\r\n return [windowWidth, windowHeight];\r\n }\r\n}\r\n"," 0\">\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {NgCircleProgressModule } from \"ng-circle-progress\";\r\n\r\n@Component({\r\n selector: 'app-circular-loader',\r\n standalone: true,\r\n imports: [CommonModule, NgCircleProgressModule],\r\n // providers: [\r\n // importProvidersFrom(NgCircleProgressModule),\r\n // ],\r\n templateUrl: './circular-loader.component.html',\r\n styleUrls: ['./circular-loader.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CircularLoaderComponent {\r\n\r\n @Input() currentValue: number = 0;\r\n /**\r\n * If an animation should be used\r\n */\r\n @Input() animation: boolean = true;\r\n /**\r\n * Color of an inner bar\r\n */\r\n @Input() innerStrokeColor: string = 'transparent';\r\n /**\r\n * Color of the Downloader bar\r\n */\r\n @Input() outerStrokeColor: string = '#4ac694';\r\n @Input() backgroundColor: string = '#000';\r\n @Input() fontSize: string = '36px';\r\n /**\r\n * Show the icon inside the downloader\r\n */\r\n @Input() showIcon: boolean = true;\r\n /**\r\n * The width in pixels of the loader\r\n */\r\n @Input() width: string = '100px';\r\n /**\r\n * The height in pixels of the loader\r\n */\r\n @Input() height: string = '100px';\r\n /**\r\n * Centers the icon in the middle of the loader. Best for card use.\r\n */\r\n @Input() center: boolean = true;\r\n}\r\n","import { ConfirmButton } from './confirm-button';\r\n\r\nexport class ConfirmConfig {\r\n _type: string = 'confirm'; // internal only: confirm or alert (todo: use enum)\r\n header: string = 'Confirm';\r\n content: string = '';\r\n buttons: Array = [];\r\n /**\r\n * If the close button shouldn't be rendered\r\n */\r\n disableEscape: boolean = false;\r\n}\r\n","\r\n
\r\n

{{config.header}}

\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ConfirmButton } from './_models/confirm-button';\r\nimport { ConfirmConfig } from './_models/confirm-config';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {SafeHtmlPipe} from \"../../pipe/safe-html.pipe\";\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\n\r\n@Component({\r\n selector: 'app-confirm-dialog',\r\n standalone: true,\r\n imports: [CommonModule, SafeHtmlPipe, TranslocoDirective],\r\n templateUrl: './confirm-dialog.component.html',\r\n styleUrls: ['./confirm-dialog.component.scss']\r\n})\r\nexport class ConfirmDialogComponent implements OnInit {\r\n\r\n config!: ConfirmConfig;\r\n\r\n constructor(public modal: NgbActiveModal) {}\r\n\r\n ngOnInit(): void {\r\n if (this.config) {\r\n this.config.buttons.sort(this._button_sort);\r\n }\r\n }\r\n\r\n private _button_sort(x: ConfirmButton, y: ConfirmButton) {\r\n const xIsSecondary = x.type === 'secondary';\r\n const yIsSecondary = y.type === 'secondary';\r\n if (xIsSecondary && !yIsSecondary) {\r\n return -1;\r\n } else if (!xIsSecondary && yIsSecondary) {\r\n return 1;\r\n }\r\n return 0;\r\n }\r\n\r\n clickButton(button: ConfirmButton) {\r\n this.modal.close(button.type === 'primary');\r\n }\r\n\r\n close() {\r\n this.modal.close(false);\r\n }\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport { take } from 'rxjs/operators';\r\nimport { ConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component';\r\nimport { ConfirmConfig } from './confirm-dialog/_models/confirm-config';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ConfirmService {\r\n\r\n defaultConfirm = new ConfirmConfig();\r\n defaultAlert = new ConfirmConfig();\r\n\r\n constructor(private modalService: NgbModal) {\r\n this.defaultConfirm.buttons.push({text: 'Cancel', type: 'secondary'});\r\n this.defaultConfirm.buttons.push({text: 'Confirm', type: 'primary'});\r\n\r\n this.defaultAlert._type = 'alert';\r\n this.defaultAlert.header = 'Alert';\r\n this.defaultAlert.buttons.push({text: 'Ok', type: 'primary'});\r\n\r\n }\r\n\r\n public async confirm(content?: string, config?: ConfirmConfig): Promise {\r\n\r\n return new Promise((resolve, reject) => {\r\n if (content === undefined && config === undefined) {\r\n console.error('Confirm must have either text or a config object passed');\r\n return reject(false);\r\n }\r\n\r\n if (content !== undefined && config === undefined) {\r\n config = this.defaultConfirm;\r\n config.content = content;\r\n }\r\n if (content !== undefined && content !== '' && config!.content === '') {\r\n config!.content = content;\r\n }\r\n\r\n const modalRef = this.modalService.open(ConfirmDialogComponent);\r\n modalRef.componentInstance.config = config;\r\n modalRef.closed.pipe(take(1)).subscribe(result => {\r\n return resolve(result);\r\n });\r\n modalRef.dismissed.pipe(take(1)).subscribe(() => {\r\n return resolve(false);\r\n });\r\n });\r\n\r\n }\r\n\r\n public async alert(content?: string, config?: ConfirmConfig): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (content === undefined && config === undefined) {\r\n console.error('Alert must have either text or a config object passed');\r\n return reject(false);\r\n }\r\n\r\n if (content !== undefined && config === undefined) {\r\n config = this.defaultConfirm;\r\n config.content = content;\r\n }\r\n\r\n const modalRef = this.modalService.open(ConfirmDialogComponent);\r\n modalRef.componentInstance.config = config;\r\n modalRef.closed.pipe(take(1)).subscribe(result => {\r\n return resolve(result);\r\n });\r\n modalRef.dismissed.pipe(take(1)).subscribe(() => {\r\n return resolve(false);\r\n });\r\n })\r\n }\r\n}\r\n","export class Stack {\r\n items: T[];\r\n \r\n constructor() {\r\n this.items = [];\r\n }\r\n \r\n isEmpty() {\r\n return this.items.length === 0;\r\n }\r\n \r\n peek() {\r\n if (!this.isEmpty()) {\r\n return this.items[this.items.length - 1];\r\n }\r\n return undefined;\r\n }\r\n \r\n pop() {\r\n if (this.isEmpty()) {\r\n return undefined;\r\n }\r\n return this.items.pop();\r\n }\r\n \r\n push(item: T) {\r\n this.items.push(item);\r\n }\r\n }","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component, DestroyRef,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnChanges,\r\n Renderer2,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { CoverUpdateEvent } from 'src/app/_models/events/cover-update-event';\r\nimport { ImageService } from 'src/app/_services/image.service';\r\nimport { EVENTS, MessageHubService } from 'src/app/_services/message-hub.service';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {CommonModule} from \"@angular/common\";\r\n\r\n/**\r\n * This is used for images with placeholder fallback.\r\n */\r\n@Component({\r\n selector: 'app-image',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './image.component.html',\r\n styleUrls: ['./image.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ImageComponent implements OnChanges {\r\n\r\n /**\r\n * Source url to load image\r\n */\r\n @Input({required: true}) imageUrl!: string;\r\n /**\r\n * Width of the image. If not defined, will not be applied\r\n */\r\n @Input() width: string = '';\r\n /**\r\n * Height of the image. If not defined, will not be applied\r\n */\r\n @Input() height: string = '';\r\n /**\r\n * Max Width of the image. If not defined, will not be applied\r\n */\r\n @Input() maxWidth: string = '';\r\n /**\r\n * Max Height of the image. If not defined, will not be applied\r\n */\r\n @Input() maxHeight: string = '';\r\n /**\r\n * Border Radius of the image. If not defined, will not be applied\r\n */\r\n @Input() borderRadius: string = '';\r\n /**\r\n * Object fit of the image. If not defined, will not be applied\r\n */\r\n @Input() objectFit: string = '';\r\n /**\r\n * Background of the image. If not defined, will not be applied\r\n */\r\n @Input() background: string = '';\r\n /**\r\n * If the image component should respond to cover updates\r\n */\r\n @Input() processEvents: boolean = true;\r\n @Input() classes: string = '';\r\n\r\n @ViewChild('img', {static: true}) imgElem!: ElementRef;\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n constructor(public imageService: ImageService, private renderer: Renderer2, private hubService: MessageHubService, private changeDetectionRef: ChangeDetectorRef) {\r\n this.hubService.messages$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(res => {\r\n if (!this.processEvents) return;\r\n if (res.event === EVENTS.CoverUpdate) {\r\n const updateEvent = res.payload as CoverUpdateEvent;\r\n if (this.imageUrl === undefined || this.imageUrl === null || this.imageUrl === '') return;\r\n const entityType = this.imageService.getEntityTypeFromUrl(this.imageUrl);\r\n if (entityType === updateEvent.entityType) {\r\n const tokens = this.imageUrl.split('?')[1].split('&');\r\n\r\n //...seriesId=123&random=\r\n let id = tokens[0].replace(entityType + 'Id=', '');\r\n if (id.includes('&')) {\r\n id = id.split('&')[0];\r\n }\r\n if (id === (updateEvent.id + '')) {\r\n this.imageUrl = this.imageService.randomize(this.imageUrl);\r\n this.changeDetectionRef.markForCheck();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnChanges(): void {\r\n if (this.width != '') {\r\n this.renderer.setStyle(this.imgElem.nativeElement, 'width', this.width);\r\n }\r\n\r\n if (this.height != '') {\r\n this.renderer.setStyle(this.imgElem.nativeElement, 'height', this.height);\r\n }\r\n\r\n if (this.maxWidth != '') {\r\n this.renderer.setStyle(this.imgElem.nativeElement, 'max-width', this.maxWidth);\r\n }\r\n\r\n if (this.maxHeight != '') {\r\n this.renderer.setStyle(this.imgElem.nativeElement, 'max-height', this.maxHeight);\r\n }\r\n\r\n if (this.borderRadius != '') {\r\n this.renderer.setStyle(this.imgElem.nativeElement, 'border-radius', this.borderRadius);\r\n }\r\n\r\n if (this.objectFit != '') {\r\n this.renderer.setStyle(this.imgElem.nativeElement, 'object-fit', this.objectFit);\r\n }\r\n\r\n if (this.background != '') {\r\n this.renderer.setStyle(this.imgElem.nativeElement, 'background', this.background);\r\n }\r\n }\r\n\r\n}\r\n","\"\"\r\n\r\n","\r\n
\r\n

{{t('title')}}

\r\n \r\n
\r\n
\r\n
{{updateData.updateTitle}}
\r\n
\r\n  
\r\n\r\n
\r\n {{t('help')}}\r\n \r\n {{t('download')}}\r\n
\r\n
\r\n","import {ChangeDetectionStrategy, Component, Input, OnInit} from '@angular/core';\r\nimport {NgbActiveModal, NgbModalModule} from '@ng-bootstrap/ng-bootstrap';\r\nimport { UpdateVersionEvent } from 'src/app/_models/events/update-version-event';\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {SafeHtmlPipe} from \"../../pipe/safe-html.pipe\";\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\n\r\n\r\n@Component({\r\n selector: 'app-update-notification-modal',\r\n standalone: true,\r\n imports: [CommonModule, NgbModalModule, SafeHtmlPipe, TranslocoDirective],\r\n templateUrl: './update-notification-modal.component.html',\r\n styleUrls: ['./update-notification-modal.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class UpdateNotificationModalComponent implements OnInit {\r\n\r\n @Input({required: true}) updateData!: UpdateVersionEvent;\r\n updateUrl: string = 'https://wiki.kavitareader.com/en/install/windows-install#updating-kavita';\r\n\r\n constructor(public modal: NgbActiveModal) { }\r\n\r\n ngOnInit() {\r\n if (this.updateData.isDocker) {\r\n this.updateUrl = 'https://wiki.kavitareader.com/en/install/docker-install#updating-kavita';\r\n } else {\r\n this.updateUrl = 'https://wiki.kavitareader.com/en/install/windows-install#updating-kavita';\r\n }\r\n }\r\n\r\n close() {\r\n this.modal.close({success: false, series: undefined});\r\n }\r\n}\r\n","\r\n
\r\n

\r\n \r\n {{t('edit-title', {name: library.name | sentenceCase})}}\r\n \r\n \r\n {{t('add-title')}}\r\n \r\n

\r\n \r\n
\r\n
\r\n
\r\n
    \r\n\r\n
  • \r\n {{t(TabID.General)}}\r\n \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n {{t('required-field')}}\r\n
    \r\n
    \r\n {{t('library-name-unique')}}\r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n {{t('type-tooltip')}}\r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n {{t('last-scanned-label')}}\r\n {{library.lastScanned | date: 'short' | defaultDate}}\r\n
    \r\n
    \r\n
  • \r\n\r\n\r\n
  • \r\n {{t(TabID.Folder)}}\r\n \r\n

    {{t('folder-description')}}

    \r\n
      \r\n
    • \r\n {{folder}}\r\n \r\n
    • \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    {{t('help-us-part-1')}}{{t('help-us-part-2')}} {{t('help-us-part-3')}}

    \r\n
    \r\n
    \r\n

    {{t('naming-conventions-part-1')}}{{t('naming-conventions-part-2')}} {{t('naming-conventions-part-3')}}

    \r\n
    \r\n
    \r\n
  • \r\n\r\n
  • \r\n {{t(TabID.Cover)}}\r\n \r\n

    {{t('cover-description')}}

    \r\n

    {{t('cover-description-extra')}}

    \r\n \r\n \r\n
    \r\n
  • \r\n\r\n
  • \r\n {{t(TabID.Advanced)}}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n

    \r\n {{t('manage-collection-tooltip')}}\r\n

    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n

    \r\n {{t('manage-reading-list-tooltip')}}\r\n

    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n

    \r\n {{t('allow-scrobbling-tooltip')}}\r\n

    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n

    \r\n {{t('folder-watching-tooltip')}}\r\n

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n

    \r\n {{t('include-in-dashboard-tooltip')}}\r\n

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n

    \r\n {{t('include-in-recommendation-tooltip')}}\r\n

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n

    \r\n {{t('include-in-search-tooltip')}}\r\n

    \r\n
    \r\n
    \r\n
    \r\n
  • \r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject, Input, OnInit} from '@angular/core';\r\nimport {FormControl, FormGroup, ReactiveFormsModule, Validators} from '@angular/forms';\r\nimport {\r\n NgbActiveModal,\r\n NgbModal,\r\n NgbModalModule,\r\n NgbNav,\r\n NgbNavContent,\r\n NgbNavItem,\r\n NgbNavLink,\r\n NgbNavOutlet,\r\n NgbTooltip\r\n} from '@ng-bootstrap/ng-bootstrap';\r\nimport {ToastrService} from 'ngx-toastr';\r\nimport {debounceTime, distinctUntilChanged, switchMap, tap} from 'rxjs';\r\nimport {SettingsService} from 'src/app/admin/settings.service';\r\nimport {\r\n DirectoryPickerComponent,\r\n DirectoryPickerResult\r\n} from 'src/app/admin/_modals/directory-picker/directory-picker.component';\r\nimport {ConfirmService} from 'src/app/shared/confirm.service';\r\nimport {Breakpoint, UtilityService} from 'src/app/shared/_services/utility.service';\r\nimport {Library, LibraryType} from 'src/app/_models/library';\r\nimport {ImageService} from 'src/app/_services/image.service';\r\nimport {LibraryService} from 'src/app/_services/library.service';\r\nimport {UploadService} from 'src/app/_services/upload.service';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {SentenceCasePipe} from \"../../../pipe/sentence-case.pipe\";\r\nimport {CoverImageChooserComponent} from \"../../../cards/cover-image-chooser/cover-image-chooser.component\";\r\nimport {translate, TranslocoModule} from \"@ngneat/transloco\";\r\nimport {DefaultDatePipe} from \"../../../pipe/default-date.pipe\";\r\n\r\nenum TabID {\r\n General = 'general-tab',\r\n Folder = 'folder-tab',\r\n Cover = 'cover-tab',\r\n Advanced = 'advanced-tab'\r\n}\r\n\r\nenum StepID {\r\n General = 0,\r\n Folder = 1,\r\n Cover = 2,\r\n Advanced = 3\r\n}\r\n\r\n@Component({\r\n selector: 'app-library-settings-modal',\r\n standalone: true,\r\n imports: [CommonModule, NgbModalModule, NgbNavLink, NgbNavItem, NgbNavContent, ReactiveFormsModule, NgbTooltip, SentenceCasePipe, NgbNav, NgbNavOutlet, CoverImageChooserComponent, TranslocoModule, DefaultDatePipe],\r\n templateUrl: './library-settings-modal.component.html',\r\n styleUrls: ['./library-settings-modal.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class LibrarySettingsModalComponent implements OnInit {\r\n\r\n @Input({required: true}) library!: Library;\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n active = TabID.General;\r\n imageUrls: Array = [];\r\n\r\n libraryForm: FormGroup = new FormGroup({\r\n name: new FormControl('', { nonNullable: true, validators: [Validators.required] }),\r\n type: new FormControl(LibraryType.Manga, { nonNullable: true, validators: [Validators.required] }),\r\n folderWatching: new FormControl(true, { nonNullable: true, validators: [Validators.required] }),\r\n includeInDashboard: new FormControl(true, { nonNullable: true, validators: [Validators.required] }),\r\n includeInRecommended: new FormControl(true, { nonNullable: true, validators: [Validators.required] }),\r\n includeInSearch: new FormControl(true, { nonNullable: true, validators: [Validators.required] }),\r\n manageCollections: new FormControl(true, { nonNullable: true, validators: [Validators.required] }),\r\n manageReadingLists: new FormControl(true, { nonNullable: true, validators: [Validators.required] }),\r\n allowScrobbling: new FormControl(true, { nonNullable: true, validators: [Validators.required] }),\r\n collapseSeriesRelationships: new FormControl(false, { nonNullable: true, validators: [Validators.required] }),\r\n });\r\n\r\n selectedFolders: string[] = [];\r\n madeChanges = false;\r\n libraryTypes: string[] = []\r\n\r\n isAddLibrary = false;\r\n setupStep = StepID.General;\r\n\r\n get Breakpoint() { return Breakpoint; }\r\n get TabID() { return TabID; }\r\n\r\n constructor(public utilityService: UtilityService, private uploadService: UploadService, private modalService: NgbModal,\r\n private settingService: SettingsService, public modal: NgbActiveModal, private confirmService: ConfirmService,\r\n private libraryService: LibraryService, private toastr: ToastrService, private readonly cdRef: ChangeDetectorRef,\r\n private imageService: ImageService) { }\r\n\r\n ngOnInit(): void {\r\n\r\n this.settingService.getLibraryTypes().subscribe((types) => {\r\n this.libraryTypes = types;\r\n this.cdRef.markForCheck();\r\n });\r\n\r\n\r\n if (this.library === undefined) {\r\n this.isAddLibrary = true;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n if (this.library?.coverImage != null && this.library?.coverImage !== '') {\r\n this.imageUrls.push(this.imageService.getLibraryCoverImage(this.library.id));\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n if (this.library && this.library.type === LibraryType.Comic) {\r\n this.libraryForm.get('allowScrobbling')?.setValue(false);\r\n this.libraryForm.get('allowScrobbling')?.disable();\r\n }\r\n\r\n\r\n this.libraryForm.get('name')?.valueChanges.pipe(\r\n debounceTime(100),\r\n distinctUntilChanged(),\r\n switchMap(name => this.libraryService.libraryNameExists(name)),\r\n tap(exists => {\r\n const isExistingName = this.libraryForm.get('name')?.value === this.library?.name;\r\n if (!exists || isExistingName) {\r\n this.libraryForm.get('name')?.setErrors(null);\r\n } else {\r\n this.libraryForm.get('name')?.setErrors({duplicateName: true})\r\n }\r\n this.cdRef.markForCheck();\r\n }),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe();\r\n\r\n\r\n this.setValues();\r\n }\r\n\r\n setValues() {\r\n if (this.library !== undefined) {\r\n this.libraryForm.get('name')?.setValue(this.library.name);\r\n this.libraryForm.get('type')?.setValue(this.library.type);\r\n this.libraryForm.get('folderWatching')?.setValue(this.library.folderWatching);\r\n this.libraryForm.get('includeInDashboard')?.setValue(this.library.includeInDashboard);\r\n this.libraryForm.get('includeInRecommended')?.setValue(this.library.includeInRecommended);\r\n this.libraryForm.get('includeInSearch')?.setValue(this.library.includeInSearch);\r\n this.libraryForm.get('manageCollections')?.setValue(this.library.manageCollections);\r\n this.libraryForm.get('manageReadingLists')?.setValue(this.library.manageReadingLists);\r\n this.libraryForm.get('collapseSeriesRelationships')?.setValue(this.library.collapseSeriesRelationships);\r\n this.libraryForm.get('allowScrobbling')?.setValue(this.library.allowScrobbling);\r\n this.selectedFolders = this.library.folders;\r\n this.madeChanges = false;\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n\r\n isDisabled() {\r\n return !(this.libraryForm.valid && this.selectedFolders.length > 0);\r\n }\r\n\r\n reset() {\r\n this.setValues();\r\n }\r\n\r\n close(returnVal= false) {\r\n this.modal.close(returnVal);\r\n }\r\n\r\n forceScan() {\r\n this.libraryService.scan(this.library.id, true)\r\n .subscribe(() => this.toastr.info(translate('toasts.forced-scan-queued', {name: this.library.name})));\r\n }\r\n\r\n async save() {\r\n const model = this.libraryForm.value;\r\n model.folders = this.selectedFolders;\r\n\r\n if (this.libraryForm.errors) {\r\n return;\r\n }\r\n\r\n if (this.library !== undefined) {\r\n model.id = this.library.id;\r\n model.folders = model.folders.map((item: string) => item.startsWith('\\\\') ? item.substr(1, item.length) : item);\r\n model.type = parseInt(model.type, 10);\r\n\r\n if (model.type !== this.library.type) {\r\n if (!await this.confirmService.confirm(translate('toasts.confirm-library-type-change'))) return;\r\n }\r\n\r\n this.libraryService.update(model).subscribe(() => {\r\n this.close(true);\r\n });\r\n } else {\r\n model.folders = model.folders.map((item: string) => item.startsWith('\\\\') ? item.substr(1, item.length) : item);\r\n model.type = parseInt(model.type, 10);\r\n this.libraryService.create(model).subscribe(() => {\r\n this.toastr.success(translate('toasts.library-created'));\r\n this.close(true);\r\n });\r\n }\r\n }\r\n\r\n nextStep() {\r\n this.setupStep++;\r\n switch(this.setupStep) {\r\n case StepID.Folder:\r\n this.active = TabID.Folder;\r\n break;\r\n case StepID.Cover:\r\n this.active = TabID.Cover;\r\n break;\r\n case StepID.Advanced:\r\n this.active = TabID.Advanced;\r\n break;\r\n }\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n applyCoverImage(coverUrl: string) {\r\n this.uploadService.updateLibraryCoverImage(this.library.id, coverUrl).subscribe(() => {});\r\n }\r\n\r\n resetCoverImage() {\r\n this.uploadService.updateLibraryCoverImage(this.library.id, '').subscribe(() => {});\r\n }\r\n\r\n openDirectoryPicker() {\r\n const modalRef = this.modalService.open(DirectoryPickerComponent, { scrollable: true, size: 'lg' });\r\n modalRef.closed.subscribe((closeResult: DirectoryPickerResult) => {\r\n if (closeResult.success) {\r\n if (!this.selectedFolders.includes(closeResult.folderPath)) {\r\n this.selectedFolders.push(closeResult.folderPath);\r\n this.madeChanges = true;\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n });\r\n }\r\n\r\n removeFolder(folder: string) {\r\n this.selectedFolders = this.selectedFolders.filter(item => item !== folder);\r\n this.madeChanges = true;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n isNextDisabled() {\r\n switch (this.setupStep) {\r\n case StepID.General:\r\n return this.libraryForm.get('name')?.invalid || this.libraryForm.get('type')?.invalid;\r\n case StepID.Folder:\r\n return this.selectedFolders.length === 0;\r\n case StepID.Cover:\r\n return false; // Covers are optional\r\n case StepID.Advanced:\r\n return false; // Advanced are optional\r\n }\r\n }\r\n\r\n}\r\n","import { getBaseUrl } from \"src/app/base-url.provider\";\r\nconst BASE_URL = getBaseUrl();\r\n\r\nexport const environment = {\r\n production: true,\r\n apiUrl: `${BASE_URL}api/`,\r\n hubUrl:`${BASE_URL}hubs/`,\r\n buyLink: 'https://buy.stripe.com/00gcOQanFajG0hi5ko?prefilled_promo_code=FREETRIAL',\r\n manageLink: 'https://billing.stripe.com/p/login/28oaFRa3HdHWb5ecMM'\r\n};\r\n","export function getBaseUrl() : string {\r\n return document.getElementsByTagName('base')[0]?.getAttribute('href') || '/';\r\n}\r\n","\r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n\r\n\r\n
\r\n \r\n
\r\n \r\n \"icon\"\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n {{title}}\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n DestroyRef,\r\n inject,\r\n Input,\r\n OnInit\r\n} from '@angular/core';\r\nimport {NavigationEnd, Router, RouterLink} from '@angular/router';\r\nimport { filter, map } from 'rxjs';\r\nimport { NavService } from 'src/app/_services/nav.service';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {CommonModule, NgOptimizedImage} from \"@angular/common\";\r\n\r\n\r\n@Component({\r\n selector: 'app-side-nav-item',\r\n standalone: true,\r\n imports: [CommonModule, RouterLink, NgOptimizedImage],\r\n templateUrl: './side-nav-item.component.html',\r\n styleUrls: ['./side-nav-item.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SideNavItemComponent implements OnInit {\r\n /**\r\n * Icon to display next to item. ie) 'fa-home'\r\n */\r\n @Input() icon: string = '';\r\n @Input() imageUrl: string | null = '';\r\n /**\r\n * Text for the item\r\n */\r\n @Input() title: string = '';\r\n\r\n /**\r\n * If a link should be generated when clicked. By default (undefined), no link will be generated\r\n */\r\n @Input() link: string | undefined;\r\n /**\r\n * If external, link will be used as full href and rel will be applied\r\n */\r\n @Input() external: boolean = false;\r\n /**\r\n * If using a link, then you can pass optional queryParameters\r\n */\r\n @Input() queryParams: any | undefined = undefined;\r\n\r\n\r\n @Input() comparisonMethod: 'startsWith' | 'equals' = 'equals';\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n\r\n highlighted = false;\r\n\r\n constructor(public navService: NavService, private router: Router, private readonly cdRef: ChangeDetectorRef) {\r\n router.events\r\n .pipe(filter(event => event instanceof NavigationEnd),\r\n takeUntilDestroyed(this.destroyRef),\r\n map(evt => evt as NavigationEnd))\r\n .subscribe((evt: NavigationEnd) => {\r\n const tokens = evt.url.split('?');\r\n const [token1, token2 = undefined] = tokens;\r\n this.updateHighlight(token1, token2);\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n setTimeout(() => {\r\n this.updateHighlight(this.router.url.split('?')[0]);\r\n }, 100);\r\n\r\n }\r\n\r\n updateHighlight(page: string, queryParams?: string) {\r\n if (this.link === undefined) {\r\n this.highlighted = false;\r\n this.cdRef.markForCheck();\r\n return;\r\n }\r\n\r\n if (!page.endsWith('/') && !queryParams) {\r\n page = page + '/';\r\n }\r\n\r\n\r\n if (this.comparisonMethod === 'equals' && page === this.link) {\r\n this.highlighted = true;\r\n this.cdRef.markForCheck();\r\n return;\r\n }\r\n if (this.comparisonMethod === 'startsWith' && page.startsWith(this.link)) {\r\n\r\n if (queryParams && queryParams === this.queryParams) {\r\n this.highlighted = true;\r\n this.cdRef.markForCheck();\r\n return;\r\n }\r\n\r\n this.highlighted = true;\r\n this.cdRef.markForCheck();\r\n return;\r\n }\r\n\r\n this.highlighted = false;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n openLink() {\r\n if (Object.keys(this.queryParams).length === 0) {\r\n this.router.navigateByUrl(this.link!);\r\n return\r\n }\r\n this.router.navigateByUrl(this.link + '?' + this.queryParams);\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport {translate} from \"@ngneat/transloco\";\r\n\r\n@Pipe({\r\n name: 'streamName',\r\n standalone: true,\r\n pure: true\r\n})\r\nexport class StreamNamePipe implements PipeTransform {\r\n\r\n transform(value: string): unknown {\r\n return translate('stream-pipe.' + value);\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n \r\n {{item.name | streamName }}\r\n \r\n \r\n {{item.name}}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n {{t(item.isProvided ? 'provided' : 'smart-filter')}}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n inject,\r\n Input,\r\n Output\r\n} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {ImageComponent} from \"../../../shared/image/image.component\";\r\nimport {MangaFormatIconPipe} from \"../../../pipe/manga-format-icon.pipe\";\r\nimport {MangaFormatPipe} from \"../../../pipe/manga-format.pipe\";\r\nimport {NgbProgressbar} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\nimport {DashboardStream} from \"../../../_models/dashboard/dashboard-stream\";\r\nimport {SideNavStream} from \"../../../_models/sidenav/sidenav-stream\";\r\nimport {CommonStream} from \"../../../_models/common-stream\";\r\nimport {StreamNamePipe} from \"../../../pipe/stream-name.pipe\";\r\n\r\n@Component({\r\n selector: 'app-dashboard-stream-list-item',\r\n standalone: true,\r\n imports: [CommonModule, ImageComponent, MangaFormatIconPipe, MangaFormatPipe, NgbProgressbar, TranslocoDirective, StreamNamePipe],\r\n templateUrl: './dashboard-stream-list-item.component.html',\r\n styleUrls: ['./dashboard-stream-list-item.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DashboardStreamListItemComponent {\r\n @Input({required: true}) item!: DashboardStream;\r\n @Input({required: true}) position: number = 0;\r\n @Output() hide: EventEmitter = new EventEmitter();\r\n\r\n\r\n}\r\n","\r\n \r\n \r\n \r\n \r\n \r\n\r\n
Smart Filters
\r\n
\r\n
= 3\">\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
    \r\n
  • \r\n {{filter.name}}\r\n \r\n
  • \r\n
  • \r\n {{t('no-data')}}\r\n
  • \r\n
\r\n
\r\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, inject} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {\r\n DraggableOrderedListComponent, IndexUpdateEvent\r\n} from \"../../../reading-list/_components/draggable-ordered-list/draggable-ordered-list.component\";\r\nimport {DashboardStreamListItemComponent} from \"../dashboard-stream-list-item/dashboard-stream-list-item.component\";\r\nimport {DashboardStream} from \"../../../_models/dashboard/dashboard-stream\";\r\nimport {SmartFilter} from \"../../../_models/metadata/v2/smart-filter\";\r\nimport {DashboardService} from \"../../../_services/dashboard.service\";\r\nimport {FilterService} from \"../../../_services/filter.service\";\r\nimport {NgbActiveModal} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {forkJoin} from \"rxjs\";\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\nimport {FormControl, FormGroup, ReactiveFormsModule} from \"@angular/forms\";\r\nimport {FilterPipe} from \"../../../pipe/filter.pipe\";\r\n\r\n@Component({\r\n selector: 'app-customize-dashboard-streams',\r\n standalone: true,\r\n imports: [CommonModule, DraggableOrderedListComponent, DashboardStreamListItemComponent, TranslocoDirective, ReactiveFormsModule, FilterPipe],\r\n templateUrl: './customize-dashboard-streams.component.html',\r\n styleUrls: ['./customize-dashboard-streams.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CustomizeDashboardStreamsComponent {\r\n\r\n items: DashboardStream[] = [];\r\n smartFilters: SmartFilter[] = [];\r\n accessibilityMode: boolean = false;\r\n\r\n private readonly dashboardService = inject(DashboardService);\r\n private readonly filterService = inject(FilterService);\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n\r\n listForm: FormGroup = new FormGroup({\r\n 'filterQuery': new FormControl('', [])\r\n });\r\n\r\n filterList = (listItem: SmartFilter) => {\r\n const filterVal = (this.listForm.value.filterQuery || '').toLowerCase();\r\n return listItem.name.toLowerCase().indexOf(filterVal) >= 0;\r\n }\r\n resetFilter() {\r\n this.listForm.get('filterQuery')?.setValue('');\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n constructor(public modal: NgbActiveModal) {\r\n forkJoin([this.dashboardService.getDashboardStreams(false), this.filterService.getAllFilters()]).subscribe(results => {\r\n this.items = results[0];\r\n\r\n // After 100 items, drag and drop is disabled to use virtualization\r\n if (this.items.length > 100) {\r\n this.accessibilityMode = true;\r\n }\r\n\r\n const smartFilterStreams = new Set(results[0].filter(d => !d.isProvided).map(d => d.name));\r\n this.smartFilters = results[1].filter(d => !smartFilterStreams.has(d.name));\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n addFilterToStream(filter: SmartFilter) {\r\n this.dashboardService.createDashboardStream(filter.id).subscribe(stream => {\r\n this.smartFilters = this.smartFilters.filter(d => d.name !== filter.name);\r\n this.items = [...this.items, stream];\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n\r\n orderUpdated(event: IndexUpdateEvent) {\r\n this.dashboardService.updateDashboardStreamPosition(event.item.name, event.item.id, event.fromPosition, event.toPosition).subscribe();\r\n }\r\n\r\n updateVisibility(item: DashboardStream, position: number) {\r\n this.items[position].visible = !this.items[position].visible;\r\n this.cdRef.markForCheck();\r\n this.dashboardService.updateDashboardStream(this.items[position]).subscribe();\r\n }\r\n\r\n}\r\n","export enum SideNavStreamType {\r\n Collections = 1,\r\n ReadingLists = 2,\r\n Bookmarks = 3,\r\n Library = 4,\r\n SmartFilter = 5,\r\n ExternalSource = 6,\r\n AllSeries = 7,\r\n WantToRead = 8,\r\n}\r\n","\r\n
\r\n
\r\n
\r\n \r\n {{item.name | streamName }}\r\n \r\n \r\n {{item.name}}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n {{t('provided')}}\r\n \r\n \r\n {{t('library')}}\r\n {{t('smart-filter')}}\r\n {{t('external-source')}}\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n {{item.library?.name}}\r\n \r\n \r\n {{t('load-filter')}}\r\n \r\n \r\n = new EventEmitter();\r\n protected readonly SideNavStreamType = SideNavStreamType;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {environment} from \"../environments/environment\";\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {ExternalSource} from \"./_models/sidenav/external-source\";\r\nimport {TextResonse} from \"./_types/text-response\";\r\nimport {map} from \"rxjs/operators\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ExternalSourceService {\r\n\r\n baseUrl = environment.apiUrl;\r\n constructor(private httpClient: HttpClient) { }\r\n\r\n getExternalSources() {\r\n return this.httpClient.get>(this.baseUrl + 'stream/external-sources');\r\n }\r\n\r\n createSource(source: ExternalSource) {\r\n return this.httpClient.post(this.baseUrl + 'stream/create-external-source', source);\r\n }\r\n\r\n updateSource(source: ExternalSource) {\r\n return this.httpClient.post(this.baseUrl + 'stream/update-external-source', source);\r\n }\r\n\r\n deleteSource(externalSourceId: number) {\r\n return this.httpClient.delete(this.baseUrl + 'stream/delete-external-source?externalSourceId=' + externalSourceId);\r\n }\r\n\r\n sourceExists(name: string, host: string, apiKey: string) {\r\n return this.httpClient.get(this.baseUrl + `stream/external-source-exists?host=${encodeURIComponent(host)}&name=${name}&apiKey=${apiKey}`, TextResonse)\r\n .pipe(map(s => s == 'true'));\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
= 3\">\r\n \r\n
\r\n \r\n \r\n
\r\n {{t('reorder-when-filter-present')}}\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
{{t('smart-filters-title')}}
\r\n
= 6\">\r\n \r\n
\r\n \r\n \r\n
\r\n {{t('reorder-when-filter-present')}}\r\n
\r\n
    \r\n
  • \r\n {{filter.name}}\r\n \r\n
  • \r\n
  • \r\n {{t('no-data')}}\r\n
  • \r\n
\r\n\r\n
{{t('external-sources-title')}}
\r\n
= 6\">\r\n \r\n
\r\n \r\n \r\n
\r\n {{t('reorder-when-filter-present')}}\r\n
\r\n
    \r\n
  • \r\n {{source.host}}\r\n \r\n
  • \r\n
  • \r\n {{t('no-data-external-source')}}\r\n
  • \r\n
\r\n \r\n
\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n DestroyRef, EventEmitter,\r\n HostListener,\r\n inject,\r\n OnDestroy\r\n} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {SmartFilter} from \"../../../_models/metadata/v2/smart-filter\";\r\nimport {FilterService} from \"../../../_services/filter.service\";\r\nimport {NgbActiveModal} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {forkJoin} from \"rxjs\";\r\nimport {\r\n DraggableOrderedListComponent,\r\n IndexUpdateEvent\r\n} from \"../../../reading-list/_components/draggable-ordered-list/draggable-ordered-list.component\";\r\nimport {SideNavStream} from \"../../../_models/sidenav/sidenav-stream\";\r\nimport {NavService} from \"../../../_services/nav.service\";\r\nimport {DashboardStreamListItemComponent} from \"../dashboard-stream-list-item/dashboard-stream-list-item.component\";\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\nimport {SidenavStreamListItemComponent} from \"../sidenav-stream-list-item/sidenav-stream-list-item.component\";\r\nimport {ExternalSourceService} from \"../../../external-source.service\";\r\nimport {ExternalSource} from \"../../../_models/sidenav/external-source\";\r\nimport {SideNavStreamType} from \"../../../_models/sidenav/sidenav-stream-type.enum\";\r\nimport {FormControl, FormGroup, ReactiveFormsModule} from \"@angular/forms\";\r\nimport {FilterPipe} from \"../../../pipe/filter.pipe\";\r\nimport {BulkOperationsComponent} from \"../../../cards/bulk-operations/bulk-operations.component\";\r\nimport {Action, ActionItem} from \"../../../_services/action-factory.service\";\r\nimport {BulkSelectionService} from \"../../../cards/bulk-selection.service\";\r\nimport {filter, tap} from \"rxjs/operators\";\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {KEY_CODES} from \"../../../shared/_services/utility.service\";\r\n\r\n@Component({\r\n selector: 'app-customize-sidenav-streams',\r\n standalone: true,\r\n imports: [CommonModule, DraggableOrderedListComponent, DashboardStreamListItemComponent, TranslocoDirective, SidenavStreamListItemComponent, ReactiveFormsModule, FilterPipe, BulkOperationsComponent],\r\n templateUrl: './customize-sidenav-streams.component.html',\r\n styleUrls: ['./customize-sidenav-streams.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CustomizeSidenavStreamsComponent implements OnDestroy {\r\n\r\n //@Input({required: true}) parentScrollElem!: Element | Window;\r\n items: SideNavStream[] = [];\r\n smartFilters: SmartFilter[] = [];\r\n externalSources: ExternalSource[] = [];\r\n virtualizeAfter = 100;\r\n\r\n listForm: FormGroup = new FormGroup({\r\n 'filterSideNavStream': new FormControl('', []),\r\n 'filterSmartFilter': new FormControl('', []),\r\n 'filterExternalSource': new FormControl('', []),\r\n });\r\n pageOperationsForm: FormGroup = new FormGroup({\r\n 'accessibilityMode': new FormControl(false, []),\r\n 'bulkMode': new FormControl(false, [])\r\n })\r\n\r\n filterSideNavStreams = (listItem: SideNavStream) => {\r\n const filterVal = (this.listForm.value.filterSideNavStream || '').toLowerCase();\r\n return listItem.name.toLowerCase().indexOf(filterVal) >= 0;\r\n }\r\n\r\n filterSmartFilters = (listItem: SmartFilter) => {\r\n const filterVal = (this.listForm.value.filterSmartFilter || '').toLowerCase();\r\n return listItem.name.toLowerCase().indexOf(filterVal) >= 0;\r\n }\r\n\r\n filterExternalSources = (listItem: ExternalSource) => {\r\n const filterVal = (this.listForm.value.filterExternalSource || '').toLowerCase();\r\n return listItem.name.toLowerCase().indexOf(filterVal) >= 0;\r\n }\r\n\r\n bulkActionCallback = (action: ActionItem, data: SideNavStream) => {\r\n const selectedItems = this.bulkSelectionService.getSelectedCardsForSource('sideNavStream');\r\n const streams = selectedItems\r\n .map(index => this.items[parseInt(index, 10)]);\r\n let visibleState = false;\r\n switch (action.action) {\r\n case Action.MarkAsVisible:\r\n visibleState = true;\r\n break;\r\n case Action.MarkAsInvisible:\r\n visibleState = false;\r\n break;\r\n }\r\n\r\n for(let index of selectedItems.map(s => parseInt(s, 10))) {\r\n this.items[index].visible = visibleState;\r\n this.items[index] = {...this.items[index]};\r\n }\r\n this.cdRef.markForCheck();\r\n // Make bulk call\r\n this.sideNavService.bulkToggleSideNavStreamVisibility(streams.map(s => s.id), visibleState)\r\n .subscribe(() => {\r\n this.bulkSelectionService.deselectAll();\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n\r\n private readonly sideNavService = inject(NavService);\r\n private readonly filterService = inject(FilterService);\r\n private readonly externalSourceService = inject(ExternalSourceService);\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n public readonly bulkSelectionService = inject(BulkSelectionService);\r\n\r\n @HostListener('document:keydown.shift', ['$event'])\r\n handleKeypress(event: KeyboardEvent) {\r\n if (event.key === KEY_CODES.SHIFT) {\r\n this.bulkSelectionService.isShiftDown = true;\r\n }\r\n }\r\n\r\n @HostListener('document:keyup.shift', ['$event'])\r\n handleKeyUp(event: KeyboardEvent) {\r\n if (event.key === KEY_CODES.SHIFT) {\r\n this.bulkSelectionService.isShiftDown = false;\r\n this.cdRef.markForCheck();\r\n }\r\n }\r\n\r\n constructor(public modal: NgbActiveModal) {\r\n\r\n this.pageOperationsForm.get('accessibilityMode')?.valueChanges.pipe(\r\n tap(_ => {\r\n const accessibleValue = this.pageOperationsForm.get('accessibilityMode')?.value;\r\n if (accessibleValue) {\r\n if (this.pageOperationsForm.get('bulkMode')?.disabled) return;\r\n this.pageOperationsForm.get('bulkMode')?.disable();\r\n } else {\r\n if (!this.pageOperationsForm.get('bulkMode')?.disabled) return;\r\n this.pageOperationsForm.get('bulkMode')?.enable();\r\n }\r\n this.cdRef.markForCheck();\r\n }),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe();\r\n\r\n this.pageOperationsForm.get('bulkMode')?.valueChanges.pipe(\r\n tap(_ => {\r\n const bulkValue = this.pageOperationsForm.get('bulkMode')?.value;\r\n if (bulkValue) {\r\n if (this.pageOperationsForm.get('accessibilityMode')?.disabled) return;\r\n this.pageOperationsForm.get('accessibilityMode')?.disable();\r\n } else {\r\n if (this.pageOperationsForm.get('accessibilityMode')?.disabled) return;\r\n this.pageOperationsForm.get('accessibilityMode')?.enable();\r\n }\r\n }),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe();\r\n\r\n this.pageOperationsForm.valueChanges.pipe(\r\n tap(_ => {\r\n if (this.pageOperationsForm.value.accessibilityMode || this.pageOperationsForm.value.bulkMode) {\r\n this.listForm.get('filterSideNavStream')?.disable();\r\n return;\r\n }\r\n this.listForm.get('filterSideNavStream')?.enable();\r\n }),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe();\r\n\r\n forkJoin([this.sideNavService.getSideNavStreams(false),\r\n this.filterService.getAllFilters(), this.externalSourceService.getExternalSources()\r\n ]).subscribe(results => {\r\n this.items = results[0];\r\n\r\n // After X items, drag and drop is disabled to use virtualization\r\n if (this.items.length > this.virtualizeAfter) {\r\n this.pageOperationsForm.get('accessibilityMode')?.setValue(true);\r\n }\r\n\r\n const existingSmartFilterStreams = new Set(results[0].filter(d => !d.isProvided && d.streamType === SideNavStreamType.SmartFilter).map(d => d.name));\r\n this.smartFilters = results[1].filter(d => !existingSmartFilterStreams.has(d.name));\r\n\r\n const existingExternalSourceStreams = new Set(results[0].filter(d => !d.isProvided && d.streamType === SideNavStreamType.ExternalSource).map(d => d.name));\r\n this.externalSources = results[2].filter(d => !existingExternalSourceStreams.has(d.name));\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.bulkSelectionService.deselectAll();\r\n }\r\n\r\n resetSideNavFilter() {\r\n this.listForm.get('filterSideNavStream')?.setValue('');\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n resetSmartFilterFilter() {\r\n this.listForm.get('filterSmartFilter')?.setValue('');\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n resetExternalSourceFilter() {\r\n this.listForm.get('filterExternalSource')?.setValue('');\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n addFilterToStream(filter: SmartFilter) {\r\n this.sideNavService.createSideNavStream(filter.id).subscribe(stream => {\r\n this.smartFilters = this.smartFilters.filter(d => d.name !== filter.name);\r\n this.items = [...this.items, stream];\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n addExternalSourceToStream(externalSource: ExternalSource) {\r\n this.sideNavService.createSideNavStreamFromExternalSource(externalSource.id).subscribe(stream => {\r\n this.externalSources = this.externalSources.filter(d => d.name !== externalSource.name);\r\n this.items = [...this.items, stream];\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n\r\n orderUpdated(event: IndexUpdateEvent) {\r\n \r\n this.sideNavService.updateSideNavStreamPosition(event.item.name, event.item.id, event.fromPosition, event.toPosition).subscribe(() => {\r\n this.sideNavService.getSideNavStreams(false).subscribe((data) => {\r\n this.items = [...data];\r\n this.cdRef.markForCheck();\r\n });\r\n });\r\n }\r\n\r\n updateVisibility(item: SideNavStream, position: number) {\r\n const stream = this.items.filter(s => s.id == item.id)[0];\r\n stream.visible = !stream.visible;\r\n this.cdRef.markForCheck();\r\n this.sideNavService.updateSideNavStream(stream).subscribe();\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n
\r\n
\r\n

{{source.name || t('title')}}

\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{t('required')}}\r\n
\r\n
\r\n {{t('not-unique')}}\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n {{t('required')}}\r\n
\r\n
\r\n {{t('pattern')}}\r\n
\r\n
\r\n {{t('not-unique')}}\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{t('required')}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n\r\n\r\n
\r\n","import {ChangeDetectorRef, Component, DestroyRef, EventEmitter, inject, Input, OnInit, Output} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {FormControl, FormGroup, ReactiveFormsModule, Validators} from \"@angular/forms\";\r\nimport {ExternalSource} from \"../../../_models/sidenav/external-source\";\r\nimport {NgbCollapse} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {translate, TranslocoDirective} from \"@ngneat/transloco\";\r\nimport {ExternalSourceService} from \"../../../external-source.service\";\r\nimport {distinctUntilChanged, filter, tap} from \"rxjs/operators\";\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {switchMap} from \"rxjs\";\r\nimport {ToastrModule, ToastrService} from \"ngx-toastr\";\r\n\r\n@Component({\r\n selector: 'app-edit-external-source-item',\r\n standalone: true,\r\n imports: [CommonModule, NgbCollapse, ReactiveFormsModule, TranslocoDirective],\r\n templateUrl: './edit-external-source-item.component.html',\r\n styleUrls: ['./edit-external-source-item.component.scss']\r\n})\r\nexport class EditExternalSourceItemComponent implements OnInit {\r\n\r\n @Input({required: true}) source!: ExternalSource;\r\n @Output() sourceUpdate = new EventEmitter();\r\n @Output() sourceDelete = new EventEmitter();\r\n @Input() isViewMode: boolean = true;\r\n\r\n formGroup: FormGroup = new FormGroup({});\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly externalSourceService = inject(ExternalSourceService);\r\n private readonly toastr = inject(ToastrService);\r\n\r\n hasErrors(controlName: string) {\r\n const errors = this.formGroup.get(controlName)?.errors;\r\n return Object.values(errors || []).filter(v => v).length > 0;\r\n }\r\n\r\n constructor() {}\r\n\r\n ngOnInit(): void {\r\n this.formGroup.addControl('name', new FormControl(this.source.name, [Validators.required]));\r\n this.formGroup.addControl('host', new FormControl(this.source.host, [Validators.required, Validators.pattern(/^(http:|https:)+[^\\s]+[\\w]\\/?$/)]));\r\n this.formGroup.addControl('apiKey', new FormControl(this.source.apiKey, [Validators.required]));\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n resetForm() {\r\n this.formGroup.get('host')?.setValue(this.source.host);\r\n this.formGroup.get('name')?.setValue(this.source.name);\r\n this.formGroup.get('apiKey')?.setValue(this.source.apiKey);\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n saveForm() {\r\n if (this.source === undefined) return;\r\n\r\n const model = this.formGroup.value;\r\n this.externalSourceService.sourceExists(model.host, model.name, model.apiKey).subscribe(exists => {\r\n if (exists) {\r\n this.toastr.error(translate('toasts.external-source-already-exists'));\r\n return;\r\n }\r\n\r\n if (this.source.id === 0) {\r\n // We need to create a new one\r\n this.externalSourceService.createSource({id: 0, ...this.formGroup.value}).subscribe((updatedSource) => {\r\n this.source = {...updatedSource};\r\n this.sourceUpdate.emit(this.source);\r\n this.toggleViewMode();\r\n });\r\n return;\r\n }\r\n\r\n this.externalSourceService.updateSource({id: this.source.id, ...this.formGroup.value}).subscribe((updatedSource) => {\r\n this.source!.host = this.formGroup.value.host;\r\n this.source!.apiKey = this.formGroup.value.apiKey;\r\n this.source!.name = this.formGroup.value.name;\r\n\r\n this.sourceUpdate.emit(this.source);\r\n this.toggleViewMode();\r\n });\r\n });\r\n }\r\n delete() {\r\n if (this.source.id === 0) {\r\n this.sourceDelete.emit(this.source);\r\n if (!this.isViewMode) {\r\n this.toggleViewMode();\r\n }\r\n return;\r\n }\r\n\r\n this.externalSourceService.deleteSource(this.source.id).subscribe(() => {\r\n this.sourceDelete.emit(this.source);\r\n if (!this.isViewMode) {\r\n this.toggleViewMode();\r\n }\r\n });\r\n }\r\n\r\n toggleViewMode() {\r\n this.isViewMode = !this.isViewMode;\r\n if (!this.isViewMode) {\r\n this.resetForm();\r\n }\r\n }\r\n}\r\n","\r\n

\r\n {{t('description')}}\r\n {{t('help-link')}}\r\n

\r\n\r\n\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
    \r\n
  • \r\n {{t('no-data')}}\r\n
  • \r\n
\r\n
\r\n\r\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject} from '@angular/core';\r\nimport {CommonModule, NgOptimizedImage} from '@angular/common';\r\nimport {FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators} from \"@angular/forms\";\r\nimport {NgbCollapse, NgbTooltip} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {translate, TranslocoDirective} from \"@ngneat/transloco\";\r\nimport {AccountService} from \"../../../_services/account.service\";\r\nimport {ToastrService} from \"ngx-toastr\";\r\nimport {EditExternalSourceItemComponent} from \"../edit-external-source-item/edit-external-source-item.component\";\r\nimport {ExternalSource} from \"../../../_models/sidenav/external-source\";\r\nimport {ExternalSourceService} from \"../../../external-source.service\";\r\nimport {FilterPipe} from \"../../../pipe/filter.pipe\";\r\nimport {SmartFilter} from \"../../../_models/metadata/v2/smart-filter\";\r\n\r\n@Component({\r\n selector: 'app-manage-external-sources',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, NgOptimizedImage, NgbTooltip, ReactiveFormsModule, TranslocoDirective, NgbCollapse, EditExternalSourceItemComponent, FilterPipe],\r\n templateUrl: './manage-external-sources.component.html',\r\n styleUrls: ['./manage-external-sources.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ManageExternalSourcesComponent {\r\n\r\n externalSources: Array = [];\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly externalSourceService = inject(ExternalSourceService);\r\n\r\n listForm: FormGroup = new FormGroup({\r\n 'filterQuery': new FormControl('', [])\r\n });\r\n\r\n filterList = (listItem: ExternalSource) => {\r\n const filterVal = (this.listForm.value.filterQuery || '').toLowerCase();\r\n return listItem.name.toLowerCase().indexOf(filterVal) >= 0 || listItem.host.toLowerCase().indexOf(filterVal) >= 0;\r\n }\r\n\r\n constructor(public accountService: AccountService) {\r\n this.externalSourceService.getExternalSources().subscribe(data => {\r\n this.externalSources = data;\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n resetFilter() {\r\n this.listForm.get('filterQuery')?.setValue('');\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n addNewExternalSource() {\r\n this.externalSources.unshift({id: 0, name: '', host: '', apiKey: ''});\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n updateSource(index: number, updatedSource: ExternalSource) {\r\n this.externalSources[index] = updatedSource;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n deleteSource(index: number, updatedSource: ExternalSource) {\r\n this.externalSources.splice(index, 1);\r\n this.resetFilter();\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n\r\n}\r\n","\r\n
\r\n
= 3\">\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
    \r\n
  • \r\n {{f.name}}\r\n \r\n
  • \r\n\r\n
  • \r\n {{t('no-data')}}\r\n
  • \r\n
\r\n
\r\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, inject} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {FilterService} from \"../../../_services/filter.service\";\r\nimport {SmartFilter} from \"../../../_models/metadata/v2/smart-filter\";\r\nimport {Router} from \"@angular/router\";\r\nimport {ConfirmService} from \"../../../shared/confirm.service\";\r\nimport {translate, TranslocoDirective} from \"@ngneat/transloco\";\r\nimport {ToastrService} from \"ngx-toastr\";\r\nimport {FormControl, FormGroup, ReactiveFormsModule} from \"@angular/forms\";\r\nimport {FilterPipe} from \"../../../pipe/filter.pipe\";\r\n\r\n@Component({\r\n selector: 'app-manage-smart-filters',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, TranslocoDirective, FilterPipe],\r\n templateUrl: './manage-smart-filters.component.html',\r\n styleUrls: ['./manage-smart-filters.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ManageSmartFiltersComponent {\r\n\r\n private readonly filterService = inject(FilterService);\r\n private readonly confirmService = inject(ConfirmService);\r\n private readonly router = inject(Router);\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n private readonly toastr = inject(ToastrService);\r\n filters: Array = [];\r\n listForm: FormGroup = new FormGroup({\r\n 'filterQuery': new FormControl('', [])\r\n });\r\n\r\n filterList = (listItem: SmartFilter) => {\r\n const filterVal = (this.listForm.value.filterQuery || '').toLowerCase();\r\n return listItem.name.toLowerCase().indexOf(filterVal) >= 0;\r\n }\r\n resetFilter() {\r\n this.listForm.get('filterQuery')?.setValue('');\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n\r\n constructor() {\r\n this.loadData();\r\n }\r\n\r\n loadData() {\r\n this.filterService.getAllFilters().subscribe(filters => {\r\n this.filters = filters;\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n async loadFilter(f: SmartFilter) {\r\n await this.router.navigateByUrl('all-series?' + f.filter);\r\n }\r\n\r\n async deleteFilter(f: SmartFilter) {\r\n if (!await this.confirmService.confirm(translate('toasts.confirm-delete-smart-filter'))) return;\r\n\r\n this.filterService.deleteFilter(f.id).subscribe(() => {\r\n this.toastr.success(translate('toasts.smart-filter-deleted'));\r\n this.resetFilter();\r\n this.loadData();\r\n });\r\n }\r\n\r\n}\r\n","\r\n
\r\n

{{t('title-' + activeTab)}}

\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n {{t('help')}}\r\n \r\n
\r\n
\r\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, inject} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\nimport {SafeHtmlPipe} from \"../../../pipe/safe-html.pipe\";\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\nimport {NgbActiveModal, NgbNav, NgbNavContent, NgbNavItem, NgbNavLink, NgbNavOutlet} from \"@ng-bootstrap/ng-bootstrap\";\r\nimport {\r\n DraggableOrderedListComponent,\r\n} from \"../../../reading-list/_components/draggable-ordered-list/draggable-ordered-list.component\";\r\nimport {\r\n ReadingListItemComponent\r\n} from \"../../../reading-list/_components/reading-list-item/reading-list-item.component\";\r\nimport {DashboardStreamListItemComponent} from \"../dashboard-stream-list-item/dashboard-stream-list-item.component\";\r\nimport {Breakpoint, UtilityService} from \"../../../shared/_services/utility.service\";\r\nimport {CustomizeDashboardStreamsComponent} from \"../customize-dashboard-streams/customize-dashboard-streams.component\";\r\nimport {CustomizeSidenavStreamsComponent} from \"../customize-sidenav-streams/customize-sidenav-streams.component\";\r\nimport {ManageExternalSourcesComponent} from \"../manage-external-sources/manage-external-sources.component\";\r\nimport {ManageSmartFiltersComponent} from \"../manage-smart-filters/manage-smart-filters.component\";\r\n\r\nenum TabID {\r\n Dashboard = 'dashboard',\r\n SideNav = 'sidenav',\r\n SmartFilters = 'smart-filters',\r\n ExternalSources = 'external-sources'\r\n}\r\n\r\n@Component({\r\n selector: 'app-customize-dashboard-modal',\r\n standalone: true,\r\n imports: [CommonModule, SafeHtmlPipe, TranslocoDirective, DraggableOrderedListComponent, ReadingListItemComponent, DashboardStreamListItemComponent,\r\n NgbNav, NgbNavContent, NgbNavLink, NgbNavItem, NgbNavOutlet, CustomizeDashboardStreamsComponent, CustomizeSidenavStreamsComponent, ManageExternalSourcesComponent, ManageSmartFiltersComponent],\r\n templateUrl: './customize-dashboard-modal.component.html',\r\n styleUrls: ['./customize-dashboard-modal.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CustomizeDashboardModalComponent {\r\n\r\n activeTab = TabID.SideNav;\r\n\r\n private readonly cdRef = inject(ChangeDetectorRef);\r\n public readonly utilityService = inject(UtilityService);\r\n private readonly modal = inject(NgbActiveModal);\r\n protected readonly TabID = TabID;\r\n protected readonly Breakpoint = Breakpoint;\r\n\r\n close() {\r\n this.modal.close();\r\n }\r\n}\r\n","\r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
10 && (navService?.sideNavCollapsed$ | async) === false\">\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n DestroyRef,\r\n inject,\r\n OnInit\r\n} from '@angular/core';\r\nimport { NavigationEnd, Router } from '@angular/router';\r\nimport { NgbModal } from '@ng-bootstrap/ng-bootstrap';\r\nimport {distinctUntilChanged, filter, map, shareReplay, take, tap} from 'rxjs/operators';\r\nimport { ImportCblModalComponent } from 'src/app/reading-list/_modals/import-cbl-modal/import-cbl-modal.component';\r\nimport { ImageService } from 'src/app/_services/image.service';\r\nimport { EVENTS, MessageHubService } from 'src/app/_services/message-hub.service';\r\nimport { Breakpoint, UtilityService } from '../../../shared/_services/utility.service';\r\nimport { Library, LibraryType } from '../../../_models/library';\r\nimport { AccountService } from '../../../_services/account.service';\r\nimport { Action, ActionFactoryService, ActionItem } from '../../../_services/action-factory.service';\r\nimport { ActionService } from '../../../_services/action.service';\r\nimport { LibraryService } from '../../../_services/library.service';\r\nimport { NavService } from '../../../_services/nav.service';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {BehaviorSubject, merge, Observable, of, ReplaySubject, startWith, switchMap} from \"rxjs\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {SideNavItemComponent} from \"../side-nav-item/side-nav-item.component\";\r\nimport {FilterPipe} from \"../../../pipe/filter.pipe\";\r\nimport {FormsModule} from \"@angular/forms\";\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\nimport {CardActionablesComponent} from \"../../../_single-module/card-actionables/card-actionables.component\";\r\nimport {SentenceCasePipe} from \"../../../pipe/sentence-case.pipe\";\r\nimport {CustomizeDashboardModalComponent} from \"../customize-dashboard-modal/customize-dashboard-modal.component\";\r\nimport {SideNavStream} from \"../../../_models/sidenav/sidenav-stream\";\r\nimport {SideNavStreamType} from \"../../../_models/sidenav/sidenav-stream-type.enum\";\r\n\r\n@Component({\r\n selector: 'app-side-nav',\r\n standalone: true,\r\n imports: [CommonModule, SideNavItemComponent, CardActionablesComponent, FilterPipe, FormsModule, TranslocoDirective, SentenceCasePipe],\r\n templateUrl: './side-nav.component.html',\r\n styleUrls: ['./side-nav.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SideNavComponent implements OnInit {\r\n\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly actionFactoryService = inject(ActionFactoryService);\r\n\r\n cachedData: SideNavStream[] | null = null;\r\n actions: ActionItem[] = this.actionFactoryService.getLibraryActions(this.handleAction.bind(this));\r\n readingListActions = [{action: Action.Import, title: 'import-cbl', children: [], requiresAdmin: true, callback: this.importCbl.bind(this)}];\r\n homeActions = [{action: Action.Edit, title: 'customize', children: [], requiresAdmin: false, callback: this.handleHomeActions.bind(this)}];\r\n\r\n filterQuery: string = '';\r\n filterLibrary = (stream: SideNavStream) => {\r\n return stream.name.toLowerCase().indexOf((this.filterQuery || '').toLowerCase()) >= 0;\r\n }\r\n showAll: boolean = false;\r\n totalSize = 0;\r\n protected readonly SideNavStreamType = SideNavStreamType;\r\n\r\n private showAllSubject = new BehaviorSubject(false);\r\n showAll$ = this.showAllSubject.asObservable();\r\n\r\n private loadDataSubject = new ReplaySubject();\r\n loadData$ = this.loadDataSubject.asObservable();\r\n\r\n loadDataOnInit$: Observable = this.loadData$.pipe(\r\n switchMap(() => {\r\n if (this.cachedData != null) {\r\n return of(this.cachedData);\r\n }\r\n return this.navService.getSideNavStreams().pipe(\r\n map(data => {\r\n this.cachedData = data; // Cache the data after initial load\r\n return data;\r\n })\r\n );\r\n })\r\n );\r\n\r\n navStreams$ = merge(\r\n this.showAll$.pipe(\r\n startWith(false),\r\n distinctUntilChanged(),\r\n tap(showAll => this.showAll = showAll),\r\n switchMap(showAll =>\r\n showAll\r\n ? this.loadDataOnInit$.pipe(\r\n tap(d => this.totalSize = d.length),\r\n )\r\n : this.loadDataOnInit$.pipe(\r\n tap(d => this.totalSize = d.length),\r\n map(d => d.slice(0, 10))\r\n )\r\n ),\r\n takeUntilDestroyed(this.destroyRef),\r\n ), this.messageHub.messages$.pipe(\r\n filter(event => event.event === EVENTS.LibraryModified || event.event === EVENTS.SideNavUpdate),\r\n tap(() => {\r\n this.cachedData = null; // Reset cached data to null to get latest\r\n }),\r\n switchMap(() => {\r\n if (this.showAll) return this.loadDataOnInit$;\r\n else return this.loadDataOnInit$.pipe(map(d => d.slice(0, 10)))\r\n }), // Reload data when events occur\r\n takeUntilDestroyed(this.destroyRef),\r\n )\r\n ).pipe(\r\n startWith(null),\r\n filter(data => data !== null),\r\n takeUntilDestroyed(this.destroyRef),\r\n );\r\n\r\n\r\n constructor(\r\n public utilityService: UtilityService, private messageHub: MessageHubService,\r\n private actionService: ActionService,\r\n public navService: NavService, private router: Router, private readonly cdRef: ChangeDetectorRef,\r\n private ngbModal: NgbModal, private imageService: ImageService, public readonly accountService: AccountService) {\r\n\r\n this.router.events.pipe(\r\n filter(event => event instanceof NavigationEnd),\r\n takeUntilDestroyed(this.destroyRef),\r\n map(evt => evt as NavigationEnd),\r\n filter(() => this.utilityService.getActiveBreakpoint() < Breakpoint.Tablet),\r\n switchMap(() => this.navService.sideNavCollapsed$),\r\n take(1),\r\n filter(collapsed => !collapsed)\r\n ).subscribe(() => {\r\n this.navService.toggleSideNav();\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.accountService.currentUser$.pipe(take(1)).subscribe(user => {\r\n if (!user) return;\r\n this.loadDataSubject.next();\r\n });\r\n }\r\n\r\n async handleAction(action: ActionItem, library: Library) {\r\n switch (action.action) {\r\n case(Action.Scan):\r\n await this.actionService.scanLibrary(library);\r\n break;\r\n case(Action.RefreshMetadata):\r\n await this.actionService.refreshMetadata(library);\r\n break;\r\n case (Action.AnalyzeFiles):\r\n await this.actionService.analyzeFiles(library);\r\n break;\r\n case (Action.Edit):\r\n this.actionService.editLibrary(library, () => window.scrollTo(0, 0));\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n handleHomeActions() {\r\n this.ngbModal.open(CustomizeDashboardModalComponent, {size: 'xl', fullscreen: 'md'});\r\n }\r\n\r\n importCbl() {\r\n this.ngbModal.open(ImportCblModalComponent, {size: 'xl', fullscreen: 'md'});\r\n }\r\n\r\n performAction(action: ActionItem, library: Library) {\r\n if (typeof action.callback === 'function') {\r\n action.callback(action, library);\r\n }\r\n }\r\n\r\n getLibraryTypeIcon(format: LibraryType) {\r\n switch (format) {\r\n case LibraryType.Book:\r\n return 'fa-book';\r\n case LibraryType.Comic:\r\n case LibraryType.Manga:\r\n return 'fa-book-open';\r\n }\r\n }\r\n\r\n getLibraryImage(library: Library) {\r\n if (library.coverImage) return this.imageService.getLibraryCoverImage(library.id);\r\n return null;\r\n }\r\n\r\n\r\n toggleNavBar() {\r\n this.navService.toggleSideNav();\r\n }\r\n\r\n showMore() {\r\n this.showAllSubject.next(true);\r\n }\r\n\r\n showLess() {\r\n this.showAllSubject.next(false);\r\n }\r\n\r\n}\r\n","import {inject, Pipe, PipeTransform} from '@angular/core';\r\nimport { PersonRole } from '../_models/metadata/person';\r\nimport {TranslocoService} from \"@ngneat/transloco\";\r\n\r\n@Pipe({\r\n name: 'personRole',\r\n standalone: true\r\n})\r\nexport class PersonRolePipe implements PipeTransform {\r\n\r\n translocoService = inject(TranslocoService);\r\n transform(value: PersonRole): string {\r\n switch (value) {\r\n case PersonRole.Artist:\r\n return this.translocoService.translate('person-role-pipe.artist');\r\n case PersonRole.Character:\r\n return this.translocoService.translate('person-role-pipe.character');\r\n case PersonRole.Colorist:\r\n return this.translocoService.translate('person-role-pipe.colorist');\r\n case PersonRole.CoverArtist:\r\n return this.translocoService.translate('person-role-pipe.cover-artist');\r\n case PersonRole.Editor:\r\n return this.translocoService.translate('person-role-pipe.editor');\r\n case PersonRole.Inker:\r\n return this.translocoService.translate('person-role-pipe.inker');\r\n case PersonRole.Letterer:\r\n return this.translocoService.translate('person-role-pipe.letterer');\r\n case PersonRole.Penciller:\r\n return this.translocoService.translate('person-role-pipe.penciller');\r\n case PersonRole.Publisher:\r\n return this.translocoService.translate('person-role-pipe.publisher');\r\n case PersonRole.Writer:\r\n return this.translocoService.translate('person-role-pipe.writer');\r\n case PersonRole.Other:\r\n return this.translocoService.translate('person-role-pipe.other');\r\n default:\r\n return '';\r\n }\r\n }\r\n\r\n}\r\n","\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n
    \r\n \r\n \r\n
  • 0 || infos.length > 0\" (click)=\"clearAllErrorOrInfos()\">\r\n {{t('dismiss-all')}}\r\n
  • \r\n
    \r\n
    \r\n \r\n
  • \r\n
    Title goes here
    \r\n
    Subtitle goes here
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
  • \r\n
  • \r\n
    Title goes here
    \r\n
    Subtitle goes here
    \r\n
  • \r\n
  • \r\n
    \r\n
    Scanning Books
    \r\n
    E:\\\\Books\\\\Demon King Daimaou\\\\Demon King Daimaou - Volume 11.epub
    \r\n
    \r\n
    {{prettyPrintProgress(0.1)}}%
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
  • \r\n
  • \r\n
    \r\n
    There was some library scan error
    \r\n
    Click for more information
    \r\n
    \r\n \r\n
  • \r\n
  • \r\n
    \r\n
    Scan didn't run becasuse nothing to do
    \r\n
    Click for more information
    \r\n
    \r\n \r\n
  • \r\n
  • \r\n
    \r\n \r\n \r\n \r\n 10% downloaded\r\n \r\n \r\n Downloading {{'series' | sentenceCase}}\r\n
    \r\n
    PDFs
    \r\n
  • \r\n
    \r\n\r\n \r\n \r\n \r\n
  • \r\n
    {{message.title}}
    \r\n
    {{message.subTitle}}
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
  • \r\n \r\n
  • \r\n
    {{message.title}}
    \r\n
    {{message.subTitle}}
    \r\n
    \r\n
    {{prettyPrintProgress(message.body.progress) + '%'}}
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
  • \r\n
    \r\n
    \r\n
    \r\n\r\n \r\n \r\n \r\n
  • \r\n {{t('update-available')}}\r\n
  • \r\n
  • \r\n
    {{singleUpdate.title}}
    \r\n
    {{singleUpdate.subTitle}}
    \r\n
  • \r\n
    \r\n
    \r\n\r\n \r\n \r\n \r\n
  • \r\n
    {{t('downloading-item', {item: download.entityType | sentenceCase})}}
    \r\n
    {{download.subTitle}}
    \r\n
    \r\n
    {{download.progress}}%
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
  • \r\n
    \r\n
    \r\n\r\n\r\n \r\n \r\n \r\n
  • \r\n
    \r\n
    {{error.title}}
    \r\n
    {{t('more-info')}}
    \r\n
    \r\n \r\n
  • \r\n
    \r\n
    \r\n\r\n \r\n \r\n \r\n
  • \r\n
    \r\n
    {{info.title}}
    \r\n
    {{t('more-info')}}
    \r\n
    \r\n \r\n
  • \r\n
    \r\n
    \r\n\r\n \r\n \r\n
  • 1\">\r\n
    {{t('users-online-count', {num: onlineUsers.length})}}
    \r\n
  • \r\n
  • {{t('active-events-title')}} {{activeEvents}}
  • \r\n
    \r\n\r\n \r\n
  • {{t('no-data')}}
  • \r\n
    \r\n\r\n
\r\n
\r\n
\r\n
\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n DestroyRef,\r\n inject,\r\n Input,\r\n OnDestroy,\r\n OnInit\r\n} from '@angular/core';\r\nimport { NgbModal, NgbModalRef, NgbPopover } from '@ng-bootstrap/ng-bootstrap';\r\nimport { BehaviorSubject, Observable, of } from 'rxjs';\r\nimport { map, shareReplay } from 'rxjs/operators';\r\nimport { ConfirmConfig } from 'src/app/shared/confirm-dialog/_models/confirm-config';\r\nimport { ConfirmService } from 'src/app/shared/confirm.service';\r\nimport { UpdateNotificationModalComponent } from 'src/app/shared/update-notification/update-notification-modal.component';\r\nimport { DownloadService } from 'src/app/shared/_services/download.service';\r\nimport { ErrorEvent } from 'src/app/_models/events/error-event';\r\nimport { InfoEvent } from 'src/app/_models/events/info-event';\r\nimport { NotificationProgressEvent } from 'src/app/_models/events/notification-progress-event';\r\nimport { UpdateVersionEvent } from 'src/app/_models/events/update-version-event';\r\nimport { User } from 'src/app/_models/user';\r\nimport { AccountService } from 'src/app/_services/account.service';\r\nimport { EVENTS, Message, MessageHubService } from 'src/app/_services/message-hub.service';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport { SentenceCasePipe } from '../../../pipe/sentence-case.pipe';\r\nimport { CircularLoaderComponent } from '../../../shared/circular-loader/circular-loader.component';\r\nimport { NgIf, NgClass, NgStyle, NgFor, AsyncPipe } from '@angular/common';\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\n\r\n@Component({\r\n selector: 'app-nav-events-toggle',\r\n templateUrl: './events-widget.component.html',\r\n styleUrls: ['./events-widget.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [NgIf, NgClass, NgbPopover, NgStyle, CircularLoaderComponent, NgFor, AsyncPipe, SentenceCasePipe, TranslocoDirective]\r\n})\r\nexport class EventsWidgetComponent implements OnInit, OnDestroy {\r\n @Input({required: true}) user!: User;\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n isAdmin$: Observable = of(false);\r\n\r\n /**\r\n * Progress events (Event Type: 'started', 'ended', 'updated' that have progress property)\r\n */\r\n progressEventsSource = new BehaviorSubject([]);\r\n progressEvents$ = this.progressEventsSource.asObservable();\r\n\r\n singleUpdateSource = new BehaviorSubject([]);\r\n singleUpdates$ = this.singleUpdateSource.asObservable();\r\n\r\n errorSource = new BehaviorSubject([]);\r\n errors$ = this.errorSource.asObservable();\r\n\r\n infoSource = new BehaviorSubject([]);\r\n infos$ = this.infoSource.asObservable();\r\n\r\n private updateNotificationModalRef: NgbModalRef | null = null;\r\n\r\n activeEvents: number = 0;\r\n\r\n debugMode: boolean = false;\r\n\r\n\r\n get EVENTS() {\r\n return EVENTS;\r\n }\r\n\r\n constructor(public messageHub: MessageHubService, private modalService: NgbModal,\r\n private accountService: AccountService, private confirmService: ConfirmService,\r\n private readonly cdRef: ChangeDetectorRef, public downloadService: DownloadService) {\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.progressEventsSource.complete();\r\n this.singleUpdateSource.complete();\r\n this.errorSource.complete();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.messageHub.messages$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event: Message) => {\r\n if (event.event === EVENTS.NotificationProgress) {\r\n this.processNotificationProgressEvent(event);\r\n } else if (event.event === EVENTS.Error) {\r\n const values = this.errorSource.getValue();\r\n values.push(event.payload as ErrorEvent);\r\n this.errorSource.next(values);\r\n this.activeEvents += 1;\r\n this.cdRef.markForCheck();\r\n } else if (event.event === EVENTS.Info) {\r\n const values = this.infoSource.getValue();\r\n values.push(event.payload as InfoEvent);\r\n this.infoSource.next(values);\r\n this.activeEvents += 1;\r\n this.cdRef.markForCheck();\r\n } else if (event.event === EVENTS.UpdateAvailable) {\r\n this.handleUpdateAvailableClick(event.payload);\r\n }\r\n });\r\n\r\n this.isAdmin$ = this.accountService.currentUser$.pipe(\r\n takeUntilDestroyed(this.destroyRef),\r\n map(user => (user && this.accountService.hasAdminRole(user)) || false),\r\n shareReplay()\r\n );\r\n }\r\n\r\n processNotificationProgressEvent(event: Message) {\r\n const message = event.payload as NotificationProgressEvent;\r\n let data;\r\n switch (event.payload.eventType) {\r\n case 'single':\r\n const values = this.singleUpdateSource.getValue();\r\n values.push(message);\r\n this.singleUpdateSource.next(values);\r\n this.activeEvents += 1;\r\n this.cdRef.markForCheck();\r\n break;\r\n case 'started':\r\n // Sometimes we can receive 2 started on long running scans, so better to just treat as a merge then.\r\n data = this.mergeOrUpdate(this.progressEventsSource.getValue(), message);\r\n this.progressEventsSource.next(data);\r\n break;\r\n case 'updated':\r\n data = this.mergeOrUpdate(this.progressEventsSource.getValue(), message);\r\n this.progressEventsSource.next(data);\r\n break;\r\n case 'ended':\r\n data = this.progressEventsSource.getValue();\r\n data = data.filter(m => m.name !== message.name);\r\n this.progressEventsSource.next(data);\r\n this.activeEvents = Math.max(this.activeEvents - 1, 0);\r\n this.cdRef.markForCheck();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n private mergeOrUpdate(data: NotificationProgressEvent[], message: NotificationProgressEvent) {\r\n const index = data.findIndex(m => m.name === message.name);\r\n // Sometimes we can receive 2 started on long running scans, so better to just treat as a merge then.\r\n if (index < 0) {\r\n data.push(message);\r\n this.activeEvents += 1;\r\n this.cdRef.markForCheck();\r\n } else {\r\n data[index] = message;\r\n }\r\n return data;\r\n }\r\n\r\n\r\n handleUpdateAvailableClick(message: NotificationProgressEvent | UpdateVersionEvent) {\r\n if (this.updateNotificationModalRef != null) { return; }\r\n this.updateNotificationModalRef = this.modalService.open(UpdateNotificationModalComponent, { scrollable: true, size: 'lg' });\r\n if (message.hasOwnProperty('body')) {\r\n this.updateNotificationModalRef.componentInstance.updateData = (message as NotificationProgressEvent).body as UpdateVersionEvent;\r\n } else {\r\n this.updateNotificationModalRef.componentInstance.updateData = message as UpdateVersionEvent;\r\n }\r\n\r\n this.updateNotificationModalRef.closed.subscribe(() => {\r\n this.updateNotificationModalRef = null;\r\n });\r\n this.updateNotificationModalRef.dismissed.subscribe(() => {\r\n this.updateNotificationModalRef = null;\r\n });\r\n }\r\n\r\n async seeMore(event: ErrorEvent | InfoEvent) {\r\n const config = new ConfirmConfig();\r\n if (event.name === EVENTS.Error) {\r\n config.buttons = [\r\n {text: 'Ok', type: 'secondary'},\r\n {text: 'Dismiss', type: 'primary'}\r\n ];\r\n } else {\r\n config.buttons = [\r\n {text: 'Ok', type: 'primary'},\r\n ];\r\n }\r\n config.header = event.title;\r\n config.content = event.subTitle;\r\n const result = await this.confirmService.alert(event.subTitle || event.title, config);\r\n if (result) {\r\n this.removeErrorOrInfo(event);\r\n }\r\n }\r\n\r\n clearAllErrorOrInfos() {\r\n const infoCount = this.infoSource.getValue().length;\r\n const errorCount = this.errorSource.getValue().length;\r\n this.infoSource.next([]);\r\n this.errorSource.next([]);\r\n this.activeEvents -= Math.max(infoCount + errorCount, 0);\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n removeErrorOrInfo(messageEvent: ErrorEvent | InfoEvent, event?: MouseEvent) {\r\n if (event) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n let data = [];\r\n if (messageEvent.name === EVENTS.Info) {\r\n data = this.infoSource.getValue();\r\n data = data.filter(m => m !== messageEvent);\r\n this.infoSource.next(data);\r\n } else {\r\n data = this.errorSource.getValue();\r\n data = data.filter(m => m !== messageEvent);\r\n this.errorSource.next(data);\r\n }\r\n this.activeEvents = Math.max(this.activeEvents - 1, 0);\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n prettyPrintProgress(progress: number) {\r\n return Math.trunc(progress * 100);\r\n }\r\n}\r\n","\r\n  \r\n \r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { MangaFormat } from 'src/app/_models/manga-format';\r\nimport {MangaFormatIconPipe} from \"../../pipe/manga-format-icon.pipe\";\r\nimport {MangaFormatPipe} from \"../../pipe/manga-format.pipe\";\r\nimport {CommonModule} from \"@angular/common\";\r\n\r\n@Component({\r\n selector: 'app-series-format',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MangaFormatIconPipe,\r\n MangaFormatPipe\r\n ],\r\n templateUrl: './series-format.component.html',\r\n styleUrls: ['./series-format.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SeriesFormatComponent {\r\n\r\n @Input() format: MangaFormat = MangaFormat.UNKNOWN;\r\n\r\n get MangaFormat(): typeof MangaFormat {\r\n return MangaFormat;\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n \r\n
\r\n {{t('loading')}}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
    \r\n 0\">\r\n
  • Series
  • \r\n
      \r\n
    • \r\n \r\n
    • \r\n
    \r\n
    \r\n\r\n 0\">\r\n
  • {{t('collections')}}
  • \r\n
      \r\n
    • \r\n \r\n
    • \r\n
    \r\n
    \r\n\r\n 0\">\r\n
  • {{t('reading-lists')}}
  • \r\n
      \r\n
    • \r\n \r\n
    • \r\n
    \r\n
    \r\n\r\n 0\">\r\n
  • {{t('libraries')}}
  • \r\n
      \r\n
    • \r\n \r\n
    • \r\n
    \r\n
    \r\n\r\n 0\">\r\n
  • {{t('genres')}}
  • \r\n
      \r\n
    • \r\n \r\n
    • \r\n
    \r\n
    \r\n\r\n 0\">\r\n
  • {{t('tags')}}
  • \r\n
      \r\n
    • \r\n \r\n
    • \r\n
    \r\n
    \r\n\r\n 0\">\r\n
  • {{t('people')}}
  • \r\n
      \r\n
    • \r\n \r\n
    • \r\n
    \r\n
    \r\n\r\n 0\">\r\n
  • {{t('chapters')}}
  • \r\n
      \r\n
    • \r\n \r\n
    • \r\n
    \r\n
    \r\n\r\n 0\">\r\n
  • {{t('files')}}
  • \r\n
      \r\n
    • \r\n \r\n
    • \r\n
    \r\n
    \r\n\r\n 0\">\r\n
      \r\n
    • \r\n \r\n
    • \r\n
    \r\n\r\n
    \r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild, DestroyRef,\r\n ElementRef,\r\n EventEmitter,\r\n HostListener,\r\n inject,\r\n Input,\r\n OnInit,\r\n Output,\r\n TemplateRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { debounceTime } from 'rxjs/operators';\r\nimport { KEY_CODES } from 'src/app/shared/_services/utility.service';\r\nimport { SearchResultGroup } from 'src/app/_models/search/search-result-group';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport { NgClass, NgIf, NgFor, NgTemplateOutlet } from '@angular/common';\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\n\r\n@Component({\r\n selector: 'app-grouped-typeahead',\r\n templateUrl: './grouped-typeahead.component.html',\r\n styleUrls: ['./grouped-typeahead.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [ReactiveFormsModule, NgClass, NgIf, NgFor, NgTemplateOutlet, TranslocoDirective]\r\n})\r\nexport class GroupedTypeaheadComponent implements OnInit {\r\n /**\r\n * Unique id to tie with a label element\r\n */\r\n @Input() id: string = 'grouped-typeahead';\r\n /**\r\n * Minimum number of characters in input to trigger a search\r\n */\r\n @Input() minQueryLength: number = 0;\r\n /**\r\n * Initial value of the search model\r\n */\r\n @Input() initialValue: string = '';\r\n @Input() groupedData: SearchResultGroup = new SearchResultGroup();\r\n /**\r\n * Placeholder for the input\r\n */\r\n @Input() placeholder: string = '';\r\n /**\r\n * Number of milliseconds after typing before triggering inputChanged for data fetching\r\n */\r\n @Input() debounceTime: number = 200;\r\n /**\r\n * Emits when the input changes from user interaction\r\n */\r\n @Output() inputChanged: EventEmitter = new EventEmitter();\r\n /**\r\n * Emits when something is clicked/selected\r\n */\r\n @Output() selected: EventEmitter = new EventEmitter();\r\n /**\r\n * Emits an event when the field is cleared\r\n */\r\n @Output() clearField: EventEmitter = new EventEmitter();\r\n /**\r\n * Emits when a change in the search field looses/gains focus\r\n */\r\n @Output() focusChanged: EventEmitter = new EventEmitter();\r\n\r\n @ViewChild('input') inputElem!: ElementRef;\r\n @ContentChild('itemTemplate') itemTemplate!: TemplateRef;\r\n @ContentChild('seriesTemplate') seriesTemplate: TemplateRef | undefined;\r\n @ContentChild('collectionTemplate') collectionTemplate: TemplateRef | undefined;\r\n @ContentChild('tagTemplate') tagTemplate: TemplateRef | undefined;\r\n @ContentChild('personTemplate') personTemplate: TemplateRef | undefined;\r\n @ContentChild('genreTemplate') genreTemplate!: TemplateRef;\r\n @ContentChild('noResultsTemplate') noResultsTemplate!: TemplateRef;\r\n @ContentChild('libraryTemplate') libraryTemplate!: TemplateRef;\r\n @ContentChild('readingListTemplate') readingListTemplate!: TemplateRef;\r\n @ContentChild('fileTemplate') fileTemplate!: TemplateRef;\r\n @ContentChild('chapterTemplate') chapterTemplate!: TemplateRef;\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n\r\n hasFocus: boolean = false;\r\n isLoading: boolean = false;\r\n typeaheadForm: FormGroup = new FormGroup({});\r\n\r\n prevSearchTerm: string = '';\r\n\r\n get searchTerm() {\r\n return this.typeaheadForm.get('typeahead')?.value || '';\r\n }\r\n\r\n get hasData() {\r\n return !(this.noResultsTemplate != undefined && !this.groupedData.persons.length && !this.groupedData.collections.length\r\n && !this.groupedData.series.length && !this.groupedData.persons.length && !this.groupedData.tags.length && !this.groupedData.genres.length && !this.groupedData.libraries.length\r\n && !this.groupedData.files.length && !this.groupedData.chapters.length);\r\n }\r\n\r\n\r\n constructor(private readonly cdRef: ChangeDetectorRef) { }\r\n\r\n @HostListener('window:click', ['$event'])\r\n handleDocumentClick(event: any) {\r\n this.close();\r\n\r\n }\r\n\r\n @HostListener('window:keydown', ['$event'])\r\n handleKeyPress(event: KeyboardEvent) {\r\n if (!this.hasFocus) { return; }\r\n\r\n switch(event.key) {\r\n case KEY_CODES.ESC_KEY:\r\n this.close();\r\n event.stopPropagation();\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.typeaheadForm.addControl('typeahead', new FormControl(this.initialValue, []));\r\n this.cdRef.markForCheck();\r\n\r\n this.typeaheadForm.valueChanges.pipe(debounceTime(this.debounceTime), takeUntilDestroyed(this.destroyRef)).subscribe(change => {\r\n const value = this.typeaheadForm.get('typeahead')?.value;\r\n\r\n if (value != undefined && value != '' && !this.hasFocus) {\r\n this.hasFocus = true;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n if (value != undefined && value.length >= this.minQueryLength) {\r\n\r\n if (this.prevSearchTerm === value) return;\r\n this.inputChanged.emit(value);\r\n this.prevSearchTerm = value;\r\n this.cdRef.markForCheck();\r\n }\r\n });\r\n }\r\n\r\n onInputFocus(event: any) {\r\n if (event) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n\r\n this.openDropdown();\r\n return this.hasFocus;\r\n }\r\n\r\n openDropdown() {\r\n setTimeout(() => {\r\n const model = this.typeaheadForm.get('typeahead');\r\n if (model) {\r\n model.setValue(model.value);\r\n }\r\n });\r\n }\r\n\r\n handleResultlick(item: any) {\r\n this.selected.emit(item);\r\n }\r\n\r\n resetField() {\r\n this.prevSearchTerm = '';\r\n this.typeaheadForm.get('typeahead')?.setValue(this.initialValue);\r\n this.clearField.emit();\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n\r\n close(event?: FocusEvent) {\r\n if (event) {\r\n // If the user is tabbing out of the input field, check if there are results first before closing\r\n if (this.hasData) {\r\n return;\r\n }\r\n }\r\n if (this.searchTerm === '') {\r\n this.resetField();\r\n }\r\n this.hasFocus = false;\r\n this.cdRef.markForCheck();\r\n this.focusChanged.emit(this.hasFocus);\r\n }\r\n\r\n open(event?: FocusEvent) {\r\n this.hasFocus = true;\r\n this.focusChanged.emit(this.hasFocus);\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n public clear() {\r\n this.prevSearchTerm = '';\r\n this.typeaheadForm.get('typeahead')?.setValue(this.initialValue);\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n}\r\n","\r\n \r\n\r\n\r\n","import {AsyncPipe, DOCUMENT, NgIf, NgOptimizedImage} from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n inject,\r\n Inject,\r\n OnInit,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {NavigationEnd, Router, RouterLink, RouterLinkActive} from '@angular/router';\r\nimport {fromEvent} from 'rxjs';\r\nimport {debounceTime, distinctUntilChanged, filter, tap} from 'rxjs/operators';\r\nimport {Chapter} from 'src/app/_models/chapter';\r\nimport {CollectionTag} from 'src/app/_models/collection-tag';\r\nimport {Library} from 'src/app/_models/library';\r\nimport {MangaFile} from 'src/app/_models/manga-file';\r\nimport {PersonRole} from 'src/app/_models/metadata/person';\r\nimport {ReadingList} from 'src/app/_models/reading-list';\r\nimport {SearchResult} from 'src/app/_models/search/search-result';\r\nimport {SearchResultGroup} from 'src/app/_models/search/search-result-group';\r\nimport {AccountService} from 'src/app/_services/account.service';\r\nimport {ImageService} from 'src/app/_services/image.service';\r\nimport {NavService} from 'src/app/_services/nav.service';\r\nimport {ScrollService} from 'src/app/_services/scroll.service';\r\nimport {SearchService} from 'src/app/_services/search.service';\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\nimport {SentenceCasePipe} from '../../../pipe/sentence-case.pipe';\r\nimport {PersonRolePipe} from '../../../pipe/person-role.pipe';\r\nimport {NgbDropdown, NgbDropdownItem, NgbDropdownMenu, NgbDropdownToggle} from '@ng-bootstrap/ng-bootstrap';\r\nimport {EventsWidgetComponent} from '../events-widget/events-widget.component';\r\nimport {SeriesFormatComponent} from '../../../shared/series-format/series-format.component';\r\nimport {ImageComponent} from '../../../shared/image/image.component';\r\nimport {GroupedTypeaheadComponent} from '../grouped-typeahead/grouped-typeahead.component';\r\nimport {TranslocoDirective} from \"@ngneat/transloco\";\r\nimport {FilterUtilitiesService} from \"../../../shared/_services/filter-utilities.service\";\r\nimport {FilterStatement} from \"../../../_models/metadata/v2/filter-statement\";\r\nimport {FilterField} from \"../../../_models/metadata/v2/filter-field\";\r\nimport {FilterComparison} from \"../../../_models/metadata/v2/filter-comparison\";\r\n\r\n@Component({\r\n selector: 'app-nav-header',\r\n templateUrl: './nav-header.component.html',\r\n styleUrls: ['./nav-header.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [NgIf, RouterLink, RouterLinkActive, NgOptimizedImage, GroupedTypeaheadComponent, ImageComponent, SeriesFormatComponent, EventsWidgetComponent, NgbDropdown, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, AsyncPipe, PersonRolePipe, SentenceCasePipe, TranslocoDirective]\r\n})\r\nexport class NavHeaderComponent implements OnInit {\r\n\r\n @ViewChild('search') searchViewRef!: any;\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n isLoading = false;\r\n debounceTime = 300;\r\n searchResults: SearchResultGroup = new SearchResultGroup();\r\n searchTerm = '';\r\n\r\n\r\n backToTopNeeded = false;\r\n searchFocused: boolean = false;\r\n scrollElem: HTMLElement;\r\n protected readonly FilterField = FilterField;\r\n\r\n constructor(public accountService: AccountService, private router: Router, public navService: NavService,\r\n public imageService: ImageService, @Inject(DOCUMENT) private document: Document,\r\n private scrollService: ScrollService, private searchService: SearchService, private readonly cdRef: ChangeDetectorRef,\r\n private filterUtilityService: FilterUtilitiesService) {\r\n this.scrollElem = this.document.body;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.scrollService.scrollContainer$.pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef), tap((scrollContainer) => {\r\n if (scrollContainer === 'body' || scrollContainer === undefined) {\r\n this.scrollElem = this.document.body;\r\n } else {\r\n const elem = scrollContainer as ElementRef;\r\n this.scrollElem = elem.nativeElement;\r\n }\r\n fromEvent(this.scrollElem, 'scroll').pipe(debounceTime(20)).subscribe(() => this.checkBackToTopNeeded(this.scrollElem));\r\n })).subscribe();\r\n\r\n // Sometimes the top event emitter can be slow, so let's also check when a navigation occurs and recalculate\r\n this.router.events\r\n .pipe(filter(event => event instanceof NavigationEnd))\r\n .subscribe(() => {\r\n this.checkBackToTopNeeded(this.scrollElem);\r\n });\r\n }\r\n\r\n checkBackToTopNeeded(elem: HTMLElement) {\r\n const offset = elem.scrollTop || 0;\r\n if (offset > 100) {\r\n this.backToTopNeeded = true;\r\n } else if (offset < 40) {\r\n this.backToTopNeeded = false;\r\n }\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n logout() {\r\n this.accountService.logout();\r\n this.navService.hideNavBar();\r\n this.navService.hideSideNav();\r\n this.router.navigateByUrl('/login');\r\n }\r\n\r\n moveFocus() {\r\n this.document.getElementById('content')?.focus();\r\n }\r\n\r\n\r\n\r\n onChangeSearch(val: string) {\r\n this.isLoading = true;\r\n this.searchTerm = val.trim();\r\n this.cdRef.markForCheck();\r\n\r\n this.searchService.search(val.trim()).pipe(takeUntilDestroyed(this.destroyRef)).subscribe(results => {\r\n this.searchResults = results;\r\n this.isLoading = false;\r\n this.cdRef.markForCheck();\r\n }, () => {\r\n this.searchResults.reset();\r\n this.isLoading = false;\r\n this.searchTerm = '';\r\n this.cdRef.markForCheck();\r\n });\r\n }\r\n\r\n goTo(statement: FilterStatement) {\r\n let params: any = {};\r\n const filter = this.filterUtilityService.createSeriesV2Filter();\r\n filter.statements = [statement];\r\n params['page'] = 1;\r\n this.clearSearch();\r\n this.filterUtilityService.applyFilterWithParams(['all-series'], filter, params);\r\n }\r\n\r\n goToOther(field: FilterField, value: string) {\r\n this.goTo({field, comparison: FilterComparison.Equal, value});\r\n }\r\n\r\n goToPerson(role: PersonRole, filter: any) {\r\n this.clearSearch();\r\n switch(role) {\r\n case PersonRole.Writer:\r\n this.goTo({field: FilterField.Writers, comparison: FilterComparison.Equal, value: filter});\r\n break;\r\n case PersonRole.Artist:\r\n this.goTo({field: FilterField.CoverArtist, comparison: FilterComparison.Equal, value: filter}); // TODO: What is this supposed to be?\r\n break;\r\n case PersonRole.Character:\r\n this.goTo({field: FilterField.Characters, comparison: FilterComparison.Equal, value: filter});\r\n break;\r\n case PersonRole.Colorist:\r\n this.goTo({field: FilterField.Colorist, comparison: FilterComparison.Equal, value: filter});\r\n break;\r\n case PersonRole.Editor:\r\n this.goTo({field: FilterField.Editor, comparison: FilterComparison.Equal, value: filter});\r\n break;\r\n case PersonRole.Inker:\r\n this.goTo({field: FilterField.Inker, comparison: FilterComparison.Equal, value: filter});\r\n break;\r\n case PersonRole.CoverArtist:\r\n this.goTo({field: FilterField.CoverArtist, comparison: FilterComparison.Equal, value: filter});\r\n break;\r\n case PersonRole.Letterer:\r\n this.goTo({field: FilterField.Letterer, comparison: FilterComparison.Equal, value: filter});\r\n break;\r\n case PersonRole.Penciller:\r\n this.goTo({field: FilterField.Penciller, comparison: FilterComparison.Equal, value: filter});\r\n break;\r\n case PersonRole.Publisher:\r\n this.goTo({field: FilterField.Publisher, comparison: FilterComparison.Equal, value: filter});\r\n break;\r\n case PersonRole.Translator:\r\n this.goTo({field: FilterField.Translators, comparison: FilterComparison.Equal, value: filter});\r\n break;\r\n }\r\n }\r\n\r\n clearSearch() {\r\n this.searchViewRef.clear();\r\n this.searchTerm = '';\r\n this.searchResults = new SearchResultGroup();\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n clickSeriesSearchResult(item: SearchResult) {\r\n this.clearSearch();\r\n const libraryId = item.libraryId;\r\n const seriesId = item.seriesId;\r\n this.router.navigate(['library', libraryId, 'series', seriesId]);\r\n }\r\n\r\n clickFileSearchResult(item: MangaFile) {\r\n this.clearSearch();\r\n this.searchService.getSeriesForMangaFile(item.id).subscribe(series => {\r\n if (series !== undefined && series !== null) {\r\n this.router.navigate(['library', series.libraryId, 'series', series.id]);\r\n }\r\n });\r\n }\r\n\r\n clickChapterSearchResult(item: Chapter) {\r\n this.clearSearch();\r\n this.searchService.getSeriesForChapter(item.id).subscribe(series => {\r\n if (series !== undefined && series !== null) {\r\n this.router.navigate(['library', series.libraryId, 'series', series.id]);\r\n }\r\n });\r\n }\r\n\r\n clickLibraryResult(item: Library) {\r\n this.clearSearch();\r\n this.router.navigate(['library', item.id]);\r\n }\r\n\r\n clickCollectionSearchResult(item: CollectionTag) {\r\n this.clearSearch();\r\n this.router.navigate(['collections', item.id]);\r\n }\r\n\r\n clickReadingListSearchResult(item: ReadingList) {\r\n this.clearSearch();\r\n this.router.navigate(['lists', item.id]);\r\n }\r\n\r\n\r\n scrollToTop() {\r\n this.scrollService.scrollTo(0, this.scrollElem);\r\n }\r\n\r\n focusUpdate(searchFocused: boolean) {\r\n this.searchFocused = searchFocused;\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n hideSideNav() {\r\n this.navService.toggleSideNav();\r\n }\r\n\r\n\r\n}\r\n","
\r\n \r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n","import {Component, DestroyRef, HostListener, inject, Inject, OnInit} from '@angular/core';\r\nimport { NavigationStart, Router, RouterOutlet } from '@angular/router';\r\nimport {map, shareReplay, take} from 'rxjs/operators';\r\nimport { AccountService } from './_services/account.service';\r\nimport { LibraryService } from './_services/library.service';\r\nimport { NavService } from './_services/nav.service';\r\nimport { filter } from 'rxjs/operators';\r\nimport { NgbModal, NgbRatingConfig } from '@ng-bootstrap/ng-bootstrap';\r\nimport { DOCUMENT, NgClass, NgIf, AsyncPipe } from '@angular/common';\r\nimport { Observable } from 'rxjs';\r\nimport {ThemeService} from \"./_services/theme.service\";\r\nimport { SideNavComponent } from './sidenav/_components/side-nav/side-nav.component';\r\nimport {NavHeaderComponent} from \"./nav/_components/nav-header/nav-header.component\";\r\nimport {takeUntilDestroyed} from \"@angular/core/rxjs-interop\";\r\n\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.scss'],\r\n standalone: true,\r\n imports: [NgClass, NgIf, SideNavComponent, RouterOutlet, AsyncPipe, NavHeaderComponent]\r\n})\r\nexport class AppComponent implements OnInit {\r\n\r\n transitionState$!: Observable;\r\n\r\n destroyRef = inject(DestroyRef);\r\n\r\n constructor(private accountService: AccountService, public navService: NavService,\r\n private libraryService: LibraryService,\r\n private router: Router, private ngbModal: NgbModal, ratingConfig: NgbRatingConfig,\r\n @Inject(DOCUMENT) private document: Document, private themeService: ThemeService) {\r\n\r\n // Setup default rating config\r\n ratingConfig.max = 5;\r\n ratingConfig.resettable = true;\r\n\r\n // Close any open modals when a route change occurs\r\n router.events\r\n .pipe(filter(event => event instanceof NavigationStart), takeUntilDestroyed(this.destroyRef))\r\n .subscribe((event) => {\r\n if (this.ngbModal.hasOpenModals()) {\r\n this.ngbModal.dismissAll();\r\n }\r\n });\r\n\r\n this.transitionState$ = this.accountService.currentUser$.pipe(map((user) => {\r\n if (!user) return false;\r\n return user.preferences.noTransitions;\r\n }), takeUntilDestroyed(this.destroyRef));\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n @HostListener('window:orientationchange', ['$event'])\r\n setDocHeight() {\r\n // Sets a CSS variable for the actual device viewport height. Needed for mobile dev.\r\n const vh = window.innerHeight * 0.01;\r\n this.document.documentElement.style.setProperty('--vh', `${vh}px`);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.setDocHeight();\r\n this.setCurrentUser();\r\n }\r\n\r\n setCurrentUser() {\r\n const user = this.accountService.getUserFromLocalStorage();\r\n this.accountService.setCurrentUser(user);\r\n\r\n if (user) {\r\n // Bootstrap anything that's needed\r\n this.themeService.getThemes().subscribe();\r\n this.libraryService.getLibraryNames().pipe(take(1), shareReplay()).subscribe();\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule, PreloadAllModules } from '@angular/router';\r\nimport { AuthGuard } from './_guards/auth.guard';\r\nimport { LibraryAccessGuard } from './_guards/library-access.guard';\r\nimport { AdminGuard } from './_guards/admin.guard';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: 'admin',\r\n canActivate: [AdminGuard],\r\n loadChildren: () => import('./admin/admin.module').then(m => m.AdminModule)\r\n },\r\n {\r\n path: 'collections',\r\n canActivate: [AuthGuard],\r\n loadChildren: () => import('./collections/collections.module').then(m => m.CollectionsModule)\r\n },\r\n {\r\n path: 'preferences',\r\n canActivate: [AuthGuard],\r\n loadChildren: () => import('./user-settings/user-settings.module').then(m => m.UserSettingsModule)\r\n },\r\n {\r\n path: 'lists',\r\n canActivate: [AuthGuard],\r\n loadChildren: () => import('./reading-list/reading-list.module').then(m => m.ReadingListModule)\r\n },\r\n {\r\n path: 'registration',\r\n loadChildren: () => import('../app/registration/registration.module').then(m => m.RegistrationModule)\r\n },\r\n {\r\n path: 'announcements',\r\n loadChildren: () => import('../app/announcements/announcements.module').then(m => m.AnnouncementsModule)\r\n },\r\n {\r\n path: 'bookmarks',\r\n loadChildren: () => import('../app/bookmark/bookmark.module').then(m => m.BookmarkModule)\r\n },\r\n {\r\n path: 'all-series',\r\n loadChildren: () => import('../app/all-series/all-series.module').then(m => m.AllSeriesModule)\r\n },\r\n {\r\n path: 'libraries',\r\n loadChildren: () => import('./dashboard/dashboard.module').then(m => m.DashboardModule)\r\n },\r\n {\r\n path: 'libraries',\r\n loadChildren: () => import('./dashboard/dashboard.module').then(m => m.DashboardModule)\r\n },\r\n {\r\n path: 'want-to-read',\r\n loadChildren: () => import('../app/want-to-read/want-to-read.module').then(m => m.WantToReadModule)\r\n },\r\n {\r\n path: 'library',\r\n runGuardsAndResolvers: 'always',\r\n canActivate: [AuthGuard, LibraryAccessGuard],\r\n children: [\r\n {\r\n path: ':libraryId',\r\n pathMatch: 'full',\r\n loadChildren: () => import('../app/library-detail/library-detail.module').then(m => m.LibraryDetailModule)\r\n },\r\n {\r\n path: ':libraryId/series/:seriesId',\r\n pathMatch: 'full',\r\n loadChildren: () => import('../app/series-detail/series-detail.module').then(m => m.SeriesDetailModule)\r\n },\r\n {\r\n path: ':libraryId/series/:seriesId/manga',\r\n loadChildren: () => import('../app/manga-reader/manga-reader.module').then(m => m.MangaReaderModule)\r\n },\r\n {\r\n path: ':libraryId/series/:seriesId/book',\r\n loadChildren: () => import('../app/book-reader/book-reader.module').then(m => m.BookReaderModule)\r\n },\r\n {\r\n path: ':libraryId/series/:seriesId/pdf',\r\n loadChildren: () => import('../app/pdf-reader/pdf-reader.module').then(m => m.PdfReaderModule)\r\n },\r\n ]\r\n },\r\n {path: 'login', loadChildren: () => import('../app/registration/registration.module').then(m => m.RegistrationModule)},\r\n {path: '**', pathMatch: 'full', redirectTo: 'libraries'},\r\n {path: '**', pathMatch: 'prefix', redirectTo: 'libraries'},\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes, {scrollPositionRestoration: 'enabled', preloadingStrategy: PreloadAllModules})],\r\n exports: [RouterModule]\r\n})\r\nexport class AppRoutingModule { }\r\n","import {Injectable} from '@angular/core';\r\nimport {\r\n HttpRequest,\r\n HttpHandler,\r\n HttpEvent,\r\n HttpInterceptor\r\n} from '@angular/common/http';\r\nimport {Observable, switchMap} from 'rxjs';\r\nimport { AccountService } from '../_services/account.service';\r\nimport { take } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class JwtInterceptor implements HttpInterceptor {\r\n\r\n constructor(private accountService: AccountService) {}\r\n\r\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\r\n return this.accountService.currentUser$.pipe(\r\n take(1),\r\n switchMap(user => {\r\n if (user) {\r\n request = request.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${user.token}`\r\n }\r\n });\r\n }\r\n return next.handle(request);\r\n }));\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\nimport {\r\n HttpRequest,\r\n HttpHandler,\r\n HttpEvent,\r\n HttpInterceptor\r\n} from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { Router } from '@angular/router';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { AccountService } from '../_services/account.service';\r\nimport {translate, TranslocoService} from \"@ngneat/transloco\";\r\n\r\n@Injectable()\r\nexport class ErrorInterceptor implements HttpInterceptor {\r\n constructor(private router: Router, private toastr: ToastrService,\r\n private accountService: AccountService,\r\n private translocoService: TranslocoService) {}\r\n\r\n\r\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\r\n return next.handle(request).pipe(\r\n catchError(error => {\r\n if (error === undefined || error === null) {\r\n return throwError(error);\r\n }\r\n\r\n switch (error.status) {\r\n case 400:\r\n this.handleValidationError(error);\r\n break;\r\n case 401:\r\n this.handleAuthError(error);\r\n break;\r\n case 404:\r\n this.handleNotFound(error);\r\n break;\r\n case 500:\r\n this.handleServerException(error);\r\n break;\r\n default:\r\n // Don't throw multiple Something unexpected went wrong\r\n let genericError = translate('errors.generic');\r\n if (this.toastr.previousToastMessage !== 'Something unexpected went wrong.' && this.toastr.previousToastMessage !== genericError) {\r\n this.toast(genericError);\r\n }\r\n break;\r\n }\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n\r\n private handleValidationError(error: any) {\r\n // This 400 can also be a bad request\r\n if (Array.isArray(error.error)) {\r\n const modalStateErrors: any[] = [];\r\n if (error.error.length > 0 && error.error[0].hasOwnProperty('message')) {\r\n if (error.error[0].details === null) {\r\n error.error.forEach((issue: {status: string, details: string, message: string}) => {\r\n modalStateErrors.push(issue.message);\r\n });\r\n } else {\r\n error.error.forEach((issue: {status: string, details: string, message: string}) => {\r\n modalStateErrors.push(issue.details);\r\n });\r\n }\r\n } else {\r\n error.error.forEach((issue: {code: string, description: string}) => {\r\n modalStateErrors.push(issue.description);\r\n });\r\n }\r\n throw modalStateErrors.flat();\r\n } else if (error.error.errors) {\r\n // Validation error\r\n const modalStateErrors = [];\r\n for (const key in error.error.errors) {\r\n if (error.error.errors[key]) {\r\n modalStateErrors.push(error.error.errors[key]);\r\n }\r\n }\r\n throw modalStateErrors.flat();\r\n } else {\r\n console.error('error:', error);\r\n if (error.statusText === 'Bad Request') {\r\n if (error.error instanceof Blob) {\r\n this.toast('errors.download', error.status);\r\n return;\r\n }\r\n this.toast(error.error, this.translocoService.translate('errors.error-code', {num: error.status}));\r\n } else {\r\n this.toast(error.statusText === 'OK' ? error.error : error.statusText, this.translocoService.translate('errors.error-code', {num: error.status}));\r\n }\r\n }\r\n }\r\n\r\n private handleNotFound(error: any) {\r\n this.toast('errors.not-found');\r\n }\r\n\r\n private handleServerException(error: any) {\r\n const err = error.error;\r\n if (err.hasOwnProperty('message') && err.message.trim() !== '') {\r\n if (err.message != 'User is not authenticated' && error.message !== 'errors.user-not-auth') {\r\n console.error('500 error: ', error);\r\n }\r\n this.toast(err.message);\r\n } else if (error.hasOwnProperty('message') && error.message.trim() !== '') {\r\n if (error.message !== 'User is not authenticated' && error.message !== 'errors.user-not-auth') {\r\n console.error('500 error: ', error);\r\n }\r\n }\r\n else {\r\n this.toast('errors.unknown-crit');\r\n console.error('500 error:', error);\r\n }\r\n }\r\n\r\n private handleAuthError(error: any) {\r\n // Special hack for register url, to not care about auth\r\n if (location.href.includes('/registration/confirm-email?token=')) {\r\n return;\r\n }\r\n // NOTE: Signin has error.error or error.statusText available.\r\n // if statement is due to http/2 spec issue: https://github.com/angular/angular/issues/23334\r\n this.accountService.logout();\r\n }\r\n\r\n // Assume the title is already translated\r\n private toast(message: string, title?: string) {\r\n if (message.startsWith('errors.')) {\r\n this.toastr.error(this.translocoService.translate(message), title);\r\n } else {\r\n this.toastr.error(message, title);\r\n }\r\n }\r\n\r\n}\r\n","import {Injectable} from \"@angular/core\";\r\nimport {HttpClient} from \"@angular/common/http\";\r\nimport {Translation, TranslocoLoader} from \"@ngneat/transloco\";\r\n\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class HttpLoader implements TranslocoLoader {\r\n constructor(private http: HttpClient) {}\r\n\r\n getTranslation(langPath: string) {\r\n const tokens = langPath.split('/');\r\n return this.http.get(`assets/langs/${tokens[tokens.length - 1]}.json`);\r\n }\r\n}\r\n","/// \r\nimport {\r\n APP_INITIALIZER, ApplicationConfig,\r\n importProvidersFrom,\r\n\r\n} from '@angular/core';\r\nimport { AppComponent } from './app/app.component';\r\nimport { NgCircleProgressModule } from 'ng-circle-progress';\r\nimport { ToastrModule } from 'ngx-toastr';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { AppRoutingModule } from './app/app-routing.module';\r\nimport { SAVER, getSaver } from './app/shared/_providers/saver.provider';\r\nimport { Title, BrowserModule, bootstrapApplication } from '@angular/platform-browser';\r\nimport { JwtInterceptor } from './app/_interceptors/jwt.interceptor';\r\nimport { ErrorInterceptor } from './app/_interceptors/error.interceptor';\r\nimport {HTTP_INTERCEPTORS, withInterceptorsFromDi, provideHttpClient} from '@angular/common/http';\r\nimport {\r\n provideTransloco, TranslocoConfig,\r\n TranslocoService\r\n} from \"@ngneat/transloco\";\r\nimport {environment} from \"./environments/environment\";\r\nimport {HttpLoader} from \"./httpLoader\";\r\nimport {\r\n provideTranslocoPersistLang,\r\n} from '@ngneat/transloco-persist-lang';\r\nimport {AccountService} from \"./app/_services/account.service\";\r\nimport {switchMap} from \"rxjs\";\r\nimport {provideTranslocoLocale} from \"@ngneat/transloco-locale\";\r\nimport {provideTranslocoPersistTranslations} from \"@ngneat/transloco-persist-translations\";\r\n\r\nconst disableAnimations = !('animate' in document.documentElement);\r\n\r\nexport function preloadUser(userService: AccountService, transloco: TranslocoService) {\r\n return function() {\r\n return userService.currentUser$.pipe(switchMap((user) => {\r\n if (user && user.preferences.locale) {\r\n transloco.setActiveLang(user.preferences.locale);\r\n return transloco.load(user.preferences.locale)\r\n }\r\n\r\n // If no user or locale is available, fallback to the default language ('en')\r\n const localStorageLocale = localStorage.getItem(AccountService.localeKey) || 'en';\r\n transloco.setActiveLang(localStorageLocale);\r\n return transloco.load(localStorageLocale);\r\n })).subscribe();\r\n };\r\n}\r\n\r\n\r\nexport const preLoad = {\r\n provide: APP_INITIALIZER,\r\n multi: true,\r\n useFactory: preloadUser,\r\n deps: [AccountService, TranslocoService]\r\n};\r\n\r\nfunction transformLanguageCodes(arr: Array) {\r\n const transformedArray: Array = [];\r\n\r\n arr.forEach(code => {\r\n // Add the original code\r\n transformedArray.push(code);\r\n\r\n // Check if the code has a hyphen (like uk-UA)\r\n if (code.includes('-')) {\r\n // Transform hyphen to underscore and add to the array\r\n const transformedCode = code.replace('-', '_');\r\n transformedArray.push(transformedCode);\r\n }\r\n });\r\n\r\n return transformedArray;\r\n}\r\n\r\n// All Languages Kavita will support: http://www.lingoes.net/en/translator/langcode.htm\r\nconst languageCodes = [\r\n 'af', 'af-ZA', 'ar', 'ar-AE', 'ar-BH', 'ar-DZ', 'ar-EG', 'ar-IQ', 'ar-JO', 'ar-KW',\r\n 'ar-LB', 'ar-LY', 'ar-MA', 'ar-OM', 'ar-QA', 'ar-SA', 'ar-SY', 'ar-TN', 'ar-YE',\r\n 'az', 'az-AZ', 'az-AZ', 'be', 'be-BY', 'bg', 'bg-BG', 'bs-BA', 'ca', 'ca-ES', 'cs',\r\n 'cs-CZ', 'cy', 'cy-GB', 'da', 'da-DK', 'de', 'de-AT', 'de-CH', 'de-DE', 'de-LI', 'de-LU',\r\n 'dv', 'dv-MV', 'el', 'el-GR', 'en', 'en-AU', 'en-BZ', 'en-CA', 'en-CB', 'en-GB', 'en-IE',\r\n 'en-JM', 'en-NZ', 'en-PH', 'en-TT', 'en-US', 'en-ZA', 'en-ZW', 'eo', 'es', 'es-AR', 'es-BO',\r\n 'es-CL', 'es-CO', 'es-CR', 'es-DO', 'es-EC', 'es-ES', 'es-ES', 'es-GT', 'es-HN', 'es-MX',\r\n 'es-NI', 'es-PA', 'es-PE', 'es-PR', 'es-PY', 'es-SV', 'es-UY', 'es-VE', 'et', 'et-EE',\r\n 'eu', 'eu-ES', 'fa', 'fa-IR', 'fi', 'fi-FI', 'fo', 'fo-FO', 'fr', 'fr-BE', 'fr-CA',\r\n 'fr-CH', 'fr-FR', 'fr-LU', 'fr-MC', 'gl', 'gl-ES', 'gu', 'gu-IN', 'he', 'he-IL', 'hi',\r\n 'hi-IN', 'hr', 'hr-BA', 'hr-HR', 'hu', 'hu-HU', 'hy', 'hy-AM', 'id', 'id-ID', 'is',\r\n 'is-IS', 'it', 'it-CH', 'it-IT', 'ja', 'ja-JP', 'ka', 'ka-GE', 'kk', 'kk-KZ', 'kn',\r\n 'kn-IN', 'ko', 'ko-KR', 'kok', 'kok-IN', 'ky', 'ky-KG', 'lt', 'lt-LT', 'lv', 'lv-LV',\r\n 'mi', 'mi-NZ', 'mk', 'mk-MK', 'mn', 'mn-MN', 'mr', 'mr-IN', 'ms', 'ms-BN', 'ms-MY',\r\n 'mt', 'mt-MT', 'nb', 'nb-NO', 'nl', 'nl-BE', 'nl-NL', 'nn-NO', 'ns', 'ns-ZA', 'pa',\r\n 'pa-IN', 'pl', 'pl-PL', 'ps', 'ps-AR', 'pt', 'pt-BR', 'pt-PT', 'qu', 'qu-BO', 'qu-EC',\r\n 'qu-PE', 'ro', 'ro-RO', 'ru', 'ru-RU', 'sa', 'sa-IN', 'se', 'se-FI', 'se-FI', 'se-FI',\r\n 'se-NO', 'se-NO', 'se-NO', 'se-SE', 'se-SE', 'se-SE', 'sk', 'sk-SK', 'sl', 'sl-SI',\r\n 'sq', 'sq-AL', 'sr-BA', 'sr-BA', 'sr-SP', 'sr-SP', 'sv', 'sv-FI', 'sv-SE', 'sw', 'sw-KE',\r\n 'syr', 'syr-SY', 'ta', 'ta-IN', 'te', 'te-IN', 'th', 'th-TH', 'tl', 'tl-PH', 'tn',\r\n 'tn-ZA', 'tr', 'tr-TR', 'tt', 'tt-RU', 'ts', 'uk', 'uk-UA', 'ur', 'ur-PK', 'uz',\r\n 'uz-UZ', 'uz-UZ', 'vi', 'vi-VN', 'xh', 'xh-ZA', 'zh', 'zh-CN', 'zh-HK', 'zh-MO',\r\n 'zh-SG', 'zh-TW', 'zu', 'zu-ZA', 'zh_Hans', 'zh_Hant',\r\n];\r\n\r\nconst translocoOptions = {\r\n config: {\r\n reRenderOnLangChange: true,\r\n availableLangs: transformLanguageCodes(languageCodes),\r\n prodMode: environment.production,\r\n defaultLang: 'en',\r\n fallbackLang: 'en',\r\n missingHandler: {\r\n useFallbackTranslation: true,\r\n allowEmpty: false,\r\n },\r\n } as TranslocoConfig\r\n};\r\n\r\nbootstrapApplication(AppComponent, {\r\n providers: [\r\n importProvidersFrom(BrowserModule,\r\n AppRoutingModule,\r\n BrowserAnimationsModule.withConfig({ disableAnimations }),\r\n ToastrModule.forRoot({\r\n positionClass: 'toast-bottom-right',\r\n preventDuplicates: true,\r\n timeOut: 6000,\r\n countDuplicates: true,\r\n autoDismiss: true\r\n }),\r\n NgCircleProgressModule.forRoot(),\r\n ),\r\n provideTransloco(translocoOptions),\r\n provideTranslocoLocale({\r\n defaultLocale: 'en'\r\n }),\r\n provideTranslocoPersistTranslations({\r\n loader: HttpLoader,\r\n storage: { useValue: localStorage },\r\n ttl: 604800\r\n }),\r\n provideTranslocoPersistLang({\r\n storage: {\r\n useValue: localStorage,\r\n },\r\n }),\r\n { provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true },\r\n { provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true },\r\n preLoad,\r\n Title,\r\n { provide: SAVER, useFactory: getSaver },\r\n provideHttpClient(withInterceptorsFromDi())\r\n ]\r\n} as ApplicationConfig)\r\n.catch(err => console.error(err));\r\n"],"x_google_ignoreList":[]}