Logging Cleanup (#668)
* Do not allow non-admins to change their passwords when authentication is disabled * Clean up the login page so that input field text is black * cleanup some resizing when typing a password and having a lot of users * Changed the LastActive for a user to not just be login, but also when they open an already authenticated session. * Removed some verbose debugging statements and moved some debug to information to be more prevelant to logs for default installs. * In Progress now sends progress information on the Series * Add ability to add cards to recently added when new series are added in backend * Implemented the ability to click the glasses icon to turn off incognito mode from within the reader so you can start tracking progress * Don't warn the user about authentication when they don't touch that control
This commit is contained in:
parent
5e3b799747
commit
355f50fd5d
12 changed files with 57 additions and 56 deletions
|
@ -56,13 +56,13 @@ export class ManageSettingsComponent implements OnInit {
|
|||
async saveSettings() {
|
||||
const modelSettings = this.settingsForm.value;
|
||||
|
||||
if (this.settingsForm.get('enableAuthentication')?.value === false) {
|
||||
if (this.settingsForm.get('enableAuthentication')?.dirty && this.settingsForm.get('enableAuthentication')?.value === false) {
|
||||
if (!await this.confirmService.confirm('Disabling Authentication opens your server up to unauthorized access and possible hacking. Are you sure you want to continue with this?')) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const informUserAfterAuthenticationEnabled = this.settingsForm.get('enableAuthentication')?.value && !this.serverSettings.enableAuthentication;
|
||||
const informUserAfterAuthenticationEnabled = this.settingsForm.get('enableAuthentication')?.dirty && this.settingsForm.get('enableAuthentication')?.value && !this.serverSettings.enableAuthentication;
|
||||
|
||||
this.settingsService.updateServerSettings(modelSettings).pipe(take(1)).subscribe(async (settings: ServerSettings) => {
|
||||
this.serverSettings = settings;
|
||||
|
|
|
@ -122,7 +122,7 @@
|
|||
</button>
|
||||
<button *ngIf="!this.adhocPageHistory.isEmpty()" class="btn btn-outline-secondary btn-icon col-2 col-xs-1" (click)="goBack()" title="Go Back"><i class="fa fa-reply" aria-hidden="true"></i><span class="phone-hidden"> Go Back</span></button>
|
||||
<button class="btn btn-secondary col-2 col-xs-1" (click)="toggleDrawer()"><i class="fa fa-bars" aria-hidden="true"></i><span class="phone-hidden"> Settings</span></button>
|
||||
<div class="book-title col-2 phone-hidden">{{bookTitle}} <span *ngIf="incognitoMode">(<i class="fa fa-glasses" aria-hidden="true"></i><span class="sr-only">Incognito Mode</span>)</span></div>
|
||||
<div class="book-title col-2 phone-hidden">{{bookTitle}} <span *ngIf="incognitoMode" (click)="turnOffIncognito()" role="button" aria-label="Incognito mode is on. Toggle to turn off.">(<i class="fa fa-glasses" aria-hidden="true"></i><span class="sr-only">Incognito Mode</span>)</span></div>
|
||||
<button class="btn btn-secondary col-2 col-xs-1" (click)="closeReader()"><i class="fa fa-times-circle" aria-hidden="true"></i><span class="phone-hidden"> Close</span></button>
|
||||
<button class="btn btn-outline-secondary btn-icon col-2 col-xs-1"
|
||||
[disabled]="IsNextDisabled"
|
||||
|
|
|
@ -995,4 +995,15 @@ export class BookReaderComponent implements OnInit, AfterViewInit, OnDestroy {
|
|||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns off Incognito mode. This can only happen once if the user clicks the icon. This will modify URL state
|
||||
*/
|
||||
turnOffIncognito() {
|
||||
this.incognitoMode = false;
|
||||
const newRoute = this.readerService.getNextChapterUrl(this.router.url, this.chapterId, this.incognitoMode, this.readingListMode, this.readingListId);
|
||||
window.history.replaceState({}, '', newRoute);
|
||||
this.toastr.info('Incognito mode is off. Progress will now start being tracked.');
|
||||
this.readerService.saveProgress(this.seriesId, this.volumeId, this.chapterId, this.pageNum).pipe(take(1)).subscribe(() => {/* No operation */});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
<app-carousel-reel [items]="recentlyAdded" title="Recently Added" (sectionClick)="handleSectionClick($event)">
|
||||
<ng-template #carouselItem let-item let-position="idx">
|
||||
<app-series-card [data]="item" [libraryId]="item.libraryId" (reload)="reloadTags()" (dataChanged)="loadRecentlyAdded()"></app-series-card>
|
||||
<app-series-card [data]="item" [libraryId]="item.libraryId" (dataChanged)="loadRecentlyAdded()"></app-series-card>
|
||||
</ng-template>
|
||||
</app-carousel-reel>
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ import { Subject } from 'rxjs';
|
|||
import { take, takeUntil } from 'rxjs/operators';
|
||||
import { EditCollectionTagsComponent } from '../cards/_modals/edit-collection-tags/edit-collection-tags.component';
|
||||
import { CollectionTag } from '../_models/collection-tag';
|
||||
import { SeriesAddedEvent } from '../_models/events/series-added-event';
|
||||
import { InProgressChapter } from '../_models/in-progress-chapter';
|
||||
import { Library } from '../_models/library';
|
||||
import { Series } from '../_models/series';
|
||||
|
@ -15,6 +16,7 @@ import { Action, ActionFactoryService, ActionItem } from '../_services/action-fa
|
|||
import { CollectionTagService } from '../_services/collection-tag.service';
|
||||
import { ImageService } from '../_services/image.service';
|
||||
import { LibraryService } from '../_services/library.service';
|
||||
import { EVENTS, MessageHubService } from '../_services/message-hub.service';
|
||||
import { SeriesService } from '../_services/series.service';
|
||||
|
||||
@Component({
|
||||
|
@ -32,17 +34,24 @@ export class LibraryComponent implements OnInit, OnDestroy {
|
|||
recentlyAdded: Series[] = [];
|
||||
inProgress: Series[] = [];
|
||||
continueReading: InProgressChapter[] = [];
|
||||
// collectionTags: CollectionTag[] = [];
|
||||
// collectionTagActions: ActionItem<CollectionTag>[] = [];
|
||||
|
||||
private readonly onDestroy = new Subject<void>();
|
||||
|
||||
seriesTrackBy = (index: number, item: any) => `${item.name}_${item.pagesRead}`;
|
||||
|
||||
constructor(public accountService: AccountService, private libraryService: LibraryService,
|
||||
private seriesService: SeriesService, private actionFactoryService: ActionFactoryService,
|
||||
private collectionService: CollectionTagService, private router: Router,
|
||||
private modalService: NgbModal, private titleService: Title, public imageService: ImageService) { }
|
||||
private seriesService: SeriesService, private router: Router,
|
||||
private titleService: Title, public imageService: ImageService,
|
||||
private messageHub: MessageHubService) {
|
||||
this.messageHub.messages$.pipe(takeUntil(this.onDestroy)).subscribe(res => {
|
||||
if (res.event == EVENTS.SeriesAdded) {
|
||||
const seriesAddedEvent = res.payload as SeriesAddedEvent;
|
||||
this.seriesService.getSeries(seriesAddedEvent.seriesId).subscribe(series => {
|
||||
this.recentlyAdded.unshift(series);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.titleService.setTitle('Kavita - Dashboard');
|
||||
|
@ -56,8 +65,6 @@ export class LibraryComponent implements OnInit, OnDestroy {
|
|||
});
|
||||
});
|
||||
|
||||
//this.collectionTagActions = this.actionFactoryService.getCollectionTagActions(this.handleCollectionActionCallback.bind(this));
|
||||
|
||||
this.reloadSeries();
|
||||
}
|
||||
|
||||
|
@ -68,10 +75,7 @@ export class LibraryComponent implements OnInit, OnDestroy {
|
|||
|
||||
reloadSeries() {
|
||||
this.loadRecentlyAdded();
|
||||
|
||||
this.loadInProgress();
|
||||
|
||||
this.reloadTags();
|
||||
}
|
||||
|
||||
reloadInProgress(series: Series | boolean) {
|
||||
|
@ -85,7 +89,6 @@ export class LibraryComponent implements OnInit, OnDestroy {
|
|||
}
|
||||
|
||||
this.loadInProgress();
|
||||
this.reloadTags();
|
||||
}
|
||||
|
||||
loadInProgress() {
|
||||
|
@ -100,12 +103,6 @@ export class LibraryComponent implements OnInit, OnDestroy {
|
|||
});
|
||||
}
|
||||
|
||||
reloadTags() {
|
||||
// this.collectionService.allTags().pipe(takeUntil(this.onDestroy)).subscribe(tags => {
|
||||
// this.collectionTags = tags;
|
||||
// });
|
||||
}
|
||||
|
||||
handleSectionClick(sectionTitle: string) {
|
||||
if (sectionTitle.toLowerCase() === 'collections') {
|
||||
this.router.navigate(['collections']);
|
||||
|
@ -115,26 +112,4 @@ export class LibraryComponent implements OnInit, OnDestroy {
|
|||
this.router.navigate(['in-progress']);
|
||||
}
|
||||
}
|
||||
|
||||
loadCollection(item: CollectionTag) {
|
||||
//this.router.navigate(['collections', item.id]);
|
||||
}
|
||||
|
||||
// handleCollectionActionCallback(action: Action, collectionTag: CollectionTag) {
|
||||
// switch (action) {
|
||||
// case(Action.Edit):
|
||||
// const modalRef = this.modalService.open(EditCollectionTagsComponent, { size: 'lg', scrollable: true });
|
||||
// modalRef.componentInstance.tag = collectionTag;
|
||||
// modalRef.closed.subscribe((results: {success: boolean, coverImageUpdated: boolean}) => {
|
||||
// this.reloadTags();
|
||||
// if (results.coverImageUpdated) {
|
||||
// collectionTag.coverImage = this.imageService.randomize(collectionTag.coverImage);
|
||||
// }
|
||||
// });
|
||||
// break;
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
</button>
|
||||
|
||||
<div>
|
||||
<div style="font-weight: bold;">{{title}} <span *ngIf="incognitoMode">(<i class="fa fa-glasses" aria-hidden="true"></i><span class="sr-only">Incognito Mode</span>)</span></div>
|
||||
<div style="font-weight: bold;">{{title}} <span class="clickable" *ngIf="incognitoMode" (click)="turnOffIncognito()" role="button" aria-label="Incognito mode is on. Toggle to turn off.">(<i class="fa fa-glasses" aria-hidden="true"></i><span class="sr-only">Incognito Mode:</span>)</span></div>
|
||||
<div class="subtitle">
|
||||
{{subtitle}}
|
||||
</div>
|
||||
|
|
|
@ -1113,4 +1113,15 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns off Incognito mode. This can only happen once if the user clicks the icon. This will modify URL state
|
||||
*/
|
||||
turnOffIncognito() {
|
||||
this.incognitoMode = false;
|
||||
const newRoute = this.readerService.getNextChapterUrl(this.router.url, this.chapterId, this.incognitoMode, this.readingListMode, this.readingListId);
|
||||
window.history.replaceState({}, '', newRoute);
|
||||
this.toastr.info('Incognito mode is off. Progress will now start being tracked.');
|
||||
this.readerService.saveProgress(this.seriesId, this.volumeId, this.chapterId, this.pageNum).pipe(take(1)).subscribe(() => {/* No operation */});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue