diff --git a/apps/readest-app/src-tauri/src/lib.rs b/apps/readest-app/src-tauri/src/lib.rs index c6685a46..1d25d548 100644 --- a/apps/readest-app/src-tauri/src/lib.rs +++ b/apps/readest-app/src-tauri/src/lib.rs @@ -191,9 +191,8 @@ pub fn run() { let app_handle = app.handle().clone(); app.listen("window-ready", move |_| { - app_handle - .get_webview_window("main") - .unwrap() + let webview = app_handle.get_webview_window("main").unwrap(); + webview .eval("window.__READEST_CLI_ACCESS = true;") .expect("Failed to set cli access config"); @@ -204,6 +203,19 @@ pub fn run() { { set_rounded_window(&app_handle, false); } + #[cfg(target_os = "linux")] + { + let is_appimage = std::env::var("APPIMAGE").is_ok() + || std::env::current_exe() + .map(|path| path.to_string_lossy().contains("/tmp/.mount_")) + .unwrap_or(false); + + let script = + format!("window.__READEST_UPDATER_DISABLED = {};", !is_appimage); + webview + .eval(&script) + .expect("Failed to set updater disabled config"); + } }); } diff --git a/apps/readest-app/src/app/library/components/SettingsMenu.tsx b/apps/readest-app/src/app/library/components/SettingsMenu.tsx index f5fd5474..5959cf20 100644 --- a/apps/readest-app/src/app/library/components/SettingsMenu.tsx +++ b/apps/readest-app/src/app/library/components/SettingsMenu.tsx @@ -135,7 +135,6 @@ const SettingsMenu: React.FC = ({ setIsDropdownOpen }) => { // eslint-disable-next-line react-hooks/exhaustive-deps }, [token]); - const isWebApp = isWebAppPlatform(); const avatarUrl = user?.user_metadata?.['picture'] || user?.user_metadata?.['avatar_url']; const userFullName = user?.user_metadata?.['full_name']; const userDisplayName = userFullName ? userFullName.split(' ')[0] : null; @@ -184,11 +183,13 @@ const SettingsMenu: React.FC = ({ setIsDropdownOpen }) => { onClick={toggleAutoImportBooksOnOpen} /> )} - + {isTauriAppPlatform() && ( + + )} {appService?.hasUpdater && ( = ({ setIsDropdownOpen }) => { />
- {isWebApp && } + {isWebAppPlatform() && } ); diff --git a/apps/readest-app/src/services/nativeAppService.ts b/apps/readest-app/src/services/nativeAppService.ts index 0b93c38c..137230df 100644 --- a/apps/readest-app/src/services/nativeAppService.ts +++ b/apps/readest-app/src/services/nativeAppService.ts @@ -30,6 +30,7 @@ import { LOCAL_BOOKS_SUBDIR } from './constants'; declare global { interface Window { IS_ROUNDED?: boolean; + __READEST_UPDATER_DISABLED?: boolean; } } @@ -222,7 +223,10 @@ export class NativeAppService extends BaseAppService { override hasRoundedWindow = !(OS_TYPE === 'ios' || OS_TYPE === 'android') && !!window.IS_ROUNDED; override hasSafeAreaInset = OS_TYPE === 'ios' || OS_TYPE === 'android'; override hasHaptics = OS_TYPE === 'ios' || OS_TYPE === 'android'; - override hasUpdater = OS_TYPE !== 'ios' && !process.env['NEXT_PUBLIC_DISABLE_UPDATER']; + override hasUpdater = + OS_TYPE !== 'ios' && + !process.env['NEXT_PUBLIC_DISABLE_UPDATER'] && + !window.__READEST_UPDATER_DISABLED; override resolvePath(fp: string, base: BaseDir): { baseDir: number; base: BaseDir; fp: string } { return resolvePath(fp, base); diff --git a/apps/readest-app/src/utils/file.ts b/apps/readest-app/src/utils/file.ts index aa9808db..5f42c0be 100644 --- a/apps/readest-app/src/utils/file.ts +++ b/apps/readest-app/src/utils/file.ts @@ -187,11 +187,11 @@ export class NativeFile extends File implements ClosableFile { return new DeferredBlob(dataPromise, contentType); } - override stream(): ReadableStream { + override stream(): ReadableStream> { const CHUNK_SIZE = 1024 * 1024; let offset = 0; - return new ReadableStream({ + return new ReadableStream>({ pull: async (controller) => { if (!this.#handle) { controller.error(new Error('File handle is not open'));