Fix delete books and remove Documents permission request

This commit is contained in:
chrox
2024-10-28 14:47:12 +01:00
parent 7c3e70b8de
commit 08e2d05985
7 changed files with 24 additions and 51 deletions
@@ -6,15 +6,6 @@
"permissions": [
"core:default",
"fs:default",
{
"identifier": "fs:scope-document-recursive",
"allow": [
{
"path": "$DOCUMENT/**/*"
}
],
"deny": []
},
{
"identifier": "fs:scope-appdata-recursive",
"allow": [
+13 -2
View File
@@ -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<void> {
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<BookContent> {
const fp = getFilename(book);
const file = await new RemoteFile(this.fs.getURL(`${this.localBooksDir}/${fp}`), fp).open();
+3 -1
View File
@@ -11,5 +11,7 @@ export const DEFAULT_READSETTINGS: ReadSettings = {
lineSpacing: 1.5,
sideBarWidth: '20%',
isSideBarPinned: false,
isSideBarPinned: true,
};
export const SYSTEM_SETTINGS_VERSION = 1;
@@ -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<string> {
return join(isMobile ? await appDataDir() : await documentDir(), LOCAL_BOOKS_SUBDIR);
return join(await appDataDir(), LOCAL_BOOKS_SUBDIR);
}
async selectDirectory(title: string): Promise<string> {
@@ -76,6 +76,7 @@ export const useReaderStore = create<ReaderStore>((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);
+1
View File
@@ -12,6 +12,7 @@ export interface ReadSettings {
}
export interface SystemSettings {
version: number;
localBooksDir: string;
globalReadSettings: ReadSettings;
}
+1
View File
@@ -26,6 +26,7 @@ export interface AppService {
loadSettings(): Promise<SystemSettings>;
saveSettings(settings: SystemSettings): Promise<void>;
importBook(file: string | File, books: Book[], overwrite?: boolean): Promise<Book[]>;
deleteBook(book: Book): Promise<void>;
loadBookConfig(book: Book): Promise<BookConfig>;
saveBookConfig(book: Book, config: BookConfig): Promise<void>;
loadBookContent(book: Book): Promise<BookContent>;