182 lines
5.5 KiB
JavaScript
182 lines
5.5 KiB
JavaScript
import * as SQLite from "expo-sqlite";
|
|
const db = SQLite.openDatabase("lnreader.db");
|
|
|
|
const insertChaptersQuery = `INSERT INTO chapters (chapterUrl, chapterName, releaseDate, novelId) values (?, ?, ?, ?)`;
|
|
|
|
export const insertChapters = async (novelId, chapters) => {
|
|
db.transaction((tx) => {
|
|
chapters.map(
|
|
(chapter) =>
|
|
tx.executeSql(
|
|
insertChaptersQuery,
|
|
[
|
|
chapter.chapterUrl,
|
|
chapter.chapterName,
|
|
chapter.releaseDate,
|
|
novelId,
|
|
],
|
|
(txObj, res) => {},
|
|
(txObj, error) =>
|
|
console.log(
|
|
"Error ",
|
|
error,
|
|
" Chapter URL: ",
|
|
chapter.chapterUrl,
|
|
" Novel ID ",
|
|
novelId
|
|
)
|
|
),
|
|
(txObj, res) => {
|
|
console.log("Success");
|
|
},
|
|
(txObj, error) => console.log("Error ", error)
|
|
);
|
|
});
|
|
};
|
|
|
|
const getChaptersQuery = (sort, filter) =>
|
|
`SELECT * FROM chapters WHERE novelId = ? ${filter || ""} ${
|
|
sort || "ORDER BY chapterId ASC"
|
|
}`;
|
|
|
|
export const getChapters = (novelId, sort, filter) => {
|
|
return new Promise((resolve, reject) =>
|
|
db.transaction((tx) => {
|
|
tx.executeSql(
|
|
getChaptersQuery(sort, filter),
|
|
[novelId],
|
|
(txObj, { rows: { _array } }) => {
|
|
resolve(_array);
|
|
},
|
|
(txObj, error) => console.log("Error ", error)
|
|
);
|
|
})
|
|
);
|
|
};
|
|
|
|
const getChapterQuery = `SELECT * FROM downloads WHERE downloadChapterId = ?`;
|
|
|
|
export const getChapter = async (chapterId) => {
|
|
return new Promise((resolve, reject) =>
|
|
db.transaction((tx) => {
|
|
tx.executeSql(
|
|
getChapterQuery,
|
|
[chapterId],
|
|
(tx, results) => {
|
|
resolve(results.rows.item(0));
|
|
},
|
|
(txObj, error) => console.log("Error ", error)
|
|
);
|
|
})
|
|
);
|
|
};
|
|
|
|
const markChapterReadQuery = `UPDATE chapters SET \`read\` = 1 WHERE chapterId = ?`;
|
|
|
|
export const markChapterRead = async (chapterId) => {
|
|
db.transaction((tx) => {
|
|
tx.executeSql(
|
|
markChapterReadQuery,
|
|
[chapterId],
|
|
(tx, res) => {},
|
|
(tx, error) => console.log(error)
|
|
);
|
|
});
|
|
};
|
|
|
|
const isChapterDownloadedQuery = `SELECT * FROM downloads WHERE downloadChapterId=?`;
|
|
|
|
export const isChapterDownloaded = async (chapterId) => {
|
|
return new Promise((resolve, reject) =>
|
|
db.transaction((tx) => {
|
|
tx.executeSql(
|
|
isChapterDownloadedQuery,
|
|
[chapterId],
|
|
(txObj, res) => {
|
|
if (res.rows.length !== 0) {
|
|
resolve(true);
|
|
} else {
|
|
resolve(false);
|
|
}
|
|
},
|
|
(txObj, error) => console.log("Error ", error)
|
|
);
|
|
})
|
|
);
|
|
};
|
|
|
|
const downloadChapterQuery = `INSERT INTO downloads (downloadChapterId, chapterName, chapterText, prevChapter, nextChapter) VALUES (?, ?, ?, ?, ?)`;
|
|
|
|
export const downloadChapter = async (
|
|
extensionId,
|
|
novelUrl,
|
|
chapterUrl,
|
|
chapterId
|
|
) => {
|
|
const downloadUrl = `https://lnreader-extensions.vercel.app/api/${extensionId}/novel/${novelUrl}${chapterUrl}`;
|
|
|
|
const response = await fetch(downloadUrl);
|
|
const chapter = await response.json();
|
|
|
|
db.transaction((tx) => {
|
|
tx.executeSql(
|
|
`UPDATE chapters SET downloaded = 1 WHERE chapterId = ?`,
|
|
[chapterId]
|
|
);
|
|
tx.executeSql(
|
|
downloadChapterQuery,
|
|
[
|
|
chapterId,
|
|
chapter.chapterName,
|
|
chapter.chapterText,
|
|
chapter.prevChapter,
|
|
chapter.nextChapter,
|
|
],
|
|
(tx, res) =>
|
|
console.log(`Downloaded Chapter ${chapter.chapterUrl}`),
|
|
(txObj, error) => console.log("Error ", error)
|
|
);
|
|
});
|
|
};
|
|
|
|
export const deleteChapter = async (chapterId) => {
|
|
const updateIsDownloadedQuery = `UPDATE chapters SET downloaded = 0 WHERE chapterId=?`;
|
|
const deleteChapterQuery = `DELETE FROM downloads WHERE downloadChapterId=?`;
|
|
|
|
db.transaction((tx) => {
|
|
tx.executeSql(
|
|
updateIsDownloadedQuery,
|
|
[chapterId],
|
|
(tx, res) => console.log(`Chaptermarked not downapdeod deleted`),
|
|
(txObj, error) => console.log("Error ", error)
|
|
);
|
|
tx.executeSql(
|
|
deleteChapterQuery,
|
|
[chapterId],
|
|
(tx, res) => console.log(`Chapter deleted`),
|
|
(txObj, error) => console.log("Error ", error)
|
|
);
|
|
});
|
|
};
|
|
|
|
const getLastReadChapterQuery = `
|
|
SELECT chapters.*
|
|
FROM history
|
|
JOIN chapters
|
|
ON history.historyChapterId = chapters.chapterId
|
|
WHERE history.historyNovelId = ?
|
|
`;
|
|
|
|
export const getLastReadChapter = async (novelId) => {
|
|
return new Promise((resolve, reject) => {
|
|
db.transaction((tx) => {
|
|
tx.executeSql(
|
|
getLastReadChapterQuery,
|
|
[novelId],
|
|
(tx, { rows }) => resolve(rows.item(0)),
|
|
(txObj, error) => console.log("Error ", error)
|
|
);
|
|
});
|
|
});
|
|
};
|