diff --git a/common/App.svelte b/common/App.svelte
index b27c7d6..936c07d 100644
--- a/common/App.svelte
+++ b/common/App.svelte
@@ -22,7 +22,6 @@
import ViewAnime from './views/ViewAnime/ViewAnime.svelte'
import TorrentModal from './views/TorrentSearch/TorrentModal.svelte'
import Menubar from './components/Menubar.svelte'
- import IspBlock from './views/IspBlock.svelte'
import { Toaster } from 'svelte-sonner'
import Logout from './components/Logout.svelte'
import Navbar from './components/Navbar.svelte'
@@ -31,7 +30,6 @@
-
diff --git a/common/css.css b/common/css.css
index 5d1c2f7..457f3f9 100644
--- a/common/css.css
+++ b/common/css.css
@@ -64,6 +64,10 @@
/* --error-text: hsl(358, 100%, 81%); */
}
+[data-sonner-toaster] [data-description] {
+ white-space: pre-wrap;
+}
+
.z-100 {
z-index: 100;
}
diff --git a/common/modules/extensions/index.js b/common/modules/extensions/index.js
index 1baa22c..9842940 100644
--- a/common/modules/extensions/index.js
+++ b/common/modules/extensions/index.js
@@ -5,6 +5,7 @@ import { anilistClient } from '../anilist.js'
import { anitomyscript } from '../anime.js'
import { client } from '@/modules/torrent.js'
import { extensionsWorker } from '@/views/Settings/TorrentSettings.svelte'
+import { toast } from 'svelte-sonner'
/** @typedef {import('@thaunknown/ani-resourced/sources/types.d.ts').Options} Options */
/** @typedef {import('@thaunknown/ani-resourced/sources/types.d.ts').Result} Result */
@@ -33,7 +34,14 @@ export default async function getResultsFromExtensions ({ media, episode, batch,
exclusions
}
- const results = await worker.query(options, { movie, batch }, settings.value.sources)
+ const { results, errors } = await worker.query(options, { movie, batch }, settings.value.sources)
+
+ for (const error of errors) {
+ console.error(error)
+ toast.error('Source Fetch Failed!', {
+ description: error
+ })
+ }
const deduped = dedupe(results)
diff --git a/common/modules/extensions/worker.js b/common/modules/extensions/worker.js
index f9c70f9..7564404 100644
--- a/common/modules/extensions/worker.js
+++ b/common/modules/extensions/worker.js
@@ -15,24 +15,51 @@ class Extensions {
/**
* @param {Options} options
- * @param {{ movie: boolean, batch: boolean }} param1
- * @param {Record} sources
+ * @param {{ movie: boolean, batch: boolean }} types
+ * @param {Record} sourcesToQuery
*/
- async query (options, { movie, batch }, sources) {
- /** @type {Promise[]} */
+ async query (options, types, sourcesToQuery) {
+ /** @type {Promise<{ results: Result[], errors: string[] }>[]} */
const promises = []
for (const source of Object.values(this.sources)) {
- if (!sources[source.name]) continue
- if (movie) promises.push(source.movie(options))
- if (batch) promises.push(source.batch(options))
- promises.push(source.single(options))
+ if (!sourcesToQuery[source.name]) continue
+ promises.push(this._querySource(source, options, types))
}
/** @type {Result[]} */
const results = []
- for (const result of await Promise.allSettled(promises)) {
- if (result.status === 'fulfilled') results.push(...result.value)
+ const errors = []
+ for (const res of await Promise.all(promises)) {
+ results.push(...res.results)
+ errors.push(...res.errors)
}
- return results.flat()
+
+ return { results, errors }
+ }
+
+ /**
+ * @param {AbstractSource} source
+ * @param {Options} options
+ * @param {{ movie: boolean, batch: boolean }} types
+ * @returns {Promise<{ results: Result[], errors: string[] }>}
+ */
+ async _querySource (source, options, { movie, batch }) {
+ const promises = []
+ promises.push(source.single(options))
+ if (movie) promises.push(source.movie(options))
+ if (batch) promises.push(source.batch(options))
+
+ const results = []
+ const errors = []
+ for (const result of await Promise.allSettled(promises)) {
+ if (result.status === 'fulfilled') {
+ results.push(...result.value)
+ } else {
+ console.error(result)
+ errors.push('Source ' + source.name + ' failed to load results:\n' + result.reason.message)
+ }
+ }
+
+ return { results, errors }
}
}
diff --git a/common/modules/rss.js b/common/modules/rss.js
index 244bd86..b145357 100644
--- a/common/modules/rss.js
+++ b/common/modules/rss.js
@@ -52,15 +52,11 @@ export function getReleasesRSSurl (val) {
export async function getRSSContent (url) {
if (!url) return null
- try {
- const res = await fetch(url)
- if (!res.ok) {
- throw new Error('Failed fetching RSS!\n' + res.statusText)
- }
- return DOMPARSER(await res.text(), 'text/xml')
- } catch (e) {
- throw new Error('Failed fetching RSS!\n' + e.message)
+ const res = await fetch(url)
+ if (!res.ok) {
+ throw new Error(res.statusText)
}
+ return DOMPARSER(await res.text(), 'text/xml')
}
class RSSMediaManager {
@@ -73,9 +69,9 @@ class RSSMediaManager {
if (!ignoreErrors) {
res.catch(e => {
toast.error('Search Failed', {
- description: 'Failed fetching RSS!\n' + e.message
+ description: 'Failed Loading Media for Home Feed!\n' + e.message
})
- console.error('Failed to fetch rss', e)
+ console.error('Failed Loading Media for Home Feed', e)
})
}
return Array.from({ length: perPage }, (_, i) => ({ type: 'episode', data: this.fromPending(res, i) }))