forked from akai/readest
settings: add option to disable auto check updates (#279)
This commit is contained in:
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "Buch hochladen",
|
"Upload Book": "Buch hochladen",
|
||||||
"Auto Upload Books to Cloud": "Bücher automatisch in die Cloud hochladen",
|
"Auto Upload Books to Cloud": "Bücher automatisch in die Cloud hochladen",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% des Cloud-Speichers verwendet.",
|
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% des Cloud-Speichers verwendet.",
|
||||||
"Storage": "Speicher"
|
"Storage": "Speicher",
|
||||||
|
"Book deleted: {{title}}": "Buch gelöscht: {{title}}",
|
||||||
|
"Failed to delete book: {{title}}": "Fehler beim Löschen des Buches: {{title}}",
|
||||||
|
"Check Updates on Start": "Aktualisierungen beim Start prüfen"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "Ανέβασμα βιβλίου",
|
"Upload Book": "Ανέβασμα βιβλίου",
|
||||||
"Auto Upload Books to Cloud": "Αυτόματο ανέβασμα βιβλίων στο cloud",
|
"Auto Upload Books to Cloud": "Αυτόματο ανέβασμα βιβλίων στο cloud",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% της αποθήκευσης στο cloud χρησιμοποιήθηκε.",
|
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% της αποθήκευσης στο cloud χρησιμοποιήθηκε.",
|
||||||
"Storage": "Αποθήκευση"
|
"Storage": "Αποθήκευση",
|
||||||
|
"Book deleted: {{title}}": "Το βιβλίο με τίτλο {{title}} διαγράφηκε",
|
||||||
|
"Failed to delete book: {{title}}": "Αποτυχία διαγραφής βιβλίου: {{title}}",
|
||||||
|
"Check Updates on Start": "Έλεγχος ενημερώσεων κατά την εκκίνηση"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "Subir libro",
|
"Upload Book": "Subir libro",
|
||||||
"Auto Upload Books to Cloud": "Subir libros automáticamente a la nube",
|
"Auto Upload Books to Cloud": "Subir libros automáticamente a la nube",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% del almacenamiento en la nube utilizado.",
|
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% del almacenamiento en la nube utilizado.",
|
||||||
"Storage": "Almacenamiento"
|
"Storage": "Almacenamiento",
|
||||||
|
"Book deleted: {{title}}": "Libro eliminado: {{title}}",
|
||||||
|
"Failed to delete book: {{title}}": "Error al eliminar libro: {{title}}",
|
||||||
|
"Check Updates on Start": "Comprobar actualizaciones al iniciar"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "Télécharger un livre",
|
"Upload Book": "Télécharger un livre",
|
||||||
"Auto Upload Books to Cloud": "Télécharger automatiquement les livres dans le cloud",
|
"Auto Upload Books to Cloud": "Télécharger automatiquement les livres dans le cloud",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% de l'espace de stockage dans le cloud utilisé.",
|
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% de l'espace de stockage dans le cloud utilisé.",
|
||||||
"Storage": "Stockage"
|
"Storage": "Stockage",
|
||||||
|
"Book deleted: {{title}}": "Livre supprimé : {{title}}",
|
||||||
|
"Failed to delete book: {{title}}": "Échec de la suppression du livre : {{title}}",
|
||||||
|
"Check Updates on Start": "Vérifier les mises à jour au démarrage"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "पुस्तक अपलोड करें",
|
"Upload Book": "पुस्तक अपलोड करें",
|
||||||
"Auto Upload Books to Cloud": "पुस्तकें बादल में स्वचालित रूप से अपलोड करें",
|
"Auto Upload Books to Cloud": "पुस्तकें बादल में स्वचालित रूप से अपलोड करें",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% क्लाउड स्टोरेज का उपयोग किया गया है।",
|
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% क्लाउड स्टोरेज का उपयोग किया गया है।",
|
||||||
"Storage": "स्टोरेज"
|
"Storage": "स्टोरेज",
|
||||||
|
"Book deleted: {{title}}": "पुस्तक हटाई गई: {{title}}",
|
||||||
|
"Failed to delete book: {{title}}": "पुस्तक हटाने में विफल: {{title}}",
|
||||||
|
"Check Updates on Start": "शुरू में अपडेट जांचें"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "Unggah Buku",
|
"Upload Book": "Unggah Buku",
|
||||||
"Auto Upload Books to Cloud": "Unggah Buku Otomatis ke Cloud",
|
"Auto Upload Books to Cloud": "Unggah Buku Otomatis ke Cloud",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% dari Penyimpanan Cloud Digunakan.",
|
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% dari Penyimpanan Cloud Digunakan.",
|
||||||
"Storage": "Penyimpanan"
|
"Storage": "Penyimpanan",
|
||||||
|
"Book deleted: {{title}}": "Buku dihapus: {{title}}",
|
||||||
|
"Failed to delete book: {{title}}": "Gagal menghapus buku: {{title}}",
|
||||||
|
"Check Updates on Start": "Periksa Pembaruan saat Memulai"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "Carica libro",
|
"Upload Book": "Carica libro",
|
||||||
"Auto Upload Books to Cloud": "Carica libri automaticamente su cloud",
|
"Auto Upload Books to Cloud": "Carica libri automaticamente su cloud",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% dello spazio di archiviazione cloud utilizzato.",
|
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% dello spazio di archiviazione cloud utilizzato.",
|
||||||
"Storage": "Archiviazione"
|
"Storage": "Archiviazione",
|
||||||
|
"Book deleted: {{title}}": "Libro eliminato: {{title}}",
|
||||||
|
"Failed to delete book: {{title}}": "Eliminazione libro non riuscita: {{title}}",
|
||||||
|
"Check Updates on Start": "Controlla aggiornamenti all'avvio"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "書籍をアップロード",
|
"Upload Book": "書籍をアップロード",
|
||||||
"Auto Upload Books to Cloud": "書籍を自動的にクラウドにアップロード",
|
"Auto Upload Books to Cloud": "書籍を自動的にクラウドにアップロード",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "クラウドストレージの{{percentage}}%が使用されています。",
|
"{{percentage}}% of Cloud Storage Used.": "クラウドストレージの{{percentage}}%が使用されています。",
|
||||||
"Storage": "ストレージ"
|
"Storage": "ストレージ",
|
||||||
|
"Book deleted: {{title}}": "書籍が削除されました:{{title}}",
|
||||||
|
"Failed to delete book: {{title}}": "書籍の削除に失敗しました:{{title}}",
|
||||||
|
"Check Updates on Start": "開始時に更新を確認"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "책 업로드",
|
"Upload Book": "책 업로드",
|
||||||
"Auto Upload Books to Cloud": "책 자동으로 클라우드에 업로드",
|
"Auto Upload Books to Cloud": "책 자동으로 클라우드에 업로드",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "클라우드 저장소 사용량 {{percentage}}%.",
|
"{{percentage}}% of Cloud Storage Used.": "클라우드 저장소 사용량 {{percentage}}%.",
|
||||||
"Storage": "저장소"
|
"Storage": "저장소",
|
||||||
|
"Book deleted: {{title}}": "책 삭제됨: {{title}}",
|
||||||
|
"Failed to delete book: {{title}}": "책 삭제 실패: {{title}}",
|
||||||
|
"Check Updates on Start": "시작 시 업데이트 확인"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "Prześlij książkę",
|
"Upload Book": "Prześlij książkę",
|
||||||
"Auto Upload Books to Cloud": "Automatycznie przesyłaj książki do chmury",
|
"Auto Upload Books to Cloud": "Automatycznie przesyłaj książki do chmury",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% przestrzeni dyskowej w chmurze użytej.",
|
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% przestrzeni dyskowej w chmurze użytej.",
|
||||||
"Storage": "Przechowywanie"
|
"Storage": "Przechowywanie",
|
||||||
|
"Book deleted: {{title}}": "Książka usunięta: {{title}}",
|
||||||
|
"Failed to delete book: {{title}}": "Nie udało się usunąć książki: {{title}}",
|
||||||
|
"Check Updates on Start": "Sprawdź aktualizacje przy starcie"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "Enviar Livro",
|
"Upload Book": "Enviar Livro",
|
||||||
"Auto Upload Books to Cloud": "Enviar Livros para a Nuvem Automaticamente",
|
"Auto Upload Books to Cloud": "Enviar Livros para a Nuvem Automaticamente",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% do Armazenamento na Nuvem Usado.",
|
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% do Armazenamento na Nuvem Usado.",
|
||||||
"Storage": "Armazenamento"
|
"Storage": "Armazenamento",
|
||||||
|
"Book deleted: {{title}}": "Livro excluído: {{title}}",
|
||||||
|
"Failed to delete book: {{title}}": "Falha ao excluir livro: {{title}}",
|
||||||
|
"Check Updates on Start": "Verificar Atualizações ao Iniciar"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "Загрузить книгу",
|
"Upload Book": "Загрузить книгу",
|
||||||
"Auto Upload Books to Cloud": "Автоматическая загрузка книг в облако",
|
"Auto Upload Books to Cloud": "Автоматическая загрузка книг в облако",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% использовано облачного хранилища.",
|
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% использовано облачного хранилища.",
|
||||||
"Storage": "Хранилище"
|
"Storage": "Хранилище",
|
||||||
|
"Book deleted: {{title}}": "Книга удалена: {{title}}",
|
||||||
|
"Failed to delete book: {{title}}": "Не удалось удалить книгу: {{title}}",
|
||||||
|
"Check Updates on Start": "Проверять обновления при запуске"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "Kitap Yükle",
|
"Upload Book": "Kitap Yükle",
|
||||||
"Auto Upload Books to Cloud": "Kitapları Otomatik Olarak Buluta Yükle",
|
"Auto Upload Books to Cloud": "Kitapları Otomatik Olarak Buluta Yükle",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "Bulut Depolamanın %{{percentage}}'si kullanıldı.",
|
"{{percentage}}% of Cloud Storage Used.": "Bulut Depolamanın %{{percentage}}'si kullanıldı.",
|
||||||
"Storage": "Depolama"
|
"Storage": "Depolama",
|
||||||
|
"Book deleted: {{title}}": "Kitap silindi: {{title}}",
|
||||||
|
"Failed to delete book: {{title}}": "Kitap silinemedi: {{title}}",
|
||||||
|
"Check Updates on Start": "Başlangıçta Güncellemeleri Kontrol Et"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "Завантажити книгу",
|
"Upload Book": "Завантажити книгу",
|
||||||
"Auto Upload Books to Cloud": "Автоматично завантажувати книги в хмару",
|
"Auto Upload Books to Cloud": "Автоматично завантажувати книги в хмару",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% використано хмарного сховища.",
|
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% використано хмарного сховища.",
|
||||||
"Storage": "Сховище"
|
"Storage": "Сховище",
|
||||||
|
"Book deleted: {{title}}": "Книгу видалено: {{title}}",
|
||||||
|
"Failed to delete book: {{title}}": "Не вдалося видалити книгу: {{title}}",
|
||||||
|
"Check Updates on Start": "Перевіряти оновлення при запуску"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "Tải lên sách",
|
"Upload Book": "Tải lên sách",
|
||||||
"Auto Upload Books to Cloud": "Tự động tải sách lên đám mây",
|
"Auto Upload Books to Cloud": "Tự động tải sách lên đám mây",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% dung lượng lưu trữ đám mây đã sử dụng.",
|
"{{percentage}}% of Cloud Storage Used.": "{{percentage}}% dung lượng lưu trữ đám mây đã sử dụng.",
|
||||||
"Storage": "Lưu trữ"
|
"Storage": "Lưu trữ",
|
||||||
|
"Book deleted: {{title}}": "Sách đã xóa: {{title}}",
|
||||||
|
"Failed to delete book: {{title}}": "Không thể xóa sách: {{title}}",
|
||||||
|
"Check Updates on Start": "Kiểm tra cập nhật khi khởi động"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "上传书籍",
|
"Upload Book": "上传书籍",
|
||||||
"Auto Upload Books to Cloud": "自动上传书籍到云端",
|
"Auto Upload Books to Cloud": "自动上传书籍到云端",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "已使用 {{percentage}}% 云存储空间",
|
"{{percentage}}% of Cloud Storage Used.": "已使用 {{percentage}}% 云存储空间",
|
||||||
"Storage": "存储空间"
|
"Storage": "存储空间",
|
||||||
|
"Book deleted: {{title}}": "书籍已删除:{{title}}",
|
||||||
|
"Failed to delete book: {{title}}": "删除书籍失败:{{title}}",
|
||||||
|
"Check Updates on Start": "启动时检查更新"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -146,5 +146,8 @@
|
|||||||
"Upload Book": "上傳書籍",
|
"Upload Book": "上傳書籍",
|
||||||
"Auto Upload Books to Cloud": "自動上傳書籍到雲端",
|
"Auto Upload Books to Cloud": "自動上傳書籍到雲端",
|
||||||
"{{percentage}}% of Cloud Storage Used.": "已使用 {{percentage}}% 雲存儲空間",
|
"{{percentage}}% of Cloud Storage Used.": "已使用 {{percentage}}% 雲存儲空間",
|
||||||
"Storage": "存儲空間"
|
"Storage": "存儲空間",
|
||||||
|
"Book deleted: {{title}}": "書籍已刪除:{{title}}",
|
||||||
|
"Failed to delete book: {{title}}": "書籍刪除失敗:{{title}}",
|
||||||
|
"Check Updates on Start": "啟動時檢查更新"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { PiUserCircleCheck } from 'react-icons/pi';
|
|||||||
import { MdCheck } from 'react-icons/md';
|
import { MdCheck } from 'react-icons/md';
|
||||||
|
|
||||||
import { setAboutDialogVisible } from '@/components/AboutWindow';
|
import { setAboutDialogVisible } from '@/components/AboutWindow';
|
||||||
import { isWebAppPlatform } from '@/services/environment';
|
import { hasUpdater, isWebAppPlatform } from '@/services/environment';
|
||||||
import { DOWNLOAD_READEST_URL } from '@/services/constants';
|
import { DOWNLOAD_READEST_URL } from '@/services/constants';
|
||||||
import { useAuth } from '@/context/AuthContext';
|
import { useAuth } from '@/context/AuthContext';
|
||||||
import { useEnv } from '@/context/EnvContext';
|
import { useEnv } from '@/context/EnvContext';
|
||||||
@@ -30,6 +30,7 @@ const SettingsMenu: React.FC<BookMenuProps> = ({ setIsDropdownOpen }) => {
|
|||||||
const { settings, setSettings, saveSettings } = useSettingsStore();
|
const { settings, setSettings, saveSettings } = useSettingsStore();
|
||||||
const [quotas, setQuotas] = React.useState<QuotaType[]>([]);
|
const [quotas, setQuotas] = React.useState<QuotaType[]>([]);
|
||||||
const [isAutoUpload, setIsAutoUpload] = useState(settings.autoUpload);
|
const [isAutoUpload, setIsAutoUpload] = useState(settings.autoUpload);
|
||||||
|
const [isAutoCheckUpdates, setIsAutoCheckUpdates] = useState(settings.autoCheckUpdates);
|
||||||
|
|
||||||
const showAboutReadest = () => {
|
const showAboutReadest = () => {
|
||||||
setAboutDialogVisible(true);
|
setAboutDialogVisible(true);
|
||||||
@@ -69,6 +70,13 @@ const SettingsMenu: React.FC<BookMenuProps> = ({ setIsDropdownOpen }) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const toggleAutoCheckUpdates = () => {
|
||||||
|
settings.autoCheckUpdates = !settings.autoCheckUpdates;
|
||||||
|
setSettings(settings);
|
||||||
|
saveSettings(envConfig, settings);
|
||||||
|
setIsAutoCheckUpdates(settings.autoCheckUpdates);
|
||||||
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!user || !token) return;
|
if (!user || !token) return;
|
||||||
const storagPlan = getStoragePlanData(token);
|
const storagPlan = getStoragePlanData(token);
|
||||||
@@ -131,6 +139,13 @@ const SettingsMenu: React.FC<BookMenuProps> = ({ setIsDropdownOpen }) => {
|
|||||||
icon={isAutoUpload ? <MdCheck className='text-base-content' /> : undefined}
|
icon={isAutoUpload ? <MdCheck className='text-base-content' /> : undefined}
|
||||||
onClick={toggleAutoUploadBooks}
|
onClick={toggleAutoUploadBooks}
|
||||||
/>
|
/>
|
||||||
|
{hasUpdater() && (
|
||||||
|
<MenuItem
|
||||||
|
label={_('Check Updates on Start')}
|
||||||
|
icon={isAutoCheckUpdates ? <MdCheck className='text-base-content' /> : undefined}
|
||||||
|
onClick={toggleAutoCheckUpdates}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
<hr className='border-base-200 my-1' />
|
<hr className='border-base-200 my-1' />
|
||||||
<MenuItem label={_('Reload Page')} onClick={handleReloadPage} />
|
<MenuItem label={_('Reload Page')} onClick={handleReloadPage} />
|
||||||
<hr className='border-base-200 my-1' />
|
<hr className='border-base-200 my-1' />
|
||||||
|
|||||||
@@ -63,14 +63,18 @@ const LibraryPage = () => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
updateAppTheme('base-200');
|
updateAppTheme('base-200');
|
||||||
const doAppUpdates = async () => {
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
if (hasUpdater()) {
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const doCheckAppUpdates = async () => {
|
||||||
|
if (hasUpdater() && settings.autoCheckUpdates) {
|
||||||
await checkForAppUpdates(_);
|
await checkForAppUpdates(_);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
doAppUpdates();
|
doCheckAppUpdates();
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, []);
|
}, [settings]);
|
||||||
|
|
||||||
const processOpenWithFiles = React.useCallback(
|
const processOpenWithFiles = React.useCallback(
|
||||||
async (appService: AppService, openWithFiles: string[], libraryBooks: Book[]) => {
|
async (appService: AppService, openWithFiles: string[], libraryBooks: Book[]) => {
|
||||||
|
|||||||
@@ -5,20 +5,24 @@ import { useTheme } from '@/hooks/useTheme';
|
|||||||
import { hasUpdater } from '@/services/environment';
|
import { hasUpdater } from '@/services/environment';
|
||||||
import { checkForAppUpdates } from '@/helpers/updater';
|
import { checkForAppUpdates } from '@/helpers/updater';
|
||||||
import { useTranslation } from '@/hooks/useTranslation';
|
import { useTranslation } from '@/hooks/useTranslation';
|
||||||
|
import { useSettingsStore } from '@/store/settingsStore';
|
||||||
import Reader from './components/Reader';
|
import Reader from './components/Reader';
|
||||||
|
|
||||||
export default function Page() {
|
export default function Page() {
|
||||||
const _ = useTranslation();
|
const _ = useTranslation();
|
||||||
|
const { settings } = useSettingsStore();
|
||||||
|
|
||||||
useTheme();
|
useTheme();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const doAppUpdates = async () => {
|
const doCheckAppUpdates = async () => {
|
||||||
if (hasUpdater()) {
|
if (hasUpdater() && settings.autoCheckUpdates) {
|
||||||
await checkForAppUpdates(_);
|
await checkForAppUpdates(_);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
doAppUpdates();
|
doCheckAppUpdates();
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, []);
|
}, [settings]);
|
||||||
|
|
||||||
return <Reader />;
|
return <Reader />;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,13 @@ const MenuItem: React.FC<MenuItemProps> = ({
|
|||||||
>
|
>
|
||||||
<div className='flex items-center'>
|
<div className='flex items-center'>
|
||||||
{!noIcon && <span style={{ minWidth: `${iconSize}px` }}>{icon}</span>}
|
{!noIcon && <span style={{ minWidth: `${iconSize}px` }}>{icon}</span>}
|
||||||
<span className={clsx('ml-2 truncate text-base sm:max-w-32 sm:text-sm', labelClass)}>
|
<span
|
||||||
|
className={clsx(
|
||||||
|
'ml-2 truncate text-base sm:text-sm',
|
||||||
|
shortcut ? 'max-w-[60%]' : 'max-w-[90%]',
|
||||||
|
labelClass,
|
||||||
|
)}
|
||||||
|
>
|
||||||
{label}
|
{label}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -12,8 +12,9 @@ export const checkForAppUpdates = async (_: TranslationFunc) => {
|
|||||||
if (lastCheck && now - parseInt(lastCheck, 10) < CHECK_UPDATE_INTERVAL_SEC * 1000) return;
|
if (lastCheck && now - parseInt(lastCheck, 10) < CHECK_UPDATE_INTERVAL_SEC * 1000) return;
|
||||||
localStorage.setItem(LAST_CHECK_KEY, now.toString());
|
localStorage.setItem(LAST_CHECK_KEY, now.toString());
|
||||||
|
|
||||||
|
console.log('Checking for updates');
|
||||||
const update = await check();
|
const update = await check();
|
||||||
console.log('update found', update);
|
console.log('Update found', update);
|
||||||
if (update) {
|
if (update) {
|
||||||
const yes = await ask(
|
const yes = await ask(
|
||||||
`
|
`
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import {
|
|||||||
DEFAULT_TTS_CONFIG,
|
DEFAULT_TTS_CONFIG,
|
||||||
CLOUD_BOOKS_SUBDIR,
|
CLOUD_BOOKS_SUBDIR,
|
||||||
DEFAULT_MOBILE_VIEW_SETTINGS,
|
DEFAULT_MOBILE_VIEW_SETTINGS,
|
||||||
|
DEFAULT_SYSTEM_SETTINGS,
|
||||||
} from './constants';
|
} from './constants';
|
||||||
import { isWebAppPlatform } from './environment';
|
import { isWebAppPlatform } from './environment';
|
||||||
import { getOSPlatform, isValidURL } from '@/utils/misc';
|
import { getOSPlatform, isValidURL } from '@/utils/misc';
|
||||||
@@ -69,6 +70,7 @@ export abstract class BaseAppService implements AppService {
|
|||||||
settings.localBooksDir = await this.getInitBooksDir();
|
settings.localBooksDir = await this.getInitBooksDir();
|
||||||
settings.version = SYSTEM_SETTINGS_VERSION;
|
settings.version = SYSTEM_SETTINGS_VERSION;
|
||||||
}
|
}
|
||||||
|
settings = { ...DEFAULT_SYSTEM_SETTINGS, ...settings };
|
||||||
settings.globalReadSettings = { ...DEFAULT_READSETTINGS, ...settings.globalReadSettings };
|
settings.globalReadSettings = { ...DEFAULT_READSETTINGS, ...settings.globalReadSettings };
|
||||||
settings.globalViewSettings = {
|
settings.globalViewSettings = {
|
||||||
...DEFAULT_BOOK_LAYOUT,
|
...DEFAULT_BOOK_LAYOUT,
|
||||||
@@ -81,13 +83,9 @@ export abstract class BaseAppService implements AppService {
|
|||||||
};
|
};
|
||||||
} catch {
|
} catch {
|
||||||
settings = {
|
settings = {
|
||||||
|
...DEFAULT_SYSTEM_SETTINGS,
|
||||||
version: SYSTEM_SETTINGS_VERSION,
|
version: SYSTEM_SETTINGS_VERSION,
|
||||||
localBooksDir: await this.getInitBooksDir(),
|
localBooksDir: await this.getInitBooksDir(),
|
||||||
lastSyncedAtBooks: 0,
|
|
||||||
lastSyncedAtConfigs: 0,
|
|
||||||
lastSyncedAtNotes: 0,
|
|
||||||
keepLogin: false,
|
|
||||||
autoUpload: false,
|
|
||||||
globalReadSettings: DEFAULT_READSETTINGS,
|
globalReadSettings: DEFAULT_READSETTINGS,
|
||||||
globalViewSettings: {
|
globalViewSettings: {
|
||||||
...DEFAULT_BOOK_LAYOUT,
|
...DEFAULT_BOOK_LAYOUT,
|
||||||
@@ -97,7 +95,7 @@ export abstract class BaseAppService implements AppService {
|
|||||||
...DEFAULT_VIEW_CONFIG,
|
...DEFAULT_VIEW_CONFIG,
|
||||||
...DEFAULT_TTS_CONFIG,
|
...DEFAULT_TTS_CONFIG,
|
||||||
},
|
},
|
||||||
};
|
} as SystemSettings;
|
||||||
|
|
||||||
await this.fs.createDir('', 'Books', true);
|
await this.fs.createDir('', 'Books', true);
|
||||||
await this.fs.createDir('', base, true);
|
await this.fs.createDir('', base, true);
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
ViewConfig,
|
ViewConfig,
|
||||||
ViewSettings,
|
ViewSettings,
|
||||||
} from '@/types/book';
|
} from '@/types/book';
|
||||||
import { ReadSettings } from '@/types/settings';
|
import { ReadSettings, SystemSettings } from '@/types/settings';
|
||||||
import { UserStorageQuota } from '@/types/user';
|
import { UserStorageQuota } from '@/types/user';
|
||||||
|
|
||||||
export const LOCAL_BOOKS_SUBDIR = 'Readest/Books';
|
export const LOCAL_BOOKS_SUBDIR = 'Readest/Books';
|
||||||
@@ -16,6 +16,16 @@ export const CLOUD_BOOKS_SUBDIR = 'Readest/Books';
|
|||||||
export const SUPPORTED_FILE_EXTS = ['epub', 'mobi', 'azw', 'azw3', 'fb2', 'cbz', 'pdf'];
|
export const SUPPORTED_FILE_EXTS = ['epub', 'mobi', 'azw', 'azw3', 'fb2', 'cbz', 'pdf'];
|
||||||
export const FILE_ACCEPT_FORMATS = SUPPORTED_FILE_EXTS.map((ext) => `.${ext}`).join(', ');
|
export const FILE_ACCEPT_FORMATS = SUPPORTED_FILE_EXTS.map((ext) => `.${ext}`).join(', ');
|
||||||
|
|
||||||
|
export const DEFAULT_SYSTEM_SETTINGS: Partial<SystemSettings> = {
|
||||||
|
keepLogin: false,
|
||||||
|
autoUpload: false,
|
||||||
|
autoCheckUpdates: true,
|
||||||
|
|
||||||
|
lastSyncedAtBooks: 0,
|
||||||
|
lastSyncedAtConfigs: 0,
|
||||||
|
lastSyncedAtNotes: 0,
|
||||||
|
};
|
||||||
|
|
||||||
export const DEFAULT_READSETTINGS: ReadSettings = {
|
export const DEFAULT_READSETTINGS: ReadSettings = {
|
||||||
sideBarWidth: '15%',
|
sideBarWidth: '15%',
|
||||||
isSideBarPinned: true,
|
isSideBarPinned: true,
|
||||||
@@ -67,7 +77,6 @@ export const DEFAULT_BOOK_STYLE: BookStyle = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const DEFAULT_MOBILE_VIEW_SETTINGS: Partial<ViewSettings> = {
|
export const DEFAULT_MOBILE_VIEW_SETTINGS: Partial<ViewSettings> = {
|
||||||
defaultFontSize: 19,
|
|
||||||
fullJustification: false,
|
fullJustification: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,10 @@ export interface ReadSettings {
|
|||||||
export interface SystemSettings {
|
export interface SystemSettings {
|
||||||
version: number;
|
version: number;
|
||||||
localBooksDir: string;
|
localBooksDir: string;
|
||||||
|
|
||||||
keepLogin: boolean;
|
keepLogin: boolean;
|
||||||
autoUpload: boolean;
|
autoUpload: boolean;
|
||||||
|
autoCheckUpdates: boolean;
|
||||||
|
|
||||||
lastSyncedAtBooks: number;
|
lastSyncedAtBooks: number;
|
||||||
lastSyncedAtConfigs: number;
|
lastSyncedAtConfigs: number;
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import { ViewSettings } from '@/types/book';
|
|||||||
import { Palette } from '@/styles/themes';
|
import { Palette } from '@/styles/themes';
|
||||||
|
|
||||||
import fontfacesCSS from '!!raw-loader!../styles/fonts.css';
|
import fontfacesCSS from '!!raw-loader!../styles/fonts.css';
|
||||||
|
import { getOSPlatform } from './misc';
|
||||||
|
|
||||||
const getFontStyles = (
|
const getFontStyles = (
|
||||||
serif: string,
|
serif: string,
|
||||||
@@ -209,12 +210,15 @@ export const getStyles = (viewSettings: ViewSettings, themeCode: ThemeCode) => {
|
|||||||
themeCode.fg,
|
themeCode.fg,
|
||||||
themeCode.primary,
|
themeCode.primary,
|
||||||
);
|
);
|
||||||
|
// scale the font size on-the-fly so that we can sync the same font size on different devices
|
||||||
|
const isMobile = ['ios', 'android'].includes(getOSPlatform());
|
||||||
|
const fontScale = isMobile ? 1.25 : 1;
|
||||||
const fontStyles = getFontStyles(
|
const fontStyles = getFontStyles(
|
||||||
viewSettings.serifFont!,
|
viewSettings.serifFont!,
|
||||||
viewSettings.sansSerifFont!,
|
viewSettings.sansSerifFont!,
|
||||||
viewSettings.monospaceFont!,
|
viewSettings.monospaceFont!,
|
||||||
viewSettings.defaultFont!,
|
viewSettings.defaultFont!,
|
||||||
viewSettings.defaultFontSize!,
|
viewSettings.defaultFontSize! * fontScale,
|
||||||
viewSettings.overrideFont!,
|
viewSettings.overrideFont!,
|
||||||
);
|
);
|
||||||
const userStylesheet = viewSettings.userStylesheet!;
|
const userStylesheet = viewSettings.userStylesheet!;
|
||||||
|
|||||||
Reference in New Issue
Block a user