Minor fixes

This commit is contained in:
Rajarshee Chatterjee
2021-10-05 09:02:21 +05:30
parent 3f9c662c68
commit 8faac73558
10 changed files with 111 additions and 64 deletions
+39
View File
@@ -0,0 +1,39 @@
import React from 'react';
import {Pressable, StyleSheet, ViewPropTypes} from 'react-native';
import PropTypes from 'prop-types';
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
export const IconButton = ({
icon,
size,
color,
onPress,
containerStyle,
theme,
}) => (
<Pressable
style={[styles.container, containerStyle]}
android_ripple={{color: theme.rippleColor, borderless: true, radius: 24}}
onPress={onPress}
>
<MaterialCommunityIcons name={icon} size={size} color={color} />
</Pressable>
);
IconButton.defaultProps = {
size: 24,
};
IconButton.propTypes = {
icon: PropTypes.string.isRequired,
size: PropTypes.number.isRequired,
color: PropTypes.string,
onPress: PropTypes.func,
containerStyle: ViewPropTypes.style,
theme: PropTypes.object.isRequired,
};
const styles = StyleSheet.create({
container: {padding: 12},
});
+7 -4
View File
@@ -2,6 +2,7 @@ import React from 'react';
import {StyleSheet, View, Text, Pressable} from 'react-native';
import FastImage from 'react-native-fast-image';
import {defaultCoverUri} from '../sources/helpers/constants';
const ListView = ({
item,
@@ -13,6 +14,11 @@ const ListView = ({
isSelected,
onLongPress,
}) => {
const uri =
item.novelCover && !item.novelCover.startsWith('/')
? item.novelCover
: defaultCoverUri;
return (
<Pressable
android_ripple={{color: theme.rippleColor}}
@@ -25,10 +31,7 @@ const ListView = ({
>
<FastImage
source={{
uri:
item.novelCover && !item.novelCover.startsWith('/')
? item.novelCover
: 'https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true',
uri,
}}
style={[styles.extensionIcon, inLibraryBadge && {opacity: 0.5}]}
/>
+36 -37
View File
@@ -14,6 +14,7 @@ import ListView from './ListView';
import {getDeviceOrientation} from '../services/utils/helpers';
import {useSettings} from '../hooks/reduxHooks';
import {defaultCoverUri} from '../sources/helpers/constants';
const NovelCover = ({
item,
@@ -41,6 +42,11 @@ const NovelCover = ({
const selectNovel = () => onLongPress && onLongPress(item.novelId);
const uri =
item.novelCover && !item.novelCover.startsWith('/')
? item.novelCover
: defaultCoverUri;
return displayMode !== 2 ? (
<View
style={[
@@ -64,44 +70,37 @@ const NovelCover = ({
}
onLongPress={selectNovel}
>
<>
<View style={styles.badgeContainer}>
{libraryStatus && <InLibraryBadge theme={theme} />}
{showDownloadBadges && item.chaptersDownloaded && (
<DownloadBadge
showUnreadBadges={showUnreadBadges}
chaptersDownloaded={item.chaptersDownloaded}
chaptersUnread={item.chaptersUnread}
/>
)}
{showUnreadBadges && item.chaptersUnread && (
<UnreadBadge
theme={theme}
chaptersDownloaded={item.chaptersDownloaded}
chaptersUnread={item.chaptersUnread}
showDownloadBadges={showDownloadBadges}
/>
)}
</View>
<FastImage
source={{
uri:
item.novelCover && !item.novelCover.startsWith('/')
? item.novelCover
: 'https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true',
}}
style={[
{height: getHeight(), borderRadius: 4},
libraryStatus && {opacity: 0.5},
]}
/>
<View style={styles.compactTitleContainer}>
{displayMode === 0 && <CompactTitle novelName={item.novelName} />}
</View>
{displayMode === 1 && (
<ComfortableTitle novelName={item.novelName} theme={theme} />
<View style={styles.badgeContainer}>
{libraryStatus && <InLibraryBadge theme={theme} />}
{showDownloadBadges && item.chaptersDownloaded && (
<DownloadBadge
showUnreadBadges={showUnreadBadges}
chaptersDownloaded={item.chaptersDownloaded}
chaptersUnread={item.chaptersUnread}
/>
)}
</>
{showUnreadBadges && item.chaptersUnread && (
<UnreadBadge
theme={theme}
chaptersDownloaded={item.chaptersDownloaded}
chaptersUnread={item.chaptersUnread}
showDownloadBadges={showDownloadBadges}
/>
)}
</View>
<FastImage
source={{uri}}
style={[
{height: getHeight(), borderRadius: 4},
libraryStatus && {opacity: 0.5},
]}
/>
<View style={styles.compactTitleContainer}>
{displayMode === 0 && <CompactTitle novelName={item.novelName} />}
</View>
{displayMode === 1 && (
<ComfortableTitle novelName={item.novelName} theme={theme} />
)}
</Pressable>
</View>
) : (
+1 -4
View File
@@ -26,10 +26,7 @@ const BottomNavigator = () => {
return (
<Tab.Navigator
barStyle={{
backgroundColor: theme.colorPrimary,
paddingBottom: insets.bottom,
}}
barStyle={{backgroundColor: theme.colorPrimary}}
activeColor={theme.colorAccent}
shifting={!showLabelsInNav}
>
+8 -7
View File
@@ -74,8 +74,8 @@ const Browse = ({navigation}) => {
/>
);
const SourceHeader = ({title}) => (
<Text style={[styles.sourcesHeader, {color: theme.textColorSecondary}]}>
const Header = ({title}) => (
<Text style={[styles.header, {color: theme.textColorSecondary}]}>
{title}
</Text>
);
@@ -115,7 +115,7 @@ const Browse = ({navigation}) => {
<View>
{showMyAnimeList && (
<>
<SourceHeader title="Discover" />
<Header title="Discover" />
{showMyAnimeList && (
<DiscoverCard
label="MyAnimeList"
@@ -133,10 +133,10 @@ const Browse = ({navigation}) => {
keyExtractor={item => item.sourceId.toString()}
renderItem={renderItem}
extraData={pinnedSources}
ListHeaderComponent={<SourceHeader title="Pinned" />}
ListHeaderComponent={<Header title="Pinned" />}
/>
)}
{sources.length > 0 && <SourceHeader title="Sources" />}
{sources.length > 0 && <Header title="Sources" />}
</View>
}
ListEmptyComponent={
@@ -174,8 +174,9 @@ const styles = StyleSheet.create({
container: {
flex: 1,
},
sourcesHeader: {
header: {
paddingHorizontal: 16,
paddingVertical: 8,
paddingVertical: 12,
textTransform: 'uppercase',
},
});
+9 -10
View File
@@ -1,11 +1,13 @@
import React, {useCallback} from 'react';
import {Pressable, StyleSheet, View, Image, Text} from 'react-native';
import {Pressable, StyleSheet, View, Text} from 'react-native';
import moment from 'moment';
import {IconButton} from 'react-native-paper';
import FastImage from 'react-native-fast-image';
import {parseChapterNumber} from '../../../services/utils/helpers';
import {setNovel} from '../../../redux/novel/novel.actions';
import {defaultCoverUri} from '../../../sources/helpers/constants';
import {IconButton} from '../../../components/IconButton/IconButton';
const HistoryItem = ({history, theme, dispatch, navigation, deleteHistory}) => {
const {
@@ -47,13 +49,8 @@ const HistoryItem = ({history, theme, dispatch, navigation, deleteHistory}) => {
bookmark,
});
const getNovelCover = useCallback(
() =>
novelCover && !novelCover.startsWith('/')
? novelCover
: 'https://github.com/LNReader/lnreader-sources/blob/main/src/coverNotAvailable.jpg?raw=true',
[],
);
const uri =
novelCover && !novelCover.startsWith('/') ? novelCover : defaultCoverUri;
return (
<Pressable
@@ -63,7 +60,7 @@ const HistoryItem = ({history, theme, dispatch, navigation, deleteHistory}) => {
<View style={styles.content}>
<View style={styles.container}>
<View>
<Image source={{uri: getNovelCover()}} style={styles.novelCover} />
<FastImage source={{uri}} style={styles.novelCover} />
</View>
<View style={styles.textContainer}>
<Text
@@ -86,12 +83,14 @@ const HistoryItem = ({history, theme, dispatch, navigation, deleteHistory}) => {
size={24}
color={theme.textColorPrimary}
onPress={() => deleteHistory(historyId)}
theme={theme}
/>
<IconButton
icon="play"
size={24}
color={theme.textColorPrimary}
onPress={navigateToChapter}
theme={theme}
/>
</View>
</View>
@@ -22,6 +22,7 @@ const WebViewReader = ({
<View style={styles.container}>
<WebView
style={{backgroundColor}}
containerStyle={{flex: 1}}
originWhitelist={['*']}
scalesPageToFit={true}
showsVerticalScrollIndicator={false}
+1 -1
View File
@@ -7,7 +7,7 @@ const htmlToText = (html, options = {}) => {
html = html.trim();
text = removeLineBreaks && html.replace(/(?:\n|\r\n|\r)/gi, '');
let text = removeLineBreaks && html.replace(/(?:\n|\r\n|\r)/gi, '');
text = html
/**
@@ -23,6 +23,7 @@ const getPath = extensionId => {
63: {novels: 'novel', novel: 'novel', chapter: 'novel'},
75: {novels: 'series', novel: 'series', chapter: 'series'},
80: {novels: 'manga', novel: 'manga', chapter: 'manga'},
21: {novels: 'novellist', novel: 'series', chapter: 'series'},
};
return (
@@ -34,6 +35,13 @@ const getPath = extensionId => {
);
};
export const WoopReadScraper = new MadaraScraper(
21,
'https://woopread.com/',
'WoopRead',
getPath(21),
);
export const SkyNovelScraper = new MadaraScraper(
38,
'https://skynovel.org/',
+1 -1
View File
@@ -19,7 +19,6 @@ import novelUpdatesCcScraper from './en/novelupdatescc';
import readLightNovelCcScraper from './en/readlightnovelcc';
import tapReadScraper from './en/tapread';
import WuxiaWorldCloudScraper from './en/wuxiaworldcloud';
import WoopReadScraper from './en/woopread';
import FoxaHolicScraper from './en/foxaholic';
import EinharjarProjectScraper from './es/einherjarproject';
import TuNovelaLigeraScraper from './es/tunovelaligera';
@@ -55,6 +54,7 @@ import {
SleepyTranslationsScraper,
WBNovelScraper,
WebNovelLoverScraper,
WoopReadScraper,
WuxiaWorldDotSiteScraper,
ZinnNovelScraper,
} from './multisrc/madara/MadaraGenerator';