diff --git a/UI/Web/src/app/_services/account.service.ts b/UI/Web/src/app/_services/account.service.ts index bc6c762b4..c467cb88d 100644 --- a/UI/Web/src/app/_services/account.service.ts +++ b/UI/Web/src/app/_services/account.service.ts @@ -51,7 +51,7 @@ export class AccountService implements OnDestroy { const user = response; if (user) { this.setCurrentUser(user); - this.messageHub.createHubConnection(user); + this.messageHub.createHubConnection(user, this.hasAdminRole(user)); this.presenceHub.createHubConnection(user); } }), diff --git a/UI/Web/src/app/_services/message-hub.service.ts b/UI/Web/src/app/_services/message-hub.service.ts index b01b45754..cfeb13828 100644 --- a/UI/Web/src/app/_services/message-hub.service.ts +++ b/UI/Web/src/app/_services/message-hub.service.ts @@ -4,14 +4,12 @@ import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; import { User } from '@sentry/angular'; import { ToastrService } from 'ngx-toastr'; import { ReplaySubject } from 'rxjs'; -import { take } from 'rxjs/operators'; import { environment } from 'src/environments/environment'; import { UpdateNotificationModalComponent } from '../shared/update-notification/update-notification-modal.component'; import { RefreshMetadataEvent } from '../_models/events/refresh-metadata-event'; import { ScanLibraryEvent } from '../_models/events/scan-library-event'; import { ScanSeriesEvent } from '../_models/events/scan-series-event'; import { SeriesAddedEvent } from '../_models/events/series-added-event'; -import { AccountService } from './account.service'; export enum EVENTS { UpdateAvailable = 'UpdateAvailable', @@ -44,15 +42,13 @@ export class MessageHubService { isAdmin: boolean = false; - constructor(private modalService: NgbModal, private toastr: ToastrService, private accountService: AccountService) { - this.accountService.currentUser$.pipe(take(1)).subscribe(user => { - if (user) { - this.isAdmin = this.accountService.hasAdminRole(user); - } - }); + constructor(private modalService: NgbModal, private toastr: ToastrService) { + } - createHubConnection(user: User) { + createHubConnection(user: User, isAdmin: boolean) { + this.isAdmin = isAdmin; + this.hubConnection = new HubConnectionBuilder() .withUrl(this.hubUrl + 'messages', { accessTokenFactory: () => user.token @@ -82,9 +78,6 @@ export class MessageHubService { payload: resp.body }); this.scanLibrary.emit(resp.body); - // if ((resp.body as ScanLibraryEvent).stage === 'complete') { - // this.toastr. - // } }); this.hubConnection.on(EVENTS.SeriesAdded, resp => { diff --git a/UI/Web/src/app/app.component.ts b/UI/Web/src/app/app.component.ts index afb8d94b6..c3f86569f 100644 --- a/UI/Web/src/app/app.component.ts +++ b/UI/Web/src/app/app.component.ts @@ -47,7 +47,7 @@ export class AppComponent implements OnInit { if (user) { this.navService.setDarkMode(user.preferences.siteDarkMode); - this.messageHub.createHubConnection(user); + this.messageHub.createHubConnection(user, this.accountService.hasAdminRole(user)); this.presenceHub.createHubConnection(user); this.libraryService.getLibraryNames().pipe(take(1)).subscribe(() => {/* No Operation */}); } else { diff --git a/UI/Web/src/app/cards/card-item/card-item.component.ts b/UI/Web/src/app/cards/card-item/card-item.component.ts index 740cf6043..2f1633b4a 100644 --- a/UI/Web/src/app/cards/card-item/card-item.component.ts +++ b/UI/Web/src/app/cards/card-item/card-item.component.ts @@ -120,14 +120,31 @@ export class CardItemComponent implements OnInit, OnDestroy { prevTouchTime: number = 0; + prevOffset: number = 0; @HostListener('touchstart', ['$event']) onTouchStart(event: TouchEvent) { + const verticalOffset = (window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop || 0); + this.prevTouchTime = event.timeStamp; + this.prevOffset = verticalOffset; } @HostListener('touchend', ['$event']) onTouchEnd(event: TouchEvent) { - if (event.timeStamp - this.prevTouchTime >= 200) { + const delta = event.timeStamp - this.prevTouchTime; + const verticalOffset = (window.pageYOffset + || document.documentElement.scrollTop + || document.body.scrollTop || 0); + + if (verticalOffset != this.prevOffset) { + this.prevTouchTime = 0; + + return; + } + + if (delta >= 300 && delta <= 1000) { this.handleSelection(); event.stopPropagation(); event.preventDefault(); diff --git a/UI/Web/src/app/reading-list/reading-lists/reading-lists.component.ts b/UI/Web/src/app/reading-list/reading-lists/reading-lists.component.ts index d7051df2e..9c6cc149c 100644 --- a/UI/Web/src/app/reading-list/reading-lists/reading-lists.component.ts +++ b/UI/Web/src/app/reading-list/reading-lists/reading-lists.component.ts @@ -41,7 +41,6 @@ export class ReadingListsComponent implements OnInit { } performAction(action: ActionItem, readingList: ReadingList) { - // TODO: Try to move performAction into the actionables component. (have default handler in the component, allow for overridding to pass additional context) if (typeof action.callback === 'function') { action.callback(action.action, readingList); }