-
-
+
+
+
+
-
- 0">
-
-
- {{readingList.title}} ()
- {{items.length}}
-
-
-
-
-
-
-
-
-
-
-
+
+ 0">
+
+
+ {{readingList.title}} ()
+ {{items.length}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
No chapters added
-
-
+
-
-
diff --git a/UI/Web/src/app/series-detail/series-detail.component.ts b/UI/Web/src/app/series-detail/series-detail.component.ts
index 254c32d81..91a8c6c59 100644
--- a/UI/Web/src/app/series-detail/series-detail.component.ts
+++ b/UI/Web/src/app/series-detail/series-detail.component.ts
@@ -1,9 +1,10 @@
-import { Component, OnInit } from '@angular/core';
+import { Component, OnDestroy, OnInit } from '@angular/core';
import { Title } from '@angular/platform-browser';
import { ActivatedRoute, Router } from '@angular/router';
import { NgbModal, NgbRatingConfig } from '@ng-bootstrap/ng-bootstrap';
import { ToastrService } from 'ngx-toastr';
-import { finalize, take, takeWhile } from 'rxjs/operators';
+import { Subject } from 'rxjs';
+import { finalize, take, takeUntil, takeWhile } from 'rxjs/operators';
import { CardDetailsModalComponent } from '../cards/_modals/card-details-modal/card-details-modal.component';
import { EditSeriesModalComponent } from '../cards/_modals/edit-series-modal/edit-series-modal.component';
import { ConfirmConfig } from '../shared/confirm-dialog/_models/confirm-config';
@@ -13,6 +14,7 @@ import { DownloadService } from '../shared/_services/download.service';
import { UtilityService } from '../shared/_services/utility.service';
import { ReviewSeriesModalComponent } from '../_modals/review-series-modal/review-series-modal.component';
import { Chapter } from '../_models/chapter';
+import { ScanSeriesEvent } from '../_models/events/scan-series-event';
import { LibraryType } from '../_models/library';
import { MangaFormat } from '../_models/manga-format';
import { Series } from '../_models/series';
@@ -23,6 +25,7 @@ import { ActionItem, ActionFactoryService, Action } from '../_services/action-fa
import { ActionService } from '../_services/action.service';
import { ImageService } from '../_services/image.service';
import { LibraryService } from '../_services/library.service';
+import { MessageHubService } from '../_services/message-hub.service';
import { ReaderService } from '../_services/reader.service';
import { SeriesService } from '../_services/series.service';
@@ -32,7 +35,7 @@ import { SeriesService } from '../_services/series.service';
templateUrl: './series-detail.component.html',
styleUrls: ['./series-detail.component.scss']
})
-export class SeriesDetailComponent implements OnInit {
+export class SeriesDetailComponent implements OnInit, OnDestroy {
series!: Series;
volumes: Volume[] = [];
@@ -76,6 +79,8 @@ export class SeriesDetailComponent implements OnInit {
*/
actionInProgress: boolean = false;
+ private onDestroy: Subject = new Subject();
+
get LibraryType(): typeof LibraryType {
return LibraryType;
@@ -97,7 +102,7 @@ export class SeriesDetailComponent implements OnInit {
private actionFactoryService: ActionFactoryService, private libraryService: LibraryService,
private confirmService: ConfirmService, private titleService: Title,
private downloadService: DownloadService, private actionService: ActionService,
- public imageSerivce: ImageService) {
+ public imageSerivce: ImageService, private messageHub: MessageHubService) {
ratingConfig.max = 5;
this.router.routeReuseStrategy.shouldReuseRoute = () => false;
this.accountService.currentUser$.pipe(take(1)).subscribe(user => {
@@ -116,20 +121,25 @@ export class SeriesDetailComponent implements OnInit {
return;
}
+ this.messageHub.scanSeries.pipe(takeUntil(this.onDestroy)).subscribe((event: ScanSeriesEvent) => {
+ if (event.seriesId == this.series.id)
+ this.loadSeries(seriesId);
+ this.seriesImage = this.imageService.randomize(this.imageService.getSeriesCoverImage(this.series.id));
+ this.toastr.success('Scan series completed');
+ });
+
const seriesId = parseInt(routeId, 10);
this.libraryId = parseInt(libraryId, 10);
this.seriesImage = this.imageService.getSeriesCoverImage(seriesId);
- this.loadSeriesMetadata(seriesId);
this.libraryService.getLibraryType(this.libraryId).subscribe(type => {
this.libraryType = type;
this.loadSeries(seriesId);
});
}
- loadSeriesMetadata(seriesId: number) {
- this.seriesService.getMetadata(seriesId).subscribe(metadata => {
- this.seriesMetadata = metadata;
- });
+ ngOnDestroy() {
+ this.onDestroy.next();
+ this.onDestroy.complete();
}
handleSeriesActionCallback(action: Action, series: Series) {
@@ -422,7 +432,6 @@ export class SeriesDetailComponent implements OnInit {
window.scrollTo(0, 0);
if (closeResult.success) {
this.loadSeries(this.series.id);
- this.loadSeriesMetadata(this.series.id);
if (closeResult.coverImageUpdate) {
// Random triggers a load change without any problems with API
this.seriesImage = this.imageService.randomize(this.imageService.getSeriesCoverImage(this.series.id));
diff --git a/UI/Web/src/app/user-settings/user-preferences/user-preferences.component.html b/UI/Web/src/app/user-settings/user-preferences/user-preferences.component.html
index b407d5a56..1a1dee3b3 100644
--- a/UI/Web/src/app/user-settings/user-preferences/user-preferences.component.html
+++ b/UI/Web/src/app/user-settings/user-preferences/user-preferences.component.html
@@ -142,20 +142,20 @@
diff --git a/UI/Web/src/app/user-settings/user-preferences/user-preferences.component.scss b/UI/Web/src/app/user-settings/user-preferences/user-preferences.component.scss
index 761d937db..1bce1dcb8 100644
--- a/UI/Web/src/app/user-settings/user-preferences/user-preferences.component.scss
+++ b/UI/Web/src/app/user-settings/user-preferences/user-preferences.component.scss
@@ -1,3 +1,55 @@
+@import '../../../theme/colors';
+
.invalid-feedback {
display: inline-block !important;
-}
\ No newline at end of file
+}
+
+// Slider handle override
+::ng-deep {
+ .custom-slider .ngx-slider .ngx-slider-bar {
+ background: #545a52;
+ height: 2px;
+ }
+ .custom-slider .ngx-slider .ngx-slider-selection {
+ background: $primary-color;
+ }
+
+ .custom-slider .ngx-slider .ngx-slider-pointer {
+ width: 8px;
+ height: 16px;
+ top: auto; /* to remove the default positioning */
+ bottom: 0;
+ background-color: $primary-color;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+ }
+
+ .custom-slider .ngx-slider .ngx-slider-pointer:after {
+ display: none;
+ }
+
+ .custom-slider .ngx-slider .ngx-slider-bubble {
+ bottom: 14px;
+ font-weight: bold;
+ }
+
+ .custom-slider .ngx-slider .ngx-slider-limit {
+ font-weight: bold;
+ color: white !important;
+
+ }
+
+
+ .custom-slider .ngx-slider .ngx-slider-tick {
+ width: 1px;
+ height: 10px;
+ margin-left: 4px;
+ border-radius: 0;
+ background: #ffe4d1;
+ top: -1px;
+ }
+
+ .custom-slider .ngx-slider .ngx-slider-tick.ngx-slider-selected {
+ background: $primary-color;
+ }
+ }
\ No newline at end of file
diff --git a/UI/Web/src/assets/themes/dark.scss b/UI/Web/src/assets/themes/dark.scss
index 1cb16255b..0cc5a6716 100644
--- a/UI/Web/src/assets/themes/dark.scss
+++ b/UI/Web/src/assets/themes/dark.scss
@@ -5,6 +5,7 @@ $dark-primary-color: rgba(74, 198, 148, 0.9);
$dark-text-color: #efefef;
$dark-hover-color: #4ac694;
$dark-form-background: rgba(1, 4, 9, 0.5);
+$dark-form-background-no-opacity: rgb(1, 4, 9);
$dark-form-placeholder: #efefef;
$dark-link-color: rgb(88, 166, 255);
$dark-icon-color: white;
@@ -126,6 +127,7 @@ $dark-item-accent-bg: #292d32;
.dropdown-menu {
+ background-color: #171719;
.dropdown-item:hover, .dropdown-item:focus {
color: $dark-text-color;
background-color: $dark-hover-color;
diff --git a/UI/Web/src/styles.scss b/UI/Web/src/styles.scss
index 0e3faf2d4..386d8a2de 100644
--- a/UI/Web/src/styles.scss
+++ b/UI/Web/src/styles.scss
@@ -51,54 +51,6 @@ body {
cursor: pointer;
}
-// Slider handle override
-::ng-deep {
- .custom-slider .ngx-slider .ngx-slider-bar {
- background: #ffe4d1;
- height: 2px;
- }
- .custom-slider .ngx-slider .ngx-slider-selection {
- background: orange;
- }
-
- .custom-slider .ngx-slider .ngx-slider-pointer {
- width: 8px;
- height: 16px;
- top: auto; /* to remove the default positioning */
- bottom: 0;
- background-color: #333;
- border-top-left-radius: 3px;
- border-top-right-radius: 3px;
- }
-
- .custom-slider .ngx-slider .ngx-slider-pointer:after {
- display: none;
- }
-
- .custom-slider .ngx-slider .ngx-slider-bubble {
- bottom: 14px;
- }
-
- .custom-slider .ngx-slider .ngx-slider-limit {
- font-weight: bold;
- color: orange;
- }
-
- .custom-slider .ngx-slider .ngx-slider-tick {
- width: 1px;
- height: 10px;
- margin-left: 4px;
- border-radius: 0;
- background: #ffe4d1;
- top: -1px;
- }
-
- .custom-slider .ngx-slider .ngx-slider-tick.ngx-slider-selected {
- background: orange;
- }
-}
-
-
// Utiliities
@include media-breakpoint-down(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) {
diff --git a/UI/Web/tsconfig.json b/UI/Web/tsconfig.json
index 28c4a614d..1f73487e2 100644
--- a/UI/Web/tsconfig.json
+++ b/UI/Web/tsconfig.json
@@ -4,6 +4,7 @@
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
+ "removeComments": true /* Do not emit comments to output. */,
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitReturns": true,