From e479f17aa6f970c4690024c99133fb68dc3dd14a Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Sun, 22 Aug 2021 09:42:47 -0700 Subject: [PATCH] v0.4.4 polishing (#515) * Fixed a bad comparision between JsonElement and null. * Removed console.logs. Fixed bug in edit collection detail page where summary wouldn't update after editing it. * Removed a UI package that is no longer used. Fixed an issue where MarkVolumeAsUnread was using an old set of APIs and now uses the new, faster API. --- API/Controllers/ReaderController.cs | 2 +- Kavita.Common/Configuration.cs | 4 --- UI/Web/package-lock.json | 5 --- UI/Web/package.json | 1 - UI/Web/src/app/_services/action.service.ts | 2 +- .../src/app/_services/message-hub.service.ts | 2 +- .../cover-image-chooser.component.ts | 5 ++- .../collection-detail.component.ts | 31 +++++++++++-------- 8 files changed, 23 insertions(+), 29 deletions(-) diff --git a/API/Controllers/ReaderController.cs b/API/Controllers/ReaderController.cs index 85c0ae88f..6e37ae38a 100644 --- a/API/Controllers/ReaderController.cs +++ b/API/Controllers/ReaderController.cs @@ -217,7 +217,7 @@ namespace API.Controllers foreach (var chapter in chapters) { user.Progresses ??= new List(); - var userProgress = user.Progresses.SingleOrDefault(x => x.ChapterId == chapter.Id && x.AppUserId == user.Id); + var userProgress = user.Progresses.FirstOrDefault(x => x.ChapterId == chapter.Id && x.AppUserId == user.Id); if (userProgress == null) { diff --git a/Kavita.Common/Configuration.cs b/Kavita.Common/Configuration.cs index 3de83b62c..c2967c883 100644 --- a/Kavita.Common/Configuration.cs +++ b/Kavita.Common/Configuration.cs @@ -53,7 +53,6 @@ namespace Kavita.Common var json = File.ReadAllText(filePath); var jsonObj = JsonSerializer.Deserialize(json); const string key = "TokenKey"; - if (jsonObj == null) return string.Empty; if (jsonObj.TryGetProperty(key, out JsonElement tokenElement)) { @@ -136,7 +135,6 @@ namespace Kavita.Common var json = File.ReadAllText(filePath); var jsonObj = JsonSerializer.Deserialize(json); const string key = "Port"; - if (jsonObj == null) return defaultPort; if (jsonObj.TryGetProperty(key, out JsonElement tokenElement)) { @@ -176,7 +174,6 @@ namespace Kavita.Common { var json = File.ReadAllText(filePath); var jsonObj = JsonSerializer.Deserialize(json); - if (jsonObj == null) return string.Empty; if (jsonObj.TryGetProperty("Logging", out JsonElement tokenElement)) { @@ -212,7 +209,6 @@ namespace Kavita.Common var json = File.ReadAllText(filePath); var jsonObj = JsonSerializer.Deserialize(json); const string key = "Branch"; - if (jsonObj == null) return string.Empty; if (jsonObj.TryGetProperty(key, out JsonElement tokenElement)) { diff --git a/UI/Web/package-lock.json b/UI/Web/package-lock.json index a631b4e0f..9f8f3aafa 100644 --- a/UI/Web/package-lock.json +++ b/UI/Web/package-lock.json @@ -10673,11 +10673,6 @@ "tslib": "^2.0.0" } }, - "ng-sidebar": { - "version": "9.4.2", - "resolved": "https://registry.npmjs.org/ng-sidebar/-/ng-sidebar-9.4.2.tgz", - "integrity": "sha512-8KmEQYFhn4S5LDjRDXBhDfCgLchJEj+ClBdiTCAQoRjX8vdh85hmKIGN7aBsh1HNOXKN3rzDu0qmd90193/P3Q==" - }, "ngx-file-drop": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/ngx-file-drop/-/ngx-file-drop-11.1.0.tgz", diff --git a/UI/Web/package.json b/UI/Web/package.json index 53f8fd6b6..42caf67ec 100644 --- a/UI/Web/package.json +++ b/UI/Web/package.json @@ -40,7 +40,6 @@ "lazysizes": "^5.3.2", "ng-circle-progress": "^1.6.0", "ng-lazyload-image": "^9.1.0", - "ng-sidebar": "^9.4.2", "ngx-file-drop": "^11.1.0", "ngx-toastr": "^13.2.1", "rxjs": "~6.6.0", diff --git a/UI/Web/src/app/_services/action.service.ts b/UI/Web/src/app/_services/action.service.ts index 7c47a9722..3e400a80b 100644 --- a/UI/Web/src/app/_services/action.service.ts +++ b/UI/Web/src/app/_services/action.service.ts @@ -156,7 +156,7 @@ export class ActionService implements OnDestroy { * @param callback Optional callback to perform actions after API completes */ markVolumeAsUnread(seriesId: number, volume: Volume, callback?: VolumeActionCallback) { - forkJoin(volume.chapters?.map(chapter => this.readerService.saveProgress(seriesId, volume.id, chapter.id, 0))).pipe(takeUntil(this.onDestroy)).subscribe(results => { + this.readerService.markVolumeRead(seriesId, volume.id).subscribe(() => { volume.pagesRead = 0; volume.chapters?.forEach(c => c.pagesRead = 0); this.toastr.success('Marked as Unread'); diff --git a/UI/Web/src/app/_services/message-hub.service.ts b/UI/Web/src/app/_services/message-hub.service.ts index 9b959795d..33c39f18b 100644 --- a/UI/Web/src/app/_services/message-hub.service.ts +++ b/UI/Web/src/app/_services/message-hub.service.ts @@ -41,7 +41,7 @@ export class MessageHubService { .catch(err => console.error(err)); this.hubConnection.on('receiveMessage', body => { - console.log('[Hub] Body: ', body); + //console.log('[Hub] Body: ', body); }); this.hubConnection.on(EVENTS.UpdateAvailable, resp => { diff --git a/UI/Web/src/app/cards/cover-image-chooser/cover-image-chooser.component.ts b/UI/Web/src/app/cards/cover-image-chooser/cover-image-chooser.component.ts index ac380a35f..0c0830b16 100644 --- a/UI/Web/src/app/cards/cover-image-chooser/cover-image-chooser.component.ts +++ b/UI/Web/src/app/cards/cover-image-chooser/cover-image-chooser.component.ts @@ -94,12 +94,12 @@ export class CoverImageChooserComponent implements OnInit, OnDestroy { if (url && url != '') { const img = new Image(); img.crossOrigin = 'Anonymous'; - img.src = this.form.get('coverImageUrl')?.value; img.onload = (e) => this.handleUrlImageAdd(e); img.onerror = (e) => { this.toastr.error('The image could not be fetched due to server refusing request. Please download and upload from file instead.'); this.form.get('coverImageUrl')?.setValue(''); - } + }; + img.src = this.form.get('coverImageUrl')?.value; this.form.get('coverImageUrl')?.setValue(''); } } @@ -135,7 +135,6 @@ export class CoverImageChooserComponent implements OnInit, OnDestroy { } handleUrlImageAdd(e: any) { - console.log(e); if (e.path === null || e.path.length === 0) return; const url = this.getBase64Image(e.path[0]); diff --git a/UI/Web/src/app/collections/collection-detail/collection-detail.component.ts b/UI/Web/src/app/collections/collection-detail/collection-detail.component.ts index 8e155cf35..e7013f34e 100644 --- a/UI/Web/src/app/collections/collection-detail/collection-detail.component.ts +++ b/UI/Web/src/app/collections/collection-detail/collection-detail.component.ts @@ -56,25 +56,29 @@ export class CollectionDetailComponent implements OnInit { return; } const tagId = parseInt(routeId, 10); - this.collectionService.allTags().subscribe(tags => { - this.collections = tags; - const matchingTags = this.collections.filter(t => t.id === tagId); - if (matchingTags.length === 0) { - this.toastr.error('You don\'t have access to any libraries this tag belongs to or this tag is invalid'); - - return; - } - this.collectionTag = matchingTags[0]; - this.tagImage = this.imageService.randomize(this.imageService.getCollectionCoverImage(this.collectionTag.id)); - this.titleService.setTitle('Kavita - ' + this.collectionTag.title + ' Collection'); - this.loadPage(); - }); + this.updateTag(tagId); } ngOnInit(): void { this.collectionTagActions = this.actionFactoryService.getCollectionTagActions(this.handleCollectionActionCallback.bind(this)); } + updateTag(tagId: number) { + this.collectionService.allTags().subscribe(tags => { + this.collections = tags; + const matchingTags = this.collections.filter(t => t.id === tagId); + if (matchingTags.length === 0) { + this.toastr.error('You don\'t have access to any libraries this tag belongs to or this tag is invalid'); + + return; + } + this.collectionTag = matchingTags[0]; + this.tagImage = this.imageService.randomize(this.imageService.getCollectionCoverImage(this.collectionTag.id)); + this.titleService.setTitle('Kavita - ' + this.collectionTag.title + ' Collection'); + this.loadPage(); + }); + } + onPageChange(pagination: Pagination) { this.router.navigate(['collections', this.collectionTag.id], {replaceUrl: true, queryParamsHandling: 'merge', queryParams: {page: this.seriesPagination.currentPage} }); } @@ -120,6 +124,7 @@ export class CollectionDetailComponent implements OnInit { const modalRef = this.modalService.open(EditCollectionTagsComponent, { size: 'lg', scrollable: true }); modalRef.componentInstance.tag = this.collectionTag; modalRef.closed.subscribe((results: {success: boolean, coverImageUpdated: boolean}) => { + this.updateTag(this.collectionTag.id); this.loadPage(); if (results.coverImageUpdated) { this.tagImage = this.imageService.randomize(this.imageService.getCollectionCoverImage(collectionTag.id));