add scraper types

This commit is contained in:
Jelle van Snik 2022-02-06 21:42:39 +01:00
parent de97ee165d
commit b3c4ad5e15
7 changed files with 57 additions and 11 deletions

View File

@ -4,8 +4,6 @@ module.exports = {
webpack: { webpack: {
alias: { alias: {
"@": path.resolve(__dirname, "src/"), "@": path.resolve(__dirname, "src/"),
"@components": path.resolve(__dirname, "src/components"),
"@scrapers": path.resolve(__dirname, "src/scrapers"),
}, },
}, },
}; };

8
paths.json Normal file
View File

@ -0,0 +1,8 @@
{
"compilerOptions": {
"baseUrl": "./src",
"paths": {
"@/*": [ "*"]
}
}
}

View File

@ -1,8 +1,24 @@
import { GetProviderFromId, SearchProviders, MWMedia, MWMediaType } from '@/scrapers';
import { useState } from 'react';
import './index.css'; import './index.css';
function App() { function App() {
const [results, setResults] = useState<MWMedia[]>([]);
async function runSearch() {
const results = await SearchProviders({ type: MWMediaType.MOVIE, searchQuery: "abc" });
setResults(results);
}
return ( return (
<p>Hello world</p> <>
<h1>Search</h1>
<button onClick={() => runSearch()}>Search</button>
<h1>Search results</h1>
{results.map(v=>(
<p>{v.title} ({GetProviderFromId(v.providerId)?.displayName})</p>
))}
</>
); );
} }

View File

@ -1,6 +1,19 @@
import { theFlixScraper } from "./list/theflix"; import { theFlixScraper } from "./list/theflix";
import { MWMediaProvider } from "./scrapers"; import { MWMediaProvider, MWQuery } from "./types";
export * from "./types";
export const mediaProviders: MWMediaProvider[] = [ const mediaProvidersUnchecked: MWMediaProvider[] = [
theFlixScraper theFlixScraper
] ]
export const mediaProviders: MWMediaProvider[] = mediaProvidersUnchecked.filter(v=>v.enabled);
export async function SearchProviders(query: MWQuery) {
const allQueries = mediaProviders.map(provider => provider.searchForMedia(query));
const allResults = await Promise.all(allQueries);
return allResults.flatMap(results => results);
}
export function GetProviderFromId(id: string) {
return mediaProviders.find(v=>v.id===id);
}

View File

@ -1,15 +1,23 @@
import { MWMedia, MWMediaProvider, MWMediaType, MWPortableMedia, MWQuery } from "../../scrapers"; import { MWMedia, MWMediaProvider, MWMediaType, MWPortableMedia, MWQuery } from "@/scrapers/types";
export const theFlixScraper: MWMediaProvider = { export const theFlixScraper: MWMediaProvider = {
id: "theflix", id: "theflix",
enabled: true,
type: MWMediaType.MOVIE, type: MWMediaType.MOVIE,
getMediaFromPortable(media: MWPortableMedia): MWMedia { displayName: "TheFlix",
async getMediaFromPortable(media: MWPortableMedia): Promise<MWMedia> {
return { return {
...media, ...media,
title: "title here" title: "title here"
} }
}, },
searchForMedia(query: MWQuery): MWMedia[] {
return []; async searchForMedia(query: MWQuery): Promise<MWMedia[]> {
return [{
mediaId: "a",
providerId: this.id,
title: "testing",
}];
}, },
} }

View File

@ -19,8 +19,10 @@ export interface MWQuery {
export interface MWMediaProvider { export interface MWMediaProvider {
id: string, // id of provider, must be unique id: string, // id of provider, must be unique
enabled: boolean,
type: MWMediaType, type: MWMediaType,
displayName: string,
getMediaFromPortable(media: MWPortableMedia): MWMedia, getMediaFromPortable(media: MWPortableMedia): Promise<MWMedia>,
searchForMedia(query: MWQuery): MWMedia[], searchForMedia(query: MWQuery): Promise<MWMedia[]>,
} }

View File

@ -1,4 +1,5 @@
{ {
"extends": "./paths.json",
"compilerOptions": { "compilerOptions": {
"target": "es5", "target": "es5",
"lib": [ "lib": [