
# Added - Added: Added the ability to bookmark certain pages within the manga (image) reader and later download them from the series context menu. # Fixed - Fixed: Fixed an issue where after adding a new folder to an existing library, a scan wouldn't be kicked off - Fixed: In some cases, after clicking the background of a modal, the modal would close, but state wouldn't be handled as if cancel was pushed # Changed - Changed: Admin contextual actions on cards will now be separated by a line to help differentiate. - Changed: Performance enhancement on an API used before reading # Dev - Bumped dependencies to latest versions ============================================= * Bumped versions of dependencies and refactored bookmark to progress. * Refactored method names in UI from bookmark to progress to prepare for new bookmark entity * Basic code is done, user can now bookmark a page (currently image reader only). * Comments and pipes * Some accessibility for new bookmark button * Fixed up the APIs to work correctly, added a new modal to quickly explore bookmarks (not implemented, not final). * Cleanup on the UI side to get the modal to look decent * Added dismissed handlers for modals where appropriate * Refactored UI to only show number of bookmarks across files to simplify delivery. Admin actionables are now separated by hr vs non-admin actions. * Basic API implemented, now to implement the ability to actually extract files. * Implemented the ability to download bookmarks. * Fixed a bug where adding a new folder to an existing library would not trigger a scan library task. * Fixed an issue that could cause bookmarked pages to get copied out of order. * Added handler from series-card component
60 lines
2 KiB
TypeScript
60 lines
2 KiB
TypeScript
import { Injectable } from '@angular/core';
|
|
import { HubConnection, HubConnectionBuilder } from '@microsoft/signalr';
|
|
import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
|
|
import { User } from '@sentry/angular';
|
|
import { environment } from 'src/environments/environment';
|
|
import { UpdateNotificationModalComponent } from '../shared/update-notification/update-notification-modal.component';
|
|
|
|
export enum EVENTS {
|
|
UpdateAvailable = 'UpdateAvailable'
|
|
}
|
|
|
|
@Injectable({
|
|
providedIn: 'root'
|
|
})
|
|
export class MessageHubService {
|
|
hubUrl = environment.hubUrl;
|
|
private hubConnection!: HubConnection;
|
|
private updateNotificationModalRef: NgbModalRef | null = null;
|
|
|
|
constructor(private modalService: NgbModal) { }
|
|
|
|
createHubConnection(user: User) {
|
|
this.hubConnection = new HubConnectionBuilder()
|
|
.withUrl(this.hubUrl + 'messages', {
|
|
accessTokenFactory: () => user.token
|
|
})
|
|
.withAutomaticReconnect()
|
|
.build();
|
|
|
|
this.hubConnection
|
|
.start()
|
|
.catch(err => console.error(err));
|
|
|
|
this.hubConnection.on('receiveMessage', body => {
|
|
console.log('[Hub] Body: ', body);
|
|
});
|
|
|
|
this.hubConnection.on(EVENTS.UpdateAvailable, resp => {
|
|
// Ensure only 1 instance of UpdateNotificationModal can be open at once
|
|
if (this.updateNotificationModalRef != null) { return; }
|
|
this.updateNotificationModalRef = this.modalService.open(UpdateNotificationModalComponent, { scrollable: true, size: 'lg' });
|
|
this.updateNotificationModalRef.componentInstance.updateData = resp.body;
|
|
this.updateNotificationModalRef.closed.subscribe(() => {
|
|
this.updateNotificationModalRef = null;
|
|
});
|
|
this.updateNotificationModalRef.dismissed.subscribe(() => {
|
|
this.updateNotificationModalRef = null;
|
|
});
|
|
});
|
|
}
|
|
|
|
stopHubConnection() {
|
|
this.hubConnection.stop().catch(err => console.error(err));
|
|
}
|
|
|
|
sendMessage(methodName: string, body?: any) {
|
|
return this.hubConnection.invoke(methodName, body);
|
|
}
|
|
|
|
}
|