fae73534dd
* test * cleanup deleted unused `fetchFile` import replaced fetch with `fetchApi` * eslint * fix * fix multi * Hmm, what to do next. * test URLSearchParams * fix
89 lines
2.2 KiB
TypeScript
89 lines
2.2 KiB
TypeScript
import { fetchApi } from '@libs/fetch';
|
|
import { Plugin } from '@typings/plugin';
|
|
import { Filters } from '@libs/filterInputs';
|
|
import { load as loadCheerio } from 'cheerio';
|
|
import { defaultCover } from '@libs/defaultCover';
|
|
import { NovelStatus } from '@libs/novelStatus';
|
|
// import { isUrlAbsolute } from '@libs/isAbsoluteUrl';
|
|
|
|
class TemplatePlugin implements Plugin.PluginBase {
|
|
id = '';
|
|
name = '';
|
|
icon = '';
|
|
site = 'https://example.com';
|
|
version = '1.0.0';
|
|
filters: Filters | undefined = undefined;
|
|
imageRequestInit?: Plugin.ImageRequestInit | undefined = undefined;
|
|
|
|
async popularNovels(
|
|
pageNo: number,
|
|
{
|
|
showLatestNovels,
|
|
filters,
|
|
}: Plugin.PopularNovelsOptions<typeof this.filters>,
|
|
): Promise<Plugin.NovelItem[]> {
|
|
const novels: Plugin.NovelItem[] = [];
|
|
|
|
/** Add your fetching code here */
|
|
novels.push({
|
|
name: 'Novel1',
|
|
path: '/novels/1',
|
|
cover: defaultCover,
|
|
});
|
|
return novels;
|
|
}
|
|
async parseNovel(novelPath: string): Promise<Plugin.SourceNovel> {
|
|
const novel: Plugin.SourceNovel = {
|
|
path: novelPath,
|
|
name: 'Untitled',
|
|
};
|
|
|
|
// TODO: get here data from the site and
|
|
// un-comment and fill-in the relevant fields
|
|
|
|
// novel.name = '';
|
|
// novel.artist = '';
|
|
// novel.author = '';
|
|
novel.cover = defaultCover;
|
|
// novel.genres = '';
|
|
// novel.status = NovelStatus.Completed;
|
|
// novel.summary = '';
|
|
|
|
const chapters: Plugin.ChapterItem[] = [];
|
|
|
|
// TODO: here parse the chapter list
|
|
|
|
// TODO: add each chapter to the list using
|
|
const chapter: Plugin.ChapterItem = {
|
|
name: '',
|
|
path: '',
|
|
releaseTime: '',
|
|
chapterNumber: 0,
|
|
};
|
|
chapters.push(chapter);
|
|
|
|
novel.chapters = chapters;
|
|
return novel;
|
|
}
|
|
async parseChapter(chapterPath: string): Promise<string> {
|
|
// parse chapter text here
|
|
const chapterText = '';
|
|
return chapterText;
|
|
}
|
|
async searchNovels(
|
|
searchTerm: string,
|
|
pageNo: number,
|
|
): Promise<Plugin.NovelItem[]> {
|
|
const novels: Plugin.NovelItem[] = [];
|
|
|
|
// get novels using the search term
|
|
|
|
return novels;
|
|
}
|
|
|
|
resolveUrl = (path: string, isNovel?: boolean) =>
|
|
this.site + (isNovel ? '/book/' : '/chapter/') + path;
|
|
}
|
|
|
|
export default new TemplatePlugin();
|