4b1ff0efc1
[skip ci]
73 lines
1.7 KiB
TypeScript
73 lines
1.7 KiB
TypeScript
import { LibraryNovelInfo, NovelInfo } from '../types';
|
|
import { getAllSync } from '../utils/helpers';
|
|
|
|
export const getLibraryNovelsFromDb = (
|
|
sortOrder?: string,
|
|
filter?: string,
|
|
searchText?: string,
|
|
downloadedOnlyMode?: boolean,
|
|
excludeLocalNovels?: boolean,
|
|
): NovelInfo[] => {
|
|
let query = 'SELECT * FROM Novel WHERE inLibrary = 1';
|
|
|
|
if (excludeLocalNovels) {
|
|
query += ' AND isLocal = 0';
|
|
}
|
|
|
|
if (filter) {
|
|
query += ` AND ${filter}`;
|
|
}
|
|
|
|
if (downloadedOnlyMode) {
|
|
query += ` AND (chaptersDownloaded = 1 OR isLocal = 1)`;
|
|
}
|
|
|
|
if (searchText) {
|
|
query += ' AND name LIKE ?';
|
|
}
|
|
|
|
if (sortOrder) {
|
|
query += ` ORDER BY ${sortOrder}`;
|
|
}
|
|
|
|
return getAllSync<NovelInfo>([query, [searchText ?? '']]);
|
|
};
|
|
|
|
const getNovelOfCategoryQuery =
|
|
'SELECT DISTINCT novelId FROM NovelCategory WHERE 1 = 1';
|
|
const getNovelsFromIDListQuery = 'SELECT * FROM Novel WHERE inLibrary = 1 ';
|
|
|
|
export const getLibraryWithCategory = (
|
|
categoryId?: number | null,
|
|
onlyUpdateOngoingNovels?: boolean,
|
|
excludeLocalNovels?: boolean,
|
|
): LibraryNovelInfo[] => {
|
|
let categoryQuery = getNovelOfCategoryQuery;
|
|
|
|
if (categoryId) {
|
|
categoryQuery += ` AND categoryId = ${categoryId}`;
|
|
}
|
|
|
|
const idRows = getAllSync<{ novelId: number }>([categoryQuery, []]);
|
|
|
|
if (!idRows || idRows.length === 0) return [];
|
|
|
|
const novelIds = idRows.map(r => r.novelId).join(',');
|
|
|
|
let novelQuery = getNovelsFromIDListQuery;
|
|
|
|
novelQuery += ` AND id IN (${novelIds})`;
|
|
|
|
if (excludeLocalNovels) {
|
|
novelQuery += ' AND isLocal = 0';
|
|
}
|
|
|
|
if (onlyUpdateOngoingNovels) {
|
|
novelQuery += " AND status = 'Ongoing'";
|
|
}
|
|
|
|
const res = getAllSync<LibraryNovelInfo>([novelQuery, []]);
|
|
|
|
return res;
|
|
};
|