diff --git a/src/navigation/Router.js b/src/navigation/Router.js
index 393533d1..66c642ad 100644
--- a/src/navigation/Router.js
+++ b/src/navigation/Router.js
@@ -13,9 +13,7 @@ import Search from "../screens/Search";
import NovelItem from "../screens/NovelItem";
import ChapterItem from "../screens/ChapterItem";
import About from "../screens/About";
-import LibraryNovelItem from "../screens/LibraryNovelItem";
import { theme } from "../theming/theme";
-import NovelItemRewrite from "../screens/NovelItemRewrite";
const Stack = createStackNavigator();
@@ -173,15 +171,6 @@ const MainStack = () => {
-
-
-
{
rippleColor="rgba(256,256,256,0.3)"
style={styles.opac}
onPress={() =>
- navigation.navigate(
- "NovelItemRewrite",
- item
- )
+ navigation.navigate("NovelItem", item)
}
>
diff --git a/src/screens/LibraryNovelItem.js b/src/screens/LibraryNovelItem.js
deleted file mode 100644
index e3b3f342..00000000
--- a/src/screens/LibraryNovelItem.js
+++ /dev/null
@@ -1,510 +0,0 @@
-import React, { useState, useEffect } from "react";
-import {
- StyleSheet,
- View,
- Image,
- ImageBackground,
- Text,
- FlatList,
- ScrollView,
- RefreshControl,
- ToastAndroid,
-} from "react-native";
-import {
- Appbar,
- TouchableRipple,
- IconButton,
- Button,
-} from "react-native-paper";
-import { LinearGradient } from "expo-linear-gradient";
-
-import { theme } from "../theming/theme";
-
-import * as SQLite from "expo-sqlite";
-const db = SQLite.openDatabase("lnreader.db");
-
-const NovelItem = ({ route, navigation }) => {
- const item = route.params;
-
- const [loading, setLoading] = useState(true);
- const [refreshing, setRefreshing] = useState(false);
- const [libraryStatus, setlibraryStatus] = useState();
-
- const [novel, setNovel] = useState();
- const [chapters, setChapters] = useState();
- const [more, setMore] = useState(false);
-
- const fetchNovel = () => {
- db.transaction((tx) => {
- tx.executeSql(
- "SELECT * FROM LibraryTable WHERE novelUrl=?",
- [item.novelUrl],
- (txObj, { rows: { _array } }) => {
- setNovel(_array);
- },
- (txObj, error) => console.log("Error ", error)
- );
- tx.executeSql(
- "SELECT * FROM ChapterTable WHERE novelUrl=?",
- [item.novelUrl],
- (txObj, { rows: { _array } }) => {
- setChapters(_array);
- // !_array.length && getChapters();
- setRefreshing(false);
- setLoading(false);
- },
- (txObj, error) => console.log("Error ", error)
- );
- });
- };
-
- // const getChapters = () => {
- // fetch(`http://192.168.1.39:5000/api/novel/${item.novelUrl}`)
- // .then((response) => response.json())
- // .then((json) => {
- // setChapters(json.novelChapters);
- // })
- // .catch((error) => console.error(error));
- // };
-
- const checkIfExistsInLibrary = (id) => {
- db.transaction((tx) => {
- tx.executeSql(
- "SELECT * FROM LibraryTable WHERE novelUrl=?",
- [id],
- (txObj, res) => {
- // console.log(res.rows.length);
- if (res.rows.length === 0) {
- // console.log("Not In Library");
- setlibraryStatus(0);
- } else {
- // console.log("In Library");
- setlibraryStatus(1);
- }
- },
- (txObj, error) => console.log("Error ", error)
- );
- });
- };
-
- const sortChapters = () => {
- db.transaction((tx) => {
- tx.executeSql(
- "SELECT * FROM ChapterTable WHERE novelUrl=? ORDER BY chapterName ASC",
- [item.novelUrl],
- (txObj, { rows: { _array } }) => {
- setChapters(_array);
- setLoading(false);
- },
- (txObj, error) => console.log("Error ", error)
- );
- });
- };
-
- const insertToLibrary = () => {
- if (libraryStatus === 0) {
- db.transaction((tx) => {
- tx.executeSql(
- "INSERT INTO LibraryTable (novelUrl, novelName, novelCover, novelSummary, alternative, author, genre, type, releaseDate, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
- [
- item.novelUrl,
- item.novelName,
- item.novelCover,
- item.novelSummary,
- item.Alternative,
- item["Author(s)"],
- item["Genres(s)"],
- item.Type,
- item.Release,
- item.Status,
- ],
- (txObj, res) => {
- console.log("Novel Inserted");
- },
- (txObj, error) => console.log("Error ", error)
- );
-
- chapters.map((chap) =>
- tx.executeSql(
- "INSERT INTO ChapterTable (chapterUrl, chapterName, releaseDate, novelUrl) values (?, ?, ?, ?)",
- [
- chap.chapterUrl,
- chap.chapterName,
- chap.releaseDate,
- item.novelUrl,
- ],
- (txObj, res) => {
- // console.log("Chapters Inserted");
- },
- (txObj, error) => console.log("Error ", error)
- )
- );
- setlibraryStatus(1);
- ToastAndroid.show("Added to library", ToastAndroid.SHORT);
- });
- } else {
- db.transaction((tx) => {
- tx.executeSql(
- "DELETE FROM LibraryTable WHERE novelUrl=?",
- [item.novelUrl],
- (txObj, res) => {
- console.log("DELETED NOVEL FROM TABLE");
- },
- (txObj, error) => console.log("Error ", error)
- );
- tx.executeSql(
- "DELETE FROM ChapterTable WHERE novelUrl=?",
- [item.novelUrl],
- (txObj, res) => {
- console.log("DELETED Chapters FROM TABLE");
- },
- (txObj, error) => console.log("Error ", error)
- );
- console.log("Removed Novel");
- setlibraryStatus(0);
- ToastAndroid.show("Removed from library", ToastAndroid.SHORT);
- });
- }
- };
-
- useEffect(() => {
- fetchNovel();
- checkIfExistsInLibrary(item.novelUrl);
- }, []);
-
- const onRefresh = async () => {
- setRefreshing(true);
- fetchNovel();
- };
-
- return (
- <>
-
- {
- navigation.goBack();
- }}
- color={"white"}
- size={26}
- style={{ marginRight: 0 }}
- />
-
-
-
-
- }
- >
-
-
-
-
-
-
- {item.novelName}
-
- {!loading && (
- <>
-
- {item.Alternative.replace(
- ",",
- ", "
- )}
-
-
- {item["Author(s)"].replace(
- ",",
- ", "
- )}
-
-
- {item.Release}
-
-
- {item.Status + " • " + item.Type}
-
- >
- )}
-
-
-
-
- {!loading && (
- <>
-
- {item.novelSummary.length > 0 && (
-
-
- About
-
- setMore(!more)}
- ellipsizeMode="clip"
- >
- {item.novelSummary}
-
- setMore(!more)}
- >
- {more ? "Less" : "More"}
-
-
- )}
- item}
- renderItem={({ item }) => (
-
- {item}
-
- )}
- />
-
-
- setChapters((chapters) => chapters.reverse())
- }
- rippleColor={theme.rippleColorDark}
- >
- <>
-
- {chapters.length + " Chapters"}
-
- sortChapters()}
- />
- >
-
-
- item.chapterUrl
- ? item.chapterUrl
- : item.chapterUrl
- }
- removeClippedSubviews={true}
- maxToRenderPerBatch={10}
- initialNumToRender={10}
- renderItem={({ item }) => (
-
- navigation.navigate("ChapterItem", {
- chapterUrl: item.chapterUrl,
- })
- }
- rippleColor={theme.rippleColorDark}
- >
- <>
-
- {item.chapterName}
-
-
- {item.releaseDate}
-
- >
-
- )}
- />
- >
- )}
-
- >
- );
-};
-
-export default NovelItem;
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- // backgroundColor: "#202125",
- backgroundColor: "#000000",
- },
- nameContainer: {
- flex: 1,
- width: "100%",
- marginHorizontal: 15,
- // justifyContent: "center",
- },
- background: {
- height: 240,
- },
- linearGradient: {
- height: "100%",
- backgroundColor: "rgba(256, 256, 256, 0.5)",
- },
- detailsContainer: {
- flex: 1,
- flexDirection: "row",
- margin: 15,
- },
- logo: {
- height: 180,
- width: 120,
- margin: 3.2,
- borderRadius: 6,
- },
- genre: {
- borderRadius: 24,
- borderWidth: 1,
- paddingHorizontal: 10,
- marginHorizontal: 2,
- fontSize: 13,
- paddingVertical: 2,
- justifyContent: "center",
- flex: 1,
- },
- name: {
- fontWeight: "bold",
- fontSize: 20,
- },
-});
diff --git a/src/screens/NovelItem.js b/src/screens/NovelItem.js
index f1ea6839..8f9a1005 100644
--- a/src/screens/NovelItem.js
+++ b/src/screens/NovelItem.js
@@ -26,13 +26,14 @@ const NovelItem = ({ route, navigation }) => {
const item = route.params;
const [loading, setLoading] = useState(true);
- const [refreshing, setRefreshing] = useState(true);
+ const [refreshing, setRefreshing] = useState(false);
- const [novel, setNovel] = useState();
+ const [novel, setNovel] = useState(item);
const [chapters, setChapters] = useState();
const [more, setMore] = useState(false);
const [libraryStatus, setlibraryStatus] = useState();
+ // const [dbFlag, setDbFlag] = useState(0);
const getNovel = () => {
fetch(`http://192.168.1.39:5000/api/novel/${item.novelUrl}`)
@@ -40,7 +41,6 @@ const NovelItem = ({ route, navigation }) => {
.then((json) => {
setNovel(json);
setChapters(json.novelChapters);
- checkIfExistsInLibrary(json.novelUrl);
})
.catch((error) => console.error(error))
.finally(() => {
@@ -49,34 +49,62 @@ const NovelItem = ({ route, navigation }) => {
});
};
+ const getNovelFromDb = () => {
+ db.transaction((tx) => {
+ tx.executeSql(
+ "SELECT * FROM LibraryTable WHERE novelUrl=?",
+ [item.novelUrl],
+ (txObj, results) => {
+ let len = results.rows.length;
+ for (let i = 0; i < len; i++) {
+ let row = results.rows.item(i);
+ setNovel(row);
+ }
+ },
+ (txObj, error) => console.log("Error ", error)
+ );
+ tx.executeSql(
+ "SELECT * FROM ChapterTable WHERE novelUrl=?",
+ [item.novelUrl],
+ (txObj, { rows: { _array } }) => {
+ setChapters(_array);
+ setRefreshing(false);
+ setLoading(false);
+ },
+ (txObj, error) => console.log("Error ", error)
+ );
+ });
+ };
+
const insertToLibrary = () => {
if (libraryStatus === 0) {
db.transaction((tx) => {
tx.executeSql(
- "INSERT INTO LibraryTable (novelId, novelName, novelCover, novelSummary, alternative, author, genre, type, releaseDate, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
+ "INSERT INTO LibraryTable (novelUrl, novelName, novelCover, novelSummary, Alternative, `Author(s)`, `Genre(s)`, Type, `Release`, Status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
[
- novel.novelUrl,
+ item.novelUrl,
novel.novelName,
novel.novelCover,
novel.novelSummary,
- novel.novelDetails.Alternative,
- novel.novelDetails["Author(s)"],
- novel.novelDetails["Genre(s)"],
- novel.novelDetails.Type,
- novel.novelDetails.Release,
- novel.novelDetails.Status,
- ]
+ novel.Alternative,
+ novel["Author(s)"],
+ novel["Genre(s)"],
+ novel.Type,
+ novel.Release,
+ novel.Status,
+ ],
+ (tx, res) => console.log("Inserted Novel"),
+ (txObj, error) => console.log("Error ", error)
);
- console.log("Inserted Novel");
- novel.novelChapters.map((chap) =>
+ chapters.map((chap) =>
tx.executeSql(
- "INSERT INTO ChapterTable (chapterId, chapterName, releaseDate, novelId) values (?, ?, ?, ?)",
+ "INSERT INTO ChapterTable (chapterUrl, chapterName, releaseDate, novelUrl) values (?, ?, ?, ?)",
[
chap.chapterUrl,
chap.chapterName,
chap.releaseDate,
- novel.novelUrl,
+ item.novelUrl,
]
)
);
@@ -85,15 +113,15 @@ const NovelItem = ({ route, navigation }) => {
} else {
db.transaction((tx) => {
tx.executeSql(
- "DELETE FROM LibraryTable WHERE novelId=?",
- [novel.novelUrl],
+ "DELETE FROM LibraryTable WHERE novelUrl=?",
+ [item.novelUrl],
(txObj, res) => {
console.log("DELETED NOVEL FROM TABLE");
},
(txObj, error) => console.log("Error ", error)
);
- tx.executeSql("DELETE FROM ChapterTable WHERE novelId=?", [
- novel.novelUrl,
+ tx.executeSql("DELETE FROM ChapterTable WHERE novelUrl=?", [
+ item.novelUrl,
]);
console.log("Removed Novel");
setlibraryStatus(0);
@@ -104,15 +132,18 @@ const NovelItem = ({ route, navigation }) => {
const checkIfExistsInLibrary = (id) => {
db.transaction((tx) => {
tx.executeSql(
- "SELECT * FROM LibraryTable WHERE novelId=?",
+ "SELECT * FROM LibraryTable WHERE novelUrl=?",
[id],
(txObj, res) => {
console.log(res.rows.length);
if (res.rows.length === 0) {
+ setRefreshing(true);
console.log("Not In Library");
+ getNovel();
setlibraryStatus(0);
} else {
console.log("In Library");
+ getNovelFromDb();
setlibraryStatus(1);
}
},
@@ -122,12 +153,12 @@ const NovelItem = ({ route, navigation }) => {
};
useEffect(() => {
- getNovel();
+ checkIfExistsInLibrary(item.novelUrl);
}, []);
const onRefresh = async () => {
setRefreshing(true);
- getNovel();
+ checkIfExistsInLibrary(item.novelUrl);
};
return (
@@ -196,9 +227,10 @@ const NovelItem = ({ route, navigation }) => {
}}
numberOfLines={1}
>
- {novel.novelDetails[
- "Alternative"
- ].replace(",", ", ")}
+ {novel.Alternative.replace(
+ ",",
+ ", "
+ )}
{
fontSize: 15,
}}
>
- {novel.novelDetails[
- "Author(s)"
- ].replace(",", ", ")}
+ {novel["Author(s)"].replace(
+ ",",
+ ", "
+ )}
{
fontSize: 15,
}}
>
- {novel.novelDetails["Release"]}
+ {novel["Release"]}
{
fontSize: 15,
}}
>
- {novel.novelDetails["Status"] +
+ {novel["Status"] +
" • " +
- novel.novelDetails["Type"]}
+ novel["Type"]}
>
)}
@@ -323,7 +356,7 @@ const NovelItem = ({ route, navigation }) => {
marginBottom: 15,
}}
horizontal
- data={novel.novelDetails["Genre(s)"].split(",")}
+ data={novel["Genre(s)"].split(",")}
keyExtractor={(item) => item}
renderItem={({ item }) => (
{
justifyContent: "space-between",
alignItems: "center",
}}
- onPress={() =>
- setChapters((chapters) => chapters.reverse())
- }
+ // onPress={() =>
+ // setChapters((chapters) => chapters.reverse())
+ // }
rippleColor={theme.rippleColorDark}
>
<>
@@ -367,11 +400,11 @@ const NovelItem = ({ route, navigation }) => {
icon="filter-variant"
color={theme.textColorPrimaryDark}
size={20}
- onPress={() =>
- setChapters((chapters) =>
- chapters.reverse()
- )
- }
+ // onPress={() =>
+ // setChapters((chapters) =>
+ // chapters.reverse()
+ // )
+ // }
/>
>
@@ -379,7 +412,7 @@ const NovelItem = ({ route, navigation }) => {
data={chapters}
extraData={chapters}
showsVerticalScrollIndicator={false}
- keyExtractor={(item) => item.chapterUrl}
+ keyExtractor={(item) => novel.chapterUrl}
removeClippedSubviews={true}
maxToRenderPerBatch={10}
initialNumToRender={10}
diff --git a/src/screens/NovelItemRewrite.js b/src/screens/NovelItemRewrite.js
deleted file mode 100644
index b0bd9ace..00000000
--- a/src/screens/NovelItemRewrite.js
+++ /dev/null
@@ -1,507 +0,0 @@
-import React, { useState, useEffect } from "react";
-import {
- StyleSheet,
- View,
- Image,
- ImageBackground,
- Text,
- FlatList,
- ScrollView,
- RefreshControl,
-} from "react-native";
-import {
- Appbar,
- TouchableRipple,
- IconButton,
- Button,
-} from "react-native-paper";
-import { LinearGradient } from "expo-linear-gradient";
-
-import { theme } from "../theming/theme";
-
-import * as SQLite from "expo-sqlite";
-const db = SQLite.openDatabase("lnreader.db");
-
-const NovelItem = ({ route, navigation }) => {
- const item = route.params;
-
- const [loading, setLoading] = useState(true);
- const [refreshing, setRefreshing] = useState(false);
-
- const [novel, setNovel] = useState(item);
- const [chapters, setChapters] = useState();
- const [more, setMore] = useState(false);
-
- const [libraryStatus, setlibraryStatus] = useState();
- // const [dbFlag, setDbFlag] = useState(0);
-
- const getNovel = () => {
- fetch(`http://192.168.1.39:5000/api/novel/${item.novelUrl}`)
- .then((response) => response.json())
- .then((json) => {
- setNovel(json);
- setChapters(json.novelChapters);
- })
- .catch((error) => console.error(error))
- .finally(() => {
- setRefreshing(false);
- setLoading(false);
- });
- };
-
- const getNovelFromDb = () => {
- db.transaction((tx) => {
- // tx.executeSql(
- // "SELECT * FROM LibraryTable WHERE novelUrl=?",
- // [item.novelUrl],
- // (txObj, { rows: _array }) => {
- // // setNovel(_array);
- // // console.log(_array);
- // },
- // (txObj, error) => console.log("Error ", error)
- // );
- tx.executeSql(
- "SELECT * FROM ChapterTable WHERE novelUrl=?",
- [item.novelUrl],
- (txObj, { rows: { _array } }) => {
- setChapters(_array);
- // console.log(_array);
- setRefreshing(false);
- setLoading(false);
- },
- (txObj, error) => console.log("Error ", error)
- );
- });
- };
-
- const insertToLibrary = () => {
- if (libraryStatus === 0) {
- db.transaction((tx) => {
- tx.executeSql(
- "INSERT INTO LibraryTable (novelUrl, novelName, novelCover, novelSummary, Alternative, `Author(s)`, `Genre(s)`, Type, `Release`, Status) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
- [
- item.novelUrl,
- novel.novelName,
- novel.novelCover,
- novel.novelSummary,
- novel.Alternative,
- novel["Author(s)"],
- novel["Genre(s)"],
- novel.Type,
- novel.Release,
- novel.Status,
- ],
- (tx, res) => console.log("Inserted Novel"),
- (txObj, error) => console.log("Error ", error)
- );
-
- chapters.map((chap) =>
- tx.executeSql(
- "INSERT INTO ChapterTable (chapterUrl, chapterName, releaseDate, novelUrl) values (?, ?, ?, ?)",
- [
- chap.chapterUrl,
- chap.chapterName,
- chap.releaseDate,
- item.novelUrl,
- ]
- )
- );
- setlibraryStatus(1);
- });
- } else {
- db.transaction((tx) => {
- tx.executeSql(
- "DELETE FROM LibraryTable WHERE novelUrl=?",
- [item.novelUrl],
- (txObj, res) => {
- console.log("DELETED NOVEL FROM TABLE");
- },
- (txObj, error) => console.log("Error ", error)
- );
- tx.executeSql("DELETE FROM ChapterTable WHERE novelUrl=?", [
- item.novelUrl,
- ]);
- console.log("Removed Novel");
- setlibraryStatus(0);
- });
- }
- };
-
- const checkIfExistsInLibrary = (id) => {
- db.transaction((tx) => {
- tx.executeSql(
- "SELECT * FROM LibraryTable WHERE novelUrl=?",
- [id],
- (txObj, res) => {
- console.log(res.rows.length);
- if (res.rows.length === 0) {
- console.log("Not In Library");
- getNovel();
- setlibraryStatus(0);
- } else {
- console.log("In Library");
- getNovelFromDb();
- setlibraryStatus(1);
- }
- },
- (txObj, error) => console.log("Error ", error)
- );
- });
- };
-
- useEffect(() => {
- checkIfExistsInLibrary(item.novelUrl);
- }, []);
-
- const onRefresh = async () => {
- setRefreshing(true);
- checkIfExistsInLibrary(item.novelUrl);
- };
-
- return (
- <>
-
- {
- navigation.goBack();
- }}
- color={"white"}
- size={26}
- style={{ marginRight: 0 }}
- />
-
-
-
-
- }
- >
-
-
-
-
-
-
- {item.novelName}
-
- {!loading && (
- <>
-
- {novel.Alternative.replace(
- ",",
- ", "
- )}
-
-
- {novel["Author(s)"].replace(
- ",",
- ", "
- )}
-
-
- {novel["Release"]}
-
-
- {novel["Status"] +
- " • " +
- novel["Type"]}
-
- >
- )}
-
-
-
-
- {!loading && (
- <>
-
- {/* */}
- {novel.novelSummary.length > 0 && (
-
-
- About
-
- setMore(!more)}
- ellipsizeMode="clip"
- >
- {novel.novelSummary}
-
- setMore(!more)}
- >
- {more ? "Less" : "More"}
-
-
- )}
- item}
- renderItem={({ item }) => (
-
- {item}
-
- )}
- />
-
-
- // setChapters((chapters) => chapters.reverse())
- // }
- rippleColor={theme.rippleColorDark}
- >
- <>
-
- {chapters.length + " Chapters"}
-
-
- // setChapters((chapters) =>
- // chapters.reverse()
- // )
- // }
- />
- >
-
- novel.chapterUrl}
- removeClippedSubviews={true}
- maxToRenderPerBatch={10}
- initialNumToRender={10}
- renderItem={({ item }) => (
-
- navigation.navigate("ChapterItem", {
- chapterUrl: item.chapterUrl,
- })
- }
- rippleColor={theme.rippleColorDark}
- >
- <>
-
- {item.chapterName}
-
-
- {item.releaseDate}
-
- >
-
- )}
- />
- >
- )}
-
- >
- );
-};
-
-export default NovelItem;
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- // backgroundColor: "#202125",
- backgroundColor: "#000000",
- },
- nameContainer: {
- flex: 1,
- width: "100%",
- marginHorizontal: 15,
- // justifyContent: "center",
- },
- background: {
- height: 240,
- },
- linearGradient: {
- height: "100%",
- backgroundColor: "rgba(256, 256, 256, 0.5)",
- },
- detailsContainer: {
- flex: 1,
- flexDirection: "row",
- margin: 15,
- },
- logo: {
- height: 180,
- width: 120,
- margin: 3.2,
- borderRadius: 6,
- },
- genre: {
- borderRadius: 24,
- borderWidth: 1,
- paddingHorizontal: 10,
- marginHorizontal: 2,
- fontSize: 13,
- paddingVertical: 2,
- justifyContent: "center",
- flex: 1,
- },
- name: {
- fontWeight: "bold",
- fontSize: 20,
- },
-});
diff --git a/src/screens/Updates.js b/src/screens/Updates.js
index 6b0a625e..6a89f444 100644
--- a/src/screens/Updates.js
+++ b/src/screens/Updates.js
@@ -116,10 +116,7 @@ const AllNovels = ({ navigation }) => {
rippleColor="rgba(256,256,256,0.3)"
style={styles.opac}
onPress={() =>
- navigation.navigate(
- "NovelItemRewrite",
- item
- )
+ navigation.navigate("NovelItem", item)
}
>