From 3dcab5a1ee6f567e4535aa04859a2ed3bf8a3308 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Fri, 27 Dec 2024 16:59:06 +0100 Subject: [PATCH] Various fixes (#56) * Add missing translation for progress synced toast * Graceful shutdown after all books closed, closes #50 * Throttle app update check to once every day * Avoid infinite loop to redirect to the login page, closes #54 --- apps/readest-app/i18next-scanner.config.js | 1 + .../public/locales/de/translation.json | 1 + .../public/locales/es/translation.json | 1 + .../public/locales/fr/translation.json | 1 + .../public/locales/id/translation.json | 1 + .../public/locales/it/translation.json | 1 + .../public/locales/ja/translation.json | 1 + .../public/locales/ko/translation.json | 1 + .../public/locales/pt/translation.json | 1 + .../public/locales/ru/translation.json | 1 + .../public/locales/tr/translation.json | 1 + .../public/locales/vi/translation.json | 1 + .../public/locales/zh-CN/translation.json | 1 + .../public/locales/zh-TW/translation.json | 1 + .../src-tauri/capabilities/default.json | 1 + apps/readest-app/src-tauri/src/lib.rs | 9 +++++++-- apps/readest-app/src/app/auth/page.tsx | 18 +++++++++++++++--- .../app/reader/components/ReaderContent.tsx | 18 +++++++++--------- .../src/app/reader/hooks/useProgressSync.ts | 4 +++- apps/readest-app/src/helpers/updater.ts | 9 +++++++++ apps/readest-app/src/services/constants.ts | 1 + apps/readest-app/src/store/bookDataStore.ts | 4 ++-- apps/readest-app/src/utils/window.ts | 12 ++++++++++++ 23 files changed, 73 insertions(+), 17 deletions(-) diff --git a/apps/readest-app/i18next-scanner.config.js b/apps/readest-app/i18next-scanner.config.js index c70aed40..a2400b9b 100644 --- a/apps/readest-app/i18next-scanner.config.js +++ b/apps/readest-app/i18next-scanner.config.js @@ -26,5 +26,6 @@ module.exports = { }, metadata: {}, allowDynamicKeys: true, + removeUnusedKeys: true, }, }; diff --git a/apps/readest-app/public/locales/de/translation.json b/apps/readest-app/public/locales/de/translation.json index 110734ae..5ee3fa06 100644 --- a/apps/readest-app/public/locales/de/translation.json +++ b/apps/readest-app/public/locales/de/translation.json @@ -74,6 +74,7 @@ "Parallel Read": "Paralleles Lesen", "Published:": "Veröffentlicht:", "Publisher:": "Verlag:", + "Reading progress synced": "Lesevorgang synchronisiert", "Reload Page": "Seite neu laden", "Reveal in File Explorer": "Im Datei-Explorer anzeigen", "Reveal in Finder": "Im Finder anzeigen", diff --git a/apps/readest-app/public/locales/es/translation.json b/apps/readest-app/public/locales/es/translation.json index 710123e2..59c62d73 100644 --- a/apps/readest-app/public/locales/es/translation.json +++ b/apps/readest-app/public/locales/es/translation.json @@ -74,6 +74,7 @@ "Parallel Read": "Lectura paralela", "Published:": "Publicado:", "Publisher:": "Editorial:", + "Reading progress synced": "Progreso de lectura sincronizado", "Reload Page": "Recargar página", "Reveal in File Explorer": "Mostrar en el Explorador de archivos", "Reveal in Finder": "Mostrar en Finder", diff --git a/apps/readest-app/public/locales/fr/translation.json b/apps/readest-app/public/locales/fr/translation.json index 82d89f57..3d487680 100644 --- a/apps/readest-app/public/locales/fr/translation.json +++ b/apps/readest-app/public/locales/fr/translation.json @@ -74,6 +74,7 @@ "Parallel Read": "Lecture parallèle", "Published:": "Publié :", "Publisher:": "Éditeur :", + "Reading progress synced": "Progression de lecture synchronisée", "Reload Page": "Recharger la page", "Reveal in File Explorer": "Afficher dans l'explorateur de fichiers", "Reveal in Finder": "Afficher dans le Finder", diff --git a/apps/readest-app/public/locales/id/translation.json b/apps/readest-app/public/locales/id/translation.json index d91f8e31..71fa279a 100644 --- a/apps/readest-app/public/locales/id/translation.json +++ b/apps/readest-app/public/locales/id/translation.json @@ -74,6 +74,7 @@ "Parallel Read": "Baca Paralel", "Published:": "Diterbitkan:", "Publisher:": "Penerbit:", + "Reading progress synced": "Progres membaca disinkronkan", "Reload Page": "Muat Ulang Halaman", "Reveal in File Explorer": "Tampilkan di File Explorer", "Reveal in Finder": "Tampilkan di Finder", diff --git a/apps/readest-app/public/locales/it/translation.json b/apps/readest-app/public/locales/it/translation.json index df029db4..bc21c4cf 100644 --- a/apps/readest-app/public/locales/it/translation.json +++ b/apps/readest-app/public/locales/it/translation.json @@ -74,6 +74,7 @@ "Parallel Read": "Lettura parallela", "Published:": "Pubblicato:", "Publisher:": "Editore:", + "Reading progress synced": "Progresso lettura sincronizzato", "Reload Page": "Ricarica pagina", "Reveal in File Explorer": "Mostra in Esplora file", "Reveal in Finder": "Mostra nel Finder", diff --git a/apps/readest-app/public/locales/ja/translation.json b/apps/readest-app/public/locales/ja/translation.json index 2da83b42..578ecc70 100644 --- a/apps/readest-app/public/locales/ja/translation.json +++ b/apps/readest-app/public/locales/ja/translation.json @@ -74,6 +74,7 @@ "Parallel Read": "並列読書", "Published:": "出版日:", "Publisher:": "出版社:", + "Reading progress synced": "読書進捗が同期されました", "Reload Page": "ページを再読み込み", "Reveal in File Explorer": "エクスプローラーで表示", "Reveal in Finder": "Finderで表示", diff --git a/apps/readest-app/public/locales/ko/translation.json b/apps/readest-app/public/locales/ko/translation.json index 2d4fe6b9..8a9ace1e 100644 --- a/apps/readest-app/public/locales/ko/translation.json +++ b/apps/readest-app/public/locales/ko/translation.json @@ -74,6 +74,7 @@ "Parallel Read": "병렬 읽기", "Published:": "출판일:", "Publisher:": "출판사:", + "Reading progress synced": "읽기 진행 상황 동기화됨", "Reload Page": "페이지 새로고침", "Reveal in File Explorer": "파일 탐색기에서 표시", "Reveal in Finder": "Finder에서 표시", diff --git a/apps/readest-app/public/locales/pt/translation.json b/apps/readest-app/public/locales/pt/translation.json index 8f550b73..f1952dcc 100644 --- a/apps/readest-app/public/locales/pt/translation.json +++ b/apps/readest-app/public/locales/pt/translation.json @@ -74,6 +74,7 @@ "Parallel Read": "Leitura Paralela", "Published:": "Publicado:", "Publisher:": "Editora:", + "Reading progress synced": "Progresso de leitura sincronizado", "Reload Page": "Recarregar Página", "Reveal in File Explorer": "Mostrar no Explorador de Arquivos", "Reveal in Finder": "Mostrar no Finder", diff --git a/apps/readest-app/public/locales/ru/translation.json b/apps/readest-app/public/locales/ru/translation.json index 53afd129..e6901264 100644 --- a/apps/readest-app/public/locales/ru/translation.json +++ b/apps/readest-app/public/locales/ru/translation.json @@ -74,6 +74,7 @@ "Parallel Read": "Параллельное чтение", "Published:": "Опубликовано:", "Publisher:": "Издатель:", + "Reading progress synced": "Синхронизирован прогресс чтения", "Reload Page": "Перезагрузить страницу", "Reveal in File Explorer": "Показать в проводнике", "Reveal in Finder": "Показать в Finder", diff --git a/apps/readest-app/public/locales/tr/translation.json b/apps/readest-app/public/locales/tr/translation.json index bb820fc7..0eb25a51 100644 --- a/apps/readest-app/public/locales/tr/translation.json +++ b/apps/readest-app/public/locales/tr/translation.json @@ -74,6 +74,7 @@ "Parallel Read": "Paralel Okuma", "Published:": "Yayınlanma:", "Publisher:": "Yayıncı:", + "Reading progress synced": "Okuma ilerlemesi senkronize edildi", "Reload Page": "Sayfayı Yenile", "Reveal in File Explorer": "Dosya Gezgininde Göster", "Reveal in Finder": "Finder'da Göster", diff --git a/apps/readest-app/public/locales/vi/translation.json b/apps/readest-app/public/locales/vi/translation.json index b39e1768..19e41a5a 100644 --- a/apps/readest-app/public/locales/vi/translation.json +++ b/apps/readest-app/public/locales/vi/translation.json @@ -74,6 +74,7 @@ "Parallel Read": "Đọc song song", "Published:": "Xuất bản:", "Publisher:": "Nhà xuất bản:", + "Reading progress synced": "Tiến độ đọc đã được đồng bộ", "Reload Page": "Tải lại trang", "Reveal in File Explorer": "Hiển thị trong File Explorer", "Reveal in Finder": "Hiển thị trong Finder", diff --git a/apps/readest-app/public/locales/zh-CN/translation.json b/apps/readest-app/public/locales/zh-CN/translation.json index 6d1691b4..1bc69524 100644 --- a/apps/readest-app/public/locales/zh-CN/translation.json +++ b/apps/readest-app/public/locales/zh-CN/translation.json @@ -74,6 +74,7 @@ "Parallel Read": "并排阅读", "Published:": "出版日期", "Publisher:": "出版商", + "Reading progress synced": "阅读进度已同步", "Reload Page": "重新加载页面", "Reveal in File Explorer": "在文件管理器中显示", "Reveal in Finder": "在访达中显示", diff --git a/apps/readest-app/public/locales/zh-TW/translation.json b/apps/readest-app/public/locales/zh-TW/translation.json index 890e9991..afc60e97 100644 --- a/apps/readest-app/public/locales/zh-TW/translation.json +++ b/apps/readest-app/public/locales/zh-TW/translation.json @@ -74,6 +74,7 @@ "Parallel Read": "並排閱讀", "Published:": "出版日期", "Publisher:": "出版商", + "Reading progress synced": "閱讀進度已同步", "Reload Page": "重新載入頁面", "Reveal in File Explorer": "在檔案管理器中顯示", "Reveal in Finder": "在訪達中顯示", diff --git a/apps/readest-app/src-tauri/capabilities/default.json b/apps/readest-app/src-tauri/capabilities/default.json index 5dfcf3fa..de94afd0 100644 --- a/apps/readest-app/src-tauri/capabilities/default.json +++ b/apps/readest-app/src-tauri/capabilities/default.json @@ -57,6 +57,7 @@ "shell:default", "updater:default", "process:default", + "process:allow-exit", "process:allow-restart", "cli:default", "oauth:allow-start", diff --git a/apps/readest-app/src-tauri/src/lib.rs b/apps/readest-app/src-tauri/src/lib.rs index 880f94e0..e29a6f34 100644 --- a/apps/readest-app/src-tauri/src/lib.rs +++ b/apps/readest-app/src-tauri/src/lib.rs @@ -73,6 +73,7 @@ async fn start_server(window: Window) -> Result { #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { let builder = tauri::Builder::default() + .plugin(tauri_plugin_process::init()) .plugin(tauri_plugin_updater::Builder::new().build()) .plugin(tauri_plugin_oauth::init()) .invoke_handler(tauri::generate_handler![start_server]) @@ -137,10 +138,14 @@ pub fn run() { #[cfg(target_os = "macos")] let win_builder = win_builder .decorations(true) - .title_bar_style(TitleBarStyle::Overlay).title(""); + .title_bar_style(TitleBarStyle::Overlay) + .title(""); #[cfg(not(target_os = "macos"))] - let win_builder = win_builder.decorations(false).transparent(true).title("Readest"); + let win_builder = win_builder + .decorations(false) + .transparent(true) + .title("Readest"); win_builder.build().unwrap(); // let win = win_builder.build().unwrap(); diff --git a/apps/readest-app/src/app/auth/page.tsx b/apps/readest-app/src/app/auth/page.tsx index 4accaa34..e3e439ae 100644 --- a/apps/readest-app/src/app/auth/page.tsx +++ b/apps/readest-app/src/app/auth/page.tsx @@ -9,15 +9,17 @@ import { FcGoogle } from 'react-icons/fc'; import { FaApple } from 'react-icons/fa'; import { VscAzure } from 'react-icons/vsc'; import { FaGithub } from 'react-icons/fa'; +import { IoArrowBack } from 'react-icons/io5'; import { useAuth } from '@/context/AuthContext'; import { supabase } from '@/utils/supabase'; import { useTheme } from '@/hooks/useTheme'; +import { useEnv } from '@/context/EnvContext'; +import { useSettingsStore } from '@/store/settingsStore'; import { isTauriAppPlatform } from '@/services/environment'; import { start, cancel, onUrl, onInvalidUrl } from '@fabianlars/tauri-plugin-oauth'; import { openUrl } from '@tauri-apps/plugin-opener'; import { handleAuthCallback } from '@/helpers/auth'; -import { IoArrowBack } from 'react-icons/io5'; type OAuthProvider = 'google' | 'apple' | 'azure' | 'github'; @@ -46,7 +48,9 @@ const ProviderLogin: React.FC = ({ provider, handleSignIn, Ic export default function AuthPage() { const router = useRouter(); const { login } = useAuth(); + const { envConfig } = useEnv(); const { isDarkMode } = useTheme(); + const { settings, setSettings, saveSettings } = useSettingsStore(); const [port, setPort] = useState(null); const isOAuthServerRunning = useRef(false); const [isMounted, setIsMounted] = useState(false); @@ -109,6 +113,14 @@ export default function AuthPage() { } }; + const handleGoBack = () => { + // Keep login false to avoid infinite loop to redirect to the login page + settings.keepLogin = false; + setSettings(settings); + saveSettings(envConfig, settings); + router.back(); + }; + useEffect(() => { if (!isTauriAppPlatform()) return; if (isOAuthServerRunning.current) return; @@ -147,7 +159,7 @@ export default function AuthPage() { return isTauriAppPlatform() ? (