diff --git a/apps/readest-app/public/locales/ar/translation.json b/apps/readest-app/public/locales/ar/translation.json index cd1ce23a..a7f6214e 100644 --- a/apps/readest-app/public/locales/ar/translation.json +++ b/apps/readest-app/public/locales/ar/translation.json @@ -660,5 +660,7 @@ "Outline": "مخطط", "Save Current Color": "حفظ اللون الحالي", "Quick Colors": "ألوان سريعة", - "Highlighter": "محدد النص" + "Highlighter": "محدد النص", + "Save Book Cover": "حفظ غلاف الكتاب", + "Auto-save last book cover": "حفظ غلاف الكتاب الأخير تلقائيًا" } diff --git a/apps/readest-app/public/locales/bn/translation.json b/apps/readest-app/public/locales/bn/translation.json index 69bebc61..1218b970 100644 --- a/apps/readest-app/public/locales/bn/translation.json +++ b/apps/readest-app/public/locales/bn/translation.json @@ -644,5 +644,7 @@ "Outline": "বাহিরের রেখা", "Save Current Color": "বর্তমান রঙ সংরক্ষণ করুন", "Quick Colors": "দ্রুত রংসমূহ", - "Highlighter": "হাইলাইটার" + "Highlighter": "হাইলাইটার", + "Save Book Cover": "বইয়ের মলাট সংরক্ষণ করুন", + "Auto-save last book cover": "শেষ বইয়ের মলাট স্বয়ংক্রিয়ভাবে সংরক্ষণ করুন" } diff --git a/apps/readest-app/public/locales/bo/translation.json b/apps/readest-app/public/locales/bo/translation.json index 863d405a..e7c26f75 100644 --- a/apps/readest-app/public/locales/bo/translation.json +++ b/apps/readest-app/public/locales/bo/translation.json @@ -640,5 +640,7 @@ "Outline": "མཐའ་ཐིག", "Save Current Color": "མིག་སྔའི་ཚོན་གཏན་འཁེལ་བྱེད།", "Quick Colors": "མྱུར་ཚོན།", - "Highlighter": "མདོག་ཚད་ཀྱི་བསྡུར་བ།" + "Highlighter": "མདོག་ཚད་ཀྱི་བསྡུར་བ།", + "Save Book Cover": "དེབ་གནས་བཅས་པའི་སྤྱོད་བྱས་མ་ཐུབ།", + "Auto-save last book cover": "དེབ་གནས་བཅས་པའི་སྤྱོད་བྱས་མ་ཐུབ།" } diff --git a/apps/readest-app/public/locales/de/translation.json b/apps/readest-app/public/locales/de/translation.json index 82b07c07..8ead8ba2 100644 --- a/apps/readest-app/public/locales/de/translation.json +++ b/apps/readest-app/public/locales/de/translation.json @@ -644,5 +644,7 @@ "Outline": "Umriss", "Save Current Color": "Aktuelle Farbe speichern", "Quick Colors": "Schnellfarben", - "Highlighter": "Textmarker" + "Highlighter": "Textmarker", + "Save Book Cover": "Buchcover speichern", + "Auto-save last book cover": "Letztes Buchcover automatisch speichern" } diff --git a/apps/readest-app/public/locales/el/translation.json b/apps/readest-app/public/locales/el/translation.json index 80378b42..df4bee83 100644 --- a/apps/readest-app/public/locales/el/translation.json +++ b/apps/readest-app/public/locales/el/translation.json @@ -644,5 +644,7 @@ "Outline": "Περίγραμμα", "Save Current Color": "Αποθήκευση τρέχουσας χρώματος", "Quick Colors": "Γρήγορα χρώματα", - "Highlighter": "Υπογραμμιστής" + "Highlighter": "Υπογραμμιστής", + "Save Book Cover": "Αποθήκευση εξωφύλλου βιβλίου", + "Auto-save last book cover": "Αυτόματη αποθήκευση τελευταίου εξωφύλλου βιβλίου" } diff --git a/apps/readest-app/public/locales/es/translation.json b/apps/readest-app/public/locales/es/translation.json index 25145bfa..01999160 100644 --- a/apps/readest-app/public/locales/es/translation.json +++ b/apps/readest-app/public/locales/es/translation.json @@ -648,5 +648,7 @@ "Outline": "Contorno", "Save Current Color": "Guardar Color Actual", "Quick Colors": "Colores Rápidos", - "Highlighter": "Resaltador" + "Highlighter": "Resaltador", + "Save Book Cover": "Guardar Portada del Libro", + "Auto-save last book cover": "Guardar automáticamente la última portada del libro" } diff --git a/apps/readest-app/public/locales/fa/translation.json b/apps/readest-app/public/locales/fa/translation.json index 133b973c..dcb64c4d 100644 --- a/apps/readest-app/public/locales/fa/translation.json +++ b/apps/readest-app/public/locales/fa/translation.json @@ -644,5 +644,7 @@ "Outline": "خط‌کشی", "Save Current Color": "ذخیره رنگ فعلی", "Quick Colors": "رنگ‌های سریع", - "Highlighter": "ماژیک هایلایت" + "Highlighter": "ماژیک هایلایت", + "Save Book Cover": "ذخیره جلد کتاب", + "Auto-save last book cover": "ذخیره خودکار آخرین جلد کتاب" } diff --git a/apps/readest-app/public/locales/fr/translation.json b/apps/readest-app/public/locales/fr/translation.json index fd750ac7..8a6ca0d2 100644 --- a/apps/readest-app/public/locales/fr/translation.json +++ b/apps/readest-app/public/locales/fr/translation.json @@ -648,5 +648,7 @@ "Outline": "Contour", "Save Current Color": "Enregistrer la Couleur Actuelle", "Quick Colors": "Couleurs Rapides", - "Highlighter": "Surligneur" + "Highlighter": "Surligneur", + "Save Book Cover": "Enregistrer la Couverture du Livre", + "Auto-save last book cover": "Enregistrer automatiquement la dernière couverture du livre" } diff --git a/apps/readest-app/public/locales/hi/translation.json b/apps/readest-app/public/locales/hi/translation.json index 7ff874a7..52a901d5 100644 --- a/apps/readest-app/public/locales/hi/translation.json +++ b/apps/readest-app/public/locales/hi/translation.json @@ -644,5 +644,7 @@ "Outline": "आउटलाइन", "Save Current Color": "वर्तमान रंग सहेजें", "Quick Colors": "त्वरित रंग", - "Highlighter": "हाइलाइटर" + "Highlighter": "हाइलाइटर", + "Save Book Cover": "बुक कवर सहेजें", + "Auto-save last book cover": "अंतिम पुस्तक कवर को स्वचालित रूप से सहेजें" } diff --git a/apps/readest-app/public/locales/id/translation.json b/apps/readest-app/public/locales/id/translation.json index 330ad4af..9cc5d513 100644 --- a/apps/readest-app/public/locales/id/translation.json +++ b/apps/readest-app/public/locales/id/translation.json @@ -640,5 +640,7 @@ "Outline": "Garis Besar", "Save Current Color": "Simpan Warna Saat Ini", "Quick Colors": "Warna Cepat", - "Highlighter": "Penyorot" + "Highlighter": "Penyorot", + "Save Book Cover": "Simpan Sampul Buku", + "Auto-save last book cover": "Simpan otomatis sampul buku terakhir" } diff --git a/apps/readest-app/public/locales/it/translation.json b/apps/readest-app/public/locales/it/translation.json index 1b3ac5df..93e5475c 100644 --- a/apps/readest-app/public/locales/it/translation.json +++ b/apps/readest-app/public/locales/it/translation.json @@ -648,5 +648,7 @@ "Outline": "Contorno", "Save Current Color": "Salva Colore Corrente", "Quick Colors": "Colori Veloci", - "Highlighter": "Evidenziatore" + "Highlighter": "Evidenziatore", + "Save Book Cover": "Salva Copertina del Libro", + "Auto-save last book cover": "Salva automaticamente l'ultima copertina del libro" } diff --git a/apps/readest-app/public/locales/ja/translation.json b/apps/readest-app/public/locales/ja/translation.json index e5f0091e..c05f1b2c 100644 --- a/apps/readest-app/public/locales/ja/translation.json +++ b/apps/readest-app/public/locales/ja/translation.json @@ -640,5 +640,7 @@ "Outline": "アウトライン", "Save Current Color": "現在の色を保存", "Quick Colors": "クイックカラー", - "Highlighter": "蛍光ペン" + "Highlighter": "蛍光ペン", + "Save Book Cover": "本のカバーを保存", + "Auto-save last book cover": "最後の本のカバーを自動保存" } diff --git a/apps/readest-app/public/locales/ko/translation.json b/apps/readest-app/public/locales/ko/translation.json index b58f0ce2..53ea4c68 100644 --- a/apps/readest-app/public/locales/ko/translation.json +++ b/apps/readest-app/public/locales/ko/translation.json @@ -640,5 +640,7 @@ "Outline": "윤곽선", "Save Current Color": "현재 색상 저장", "Quick Colors": "빠른 색상", - "Highlighter": "형광펜" + "Highlighter": "형광펜", + "Save Book Cover": "책 표지 저장", + "Auto-save last book cover": "마지막 책 표지 자동 저장" } diff --git a/apps/readest-app/public/locales/nl/translation.json b/apps/readest-app/public/locales/nl/translation.json index 7afe0fda..ba9dd90a 100644 --- a/apps/readest-app/public/locales/nl/translation.json +++ b/apps/readest-app/public/locales/nl/translation.json @@ -644,5 +644,7 @@ "Outline": "Omtrek", "Save Current Color": "Huidige kleur opslaan", "Quick Colors": "Snelle kleuren", - "Highlighter": "Marker" + "Highlighter": "Marker", + "Save Book Cover": "Opslaan boekomslag", + "Auto-save last book cover": "Automatisch opslaan laatste boekomslag" } diff --git a/apps/readest-app/public/locales/pl/translation.json b/apps/readest-app/public/locales/pl/translation.json index 9b94f266..01b00a14 100644 --- a/apps/readest-app/public/locales/pl/translation.json +++ b/apps/readest-app/public/locales/pl/translation.json @@ -652,5 +652,7 @@ "Outline": "Obrys", "Save Current Color": "Zapisz bieżący kolor", "Quick Colors": "Szybkie kolory", - "Highlighter": "Zakreślacz" + "Highlighter": "Zakreślacz", + "Save Book Cover": "Zapisz okładkę książki", + "Auto-save last book cover": "Automatyczne zapisywanie ostatniej okładki książki" } diff --git a/apps/readest-app/public/locales/pt/translation.json b/apps/readest-app/public/locales/pt/translation.json index 4eaa0875..d7f22aab 100644 --- a/apps/readest-app/public/locales/pt/translation.json +++ b/apps/readest-app/public/locales/pt/translation.json @@ -648,5 +648,7 @@ "Outline": "Contorno", "Save Current Color": "Salvar cor atual", "Quick Colors": "Cores rápidas", - "Highlighter": "Marcador" + "Highlighter": "Marcador", + "Save Book Cover": "Salvar Capa do Livro", + "Auto-save last book cover": "Salvar automaticamente a última capa do livro" } diff --git a/apps/readest-app/public/locales/ru/translation.json b/apps/readest-app/public/locales/ru/translation.json index 963a05a6..4e52d4c5 100644 --- a/apps/readest-app/public/locales/ru/translation.json +++ b/apps/readest-app/public/locales/ru/translation.json @@ -652,5 +652,7 @@ "Outline": "Контур", "Save Current Color": "Сохранить текущий цвет", "Quick Colors": "Быстрые цвета", - "Highlighter": "Маркер" + "Highlighter": "Маркер", + "Save Book Cover": "Сохранить обложку книги", + "Auto-save last book cover": "Автоматически сохранять последнюю обложку книги" } diff --git a/apps/readest-app/public/locales/si/translation.json b/apps/readest-app/public/locales/si/translation.json index 6d527b25..28d5a3c6 100644 --- a/apps/readest-app/public/locales/si/translation.json +++ b/apps/readest-app/public/locales/si/translation.json @@ -644,5 +644,7 @@ "Outline": "පරිසීමාව", "Save Current Color": "දැන් ඇති වර්ණය සුරකින්න", "Quick Colors": "ක්ෂණික වර්ණ", - "Highlighter": "ඉස්මතු කරන්නා" + "Highlighter": "ඉස්මතු කරන්නා", + "Save Book Cover": "පොත් ආවරණය සුරකින්න", + "Auto-save last book cover": "අවසන් පොත් ආවරණය ස්වයංක්‍රීයව සුරකින්න" } diff --git a/apps/readest-app/public/locales/sv/translation.json b/apps/readest-app/public/locales/sv/translation.json index 9fb9593b..d0e69e7d 100644 --- a/apps/readest-app/public/locales/sv/translation.json +++ b/apps/readest-app/public/locales/sv/translation.json @@ -644,5 +644,7 @@ "Outline": "Kontur", "Save Current Color": "Spara aktuell färg", "Quick Colors": "Snabba färger", - "Highlighter": "Markeringspenna" + "Highlighter": "Markeringspenna", + "Save Book Cover": "Spara bokomslag", + "Auto-save last book cover": "Automatiskt spara senaste bokomslag" } diff --git a/apps/readest-app/public/locales/ta/translation.json b/apps/readest-app/public/locales/ta/translation.json index 8a353c15..23531a33 100644 --- a/apps/readest-app/public/locales/ta/translation.json +++ b/apps/readest-app/public/locales/ta/translation.json @@ -644,5 +644,7 @@ "Outline": "வட்டம்", "Save Current Color": "தற்போதைய நிறத்தை சேமிக்கவும்", "Quick Colors": "விரைவு நிறங்கள்", - "Highlighter": "ஹைலைட்டர்" + "Highlighter": "ஹைலைட்டர்", + "Save Book Cover": "புத்தகக் கோப்பைச் சேமிக்கவும்", + "Auto-save last book cover": "அවසන් புத்தகக் கோப்பு காலியாக உள்ளது" } diff --git a/apps/readest-app/public/locales/th/translation.json b/apps/readest-app/public/locales/th/translation.json index 874aae51..bb1c78de 100644 --- a/apps/readest-app/public/locales/th/translation.json +++ b/apps/readest-app/public/locales/th/translation.json @@ -640,5 +640,7 @@ "Outline": "เส้นขอบ", "Save Current Color": "บันทึกสีปัจจุบัน", "Quick Colors": "สีด่วน", - "Highlighter": "ปากกาเน้นข้อความ" + "Highlighter": "ปากกาเน้นข้อความ", + "Save Book Cover": "บันทึกปกหนังสือ", + "Auto-save last book cover": "บันทึกปกหนังสือสุดท้ายโดยอัตโนมัติ" } diff --git a/apps/readest-app/public/locales/tr/translation.json b/apps/readest-app/public/locales/tr/translation.json index 4a149900..cb7788e4 100644 --- a/apps/readest-app/public/locales/tr/translation.json +++ b/apps/readest-app/public/locales/tr/translation.json @@ -644,5 +644,7 @@ "Outline": "Kontur", "Save Current Color": "Mevcut Rengi Kaydet", "Quick Colors": "Hızlı Renkler", - "Highlighter": "Vurgulayıcı" + "Highlighter": "Vurgulayıcı", + "Save Book Cover": "Kitap Kapağını Kaydet", + "Auto-save last book cover": "Son kitap kapağını otomatik olarak kaydet" } diff --git a/apps/readest-app/public/locales/uk/translation.json b/apps/readest-app/public/locales/uk/translation.json index 986652c5..9d9850d2 100644 --- a/apps/readest-app/public/locales/uk/translation.json +++ b/apps/readest-app/public/locales/uk/translation.json @@ -652,5 +652,7 @@ "Outline": "Контур", "Save Current Color": "Зберегти поточний колір", "Quick Colors": "Швидкі кольори", - "Highlighter": "Маркер" + "Highlighter": "Маркер", + "Save Book Cover": "Зберегти обкладинку книги", + "Auto-save last book cover": "Автоматично зберегти останню обкладинку книги" } diff --git a/apps/readest-app/public/locales/vi/translation.json b/apps/readest-app/public/locales/vi/translation.json index 5bc9a8b4..d987278a 100644 --- a/apps/readest-app/public/locales/vi/translation.json +++ b/apps/readest-app/public/locales/vi/translation.json @@ -640,5 +640,7 @@ "Outline": "Đường viền", "Save Current Color": "Lưu màu hiện tại", "Quick Colors": "Màu nhanh", - "Highlighter": "Bút đánh dấu" + "Highlighter": "Bút đánh dấu", + "Save Book Cover": "Lưu bìa sách", + "Auto-save last book cover": "Tự động lưu bìa sách cuối cùng" } diff --git a/apps/readest-app/public/locales/zh-CN/translation.json b/apps/readest-app/public/locales/zh-CN/translation.json index 12659872..4e3c70fc 100644 --- a/apps/readest-app/public/locales/zh-CN/translation.json +++ b/apps/readest-app/public/locales/zh-CN/translation.json @@ -640,5 +640,7 @@ "Outline": "轮廓", "Save Current Color": "保存当前颜色", "Quick Colors": "快速颜色", - "Highlighter": "荧光笔" + "Highlighter": "荧光笔", + "Save Book Cover": "保存书籍封面", + "Auto-save last book cover": "自动保存最后一本书的封面" } diff --git a/apps/readest-app/public/locales/zh-TW/translation.json b/apps/readest-app/public/locales/zh-TW/translation.json index b93d0f61..63b2630d 100644 --- a/apps/readest-app/public/locales/zh-TW/translation.json +++ b/apps/readest-app/public/locales/zh-TW/translation.json @@ -640,5 +640,7 @@ "Outline": "輪廓", "Save Current Color": "儲存目前顏色", "Quick Colors": "快速顏色", - "Highlighter": "螢光筆" + "Highlighter": "螢光筆", + "Save Book Cover": "保存書籍封面", + "Auto-save last book cover": "自動保存最後一本書的封面" } diff --git a/apps/readest-app/src/app/library/components/SettingsMenu.tsx b/apps/readest-app/src/app/library/components/SettingsMenu.tsx index 1750b26f..1483b5e1 100644 --- a/apps/readest-app/src/app/library/components/SettingsMenu.tsx +++ b/apps/readest-app/src/app/library/components/SettingsMenu.tsx @@ -53,6 +53,9 @@ const SettingsMenu: React.FC = ({ setIsDropdownOpen }) => { ); const [isTelemetryEnabled, setIsTelemetryEnabled] = useState(settings.telemetryEnabled); const [alwaysInForeground, setAlwaysInForeground] = useState(settings.alwaysInForeground); + const [savedBookCoverForLockScreen, setSavedBookCoverForLockScreen] = useState( + settings.savedBookCoverForLockScreen || '', + ); const iconSize = useResponsiveSize(16); const showAboutReadest = () => { @@ -169,6 +172,12 @@ const SettingsMenu: React.FC = ({ setIsDropdownOpen }) => { setSettingsDialogOpen(true); }; + const handleSetSavedBookCoverForLockScreen = () => { + const newValue = settings.savedBookCoverForLockScreen ? '' : 'default'; + saveSysSettings(envConfig, 'savedBookCoverForLockScreen', newValue); + setSavedBookCoverForLockScreen(newValue); + }; + const toggleAlwaysInForeground = async () => { const requestAlwaysInForeground = !settings.alwaysInForeground; @@ -299,7 +308,20 @@ const SettingsMenu: React.FC = ({ setIsDropdownOpen }) => {
    - + + {appService?.isAndroidApp && ( + + )}
diff --git a/apps/readest-app/src/app/reader/components/FoliateViewer.tsx b/apps/readest-app/src/app/reader/components/FoliateViewer.tsx index 9c564db8..98707285 100644 --- a/apps/readest-app/src/app/reader/components/FoliateViewer.tsx +++ b/apps/readest-app/src/app/reader/components/FoliateViewer.tsx @@ -50,6 +50,7 @@ import { TransformContext } from '@/services/transformers/types'; import { transformContent } from '@/services/transformService'; import { lockScreenOrientation } from '@/utils/bridge'; import { useTextTranslation } from '../hooks/useTextTranslation'; +import { useBookCoverAutoSave } from '../hooks/useAutoSaveBookCover'; import { manageSyntaxHighlighting } from '@/utils/highlightjs'; import { getViewInsets } from '@/utils/insets'; import { removeTabIndex } from '@/utils/a11y'; @@ -101,6 +102,7 @@ const FoliateViewer: React.FC<{ useUICSS(bookKey); useProgressSync(bookKey); useProgressAutoSave(bookKey); + useBookCoverAutoSave(bookKey); const { syncState, conflictDetails, resolveWithLocal, resolveWithRemote } = useKOSync(bookKey); useTextTranslation(bookKey, viewRef.current); diff --git a/apps/readest-app/src/app/reader/hooks/useAutoSaveBookCover.ts b/apps/readest-app/src/app/reader/hooks/useAutoSaveBookCover.ts new file mode 100644 index 00000000..63d6fe10 --- /dev/null +++ b/apps/readest-app/src/app/reader/hooks/useAutoSaveBookCover.ts @@ -0,0 +1,43 @@ +import { useCallback, useEffect } from 'react'; +import { useEnv } from '@/context/EnvContext'; +import { useBookDataStore } from '@/store/bookDataStore'; +import { useSettingsStore } from '@/store/settingsStore'; +import { throttle } from '@/utils/throttle'; +import { getCoverFilename } from '@/utils/book'; + +export const useBookCoverAutoSave = (bookKey: string) => { + const { envConfig, appService } = useEnv(); + + // eslint-disable-next-line react-hooks/exhaustive-deps + const saveBookCover = useCallback( + throttle( + () => { + setTimeout(async () => { + const settings = useSettingsStore.getState().settings; + const bookData = useBookDataStore.getState().getBookData(bookKey); + const book = bookData?.book; + const savedBookHash = settings.savedBookCoverForLockScreen; + if (appService && book && savedBookHash && savedBookHash !== book?.hash) { + const coverPath = await appService.resolveFilePath(getCoverFilename(book), 'Books'); + try { + await appService.copyFile(coverPath, 'last-book-cover.png', 'Images'); + settings.savedBookCoverForLockScreen = book.hash; + useSettingsStore.getState().setSettings(settings); + useSettingsStore.getState().saveSettings(envConfig, settings); + } catch (error) { + console.error('Failed to auto-save book cover for lock screen:', error); + } + } + }, 5000); + }, + 5000, + { emitLast: false }, + ), + [], + ); + + useEffect(() => { + saveBookCover(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); +}; diff --git a/apps/readest-app/src/services/nativeAppService.ts b/apps/readest-app/src/services/nativeAppService.ts index df23d829..da99a262 100644 --- a/apps/readest-app/src/services/nativeAppService.ts +++ b/apps/readest-app/src/services/nativeAppService.ts @@ -38,6 +38,7 @@ import { getOSPlatform, isContentURI, isValidURL } from '@/utils/misc'; import { getDirPath, getFilename } from '@/utils/path'; import { NativeFile, RemoteFile } from '@/utils/file'; import { copyURIToPath } from '@/utils/bridge'; +import { copyFiles } from '@/utils/files'; import { BaseAppService } from './appService'; import { @@ -78,7 +79,8 @@ const getPathResolver = ({ const getCustomBasePrefixSync = isCustomBaseDir ? (baseDir: BaseDir) => { return () => { - const leafDir = ['Settings', 'Data', 'Books', 'Fonts'].includes(baseDir) ? '' : baseDir; + const dataDirs = ['Settings', 'Data', 'Books', 'Fonts', 'Images']; + const leafDir = dataDirs.includes(baseDir) ? '' : baseDir; return leafDir ? `${customRootDir}/${leafDir}` : customRootDir!; }; } @@ -392,6 +394,33 @@ export class NativeAppService extends BaseAppService { }); } await this.prepareBooksDir(); + await this.runMigrations(); + } + + private CURRENT_MIGRATION_VERSION = 20251029; + + private async runMigrations() { + try { + const settings = await this.loadSettings(); + const lastMigrationVersion = settings.migrationVersion || 0; + + if (lastMigrationVersion < 20251029) { + try { + await this.migrate20251029(); + } catch (error) { + console.error('Error migrating to version 20251029:', error); + } + } + + if (lastMigrationVersion < this.CURRENT_MIGRATION_VERSION) { + await this.saveSettings({ + ...settings, + migrationVersion: this.CURRENT_MIGRATION_VERSION, + }); + } + } catch (error) { + console.error('Failed to run migrations:', error); + } } override resolvePath(fp: string, base: BaseDir): ResolvedPath { @@ -422,4 +451,16 @@ export class NativeAppService extends BaseAppService { }); return Array.isArray(selected) ? selected : selected ? [selected] : []; } + + async migrate20251029() { + console.log('Running migration 20251029 to update paths in Images dir...'); + const rootPath = await this.resolveFilePath('..', 'Data'); + const newDir = await this.fs.getPrefix('Images'); + const oldDir = await join(rootPath, 'Images', 'Readest', 'Images'); + + await copyFiles(this, oldDir, newDir); + + const dirToDelete = await join(rootPath, 'Images', 'Readest'); + await this.deleteDir(dirToDelete, 'None', true); + } } diff --git a/apps/readest-app/src/types/settings.ts b/apps/readest-app/src/types/settings.ts index e6602939..9497503e 100644 --- a/apps/readest-app/src/types/settings.ts +++ b/apps/readest-app/src/types/settings.ts @@ -56,6 +56,7 @@ export interface SystemSettings { openLastBooks: boolean; lastOpenBooks: string[]; autoImportBooksOnOpen: boolean; + savedBookCoverForLockScreen: string; telemetryEnabled: boolean; libraryViewMode: LibraryViewModeType; librarySortBy: LibrarySortByType; @@ -70,6 +71,8 @@ export interface SystemSettings { lastSyncedAtConfigs: number; lastSyncedAtNotes: number; + migrationVersion: number; + globalReadSettings: ReadSettings; globalViewSettings: ViewSettings; } diff --git a/apps/readest-app/src/utils/files.ts b/apps/readest-app/src/utils/files.ts new file mode 100644 index 00000000..88731e73 --- /dev/null +++ b/apps/readest-app/src/utils/files.ts @@ -0,0 +1,24 @@ +import { AppService, FileItem } from '@/types/system'; + +export const copyFiles = async (appService: AppService, srcDir: string, dstDir: string) => { + let filesToCopy: FileItem[] = []; + try { + filesToCopy = await appService.readDirectory(srcDir, 'None'); + } catch (error) { + throw new Error(`Dir ${srcDir} failed to read.`); + } + + for (let i = 0; i < filesToCopy.length; i++) { + const file = filesToCopy[i]!; + const srcPath = `${srcDir}/${file.path}`; + const destPath = `${dstDir}/${file.path}`; + await appService.copyFile(srcPath, destPath, 'None'); + } + + const filesCopied = await appService.readDirectory(dstDir, 'None'); + for (const file of filesToCopy) { + if (!filesCopied.find((f) => f.path === file.path && f.size === file.size)) { + throw new Error(`File ${file.path} failed to copy.`); + } + } +};