mirror of
https://github.com/booklore-app/booklore.git
synced 2026-02-18 00:17:53 +01:00
@@ -24,6 +24,9 @@ public class PdfViewerPreferencesEntity {
|
||||
@Column(name = "zoom")
|
||||
private String zoom;
|
||||
|
||||
@Column(name = "sidebar_visible")
|
||||
private Boolean sidebarVisible;
|
||||
|
||||
@Column(name = "spread")
|
||||
private String spread;
|
||||
}
|
||||
@@ -68,6 +68,7 @@ public class BooksService {
|
||||
PdfViewerPreferencesEntity viewerPrefs = bookEntity.getPdfViewerPrefs();
|
||||
viewerPrefs.setZoom(pdfSettings.getZoom());
|
||||
viewerPrefs.setSpread(pdfSettings.getSpread());
|
||||
viewerPrefs.setSidebarVisible(pdfSettings.getSidebarVisible());
|
||||
pdfViewerPreferencesRepository.save(viewerPrefs);
|
||||
} else if (bookEntity.getBookType() == BookFileType.EPUB) {
|
||||
EpubViewerPreferences epubSettings = bookViewerSettings.getEpubSettings();
|
||||
|
||||
@@ -35,9 +35,9 @@ CREATE INDEX IF NOT EXISTS idx_library_id ON book (library_id);
|
||||
CREATE TABLE IF NOT EXISTS book_metadata
|
||||
(
|
||||
book_id BIGINT NOT NULL PRIMARY KEY,
|
||||
title VARCHAR(1024),
|
||||
subtitle VARCHAR(1024),
|
||||
publisher VARCHAR(1024),
|
||||
title VARCHAR(255),
|
||||
subtitle VARCHAR(255),
|
||||
publisher VARCHAR(255),
|
||||
published_date DATE,
|
||||
description TEXT,
|
||||
isbn_13 VARCHAR(20),
|
||||
@@ -47,9 +47,9 @@ CREATE TABLE IF NOT EXISTS book_metadata
|
||||
language VARCHAR(10),
|
||||
rating FLOAT,
|
||||
review_count INT,
|
||||
cover VARCHAR(1024),
|
||||
cover VARCHAR(255),
|
||||
cover_updated_on TIMESTAMP NULL,
|
||||
series_name VARCHAR(1024),
|
||||
series_name VARCHAR(255),
|
||||
series_number INT,
|
||||
series_total INT,
|
||||
all_fields_locked BOOLEAN DEFAULT FALSE,
|
||||
@@ -103,6 +103,7 @@ CREATE TABLE IF NOT EXISTS pdf_viewer_preference
|
||||
(
|
||||
book_id BIGINT PRIMARY KEY,
|
||||
zoom VARCHAR(16) NULL,
|
||||
sidebar_visible BOOLEAN NULL,
|
||||
spread VARCHAR(16) NULL,
|
||||
CONSTRAINT fk_pdf_viewer_setting FOREIGN KEY (book_id) REFERENCES book (id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
@@ -5,11 +5,12 @@
|
||||
[page]="page"
|
||||
[rotation]="rotation"
|
||||
[scrollMode]="scrollMode"
|
||||
[sidebarVisible]="sidebarVisible"
|
||||
[zoom]="zoom"
|
||||
[spread]="spread"
|
||||
[sidebarVisible]="false"
|
||||
(pageChange)="onPageChange($event)"
|
||||
(zoomChange)="onZoomChange($event)"
|
||||
(sidebarVisibleChange)="onSidebarVisibleChange($event)"
|
||||
(pdfLoaded)="onPdfLoaded($event)"
|
||||
(spreadChange)="onSpreadChange($event)">
|
||||
</ngx-extended-pdf-viewer>
|
||||
|
||||
@@ -18,6 +18,7 @@ export class PdfViewerComponent implements OnInit, OnDestroy {
|
||||
rotation: 0 | 90 | 180 | 270 = 0;
|
||||
scrollMode: ScrollModeType = ScrollModeType.page;
|
||||
|
||||
sidebarVisible!: boolean;
|
||||
page!: number;
|
||||
spread!: 'off' | 'even' | 'odd';
|
||||
zoom!: number | string;
|
||||
@@ -78,6 +79,14 @@ export class PdfViewerComponent implements OnInit, OnDestroy {
|
||||
}
|
||||
}
|
||||
|
||||
onSidebarVisibleChange(visible: boolean): void {
|
||||
if (!this.pdfLoaded) return;
|
||||
if (visible !== this.sidebarVisible) {
|
||||
this.sidebarVisible = visible;
|
||||
this.updateViewerSetting();
|
||||
}
|
||||
}
|
||||
|
||||
onSpreadChange(spread: 'off' | 'even' | 'odd'): void {
|
||||
if (!this.pdfLoaded) return;
|
||||
if (spread !== this.spread) {
|
||||
@@ -90,6 +99,7 @@ export class PdfViewerComponent implements OnInit, OnDestroy {
|
||||
if (!this.pdfLoaded) return;
|
||||
const bookSetting: BookSetting = {
|
||||
pdfSettings: {
|
||||
sidebarVisible: this.sidebarVisible,
|
||||
spread: this.spread,
|
||||
zoom: this.zoom,
|
||||
}
|
||||
@@ -113,9 +123,11 @@ export class PdfViewerComponent implements OnInit, OnDestroy {
|
||||
this.updateProgress();
|
||||
if (this.pdfScope === 'global') {
|
||||
this.zoom = this.globalPdfSettings?.zoom || 'page-fit';
|
||||
this.sidebarVisible = this.globalPdfSettings?.sidebar ?? true;
|
||||
this.spread = this.globalPdfSettings?.spread || 'odd';
|
||||
} else {
|
||||
this.zoom = this.individualPdfSettings?.zoom || this.globalPdfSettings?.zoom || 'page-fit';
|
||||
this.sidebarVisible = this.individualPdfSettings?.sidebarVisible ?? this.globalPdfSettings?.sidebar ?? true;
|
||||
this.spread = this.individualPdfSettings?.spread || this.globalPdfSettings?.spread || 'odd';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +72,7 @@ export interface Award {
|
||||
|
||||
export interface PdfViewerSetting {
|
||||
zoom: string | number;
|
||||
sidebarVisible: boolean;
|
||||
spread: 'off' | 'even' | 'odd';
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user