diff --git a/apps/readest-app/next.config.mjs b/apps/readest-app/next.config.mjs index 5839bfc4..6965496f 100644 --- a/apps/readest-app/next.config.mjs +++ b/apps/readest-app/next.config.mjs @@ -7,7 +7,7 @@ const appPlatform = process.env['NEXT_PUBLIC_APP_PLATFORM']; const nextConfig = { // Ensure Next.js uses SSG instead of SSR // https://nextjs.org/docs/pages/building-your-application/deploying/static-exports - output: appPlatform === 'web' ? undefined : 'export', + output: appPlatform === 'web' || isDev ? undefined : 'export', // Note: This feature is required to use the Next.js Image component in SSG mode. // See https://nextjs.org/docs/messages/export-image-api for different workarounds. images: { diff --git a/apps/readest-app/src-tauri/capabilities/default.json b/apps/readest-app/src-tauri/capabilities/default.json index c8544789..52154dc2 100644 --- a/apps/readest-app/src-tauri/capabilities/default.json +++ b/apps/readest-app/src-tauri/capabilities/default.json @@ -44,6 +44,9 @@ "allow": [ { "url": "https://*.deepl.com" + }, + { + "url": "https://*.cloudflarestorage.com" } ] }, diff --git a/apps/readest-app/src/app/library/components/BookItem.tsx b/apps/readest-app/src/app/library/components/BookItem.tsx index 09e2fcfe..eb0186a0 100644 --- a/apps/readest-app/src/app/library/components/BookItem.tsx +++ b/apps/readest-app/src/app/library/components/BookItem.tsx @@ -52,12 +52,17 @@ const BookItem: React.FC = ({ />
- {book.title} +
+ {book.title} +
+
+
+ {book.author} +
{(selectedBooks.includes(book.hash) || clickedBookHash === book.hash) && (
@@ -73,12 +78,7 @@ const BookItem: React.FC = ({ )} -
+

{book.title} @@ -88,31 +88,29 @@ const BookItem: React.FC = ({ className={clsx('flex items-center', book.progress ? 'justify-between' : 'justify-end')} > {book.progress && } - {isWebAppPlatform() && ( -
- - -
- )} +
+ + +

diff --git a/apps/readest-app/src/app/library/components/Bookshelf.tsx b/apps/readest-app/src/app/library/components/Bookshelf.tsx index be6d5f19..0d596929 100644 --- a/apps/readest-app/src/app/library/components/Bookshelf.tsx +++ b/apps/readest-app/src/app/library/components/Bookshelf.tsx @@ -80,7 +80,6 @@ const Bookshelf: React.FC = ({ const [showDetailsBook, setShowDetailsBook] = useState(null); const makeBookAvailable = async (book: Book) => { - console.log('Make book available:', book); if (book.uploadedAt && !book.downloadedAt) { setLoading(true); let available = false; diff --git a/apps/readest-app/src/hooks/useSync.ts b/apps/readest-app/src/hooks/useSync.ts index a9e6d6f2..77704e12 100644 --- a/apps/readest-app/src/hooks/useSync.ts +++ b/apps/readest-app/src/hooks/useSync.ts @@ -1,4 +1,5 @@ import { useEffect, useState } from 'react'; +import { useEnv } from '@/context/EnvContext'; import { useSyncContext } from '@/context/SyncContext'; import { SyncData, SyncOp, SyncResult, SyncType } from '@/libs/sync'; import { useSettingsStore } from '@/store/settingsStore'; @@ -33,7 +34,8 @@ const computeMaxTimestamp = (records: BookDataRecord[]): number => { const SEVEN_DAYS_IN_MS = 7 * 24 * 60 * 60 * 1000; export function useSync(bookKey?: string) { - const { settings } = useSettingsStore(); + const { envConfig } = useEnv(); + const { settings, setSettings, saveSettings } = useSettingsStore(); const { getConfig, setConfig } = useBookDataStore(); const config = bookKey ? getConfig(bookKey) : null; @@ -92,10 +94,14 @@ export function useSync(bookKey?: string) { switch (type) { case 'books': settings.lastSyncedAtBooks = maxTime; + setSettings(settings); + saveSettings(envConfig, settings); break; case 'configs': if (!bookId) { settings.lastSyncedAtConfigs = maxTime; + setSettings(settings); + saveSettings(envConfig, settings); } else if (bookKey && config) { config.lastSyncedAtConfig = maxTime; setConfig(bookKey, config); @@ -104,6 +110,8 @@ export function useSync(bookKey?: string) { case 'notes': if (!bookId) { settings.lastSyncedAtNotes = maxTime; + setSettings(settings); + saveSettings(envConfig, settings); } else if (bookKey && config) { config.lastSyncedAtNotes = maxTime; setConfig(bookKey, config); diff --git a/apps/readest-app/src/libs/storage.ts b/apps/readest-app/src/libs/storage.ts index 150dfa67..e0f131ec 100644 --- a/apps/readest-app/src/libs/storage.ts +++ b/apps/readest-app/src/libs/storage.ts @@ -1,4 +1,4 @@ -import { getAPIBaseUrl } from '@/services/environment'; +import { getAPIBaseUrl, isWebAppPlatform } from '@/services/environment'; import { getAccessToken, getUserID } from '@/utils/access'; const API_ENDPOINTS = { @@ -43,10 +43,12 @@ export const uploadFile = async (file: File, bookHash?: string) => { }); const { uploadUrl } = await response.json(); - + const fetch = isWebAppPlatform() + ? window.fetch + : (await import('@tauri-apps/plugin-http')).fetch; const uploadResponse = await fetch(uploadUrl, { method: 'PUT', - body: file, + body: isWebAppPlatform() ? file : await file.arrayBuffer(), }); if (!uploadResponse.ok) { diff --git a/apps/readest-app/src/services/constants.ts b/apps/readest-app/src/services/constants.ts index 407de1aa..505be85c 100644 --- a/apps/readest-app/src/services/constants.ts +++ b/apps/readest-app/src/services/constants.ts @@ -117,6 +117,7 @@ export const WINDOWS_FONTS = [ 'Gabriola', 'Gadugi', 'Georgia', + 'Heiti', 'HoloLens MDL2 Assets', 'Impact', 'Ink Free', @@ -166,6 +167,7 @@ export const WINDOWS_FONTS = [ 'Verdana', 'Webdings', 'Wingdings', + 'XiHeiti', 'Yu Gothic', 'Yu Mincho', ]; @@ -201,6 +203,7 @@ export const MACOS_FONTS = [ 'Didot', 'DIN Alternate', 'DIN Condensed', + 'FangSong', 'Futura', 'Geneva', 'Georgia', @@ -250,6 +253,7 @@ export const MACOS_FONTS = [ 'Trattatello', 'Trebuchet MS', 'Verdana', + 'XiHeiti', 'Yu Mincho', 'Zapfino', ]; @@ -264,11 +268,14 @@ export const LINUX_FONTS = [ 'DejaVu Serif', 'Droid Sans', 'Droid Sans Mono', + 'FangSong', 'FreeMono', 'FreeSans', 'FreeSerif', 'Georgia', + 'Heiti', 'Impact', + 'Kaiti', 'Liberation Mono', 'Liberation Sans', 'Liberation Serif', @@ -294,6 +301,7 @@ export const LINUX_FONTS = [ 'Wingdings', 'WenQuanYi Micro Hei', 'WenQuanYi Zen Hei', + 'XiHeiti', ]; export const IOS_FONTS = [ @@ -301,7 +309,9 @@ export const IOS_FONTS = [ 'Avenir Next', 'Courier', 'Courier New', + 'FangSong', 'Georgia', + 'Heiti', 'Helvetica', 'Helvetica Neue', 'Hiragino Mincho', @@ -317,14 +327,18 @@ export const IOS_FONTS = [ 'Songti', 'Times New Roman', 'Verdana', + 'XiHeiti', ]; export const ANDROID_FONTS = [ 'Arial', 'Droid Sans', 'Droid Serif', + 'FangSong', 'FZLanTingHei', 'Georgia', + 'Heiti', + 'Kaiti', 'Noto Sans', 'Noto Sans CJK', 'Noto Sans JP', @@ -339,6 +353,7 @@ export const ANDROID_FONTS = [ 'STSong', 'Tahoma', 'Verdana', + 'XiHeiti', ]; export const ONE_COLUMN_MAX_INLINE_SIZE = 9999;