Bookmarking Pages within the Reader (#469)

# 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
This commit is contained in:
Joseph Milazzo 2021-08-10 18:18:07 -05:00 committed by GitHub
parent d1d7df9291
commit e9ec6671d5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
49 changed files with 1860 additions and 241 deletions

View file

@ -14,14 +14,15 @@ export enum Action {
Edit = 4,
Info = 5,
RefreshMetadata = 6,
Download = 7
Download = 7,
Bookmarks = 8
}
export interface ActionItem<T> {
title: string;
action: Action;
callback: (action: Action, data: T) => void;
requiresAdmin: boolean;
}
@Injectable({
@ -58,43 +59,50 @@ export class ActionFactoryService {
this.collectionTagActions.push({
action: Action.Edit,
title: 'Edit',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: true
});
this.seriesActions.push({
action: Action.ScanLibrary,
title: 'Scan Series',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: true
});
this.seriesActions.push({
action: Action.RefreshMetadata,
title: 'Refresh Metadata',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: true
});
this.seriesActions.push({
action: Action.Delete,
title: 'Delete',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: true
});
this.seriesActions.push({
action: Action.Edit,
title: 'Edit',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: true
});
this.libraryActions.push({
action: Action.ScanLibrary,
title: 'Scan Library',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: true
});
this.libraryActions.push({
action: Action.RefreshMetadata,
title: 'Refresh Metadata',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: true
});
}
@ -102,13 +110,15 @@ export class ActionFactoryService {
this.volumeActions.push({
action: Action.Download,
title: 'Download',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: false
});
this.chapterActions.push({
action: Action.Download,
title: 'Download',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: false
});
}
});
@ -150,12 +160,20 @@ export class ActionFactoryService {
{
action: Action.MarkAsRead,
title: 'Mark as Read',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: false
},
{
action: Action.MarkAsUnread,
title: 'Mark as Unread',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: false
},
{
action: Action.Bookmarks,
title: 'Bookmarks',
callback: this.dummyCallback,
requiresAdmin: false
}
];
@ -163,12 +181,14 @@ export class ActionFactoryService {
{
action: Action.MarkAsRead,
title: 'Mark as Read',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: false
},
{
action: Action.MarkAsUnread,
title: 'Mark as Unread',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: false
}
];
@ -176,25 +196,29 @@ export class ActionFactoryService {
{
action: Action.MarkAsRead,
title: 'Mark as Read',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: false
},
{
action: Action.MarkAsUnread,
title: 'Mark as Unread',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: false
}
];
this.volumeActions.push({
action: Action.Info,
title: 'Info',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: false
});
this.chapterActions.push({
action: Action.Info,
title: 'Info',
callback: this.dummyCallback
callback: this.dummyCallback,
requiresAdmin: false
});