diff --git a/src/components/Switch/Switch.js b/src/components/Switch/Switch.js deleted file mode 100644 index 31a0b4bc..00000000 --- a/src/components/Switch/Switch.js +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react'; -import { Pressable, StyleSheet, View, Text } from 'react-native'; -import color from 'color'; -import { Switch, List } from 'react-native-paper'; - -const SwitchSetting = ({ label, description, onPress, theme, icon, value }) => ( - - - {icon && ( - - )} - - - {label} - - {description && ( - {description} - )} - - - - -); - -export default SwitchSetting; - -const styles = StyleSheet.create({ - container: { - paddingHorizontal: 16, - flexDirection: 'row', - justifyContent: 'space-between', - }, -}); diff --git a/src/components/Switch/Switch.tsx b/src/components/Switch/Switch.tsx new file mode 100644 index 00000000..83c712c6 --- /dev/null +++ b/src/components/Switch/Switch.tsx @@ -0,0 +1,82 @@ +import React from 'react'; +import { Pressable, StyleSheet, View, Text } from 'react-native'; +import color from 'color'; +import { Switch, List } from 'react-native-paper'; +import { MD3ThemeType } from '@theme/types'; + +interface SwitchProps { + label: string; + description?: string; + onPress: () => void; + theme: MD3ThemeType; + icon?: string; + value: boolean; +} + +const SwitchSetting: React.FC = ({ + label, + description, + onPress, + theme, + icon, + value, +}) => { + const styles = StyleSheet.create({ + container: { + paddingHorizontal: 16, + flexDirection: 'row', + justifyContent: 'space-between', + paddingVertical: description ? 16 : 12, + }, + row: { + flexDirection: 'row', + flex: 1, + }, + icon: { + margin: 0, + }, + textContainer: { + marginLeft: icon && 16, + }, + text: { + fontSize: 16, + flex: 1, + textAlignVertical: 'center', + }, + switch: { marginLeft: 8 }, + }); + + return ( + + + {icon && ( + + )} + + + {label} + + {description && ( + + {description} + + )} + + + + + ); +}; + +export default SwitchSetting; diff --git a/src/navigators/MoreStack.js b/src/navigators/MoreStack.js index cc6afc55..87f02c45 100644 --- a/src/navigators/MoreStack.js +++ b/src/navigators/MoreStack.js @@ -9,7 +9,7 @@ import TrackerSettings from '../screens/settings/SettingsTrackerScreen'; import ReaderSettings from '../screens/settings/SettingsReaderScreen/SettingsReaderScreen'; import BackupSettings from '../screens/settings/SettingsBackupScreen'; import AdvancedSettings from '../screens/settings/SettingsAdvancedScreen'; -import GeneralSettings from '../screens/settings/SettingsGeneralScreen'; +import GeneralSettings from '../screens/settings/SettingsGeneralScreen/SettingsGeneralScreen'; import DownloadQueue from '../screens/more/DownloadQueueScreen'; import Downloads from '../screens/more/DownloadsScreen'; import AppearanceSettings from '../screens/settings/SettingsAppearanceScreen'; diff --git a/src/screens/library/constants/constants.ts b/src/screens/library/constants/constants.ts index f6e54656..3a12628a 100644 --- a/src/screens/library/constants/constants.ts +++ b/src/screens/library/constants/constants.ts @@ -44,27 +44,27 @@ export enum LibrarySortOrder { export const librarySortOrderList = [ { - label: 'Alphabetically', + label: getString('libraryScreen.bottomSheet.sortOrders.alphabetically'), ASC: LibrarySortOrder.Alphabetically_ASC, DESC: LibrarySortOrder.Alphabetically_DESC, }, { - label: 'Last Read', + label: getString('libraryScreen.bottomSheet.sortOrders.lastRead'), ASC: LibrarySortOrder.LastRead_ASC, DESC: LibrarySortOrder.LastRead_DESC, }, { - label: 'Unread', + label: getString('libraryScreen.bottomSheet.sortOrders.unread'), ASC: LibrarySortOrder.Unread_ASC, DESC: LibrarySortOrder.Unread_DESC, }, { - label: 'Downloaded', + label: getString('libraryScreen.bottomSheet.sortOrders.download'), ASC: LibrarySortOrder.Downloaded_ASC, DESC: LibrarySortOrder.Downloaded_DESC, }, { - label: 'Total chapters', + label: getString('libraryScreen.bottomSheet.sortOrders.totalChapters'), ASC: LibrarySortOrder.TotalChapters_ASC, DESC: LibrarySortOrder.TotalChapters_DESC, }, diff --git a/src/screens/reader/components/ReaderBottomSheet/ReaderBottomSheet.tsx b/src/screens/reader/components/ReaderBottomSheet/ReaderBottomSheet.tsx index 1371ea48..8a2b5f44 100644 --- a/src/screens/reader/components/ReaderBottomSheet/ReaderBottomSheet.tsx +++ b/src/screens/reader/components/ReaderBottomSheet/ReaderBottomSheet.tsx @@ -99,7 +99,7 @@ const GeneralTab: React.FC = () => { theme={theme} /> dispatch( setAppSettings( @@ -112,7 +112,7 @@ const GeneralTab: React.FC = () => { theme={theme} /> dispatch(setAppSettings('useVolumeButtons', !useVolumeButtons)) } diff --git a/src/screens/reader/components/ReaderBottomSheet/ReaderFontPicker.tsx b/src/screens/reader/components/ReaderBottomSheet/ReaderFontPicker.tsx index a46f7023..f9131e72 100644 --- a/src/screens/reader/components/ReaderBottomSheet/ReaderFontPicker.tsx +++ b/src/screens/reader/components/ReaderBottomSheet/ReaderFontPicker.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Pressable, ScrollView, StyleSheet, Text, View } from 'react-native'; +import { Pressable, StyleSheet, Text, View } from 'react-native'; import color from 'color'; import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons'; @@ -9,6 +9,7 @@ import { useTheme } from '@hooks/useTheme'; import { setReaderSettings } from '../../../../redux/settings/settings.actions'; import { Font, readerFonts } from '../../../../utils/constants/readerConstants'; +import { FlatList } from 'react-native-gesture-handler'; const ReaderFontPicker = () => { const dispatch = useAppDispatch(); @@ -23,61 +24,66 @@ const ReaderFontPicker = () => { {getString('readerScreen.bottomSheet.fontStyle')} - - {readerFonts.map(item => ( - - - dispatch(setReaderSettings('fontFamily', item.fontFamily)) - } - android_ripple={{ - color: color(theme.primary).alpha(0.12).string(), - }} - > - {isSelected(item) ? ( - - ) : null} - - {item.name} - - - - ))} - + /> ); + interface FontChipProps { + item: Font; + } + + function FontChipItem({ item }: FontChipProps) { + return ( + + + dispatch(setReaderSettings('fontFamily', item.fontFamily)) + } + android_ripple={{ + color: color(theme.primary).alpha(0.12).string(), + }} + > + {isSelected(item) ? ( + + ) : null} + + {item.name} + + + + ); + } }; export default ReaderFontPicker; - const styles = StyleSheet.create({ container: { borderRadius: 8, @@ -85,12 +91,13 @@ const styles = StyleSheet.create({ marginHorizontal: 6, }, content: { + flexGrow: 1, flexDirection: 'row', - alignItems: 'center', - borderRadius: 8, - paddingVertical: 4, + paddingVertical: 1, + justifyContent: 'center', paddingHorizontal: 10, minHeight: 32, + alignItems: 'center', }, row: { flexDirection: 'row', @@ -102,9 +109,6 @@ const styles = StyleSheet.create({ title: { marginRight: 16, }, - scrollContainer: { - alignItems: 'center', - }, label: { fontSize: 16, }, diff --git a/src/screens/settings/SettingsGeneralScreen.js b/src/screens/settings/SettingsGeneralScreen.js deleted file mode 100644 index 30ac197c..00000000 --- a/src/screens/settings/SettingsGeneralScreen.js +++ /dev/null @@ -1,192 +0,0 @@ -import React from 'react'; -import { ScrollView } from 'react-native'; - -import { useDispatch, useSelector } from 'react-redux'; - -import SwitchSetting from '../../components/Switch/Switch'; -import DisplayModeModal from '../more/components/DisplayModeModal'; -import GridSizeModal from '../more/components/GridSizeModal'; - -import { useSettings } from '../../hooks/reduxHooks'; -import { useTheme } from '@hooks/useTheme'; -import { setAppSettings } from '../../redux/settings/settings.actions'; -import { SHOW_LAST_UPDATE_TIME } from '../../redux/updates/updates.types'; -import DefaultChapterSortModal from './components/DefaultChapterSortModal'; -import { - DisplayModes, - displayModesList, -} from '@screens/library/constants/constants'; -import { useLibrarySettings } from '@hooks/useSettings'; -import useBoolean from '@hooks/useBoolean'; -import { Appbar, List } from '@components'; - -const GenralSettings = ({ navigation }) => { - const theme = useTheme(); - const dispatch = useDispatch(); - - const { displayMode = DisplayModes.Comfortable, novelsPerRow = 3 } = - useLibrarySettings(); - - const { - updateLibraryOnLaunch = false, - downloadNewChapters = false, - onlyUpdateOngoingNovels = false, - defaultChapterSort = 'ORDER BY chapterId ASC', - refreshNovelMetadata = false, - disableHapticFeedback = false, - useLibraryFAB = false, - } = useSettings(); - - const { showLastUpdateTime = true } = useSelector( - state => state.updatesReducer, - ); - - /** - * Display Mode Modal - */ - const displayModalRef = useBoolean(); - - /** - * Grid Size Modal - */ - const gridSizeModalRef = useBoolean(); - - const defaultChapterSortModal = useBoolean(); - - return ( - <> - - - - Display - - - - Library - - dispatch( - setAppSettings('updateLibraryOnLaunch', !updateLibraryOnLaunch), - ) - } - theme={theme} - /> - - dispatch(setAppSettings('useLibraryFAB', !useLibraryFAB)) - } - theme={theme} - /> - - Novel - - - Global update - - dispatch( - setAppSettings( - 'onlyUpdateOngoingNovels', - !onlyUpdateOngoingNovels, - ), - ) - } - theme={theme} - /> - - dispatch( - setAppSettings('refreshNovelMetadata', !refreshNovelMetadata), - ) - } - theme={theme} - /> - - dispatch({ - type: SHOW_LAST_UPDATE_TIME, - payload: !showLastUpdateTime, - }) - } - theme={theme} - /> - - Auto-download - - dispatch( - setAppSettings('downloadNewChapters', !downloadNewChapters), - ) - } - theme={theme} - /> - - General - - dispatch( - setAppSettings('disableHapticFeedback', !disableHapticFeedback), - ) - } - theme={theme} - /> - - - - - - - ); -}; - -export default GenralSettings; diff --git a/src/screens/settings/SettingsGeneralScreen/SettingsGeneralScreen.tsx b/src/screens/settings/SettingsGeneralScreen/SettingsGeneralScreen.tsx new file mode 100644 index 00000000..6e0a5bfe --- /dev/null +++ b/src/screens/settings/SettingsGeneralScreen/SettingsGeneralScreen.tsx @@ -0,0 +1,328 @@ +import React from 'react'; +import { ScrollView } from 'react-native'; + +import { useDispatch, useSelector } from 'react-redux'; + +import SwitchSetting from '../../../components/Switch/Switch'; +import DisplayModeModal from './modals/DisplayModeModal'; +import GridSizeModal from './modals/GridSizeModal'; + +import { useSettings } from '../../../hooks/reduxHooks'; +import { useTheme } from '@hooks/useTheme'; +import { setAppSettings } from '../../../redux/settings/settings.actions'; +import { SHOW_LAST_UPDATE_TIME } from '../../../redux/updates/updates.types'; +import DefaultChapterSortModal from '../components/DefaultChapterSortModal'; +import { + DisplayModes, + displayModesList, + LibrarySortOrder, +} from '@screens/library/constants/constants'; +import { useLibrarySettings } from '@hooks/useSettings'; +import useBoolean from '@hooks/useBoolean'; +import { Appbar, List } from '@components'; +import NovelSortModal from './modals/NovelSortModal'; +import NovelBadgesModal from './modals/NovelBadgesModal'; +import { RootState } from '@redux/store'; +import { NavigationState } from '@react-navigation/native'; +import { getString } from '@strings/translations'; + +interface GenralSettingsProps { + navigation: NavigationState; +} + +const GenralSettings: React.FC = ({ navigation }) => { + const theme = useTheme(); + const dispatch = useDispatch(); + + const { + displayMode = DisplayModes.Comfortable, + novelsPerRow = 3, + showDownloadBadges = true, + showNumberOfNovels = false, + showUnreadBadges = true, + sortOrder = LibrarySortOrder.DateAdded_DESC, + } = useLibrarySettings(); + + const sortOrderDisplay: string[] = sortOrder.split(' '); + const sortOrderNameMap = new Map([ + ['lastReadAt', 'libraryScreen.bottomSheet.sortOrders.lastRead'], + ['novels.novelName', 'libraryScreen.bottomSheet.sortOrders.alphabetically'], + ['novels.unread', 'libraryScreen.bottomSheet.sortOrders.unread'], + ['chaptersDownloaded', 'libraryScreen.bottomSheet.sortOrders.download'], + ['novelId', 'libraryScreen.bottomSheet.sortOrders.dateAdded'], + ['chaptersUnread', 'libraryScreen.bottomSheet.sortOrders.totalChapters'], + ]); + + const { + updateLibraryOnLaunch = false, + downloadNewChapters = false, + onlyUpdateOngoingNovels = false, + defaultChapterSort = 'ORDER BY chapterId ASC', + refreshNovelMetadata = false, + disableHapticFeedback = false, + useLibraryFAB = false, + } = useSettings(); + + const { showLastUpdateTime = true } = useSelector( + (state: RootState) => state.updatesReducer, + ); + + const generateNovelBadgesDescription = () => { + let res = []; + if (showDownloadBadges) { + res.push('Download'); + } + if (showUnreadBadges) { + res.push('Unread'); + } + if (showNumberOfNovels) { + res.push('Number of Items'); + } + return res.join(', '); + }; + + /** + * Display Mode Modal + */ + const displayModalRef = useBoolean(); + + /** + * Grid Size Modal + */ + const gridSizeModalRef = useBoolean(); + + /** + * Novel Badges Modal + */ + const novelBadgesModalRef = useBoolean(); + const novelBadgesDescription = generateNovelBadgesDescription(); + /** + * Novel Sort Modal + */ + const novelSortModalRef = useBoolean(); + /** + * Chapter Sort Modal + */ + const defaultChapterSortModal = useBoolean(); + return ( + <> + + + + + {getString( + 'moreScreen.settingsScreen.generalSettingsScreen.display', + )} + + + + + + + {getString('library')} + + dispatch( + setAppSettings('updateLibraryOnLaunch', !updateLibraryOnLaunch), + ) + } + theme={theme} + /> + + dispatch(setAppSettings('useLibraryFAB', !useLibraryFAB)) + } + theme={theme} + /> + + + {getString('moreScreen.settingsScreen.generalSettingsScreen.novel')} + + + + + {getString( + 'moreScreen.settingsScreen.generalSettingsScreen.globalUpdate', + )} + + + dispatch( + setAppSettings( + 'onlyUpdateOngoingNovels', + !onlyUpdateOngoingNovels, + ), + ) + } + theme={theme} + /> + + dispatch( + setAppSettings('refreshNovelMetadata', !refreshNovelMetadata), + ) + } + theme={theme} + /> + + dispatch({ + type: SHOW_LAST_UPDATE_TIME, + payload: !showLastUpdateTime, + }) + } + theme={theme} + /> + + + {getString( + 'moreScreen.settingsScreen.generalSettingsScreen.autoDownload', + )} + + + dispatch( + setAppSettings('downloadNewChapters', !downloadNewChapters), + ) + } + theme={theme} + /> + + + {getString('moreScreen.settingsScreen.generalSettings')} + + + dispatch( + setAppSettings('disableHapticFeedback', !disableHapticFeedback), + ) + } + theme={theme} + /> + + + + + + + + + ); +}; + +export default GenralSettings; diff --git a/src/screens/more/components/DisplayModeModal.js b/src/screens/settings/SettingsGeneralScreen/modals/DisplayModeModal.tsx similarity index 60% rename from src/screens/more/components/DisplayModeModal.js rename to src/screens/settings/SettingsGeneralScreen/modals/DisplayModeModal.tsx index 9d0c391b..54cd8f5b 100644 --- a/src/screens/more/components/DisplayModeModal.js +++ b/src/screens/settings/SettingsGeneralScreen/modals/DisplayModeModal.tsx @@ -1,13 +1,24 @@ -import { displayModesList } from '@screens/library/constants/constants'; +import { + DisplayModes, + displayModesList, +} from '@screens/library/constants/constants'; import React from 'react'; -import { StyleSheet } from 'react-native'; +import { Text, StyleSheet } from 'react-native'; import { Portal, Modal, overlay } from 'react-native-paper'; -import { RadioButton } from '../../../components/RadioButton/RadioButton'; +import { RadioButton } from '../../../../components/RadioButton/RadioButton'; import { useLibrarySettings } from '@hooks/useSettings'; +import { MD3ThemeType } from '@theme/types'; -const DisplayModeModal = ({ +interface DisplayModeModalProps { + displayMode: DisplayModes; + displayModalVisible: boolean; + hideDisplayModal: () => void; + theme: MD3ThemeType; +} + +const DisplayModeModal: React.FC = ({ theme, displayMode, hideDisplayModal, @@ -25,6 +36,9 @@ const DisplayModeModal = ({ { backgroundColor: overlay(2, theme.surface) }, ]} > + + Display Mode + {displayModesList.map(mode => ( void; + theme: MD3ThemeType; +} + +const GridSizeModal: React.FC = ({ novelsPerRow, gridSizeModalVisible, hideGridSizeModal, @@ -41,16 +49,20 @@ const GridSizeModal = ({ > {`${novelsPerRow} per row`} - {Object.keys(gridSizes).map(item => ( - setLibrarySettings({ novelsPerRow: item })} - theme={theme} - style={{ paddingHorizontal: 20 }} - /> - ))} + {Object.keys(gridSizes).map(item => { + let it = Number(item); + return ( + setLibrarySettings({ novelsPerRow: it })} + theme={theme} + style={styles.radiobutton} + /> + ); + })} ); @@ -78,4 +90,5 @@ const styles = StyleSheet.create({ width: '100%', height: 40, }, + radiobutton: { paddingHorizontal: 20 }, }); diff --git a/src/screens/settings/SettingsGeneralScreen/modals/NovelBadgesModal.tsx b/src/screens/settings/SettingsGeneralScreen/modals/NovelBadgesModal.tsx new file mode 100644 index 00000000..185517f7 --- /dev/null +++ b/src/screens/settings/SettingsGeneralScreen/modals/NovelBadgesModal.tsx @@ -0,0 +1,102 @@ +import React from 'react'; +import { Text, StyleSheet } from 'react-native'; + +import { Portal, Modal, overlay } from 'react-native-paper'; + +import { useLibrarySettings } from '@hooks/useSettings'; +import { Checkbox } from '@components'; +import { getString } from '@strings/translations'; +import { MD3ThemeType } from '@theme/types'; + +interface NovelBadgesModalProps { + novelBadgesModalVisible: boolean; + hideNovelBadgesModal: () => void; + theme: MD3ThemeType; +} + +const NovelBadgesModal: React.FC = ({ + novelBadgesModalVisible, + hideNovelBadgesModal, + theme, +}) => { + const { + showDownloadBadges = true, + showNumberOfNovels = false, + showUnreadBadges = true, + setLibrarySettings, + } = useLibrarySettings(); + return ( + + + + {getString('libraryScreen.bottomSheet.display.badges')} + + + setLibrarySettings({ + showDownloadBadges: !showDownloadBadges, + }) + } + theme={theme} + /> + + setLibrarySettings({ + showUnreadBadges: !showUnreadBadges, + }) + } + theme={theme} + /> + + setLibrarySettings({ + showNumberOfNovels: !showNumberOfNovels, + }) + } + theme={theme} + /> + + + ); +}; + +export default NovelBadgesModal; + +const styles = StyleSheet.create({ + container: { + paddingVertical: 24, + margin: 20, + borderRadius: 28, + }, + modalHeader: { + paddingHorizontal: 24, + fontSize: 24, + marginBottom: 10, + }, + modalDescription: { + paddingHorizontal: 24, + fontSize: 16, + marginBottom: 16, + }, + slider: { + width: '100%', + height: 40, + }, + sectionHeader: { + padding: 16, + paddingBottom: 8, + }, +}); diff --git a/src/screens/settings/SettingsGeneralScreen/modals/NovelSortModal.tsx b/src/screens/settings/SettingsGeneralScreen/modals/NovelSortModal.tsx new file mode 100644 index 00000000..0257731e --- /dev/null +++ b/src/screens/settings/SettingsGeneralScreen/modals/NovelSortModal.tsx @@ -0,0 +1,92 @@ +import React from 'react'; +import { Text, StyleSheet } from 'react-native'; + +import { Portal, Modal, overlay } from 'react-native-paper'; + +import { useLibrarySettings } from '@hooks/useSettings'; +import { + LibrarySortOrder, + librarySortOrderList, +} from '@screens/library/constants/constants'; +import { MD3ThemeType } from '@theme/types'; +import { FlashList } from '@shopify/flash-list'; +import { SortItem } from '@components/Checkbox/Checkbox'; + +interface NovelSortModalProps { + novelSortModalVisible: boolean; + hideNovelSortModal: () => void; + theme: MD3ThemeType; +} + +const NovelSortModal: React.FC = ({ + novelSortModalVisible, + hideNovelSortModal, + theme, +}) => { + const { sortOrder = LibrarySortOrder.DateAdded_DESC, setLibrarySettings } = + useLibrarySettings(); + return ( + + + + Sort Order + + ( + + setLibrarySettings({ + sortOrder: sortOrder === item.ASC ? item.DESC : item.ASC, + }) + } + /> + )} + /> + + + ); +}; + +export default NovelSortModal; + +const styles = StyleSheet.create({ + container: { + paddingVertical: 24, + margin: 20, + borderRadius: 28, + height: 397.8, + }, + modalHeader: { + paddingHorizontal: 24, + fontSize: 24, + marginBottom: 10, + }, + modalDescription: { + paddingHorizontal: 24, + fontSize: 16, + marginBottom: 16, + }, + slider: { + width: '100%', + height: 40, + }, +}); diff --git a/src/screens/settings/SettingsReaderScreen/SettingsReaderScreen.tsx b/src/screens/settings/SettingsReaderScreen/SettingsReaderScreen.tsx index 115a388a..42e39533 100644 --- a/src/screens/settings/SettingsReaderScreen/SettingsReaderScreen.tsx +++ b/src/screens/settings/SettingsReaderScreen/SettingsReaderScreen.tsx @@ -185,7 +185,7 @@ const SettingsReaderScreen = () => { theme={theme} /> dispatch(setAppSettings('useVolumeButtons', !useVolumeButtons)) @@ -202,7 +202,7 @@ const SettingsReaderScreen = () => { /> {swipeGestures ? ( diff --git a/strings/languages/en/strings.json b/strings/languages/en/strings.json index d3b2a497..005078f3 100644 --- a/strings/languages/en/strings.json +++ b/strings/languages/en/strings.json @@ -33,7 +33,10 @@ "sortOrders": { "dateAdded": "Date added", "alphabetically": "Alphabetically", - "totalChapters": "Total chapters" + "totalChapters": "Total chapters", + "download": "Downloaded", + "unread": "Unread", + "lastRead": "Last Read" }, "display": { "displayMode": "Display mode", @@ -88,7 +91,10 @@ "showProgressPercentage": "Show progress percentage", "swipeGestures": "Swipe left or right to navigate between chapters", "allowTextSelection": "Allow text selection", - "useChapterDrawerSwipeNavigation": "Swipe right to open drawer" + "useChapterDrawerSwipeNavigation": "Swipe right to open drawer", + "removeExtraSpacing":"Remove extra paragraph spacing", + "volumeButtonsScroll":"Volume buttons scroll", + "showSwipeMargins": "Show swipe margins" }, "drawer": { "scrollToCurrentChapter": "Scroll to current chapter", @@ -124,7 +130,29 @@ "settings": "Settings", "settingsScreen": { "generalSettings": "General", - "generalSettingsScreen": {}, + "generalSettingsScreen": { + "display": "Display", + "displayMode": "Display Mode", + "itemsPerRow":"Items per row", + "itemsPerRowLibrary":"Items per row in library", + "novelBadges":"Novel Badges", + "novelSort":"Novel Sort", + "updateLibrary":"Update library on launch", + "useFAB":"Use FAB in Library", + "novel": "Novel", + "chapterSort": "Default chapter sort", + "bySource": "By source", + "asc": "(Ascending)", + "desc":"(Descending)", + "globalUpdate": "Global update", + "updateOngoing": "Only update ongoing novels", + "refreshMetadata":"Automatically refresh metadata", + "refreshMetadataDescription":"Check for new cover and details when updating library", + "updateTime":"Show last update time", + "autoDownload":"Auto-download", + "downloadNewChapters":"Download new chapters", + "disableHapticFeedback": "Disable haptic feedback" + }, "readerSettings": { "title": "Reader", "readerTheme": "Reader theme", diff --git a/strings/types/index.ts b/strings/types/index.ts index c28970fa..2ba3af16 100644 --- a/strings/types/index.ts +++ b/strings/types/index.ts @@ -31,6 +31,9 @@ export interface StringMap { 'libraryScreen.bottomSheet.sortOrders.dateAdded': 'string'; 'libraryScreen.bottomSheet.sortOrders.alphabetically': 'string'; 'libraryScreen.bottomSheet.sortOrders.totalChapters': 'string'; + 'libraryScreen.bottomSheet.sortOrders.lastRead': 'string'; + 'libraryScreen.bottomSheet.sortOrders.unread': 'string'; + 'libraryScreen.bottomSheet.sortOrders.download': 'string'; 'libraryScreen.bottomSheet.display.displayMode': 'string'; 'libraryScreen.bottomSheet.display.compact': 'string'; 'libraryScreen.bottomSheet.display.comfortable': 'string'; @@ -73,6 +76,9 @@ export interface StringMap { 'readerScreen.bottomSheet.swipeGestures': 'string'; 'readerScreen.bottomSheet.allowTextSelection': 'string'; 'readerScreen.bottomSheet.useChapterDrawerSwipeNavigation': 'string'; + 'readerScreen.bottomSheet.removeExtraSpacing': 'string'; + 'readerScreen.bottomSheet.volumeButtonsScroll': 'string'; + 'readerScreen.bottomSheet.showSwipeMargins': 'string'; 'readerScreen.drawer.scrollToCurrentChapter': 'string'; 'readerScreen.drawer.scrollToTop': 'string'; 'readerScreen.drawer.scrollToBottom': 'string'; @@ -94,6 +100,26 @@ export interface StringMap { 'more': 'string'; 'moreScreen.settings': 'string'; 'moreScreen.settingsScreen.generalSettings': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.display': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.displayMode': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.itemsPerRowLibrary': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.itemsPerRow': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.novelBadges': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.novelSort': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.updateLibrary': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.useFAB': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.novel': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.chapterSort': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.asc': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.desc': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.globalUpdate': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.updateOngoing': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.refreshMetadata': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.refreshMetadataDescription': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.autoDownload': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.downloadNewChapters': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.disableHapticFeedback': 'string'; + 'moreScreen.settingsScreen.generalSettingsScreen.updateTime': 'string'; 'moreScreen.settingsScreen.readerSettings.title': 'string'; 'moreScreen.settingsScreen.readerSettings.readerTheme': 'string'; 'moreScreen.settingsScreen.readerSettings.preset': 'string';