From 08e2d05985d69bcad595e28c588deb9a3f41ce3b Mon Sep 17 00:00:00 2001 From: chrox Date: Mon, 28 Oct 2024 14:47:12 +0100 Subject: [PATCH] Fix delete books and remove Documents permission request --- .../src-tauri/capabilities/default.json | 9 ---- apps/readest-app/src/services/appService.ts | 15 ++++++- apps/readest-app/src/services/constants.ts | 4 +- .../src/services/nativeAppService.ts | 44 +++---------------- apps/readest-app/src/store/readerStore.ts | 1 + apps/readest-app/src/types/settings.ts | 1 + apps/readest-app/src/types/system.ts | 1 + 7 files changed, 24 insertions(+), 51 deletions(-) diff --git a/apps/readest-app/src-tauri/capabilities/default.json b/apps/readest-app/src-tauri/capabilities/default.json index 3b077e3b..e38f4e29 100644 --- a/apps/readest-app/src-tauri/capabilities/default.json +++ b/apps/readest-app/src-tauri/capabilities/default.json @@ -6,15 +6,6 @@ "permissions": [ "core:default", "fs:default", - { - "identifier": "fs:scope-document-recursive", - "allow": [ - { - "path": "$DOCUMENT/**/*" - } - ], - "deny": [] - }, { "identifier": "fs:scope-appdata-recursive", "allow": [ diff --git a/apps/readest-app/src/services/appService.ts b/apps/readest-app/src/services/appService.ts index 8e79b1d8..63d65e32 100644 --- a/apps/readest-app/src/services/appService.ts +++ b/apps/readest-app/src/services/appService.ts @@ -15,7 +15,7 @@ import { import { RemoteFile } from '@/utils/file'; import { partialMD5 } from '@/utils/md5'; import { BookDoc, DocumentLoader } from '@/libs/document'; -import { DEFAULT_READSETTINGS } from './constants'; +import { DEFAULT_READSETTINGS, SYSTEM_SETTINGS_VERSION } from './constants'; export abstract class BaseAppService implements AppService { localBooksDir: string = ''; @@ -42,11 +42,14 @@ export abstract class BaseAppService implements AppService { await this.fs.exists(fp, base); const txt = await this.fs.readFile(fp, base, 'text'); settings = JSON.parse(txt as string); - if (this.isAppDataSandbox) { + const version = settings.version ?? 0; + if (this.isAppDataSandbox || version < SYSTEM_SETTINGS_VERSION) { settings.localBooksDir = await this.getInitBooksDir(); + settings.version = SYSTEM_SETTINGS_VERSION; } } catch { settings = { + version: SYSTEM_SETTINGS_VERSION, localBooksDir: await this.getInitBooksDir(), globalReadSettings: DEFAULT_READSETTINGS, }; @@ -140,6 +143,14 @@ export abstract class BaseAppService implements AppService { return books; } + async deleteBook(book: Book): Promise { + for (const fp of [getFilename(book), getCoverFilename(book)]) { + if (await this.fs.exists(fp, 'Books')) { + await this.fs.removeFile(fp, 'Books'); + } + } + } + async loadBookContent(book: Book): Promise { const fp = getFilename(book); const file = await new RemoteFile(this.fs.getURL(`${this.localBooksDir}/${fp}`), fp).open(); diff --git a/apps/readest-app/src/services/constants.ts b/apps/readest-app/src/services/constants.ts index cea0cb2a..ee0dd35e 100644 --- a/apps/readest-app/src/services/constants.ts +++ b/apps/readest-app/src/services/constants.ts @@ -11,5 +11,7 @@ export const DEFAULT_READSETTINGS: ReadSettings = { lineSpacing: 1.5, sideBarWidth: '20%', - isSideBarPinned: false, + isSideBarPinned: true, }; + +export const SYSTEM_SETTINGS_VERSION = 1; diff --git a/apps/readest-app/src/services/nativeAppService.ts b/apps/readest-app/src/services/nativeAppService.ts index 3a26b86c..6ccc5d27 100644 --- a/apps/readest-app/src/services/nativeAppService.ts +++ b/apps/readest-app/src/services/nativeAppService.ts @@ -12,7 +12,7 @@ import { } from '@tauri-apps/plugin-fs'; import { convertFileSrc } from '@tauri-apps/api/core'; import { open, message } from '@tauri-apps/plugin-dialog'; -import { join, documentDir, appDataDir } from '@tauri-apps/api/path'; +import { join, appDataDir } from '@tauri-apps/api/path'; import { type as osType } from '@tauri-apps/plugin-os'; import { Book } from '@/types/book'; @@ -24,19 +24,6 @@ import { LOCAL_BOOKS_SUBDIR } from './constants'; export const isMobile = ['android', 'ios'].includes(osType()); -import { getCurrentWindow } from '@tauri-apps/api/window'; - -export const initTitlebar = () => { - const appWindow = getCurrentWindow(); - document - .getElementById('titlebar-minimize')! - .addEventListener('click', () => appWindow.minimize()); - document - .getElementById('titlebar-maximize')! - .addEventListener('click', () => appWindow.toggleMaximize()); - document.getElementById('titlebar-close')!.addEventListener('click', () => appWindow.close()); -}; - export const resolvePath = ( fp: string, base: BaseDir, @@ -52,7 +39,7 @@ export const resolvePath = ( return { baseDir: BaseDirectory.AppLog, fp, base }; case 'Books': return { - baseDir: isMobile ? BaseDirectory.AppData : BaseDirectory.Document, + baseDir: BaseDirectory.AppData, fp: `${LOCAL_BOOKS_SUBDIR}/${fp}`, base, }; @@ -129,33 +116,12 @@ export class NativeAppService extends BaseAppService { fs = nativeFileSystem; isAppDataSandbox = isMobile; - resolvePath(fp: string, base: BaseDir): { baseDir: number; base: BaseDir; fp: string } { - switch (base) { - case 'Settings': - return { baseDir: BaseDirectory.AppConfig, fp, base }; - case 'Data': - return { baseDir: BaseDirectory.AppData, fp, base }; - case 'Cache': - return { baseDir: BaseDirectory.AppCache, fp, base }; - case 'Log': - return { baseDir: BaseDirectory.AppLog, fp, base }; - case 'Books': - return { - baseDir: BaseDirectory.Document, - fp: `${LOCAL_BOOKS_SUBDIR}/${fp}`, - base, - }; - default: - return { - baseDir: BaseDirectory.Temp, - fp, - base, - }; - } + override resolvePath(fp: string, base: BaseDir): { baseDir: number; base: BaseDir; fp: string } { + return resolvePath(fp, base); } async getInitBooksDir(): Promise { - return join(isMobile ? await appDataDir() : await documentDir(), LOCAL_BOOKS_SUBDIR); + return join(await appDataDir(), LOCAL_BOOKS_SUBDIR); } async selectDirectory(title: string): Promise { diff --git a/apps/readest-app/src/store/readerStore.ts b/apps/readest-app/src/store/readerStore.ts index a3b16c52..d8bd713b 100644 --- a/apps/readest-app/src/store/readerStore.ts +++ b/apps/readest-app/src/store/readerStore.ts @@ -76,6 +76,7 @@ export const useReaderStore = create((set, get) => ({ const bookIndex = library.findIndex((b) => b.hash === book.hash); if (bookIndex !== -1) { library.splice(bookIndex, 1); + appService.deleteBook(book); } set({ library }); appService.saveLibraryBooks(library); diff --git a/apps/readest-app/src/types/settings.ts b/apps/readest-app/src/types/settings.ts index 4a99c0b6..428c7da7 100644 --- a/apps/readest-app/src/types/settings.ts +++ b/apps/readest-app/src/types/settings.ts @@ -12,6 +12,7 @@ export interface ReadSettings { } export interface SystemSettings { + version: number; localBooksDir: string; globalReadSettings: ReadSettings; } diff --git a/apps/readest-app/src/types/system.ts b/apps/readest-app/src/types/system.ts index d2c7c5e5..17f7fcac 100644 --- a/apps/readest-app/src/types/system.ts +++ b/apps/readest-app/src/types/system.ts @@ -26,6 +26,7 @@ export interface AppService { loadSettings(): Promise; saveSettings(settings: SystemSettings): Promise; importBook(file: string | File, books: Book[], overwrite?: boolean): Promise; + deleteBook(book: Book): Promise; loadBookConfig(book: Book): Promise; saveBookConfig(book: Book, config: BookConfig): Promise; loadBookContent(book: Book): Promise;