import { fetchApi, fetchProto, fetchText } from '@libs/fetch'; import { Plugin } from '@/types/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'; // import { storage, localStorage, sessionStorage } from '@libs/storage'; // import { encode, decode } from 'urlencode'; // import dayjs from 'dayjs'; // import { Parser } from 'htmlparser2'; 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; //flag indicates whether access to LocalStorage, SesesionStorage is required. webStorageUtilized?: boolean; async popularNovels( pageNo: number, { showLatestNovels, filters, }: Plugin.PopularNovelsOptions, ): Promise { 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 { 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 { // parse chapter text here const chapterText = ''; return chapterText; } async searchNovels( searchTerm: string, pageNo: number, ): Promise { 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();