diff --git a/apps/readest-app/public/locales/de/translation.json b/apps/readest-app/public/locales/de/translation.json index 158ddce1..8b95af9c 100644 --- a/apps/readest-app/public/locales/de/translation.json +++ b/apps/readest-app/public/locales/de/translation.json @@ -75,7 +75,6 @@ "Notebook": "Notizbuch", "Notes": "Notizen", "Open": "Öffnen", - "Open Book": "Buch öffnen", "Original Text": "Originaltext", "Page": "Seite", "Paging Animation": "Blätter-Animation", @@ -161,5 +160,10 @@ "Untitled Group": "Unbenannte Gruppe", "Group Books": "Bücher gruppieren", "Remove From Group": "Aus Gruppe entfernen", - "Create New Group": "Neue Gruppe erstellen" + "Create New Group": "Neue Gruppe erstellen", + "Deselect Book": "Buch abwählen", + "Download Book": "Buch herunterladen", + "Deselect Group": "Gruppe abwählen", + "Select Group": "Gruppe auswählen", + "Keep Screen Awake": "Bildschirm aktiv halten" } diff --git a/apps/readest-app/public/locales/el/translation.json b/apps/readest-app/public/locales/el/translation.json index 4742f51d..67034cc3 100644 --- a/apps/readest-app/public/locales/el/translation.json +++ b/apps/readest-app/public/locales/el/translation.json @@ -75,7 +75,6 @@ "Notebook": "Σημειωματάριο", "Notes": "Σημειώσεις", "Open": "Άνοιγμα", - "Open Book": "Άνοιγμα βιβλίου", "Original Text": "Αρχικό κείμενο", "Page": "Σελίδα", "Paging Animation": "Κινούμενα σχέδια σελιδοποίησης", @@ -161,5 +160,10 @@ "Untitled Group": "Ομάδα χωρίς τίτλο", "Group Books": "Ομαδοποίηση βιβλίων", "Remove From Group": "Αφαίρεση από την ομάδα", - "Create New Group": "Δημιουργία νέας ομάδας" + "Create New Group": "Δημιουργία νέας ομάδας", + "Deselect Book": "Αποεπιλογή βιβλίου", + "Download Book": "Λήψη βιβλίου", + "Deselect Group": "Αποεπιλογή ομάδας", + "Select Group": "Επιλογή ομάδας", + "Keep Screen Awake": "Διατήρηση ενεργού οθόνης" } diff --git a/apps/readest-app/public/locales/es/translation.json b/apps/readest-app/public/locales/es/translation.json index 5c56f7ad..68b86046 100644 --- a/apps/readest-app/public/locales/es/translation.json +++ b/apps/readest-app/public/locales/es/translation.json @@ -75,7 +75,6 @@ "Notebook": "Cuaderno", "Notes": "Notas", "Open": "Abrir", - "Open Book": "Abrir libro", "Original Text": "Texto original", "Page": "Página", "Paging Animation": "Animación de paginación", @@ -161,5 +160,10 @@ "Untitled Group": "Grupo sin título", "Group Books": "Agrupar libros", "Remove From Group": "Eliminar del grupo", - "Create New Group": "Crear nuevo grupo" + "Create New Group": "Crear nuevo grupo", + "Deselect Book": "Deseleccionar libro", + "Download Book": "Descargar libro", + "Deselect Group": "Deseleccionar grupo", + "Select Group": "Seleccionar grupo", + "Keep Screen Awake": "Mantener pantalla activa" } diff --git a/apps/readest-app/public/locales/fr/translation.json b/apps/readest-app/public/locales/fr/translation.json index c3935809..5cbec8f7 100644 --- a/apps/readest-app/public/locales/fr/translation.json +++ b/apps/readest-app/public/locales/fr/translation.json @@ -75,7 +75,6 @@ "Notebook": "Carnet de notes", "Notes": "Notes", "Open": "Ouvrir", - "Open Book": "Ouvrir le livre", "Original Text": "Texte original", "Page": "Page", "Paging Animation": "Animation de page", @@ -161,5 +160,10 @@ "Untitled Group": "Groupe sans titre", "Group Books": "Regrouper les livres", "Remove From Group": "Retirer du groupe", - "Create New Group": "Créer un nouveau groupe" + "Create New Group": "Créer un nouveau groupe", + "Deselect Book": "Désélectionner le livre", + "Download Book": "Télécharger le livre", + "Deselect Group": "Désélectionner le groupe", + "Select Group": "Sélectionner le groupe", + "Keep Screen Awake": "Maintenir l'écran allumé" } diff --git a/apps/readest-app/public/locales/hi/translation.json b/apps/readest-app/public/locales/hi/translation.json index bdbf81ab..936626d1 100644 --- a/apps/readest-app/public/locales/hi/translation.json +++ b/apps/readest-app/public/locales/hi/translation.json @@ -75,7 +75,6 @@ "Notebook": "नोटबुक", "Notes": "नोट्स", "Open": "खोलें", - "Open Book": "पुस्तक खोलें", "Original Text": "मूल पाठ", "Page": "पृष्ठ", "Paging Animation": "पेजिंग एनीमेशन", @@ -161,5 +160,10 @@ "Untitled Group": "अभिनामित समूह", "Group Books": "समूह पुस्तकें", "Remove From Group": "समूह से हटाएं", - "Create New Group": "नया समूह बनाएं" + "Create New Group": "नया समूह बनाएं", + "Deselect Book": "पुस्तक का चयन रद्द करें", + "Download Book": "पुस्तक डाउनलोड करें", + "Deselect Group": "समूह का चयन रद्द करें", + "Select Group": "समूह चुनें", + "Keep Screen Awake": "स्क्रीन जागरूक रखें" } diff --git a/apps/readest-app/public/locales/id/translation.json b/apps/readest-app/public/locales/id/translation.json index ab48edce..8b9a79fb 100644 --- a/apps/readest-app/public/locales/id/translation.json +++ b/apps/readest-app/public/locales/id/translation.json @@ -75,7 +75,6 @@ "Notebook": "Buku Catatan", "Notes": "Catatan", "Open": "Buka", - "Open Book": "Buka Buku", "Original Text": "Teks Asli", "Page": "Halaman", "Paging Animation": "Animasi Halaman", @@ -161,5 +160,10 @@ "Untitled Group": "Grup Tanpa Judul", "Group Books": "Grupkan Buku", "Remove From Group": "Hapus dari Grup", - "Create New Group": "Buat Grup Baru" + "Create New Group": "Buat Grup Baru", + "Deselect Book": "Batalkan Pilihan Buku", + "Download Book": "Unduh Buku", + "Deselect Group": "Batalkan Pilihan Grup", + "Select Group": "Pilih Grup", + "Keep Screen Awake": "Biarkan Layar Tetap Hidup" } diff --git a/apps/readest-app/public/locales/it/translation.json b/apps/readest-app/public/locales/it/translation.json index 9493d53a..424594cf 100644 --- a/apps/readest-app/public/locales/it/translation.json +++ b/apps/readest-app/public/locales/it/translation.json @@ -75,7 +75,6 @@ "Notebook": "Quaderno", "Notes": "Note", "Open": "Apri", - "Open Book": "Apri libro", "Original Text": "Testo originale", "Page": "Pagina", "Paging Animation": "Animazione cambio pagina", @@ -161,5 +160,10 @@ "Untitled Group": "Gruppo senza titolo", "Group Books": "Raggruppa libri", "Remove From Group": "Rimuovi dal", - "Create New Group": "Crea nuovo gruppo" + "Create New Group": "Crea nuovo gruppo", + "Deselect Book": "Deseleziona libro", + "Download Book": "Scarica libro", + "Deselect Group": "Deseleziona gruppo", + "Select Group": "Seleziona gruppo", + "Keep Screen Awake": "Mantieni schermo attivo" } diff --git a/apps/readest-app/public/locales/ja/translation.json b/apps/readest-app/public/locales/ja/translation.json index a1ac29a8..e60b73b9 100644 --- a/apps/readest-app/public/locales/ja/translation.json +++ b/apps/readest-app/public/locales/ja/translation.json @@ -75,7 +75,6 @@ "Notebook": "ノート", "Notes": "メモ", "Open": "開く", - "Open Book": "書籍を開く", "Original Text": "原文", "Page": "ページ", "Paging Animation": "ページめくりアニメーション", @@ -161,5 +160,10 @@ "Untitled Group": "無題のグループ", "Group Books": "書籍をグループ化", "Remove From Group": "グループから削除", - "Create New Group": "新しいグループを作成" + "Create New Group": "新しいグループを作成", + "Deselect Book": "書籍の選択を解除", + "Download Book": "書籍をダウンロード", + "Deselect Group": "グループの選択を解除", + "Select Group": "グループを選択", + "Keep Screen Awake": "画面をオンのままにする" } diff --git a/apps/readest-app/public/locales/ko/translation.json b/apps/readest-app/public/locales/ko/translation.json index 6abb7b73..ddcac0fb 100644 --- a/apps/readest-app/public/locales/ko/translation.json +++ b/apps/readest-app/public/locales/ko/translation.json @@ -75,7 +75,6 @@ "Notebook": "노트북", "Notes": "메모", "Open": "열기", - "Open Book": "책 열기", "Original Text": "원본 텍스트", "Page": "페이지", "Paging Animation": "페이지 넘김 애니메이션", @@ -161,5 +160,10 @@ "Untitled Group": "제목 없는 그룹", "Group Books": "책 그룹화", "Remove From Group": "그룹에서 제거", - "Create New Group": "새 그룹 만들기" + "Create New Group": "새 그룹 만들기", + "Deselect Book": "책 선택 해제", + "Download Book": "책 다운로드", + "Deselect Group": "그룹 선택 해제", + "Select Group": "그룹 선택", + "Keep Screen Awake": "화면 켜짐 유지" } diff --git a/apps/readest-app/public/locales/pl/translation.json b/apps/readest-app/public/locales/pl/translation.json index 7b544a3e..7b3f2aff 100644 --- a/apps/readest-app/public/locales/pl/translation.json +++ b/apps/readest-app/public/locales/pl/translation.json @@ -75,7 +75,6 @@ "Notebook": "Notatnik", "Notes": "Notatki", "Open": "Otwórz", - "Open Book": "Otwórz książkę", "Original Text": "Tekst oryginalny", "Page": "Strona", "Paging Animation": "Animacja przewracania stron", @@ -161,5 +160,10 @@ "Untitled Group": "Grupa bez tytułu", "Group Books": "Grupuj książki", "Remove From Group": "Usuń z grupy", - "Create New Group": "Utwórz nową grupę" + "Create New Group": "Utwórz nową grupę", + "Deselect Book": "Odznacz książkę", + "Download Book": "Pobierz książkę", + "Deselect Group": "Odznacz grupę", + "Select Group": "Wybierz grupę", + "Keep Screen Awake": "Nie wygaszaj ekranu" } diff --git a/apps/readest-app/public/locales/pt/translation.json b/apps/readest-app/public/locales/pt/translation.json index 7faf65a9..e08782aa 100644 --- a/apps/readest-app/public/locales/pt/translation.json +++ b/apps/readest-app/public/locales/pt/translation.json @@ -75,7 +75,6 @@ "Notebook": "Caderno", "Notes": "Notas", "Open": "Abrir", - "Open Book": "Abrir Livro", "Original Text": "Texto Original", "Page": "Página", "Paging Animation": "Animação de Página", @@ -161,5 +160,10 @@ "Untitled Group": "Grupo Sem Título", "Group Books": "Agrupar Livros", "Remove From Group": "Remover do Grupo", - "Create New Group": "Criar Novo Grupo" + "Create New Group": "Criar Novo Grupo", + "Deselect Book": "Desmarcar Livro", + "Download Book": "Baixar Livro", + "Deselect Group": "Desmarcar Grupo", + "Select Group": "Selecionar Grupo", + "Keep Screen Awake": "Manter a Tela Ativa" } diff --git a/apps/readest-app/public/locales/ru/translation.json b/apps/readest-app/public/locales/ru/translation.json index a7674151..40b794c7 100644 --- a/apps/readest-app/public/locales/ru/translation.json +++ b/apps/readest-app/public/locales/ru/translation.json @@ -75,7 +75,6 @@ "Notebook": "Блокнот", "Notes": "Заметки", "Open": "Открыть", - "Open Book": "Открыть книгу", "Original Text": "Оригинальный текст", "Page": "Страница", "Paging Animation": "Анимация перелистывания", @@ -161,5 +160,10 @@ "Untitled Group": "Группа без названия", "Group Books": "Группировать книги", "Remove From Group": "Удалить из группы", - "Create New Group": "Создать новую группу" + "Create New Group": "Создать новую группу", + "Deselect Book": "Отменить выбор книги", + "Download Book": "Скачать книгу", + "Deselect Group": "Отменить выбор группы", + "Select Group": "Выбрать группу", + "Keep Screen Awake": "Не выключать экран" } diff --git a/apps/readest-app/public/locales/tr/translation.json b/apps/readest-app/public/locales/tr/translation.json index 0ec64762..18ef5255 100644 --- a/apps/readest-app/public/locales/tr/translation.json +++ b/apps/readest-app/public/locales/tr/translation.json @@ -75,7 +75,6 @@ "Notebook": "Not Defteri", "Notes": "Notlar", "Open": "Aç", - "Open Book": "Kitabı Aç", "Original Text": "Orijinal Metin", "Page": "Sayfa", "Paging Animation": "Sayfa Çevirme Animasyonu", @@ -161,5 +160,10 @@ "Untitled Group": "Başlıksız Grup", "Group Books": "Kitapları Grupla", "Remove From Group": "Grubu Kaldır", - "Create New Group": "Yeni Grup Oluştur" + "Create New Group": "Yeni Grup Oluştur", + "Deselect Book": "Kitabı Seçme", + "Download Book": "Kitabı İndir", + "Deselect Group": "Grubu Seçme", + "Select Group": "Grup Seç", + "Keep Screen Awake": "Ekranı Açık Tut" } diff --git a/apps/readest-app/public/locales/uk/translation.json b/apps/readest-app/public/locales/uk/translation.json index 18990d1d..968a9085 100644 --- a/apps/readest-app/public/locales/uk/translation.json +++ b/apps/readest-app/public/locales/uk/translation.json @@ -75,7 +75,6 @@ "Notebook": "Нотатник", "Notes": "Нотатки", "Open": "Відкрити", - "Open Book": "Відкрити книгу", "Original Text": "Оригінальний текст", "Page": "Сторінка", "Paging Animation": "Анімація гортання", @@ -161,5 +160,10 @@ "Untitled Group": "Група без назви", "Group Books": "Групувати книги", "Remove From Group": "Видалити з групи", - "Create New Group": "Створити нову групу" + "Create New Group": "Створити нову групу", + "Deselect Book": "Скасувати вибір книги", + "Download Book": "Завантажити книгу", + "Deselect Group": "Скасувати вибір групи", + "Select Group": "Вибрати групу", + "Keep Screen Awake": "Не вимикати екран" } diff --git a/apps/readest-app/public/locales/vi/translation.json b/apps/readest-app/public/locales/vi/translation.json index fac535fa..7e1d71ae 100644 --- a/apps/readest-app/public/locales/vi/translation.json +++ b/apps/readest-app/public/locales/vi/translation.json @@ -75,7 +75,6 @@ "Notebook": "Sổ ghi chép", "Notes": "Ghi chú", "Open": "Mở", - "Open Book": "Mở sách", "Original Text": "Văn bản gốc", "Page": "Trang", "Paging Animation": "Hiệu ứng lật trang", @@ -161,5 +160,10 @@ "Untitled Group": "Nhóm không có tiêu đề", "Group Books": "Nhóm sách", "Remove From Group": "Xóa khỏi nhóm", - "Create New Group": "Tạo nhóm mới" + "Create New Group": "Tạo nhóm mới", + "Deselect Book": "Bỏ chọn sách", + "Download Book": "Tải sách", + "Deselect Group": "Bỏ chọn nhóm", + "Select Group": "Chọn nhóm", + "Keep Screen Awake": "Giữ màn hình luôn bật" } diff --git a/apps/readest-app/public/locales/zh-CN/translation.json b/apps/readest-app/public/locales/zh-CN/translation.json index f44835b5..451be432 100644 --- a/apps/readest-app/public/locales/zh-CN/translation.json +++ b/apps/readest-app/public/locales/zh-CN/translation.json @@ -75,7 +75,6 @@ "Notebook": "笔记本", "Notes": "笔记", "Open": "打开", - "Open Book": "打开书籍", "Original Text": "原文", "Page": "页面", "Paging Animation": "翻页动画", @@ -161,5 +160,10 @@ "Untitled Group": "无标题分组", "Group Books": "分组书籍", "Remove From Group": "从分组中移除", - "Create New Group": "创建新分组" + "Create New Group": "创建新分组", + "Deselect Book": "取消选择书籍", + "Download Book": "下载书籍", + "Deselect Group": "取消选择分组", + "Select Group": "选择分组", + "Keep Screen Awake": "保持屏幕常亮" } diff --git a/apps/readest-app/public/locales/zh-TW/translation.json b/apps/readest-app/public/locales/zh-TW/translation.json index 8f8d0200..b7d89075 100644 --- a/apps/readest-app/public/locales/zh-TW/translation.json +++ b/apps/readest-app/public/locales/zh-TW/translation.json @@ -75,7 +75,6 @@ "Notebook": "筆記本", "Notes": "筆記", "Open": "打開", - "Open Book": "打開書籍", "Original Text": "原文", "Page": "頁面", "Paging Animation": "翻頁動畫", @@ -161,5 +160,10 @@ "Untitled Group": "無標題組", "Group Books": "分組書籍", "Remove From Group": "從組中移除", - "Create New Group": "創建新組" + "Create New Group": "創建新組", + "Deselect Book": "取消選擇書籍", + "Download Book": "下載書籍", + "Deselect Group": "取消選擇組", + "Select Group": "選擇組", + "Keep Screen Awake": "保持屏幕常亮" } diff --git a/apps/readest-app/src/app/library/components/SettingsMenu.tsx b/apps/readest-app/src/app/library/components/SettingsMenu.tsx index f189018d..5ce03a7c 100644 --- a/apps/readest-app/src/app/library/components/SettingsMenu.tsx +++ b/apps/readest-app/src/app/library/components/SettingsMenu.tsx @@ -31,6 +31,7 @@ const SettingsMenu: React.FC = ({ setIsDropdownOpen }) => { const [quotas, setQuotas] = React.useState([]); const [isAutoUpload, setIsAutoUpload] = useState(settings.autoUpload); const [isAutoCheckUpdates, setIsAutoCheckUpdates] = useState(settings.autoCheckUpdates); + const [isScreenWakeLock, setIsScreenWakeLock] = useState(settings.screenWakeLock); const showAboutReadest = () => { setAboutDialogVisible(true); @@ -77,6 +78,13 @@ const SettingsMenu: React.FC = ({ setIsDropdownOpen }) => { setIsAutoCheckUpdates(settings.autoCheckUpdates); }; + const toggleScreenWakeLock = () => { + settings.screenWakeLock = !settings.screenWakeLock; + setSettings(settings); + saveSettings(envConfig, settings); + setIsScreenWakeLock(settings.screenWakeLock); + }; + useEffect(() => { if (!user || !token) return; const storagPlan = getStoragePlanData(token); @@ -146,6 +154,11 @@ const SettingsMenu: React.FC = ({ setIsDropdownOpen }) => { onClick={toggleAutoCheckUpdates} /> )} + : undefined} + onClick={toggleScreenWakeLock} + />

diff --git a/apps/readest-app/src/app/library/page.tsx b/apps/readest-app/src/app/library/page.tsx index 41dc5435..fb0a7647 100644 --- a/apps/readest-app/src/app/library/page.tsx +++ b/apps/readest-app/src/app/library/page.tsx @@ -33,6 +33,7 @@ import Spinner from '@/components/Spinner'; import LibraryHeader from './components/LibraryHeader'; import Bookshelf from './components/Bookshelf'; import BookDetailModal from '@/components/BookDetailModal'; +import { useScreenWakeLock } from '@/hooks/useScreenWakeLock'; const LibraryPage = () => { const router = useRouter(); @@ -65,6 +66,7 @@ const LibraryPage = () => { }); usePullToRefresh(containerRef, pullLibrary); + useScreenWakeLock(settings.screenWakeLock); useEffect(() => { updateAppTheme('base-200'); diff --git a/apps/readest-app/src/app/reader/components/Reader.tsx b/apps/readest-app/src/app/reader/components/Reader.tsx index 2ee238eb..0527a90c 100644 --- a/apps/readest-app/src/app/reader/components/Reader.tsx +++ b/apps/readest-app/src/app/reader/components/Reader.tsx @@ -8,6 +8,7 @@ import { useEnv } from '@/context/EnvContext'; import { useTheme } from '@/hooks/useTheme'; import { useLibraryStore } from '@/store/libraryStore'; import { useSettingsStore } from '@/store/settingsStore'; +import { useScreenWakeLock } from '@/hooks/useScreenWakeLock'; import { AboutWindow } from '@/components/AboutWindow'; import { Toast } from '@/components/Toast'; import ReaderContent from './ReaderContent'; @@ -19,6 +20,7 @@ const Reader: React.FC<{ ids?: string }> = ({ ids }) => { const isInitiating = useRef(false); const { updateAppTheme } = useTheme(); + useScreenWakeLock(settings.screenWakeLock); useEffect(() => { updateAppTheme('base-100'); diff --git a/apps/readest-app/src/hooks/useScreenWakeLock.ts b/apps/readest-app/src/hooks/useScreenWakeLock.ts new file mode 100644 index 00000000..2b5c9969 --- /dev/null +++ b/apps/readest-app/src/hooks/useScreenWakeLock.ts @@ -0,0 +1,39 @@ +import { useEffect, useRef } from 'react'; + +export const useScreenWakeLock = (lock: boolean) => { + const wakeLockRef = useRef(null); + + useEffect(() => { + const requestWakeLock = async () => { + try { + if ('wakeLock' in navigator) { + wakeLockRef.current = await navigator.wakeLock.request('screen'); + + wakeLockRef.current.addEventListener('release', () => { + wakeLockRef.current = null; + }); + + console.log('Wake lock acquired'); + } + } catch (err) { + console.error('Failed to acquire wake lock:', err); + } + }; + + if (lock) { + requestWakeLock(); + } else if (wakeLockRef.current) { + wakeLockRef.current.release(); + wakeLockRef.current = null; + console.log('Wake lock released'); + } + + return () => { + if (wakeLockRef.current) { + wakeLockRef.current.release(); + wakeLockRef.current = null; + console.log('Wake lock released'); + } + }; + }, [lock]); +}; diff --git a/apps/readest-app/src/services/constants.ts b/apps/readest-app/src/services/constants.ts index 06c2b252..1b1d6d74 100644 --- a/apps/readest-app/src/services/constants.ts +++ b/apps/readest-app/src/services/constants.ts @@ -22,6 +22,7 @@ export const DEFAULT_SYSTEM_SETTINGS: Partial = { keepLogin: false, autoUpload: true, autoCheckUpdates: true, + screenWakeLock: true, lastSyncedAtBooks: 0, lastSyncedAtConfigs: 0, diff --git a/apps/readest-app/src/types/settings.ts b/apps/readest-app/src/types/settings.ts index 41077f86..92807b69 100644 --- a/apps/readest-app/src/types/settings.ts +++ b/apps/readest-app/src/types/settings.ts @@ -21,6 +21,7 @@ export interface SystemSettings { keepLogin: boolean; autoUpload: boolean; autoCheckUpdates: boolean; + screenWakeLock: boolean; lastSyncedAtBooks: number; lastSyncedAtConfigs: number;