forked from akai/readest
Fix delete books and remove Documents permission request
This commit is contained in:
@@ -6,15 +6,6 @@
|
||||
"permissions": [
|
||||
"core:default",
|
||||
"fs:default",
|
||||
{
|
||||
"identifier": "fs:scope-document-recursive",
|
||||
"allow": [
|
||||
{
|
||||
"path": "$DOCUMENT/**/*"
|
||||
}
|
||||
],
|
||||
"deny": []
|
||||
},
|
||||
{
|
||||
"identifier": "fs:scope-appdata-recursive",
|
||||
"allow": [
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -12,6 +12,7 @@ export interface ReadSettings {
|
||||
}
|
||||
|
||||
export interface SystemSettings {
|
||||
version: number;
|
||||
localBooksDir: string;
|
||||
globalReadSettings: ReadSettings;
|
||||
}
|
||||
|
||||
@@ -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>;
|
||||
|
||||
Reference in New Issue
Block a user