From 66798c46db3c39b89bf89f6f5625ce697c11abf3 Mon Sep 17 00:00:00 2001 From: Rajarshee Chatterjee Date: Mon, 15 Aug 2022 16:51:21 +0530 Subject: [PATCH] Minor fixes Closes #373 Closes #374 --- src/database/queries/LibraryQueries.ts | 2 +- src/database/queries/NovelQueriesV2.ts | 5 ++- src/hooks/useBackHandler.ts | 10 ++++++ src/navigators/Main.js | 11 ++++++ src/redux/updates/updates.actions.js | 34 +++++++++---------- src/screens/library/LibraryScreen.tsx | 10 ++++++ .../more/components/RemoveDownloadsDialog.js | 8 ++--- 7 files changed, 57 insertions(+), 23 deletions(-) create mode 100644 src/hooks/useBackHandler.ts diff --git a/src/database/queries/LibraryQueries.ts b/src/database/queries/LibraryQueries.ts index f4dab490..8999190d 100644 --- a/src/database/queries/LibraryQueries.ts +++ b/src/database/queries/LibraryQueries.ts @@ -80,7 +80,7 @@ export const getLibraryNovelsFromDb = ( let getLibraryNovelsQuery = 'SELECT * FROM novels WHERE followed = 1'; if (onlyOngoingNovels) { - getLibraryNovelsQuery += ' AND status NOT LIKE "Completed"'; + getLibraryNovelsQuery += " AND status NOT LIKE 'Completed'"; } return new Promise(resolve => diff --git a/src/database/queries/NovelQueriesV2.ts b/src/database/queries/NovelQueriesV2.ts index e2743e40..ae44dec9 100644 --- a/src/database/queries/NovelQueriesV2.ts +++ b/src/database/queries/NovelQueriesV2.ts @@ -19,7 +19,7 @@ export const getCategoryNovelsFromDb = async ( * FROM novels - WHERE + WHERE ( categoryIds LIKE '[${categoryId}]' OR categoryIds LIKE '[${categoryId},%' @@ -27,6 +27,9 @@ export const getCategoryNovelsFromDb = async ( categoryIds LIKE '%,${categoryId}]' OR categoryIds LIKE '%,${categoryId},%' + ) + AND + followed = 1 `; if (onlyOngoingNovels) { diff --git a/src/hooks/useBackHandler.ts b/src/hooks/useBackHandler.ts new file mode 100644 index 00000000..b32452c8 --- /dev/null +++ b/src/hooks/useBackHandler.ts @@ -0,0 +1,10 @@ +import { useEffect } from 'react'; +import { BackHandler } from 'react-native'; + +export function useBackHandler(handler: () => boolean) { + useEffect(() => { + BackHandler.addEventListener('hardwareBackPress', handler); + + return () => BackHandler.removeEventListener('hardwareBackPress', handler); + }, [handler]); +} diff --git a/src/navigators/Main.js b/src/navigators/Main.js index d2561ee7..1884e7c1 100644 --- a/src/navigators/Main.js +++ b/src/navigators/Main.js @@ -28,11 +28,16 @@ import MigrateNovel from '../screens/browse/migration/MigrationNovels'; import MalTopNovels from '../screens/browse/discover/MalTopNovels'; import NewUpdateDialog from '../components/NewUpdateDialog'; import BrowseSettings from '../screens/browse/BrowseSettings'; +import { useAppDispatch } from '@redux/hooks'; +import { updateLibraryAction } from '@redux/updates/updates.actions'; +import { useSettings } from '@hooks/reduxHooks'; const Stack = createStackNavigator(); const MainNavigator = () => { const theme = useTheme(); + const dispatch = useAppDispatch(); + const { updateLibraryOnLaunch = false } = useSettings(); useEffect(() => { const timer = setTimeout(async () => { @@ -45,6 +50,12 @@ const MainNavigator = () => { }; }, [theme.id]); + useEffect(() => { + if (updateLibraryOnLaunch) { + dispatch(updateLibraryAction()); + } + }, []); + const { isNewVersion, latestRelease } = useGithubUpdateChecker() || {}; return ( diff --git a/src/redux/updates/updates.actions.js b/src/redux/updates/updates.actions.js index b48d2a26..9729655e 100644 --- a/src/redux/updates/updates.actions.js +++ b/src/redux/updates/updates.actions.js @@ -3,23 +3,23 @@ import { SET_LAST_UPDATE_TIME } from './updates.types'; import { showToast } from '../../hooks/showToast'; import { updateLibrary } from '../../services/updates/updates'; -export const updateLibraryAction = - ({ categoryId }) => - async (dispatch, getState) => { - showToast('Updating library'); +export const updateLibraryAction = props => async (dispatch, getState) => { + showToast('Updating library'); - dispatch({ type: SET_LAST_UPDATE_TIME, payload: Date.now() }); + dispatch({ type: SET_LAST_UPDATE_TIME, payload: Date.now() }); - const { - downloadNewChapters = false, - onlyUpdateOngoingNovels = false, - refreshNovelMetadata = false, - } = getState().settingsReducer; + const { + downloadNewChapters = false, + onlyUpdateOngoingNovels = false, + refreshNovelMetadata = false, + } = getState().settingsReducer; - await updateLibrary({ - downloadNewChapters, - onlyUpdateOngoingNovels, - refreshNovelMetadata, - categoryId, - }); - }; + const categoryId = props?.categoryId; + + await updateLibrary({ + downloadNewChapters, + onlyUpdateOngoingNovels, + refreshNovelMetadata, + categoryId, + }); +}; diff --git a/src/screens/library/LibraryScreen.tsx b/src/screens/library/LibraryScreen.tsx index 2db5ee6e..100f3e0e 100644 --- a/src/screens/library/LibraryScreen.tsx +++ b/src/screens/library/LibraryScreen.tsx @@ -31,6 +31,7 @@ import SetCategoryModal from '@screens/novel/components/SetCategoriesModal'; import useBoolean from '@hooks/useBoolean'; import { debounce } from 'lodash'; import { ButtonVariation } from '@components/Button/Button'; +import { useBackHandler } from '@hooks/useBackHandler'; type State = NavigationState<{ key: string; @@ -58,6 +59,15 @@ const LibraryScreen = () => { const { library, refetchLibrary, isLoading } = useLibrary({ searchText }); const [selectedNovelIds, setSelectedNovelIds] = useState([]); + useBackHandler(() => { + if (selectedNovelIds.length) { + setSelectedNovelIds([]); + return true; + } + + return false; + }); + const layout = useWindowDimensions(); const [index, setIndex] = useState(0); diff --git a/src/screens/more/components/RemoveDownloadsDialog.js b/src/screens/more/components/RemoveDownloadsDialog.js index 6c3d148d..59bc7dfe 100644 --- a/src/screens/more/components/RemoveDownloadsDialog.js +++ b/src/screens/more/components/RemoveDownloadsDialog.js @@ -1,6 +1,6 @@ import React from 'react'; -import { Button, Dialog, Portal } from 'react-native-paper'; +import { Button, Dialog, overlay, Portal } from 'react-native-paper'; const RemoveDownloadsDialog = ({ dialogVisible, @@ -15,7 +15,7 @@ const RemoveDownloadsDialog = ({ onDismiss={hideDialog} style={{ borderRadius: 6, - backgroundColor: theme.colorPrimary, + backgroundColor: overlay(2, theme.surface), }} >