diff --git a/App.tsx b/App.tsx index e3f87ccc..796a3fb0 100644 --- a/App.tsx +++ b/App.tsx @@ -1,11 +1,10 @@ -import 'react-native-gesture-handler'; import 'react-native-url-polyfill/auto'; import { enableFreeze } from 'react-native-screens'; enableFreeze(true); import React from 'react'; -import { StatusBar } from 'react-native'; +import { StatusBar, StyleSheet } from 'react-native'; import { GestureHandlerRootView } from 'react-native-gesture-handler'; import LottieSplashScreen from 'react-native-lottie-splash-screen'; import { SafeAreaProvider } from 'react-native-safe-area-context'; @@ -24,6 +23,8 @@ Notifications.setNotificationHandler({ shouldShowAlert: true, shouldPlaySound: true, shouldSetBadge: true, + shouldShowBanner: true, + shouldShowList: true, }; }, }); @@ -33,7 +34,7 @@ LottieSplashScreen.hide(); const App = () => { return ( - + @@ -49,3 +50,9 @@ const App = () => { }; export default App; + +const styles = StyleSheet.create({ + flex: { + flex: 1, + }, +}); diff --git a/src/components/List/List.tsx b/src/components/List/List.tsx index a60602eb..42804124 100644 --- a/src/components/List/List.tsx +++ b/src/components/List/List.tsx @@ -92,7 +92,6 @@ const Divider = ({ theme }: { theme: ThemeColors }) => ( const InfoItem = ({ title, - icon = 'information-outline', theme, style, }: { @@ -102,7 +101,11 @@ const InfoItem = ({ style?: StyleProp; }) => ( - + {title} diff --git a/src/database/queries/NovelQueries.ts b/src/database/queries/NovelQueries.ts index 5a14c015..0947f07a 100644 --- a/src/database/queries/NovelQueries.ts +++ b/src/database/queries/NovelQueries.ts @@ -78,11 +78,14 @@ export const getNovelById = async (novelId: number) => { export const getNovelByPath = ( novelPath: string, pluginId: string, -): NovelInfo | null => { +): NovelInfo | undefined => { const res = getFirstSync([ 'SELECT * FROM Novel WHERE path = ? AND pluginId = ?', [novelPath, pluginId], ]); + if (!res) { + return undefined; + } return res; }; diff --git a/src/database/utils/helpers.tsx b/src/database/utils/helpers.tsx index f827589f..fd60c61f 100644 --- a/src/database/utils/helpers.tsx +++ b/src/database/utils/helpers.tsx @@ -90,7 +90,8 @@ export function getFirstSync(queryObject: QueryObject) { return defaultQuerySync('getFirstSync', queryObject, null); } -type TransactionObject = [query, ...params: SQLiteBindValue[]]; +type params = SQLiteBindValue[]; +type TransactionObject = [query, ...params]; export async function transactionAsync(transactionObject: TransactionObject[]) { await db.withTransactionAsync(async () => { diff --git a/src/navigators/types/index.ts b/src/navigators/types/index.ts index 53540d7a..1b7932cc 100644 --- a/src/navigators/types/index.ts +++ b/src/navigators/types/index.ts @@ -84,9 +84,12 @@ export type SettingsStackParamList = { RespositorySettings: { url?: string } | undefined; }; -export type NovelScreenProps = StackScreenProps; +export type NovelScreenProps = StackScreenProps< + ReaderStackParamList & RootStackParamList, + 'Novel' +>; export type ChapterScreenProps = StackScreenProps< - ReaderStackParamList, + ReaderStackParamList & RootStackParamList, 'Chapter' >; export type ReaderStackParamList = { diff --git a/src/screens/WebviewScreen/components/Appbar.tsx b/src/screens/WebviewScreen/components/Appbar.tsx index c945eb3c..65044f25 100644 --- a/src/screens/WebviewScreen/components/Appbar.tsx +++ b/src/screens/WebviewScreen/components/Appbar.tsx @@ -11,7 +11,7 @@ interface AppbarProps { theme: ThemeColors; canGoBack: boolean; canGoForward: boolean; - webView: RefObject; + webView: RefObject; setMenuVisible: (value: boolean) => void; goBack: () => void; } diff --git a/src/screens/WebviewScreen/components/Menu.tsx b/src/screens/WebviewScreen/components/Menu.tsx index 1a4c413e..a7a7dd4b 100644 --- a/src/screens/WebviewScreen/components/Menu.tsx +++ b/src/screens/WebviewScreen/components/Menu.tsx @@ -11,7 +11,7 @@ import { showToast } from '@utils/showToast'; interface MenuProps { theme: ThemeColors; currentUrl: string; - webView: RefObject; + webView: RefObject; setMenuVisible: (value: boolean) => void; } diff --git a/src/screens/more/MoreScreen.tsx b/src/screens/more/MoreScreen.tsx index 6380af83..c429b732 100644 --- a/src/screens/more/MoreScreen.tsx +++ b/src/screens/more/MoreScreen.tsx @@ -57,23 +57,19 @@ const MoreScreen = ({ navigation }: MoreStackScreenProps) => { - + - + {getString('moreScreen.downloadOnly')} @@ -88,7 +84,6 @@ const MoreScreen = ({ navigation }: MoreStackScreenProps) => { { - + - + {getString('moreScreen.incognitoMode')} @@ -127,7 +118,6 @@ const MoreScreen = ({ navigation }: MoreStackScreenProps) => { { @@ -34,7 +34,7 @@ const Chapter = ({ route, navigation }: ChapterScreenProps) => { const openDrawer = useCallback(() => { setOpen(true); - }, [open]); + }, []); return ( + {keepScreenOn ? : null} {loading ? ( @@ -174,3 +176,7 @@ export const ChapterContent = ({ }; export default Chapter; + +const styles = StyleSheet.create({ + container: { flex: 1 }, +}); diff --git a/src/screens/reader/components/ReaderBottomSheet/ReaderValueChange.tsx b/src/screens/reader/components/ReaderBottomSheet/ReaderValueChange.tsx index 293871e5..d3b4b9b9 100644 --- a/src/screens/reader/components/ReaderBottomSheet/ReaderValueChange.tsx +++ b/src/screens/reader/components/ReaderBottomSheet/ReaderValueChange.tsx @@ -5,9 +5,12 @@ import { useChapterReaderSettings, useTheme } from '@hooks/persisted'; import { IconButtonV2 } from '@components'; import { ChapterReaderSettings } from '@hooks/persisted/useSettings'; -type ValueKey = { - [K in keyof T]: T[K] extends number ? K : never; -}[keyof T]; +type ValueKey = Exclude< + { + [K in keyof T]: T[K] extends number ? K : never; + }[keyof T], + undefined +>; interface ReaderValueChangeProps { labelStyle?: TextStyle | TextStyle[]; diff --git a/src/screens/settings/SettingsBackupScreen/index.tsx b/src/screens/settings/SettingsBackupScreen/index.tsx index ba958e23..6b2c32f4 100644 --- a/src/screens/settings/SettingsBackupScreen/index.tsx +++ b/src/screens/settings/SettingsBackupScreen/index.tsx @@ -73,12 +73,10 @@ const BackupSettings = ({ navigation }: BackupSettingsScreenProps) => { /> diff --git a/src/screens/settings/SettingsReaderScreen/Settings/TextToSpeechSettings.tsx b/src/screens/settings/SettingsReaderScreen/Settings/TextToSpeechSettings.tsx index 2f01440c..d1722ba2 100644 --- a/src/screens/settings/SettingsReaderScreen/Settings/TextToSpeechSettings.tsx +++ b/src/screens/settings/SettingsReaderScreen/Settings/TextToSpeechSettings.tsx @@ -37,7 +37,6 @@ export default function TextToSpeechSettings() { Text to Speech { setChapterGeneralSettings({ diff --git a/src/screens/updates/components/UpdateNovelCard.tsx b/src/screens/updates/components/UpdateNovelCard.tsx index b4493d66..65d67593 100644 --- a/src/screens/updates/components/UpdateNovelCard.tsx +++ b/src/screens/updates/components/UpdateNovelCard.tsx @@ -141,7 +141,7 @@ const UpdateNovelCard: React.FC = ({ description={`${chapterListInfo.updatesPerDay} ${descriptionText}`} onPress={updateList} > - {chapterList.length > 0 ? ( //@ts-expect-error + {chapterList.length > 0 ? ( 'update' + it.id} diff --git a/src/services/Trackers/myAnimeList.ts b/src/services/Trackers/myAnimeList.ts index b4e4c7bc..0b34b24f 100644 --- a/src/services/Trackers/myAnimeList.ts +++ b/src/services/Trackers/myAnimeList.ts @@ -73,7 +73,7 @@ export const myAnimeListTracker: Tracker = { }, body: new URLSearchParams({ grant_type: 'refresh_token', - refresh_token: auth.refreshToken, + refresh_token: auth.refreshToken!, }).toString(), }); @@ -128,11 +128,11 @@ export const myAnimeListTracker: Tracker = { let status = payload.status ? normalizedToMal[payload.status] : normalizedToMal.CURRENT; - let repeating = false; + let repeating = 'false'; if (status.includes(';')) { const split = status.split(';'); status = split[0]; - repeating = Boolean(split[1]); + repeating = split[1]; } const url = `${baseApiUrl}/manga/${id}/my_list_status`; @@ -145,8 +145,8 @@ export const myAnimeListTracker: Tracker = { body: new URLSearchParams({ status, is_rereading: repeating, - num_chapters_read: payload.progress, - score: payload.score, + num_chapters_read: '' + payload.progress!, + score: '' + payload.score!, }).toString(), }); diff --git a/src/services/backup/legacy/index.ts b/src/services/backup/legacy/index.ts index 43961d95..1ded4d84 100644 --- a/src/services/backup/legacy/index.ts +++ b/src/services/backup/legacy/index.ts @@ -23,7 +23,7 @@ export const createBackup = async () => { await FileSystem.StorageAccessFramework.requestDirectoryPermissionsAsync(); if (!permissions.granted) { - showToast(getString('backupScreen.legacy.permissionDenied')); + showToast(getString('backupScreen.failed')); return; } const directoryUri = permissions.directoryUri; @@ -40,7 +40,7 @@ export const createBackup = async () => { }) .catch(error => { showToast( - getString('backupScreen.legacy.failedToSave', { + getString('backupScreen.failed', { message: error.message, }), ); diff --git a/src/services/migrate/migrateNovel.ts b/src/services/migrate/migrateNovel.ts index d949c119..a75d8cb5 100644 --- a/src/services/migrate/migrateNovel.ts +++ b/src/services/migrate/migrateNovel.ts @@ -76,25 +76,25 @@ export const migrateNovel = async ( await db.withTransactionAsync(async () => { await db.runAsync( migrateNovelMetaDataQuery, - fromNovel.cover || toNovel.cover || '', - fromNovel.summary || toNovel.summary || '', - fromNovel.author || toNovel.author || '', - fromNovel.artist || toNovel.artist || '', - fromNovel.status || toNovel.status || '', - fromNovel.genres || toNovel.genres || '', - toNovel.id, + fromNovel.cover || toNovel!.cover || '', + fromNovel.summary || toNovel!.summary || '', + fromNovel.author || toNovel!.author || '', + fromNovel.artist || toNovel!.artist || '', + fromNovel.status || toNovel!.status || '', + fromNovel.genres || toNovel!.genres || '', + toNovel!.id, ); await db.runAsync( 'UPDATE OR IGNORE NovelCategory SET novelId = ? WHERE novelId = ?', - toNovel.id, + toNovel!.id, fromNovel.id, ); await db.runAsync('DELETE FROM Novel WHERE id = ?', fromNovel.id); }); setMMKVObject( - `${NOVEL_SETTINSG_PREFIX}_${toNovel.pluginId}_${toNovel.path}`, + `${NOVEL_SETTINSG_PREFIX}_${toNovel!.pluginId}_${toNovel!.path}`, getMMKVObject( `${NOVEL_SETTINSG_PREFIX}_${fromNovel.pluginId}_${fromNovel.path}`, ), @@ -106,7 +106,7 @@ export const migrateNovel = async ( const setLastRead = (chapter: ChapterInfo) => { setMMKVObject( - `${LAST_READ_PREFIX}_${toNovel.pluginId}_${toNovel.path}`, + `${LAST_READ_PREFIX}_${toNovel!.pluginId}_${toNovel!.path}`, chapter, ); }; diff --git a/src/utils/constants/readerConstants.ts b/src/utils/constants/readerConstants.ts index fda3725b..7af0016e 100644 --- a/src/utils/constants/readerConstants.ts +++ b/src/utils/constants/readerConstants.ts @@ -1,4 +1,5 @@ import { ReaderTheme } from '@hooks/persisted/useSettings'; +import { MaterialDesignIconName } from '@type/icon'; export const presetReaderThemes: ReaderTheme[] = [ { backgroundColor: '#f5f5fa', textColor: '#111111' }, @@ -13,7 +14,7 @@ export const presetReaderThemes: ReaderTheme[] = [ interface TextAlignments { value: string; - icon: string; + icon: MaterialDesignIconName; } export const textAlignments: TextAlignments[] = [ diff --git a/strings/languages/en/strings.json b/strings/languages/en/strings.json index 7b80ce75..beb43d72 100644 --- a/strings/languages/en/strings.json +++ b/strings/languages/en/strings.json @@ -65,6 +65,7 @@ "createBackupWarning": "Create backup may not work on devices with Android 9 or lower.", "downloadingData": "Downloading Data", "downloadingDownloadedFiles": "Downloading Downloaded files", + "failed": "Backup failed", "drive": { "backup": "Drive Backup", "backupInterruped": "Drive Backup Interruped", diff --git a/strings/translations.ts b/strings/translations.ts index 8b1f7a65..3c8be172 100644 --- a/strings/translations.ts +++ b/strings/translations.ts @@ -71,6 +71,7 @@ export const getString = ( options?: i18n.TranslateOptions, ) => i18n.t(stringKey, options); +// @ts-expect-error dayjs.Ls[dayjs.locale()].calendar = { sameDay: getString('date.calendar.sameDay'), nextDay: getString('date.calendar.nextDay'), diff --git a/strings/types/index.ts b/strings/types/index.ts index c9e7395e..16590d6b 100644 --- a/strings/types/index.ts +++ b/strings/types/index.ts @@ -60,6 +60,7 @@ export interface StringMap { 'backupScreen.createBackupWarning': 'string'; 'backupScreen.downloadingData': 'string'; 'backupScreen.downloadingDownloadedFiles': 'string'; + 'backupScreen.failed': 'string'; 'backupScreen.drive.backup': 'string'; 'backupScreen.drive.backupInterruped': 'string'; 'backupScreen.drive.googleDriveBackup': 'string';