Browse Source

Improve error handling for providers api

pull/561/head
mrjvs 2 years ago
parent
commit
4847980947
  1. 25
      src/backend/helpers/providerApi.ts
  2. 6
      src/components/player/hooks/useSourceSelection.ts

25
src/backend/helpers/providerApi.ts

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
import { MetaOutput, ScrapeMedia } from "@movie-web/providers";
import { MetaOutput, NotFoundError, ScrapeMedia } from "@movie-web/providers";
import { mwFetch } from "@/backend/helpers/fetch";
@ -83,11 +83,32 @@ export function connectServerSideEvents<T>(url: string, endEvents: string[]) { @@ -83,11 +83,32 @@ export function connectServerSideEvents<T>(url: string, endEvents: string[]) {
});
});
eventSource.addEventListener("error", (err) => {
eventSource.addEventListener("error", (err: MessageEvent<any>) => {
eventSource.close();
if (err.data) {
const data = JSON.parse(err.data);
let errObj = new Error("scrape error");
if (data.name === NotFoundError.name)
errObj = new NotFoundError("Notfound from server");
Object.assign(errObj, data);
promReject(errObj);
return;
}
console.error("Failed to connect to SSE", err);
promReject(err);
});
eventSource.addEventListener("message", (ev) => {
if (!ev) {
eventSource.close();
return;
}
setTimeout(() => {
promReject(new Error("SSE closed improperly"));
}, 1000);
});
return {
promise: () => promise,
on<Data>(event: string, cb: (data: Data) => void) {

6
src/components/player/hooks/useSourceSelection.ts

@ -43,7 +43,7 @@ export function useEmbedScraping( @@ -43,7 +43,7 @@ export function useEmbedScraping(
const baseUrlMaker = makeProviderUrl(providerApiUrl);
const conn = connectServerSideEvents<EmbedOutput>(
baseUrlMaker.scrapeEmbed(embedId, url),
["completed"]
["completed", "noOutput"]
);
result = await conn.promise();
} else {
@ -107,7 +107,7 @@ export function useSourceScraping(sourceId: string | null, routerId: string) { @@ -107,7 +107,7 @@ export function useSourceScraping(sourceId: string | null, routerId: string) {
const baseUrlMaker = makeProviderUrl(providerApiUrl);
const conn = connectServerSideEvents<SourcererOutput>(
baseUrlMaker.scrapeSource(sourceId, scrapeMedia),
["completed"]
["completed", "noOutput"]
);
result = await conn.promise();
} else {
@ -151,7 +151,7 @@ export function useSourceScraping(sourceId: string | null, routerId: string) { @@ -151,7 +151,7 @@ export function useSourceScraping(sourceId: string | null, routerId: string) {
result.embeds[0].embedId,
result.embeds[0].url
),
["completed"]
["completed", "noOutput"]
);
embedResult = await conn.promise();
} else {

Loading…
Cancel
Save