diff --git a/backend/src/module/rss/analyser.py b/backend/src/module/rss/analyser.py index 7dcdd355..549fdc0a 100644 --- a/backend/src/module/rss/analyser.py +++ b/backend/src/module/rss/analyser.py @@ -14,9 +14,13 @@ logger = logging.getLogger(__name__) class RSSAnalyser(TitleParser): def official_title_parser(self, bangumi: Bangumi, rss: RSSItem, torrent: Torrent): if rss.parser == "mikan": - bangumi.poster_link, bangumi.official_title = self.mikan_parser( - torrent.homepage - ) + try: + bangumi.poster_link, bangumi.official_title = self.mikan_parser( + torrent.homepage + ) + except AttributeError: + logger.warning("[Parser] Mikan torrent has no homepage info.") + pass elif rss.parser == "tmdb": tmdb_title, season, year, poster_link = self.tmdb_parser( bangumi.official_title, bangumi.season, settings.rss_parser.language diff --git a/webui/src/api/search.ts b/webui/src/api/search.ts index a3828534..61f26591 100644 --- a/webui/src/api/search.ts +++ b/webui/src/api/search.ts @@ -2,7 +2,7 @@ import { Observable, } from 'rxjs'; -import type { BangumiRule } from '#/bangumi'; +import type { BangumiRule, BangumiAPI } from '#/bangumi'; export const apiSearch = { /** @@ -18,7 +18,12 @@ export const apiSearch = { eventSource.onmessage = ev => { try { - const data: BangumiRule = JSON.parse(ev.data); + const apiData: BangumiAPI = JSON.parse(ev.data); + const data: BangumiRule = { + ...apiData, + filter: apiData.filter.split(','), + rss_link: apiData.rss_link.split(','), + } observer.next(data); } catch (error) { console.error('[/search/bangumi] Parse Error |', { keyword }, 'response:', ev.data) diff --git a/webui/src/components/ab-add-bangumi.vue b/webui/src/components/ab-add-bangumi.vue index 21c6ff1b..00b3dba1 100644 --- a/webui/src/components/ab-add-bangumi.vue +++ b/webui/src/components/ab-add-bangumi.vue @@ -13,8 +13,8 @@ const message = useMessage(); const { getAll } = useBangumiStore(); const rss = ref(rssTemplate); +const searchRule = defineModel('searchRule', { default: null }); const rule = ref(ruleTemplate); - const parserType = ['mikan', 'tmdb', 'parser']; const window = reactive({ @@ -33,6 +33,10 @@ watch(show, (val) => { setTimeout(() => { window.next = false; }, 300); + } else if (val || searchRule.value) { + window.next = true; + window.rule = true; + rule.value = searchRule.value; } }); @@ -59,9 +63,6 @@ async function addRss() { window.loading = true; const data = await apiDownload.analysis(rss.value); window.loading = false; - const response = await apiRSS.add(rss.value); - message.success(response.msg_en); - console.log('rss', response); rule.value = data; window.next = true; window.rule = true; diff --git a/webui/src/components/ab-search-bar.vue b/webui/src/components/ab-search-bar.vue new file mode 100644 index 00000000..70b0e9d4 --- /dev/null +++ b/webui/src/components/ab-search-bar.vue @@ -0,0 +1,91 @@ + + + + + + + \ No newline at end of file diff --git a/webui/src/components/basic/ab-search.vue b/webui/src/components/basic/ab-search.vue index b5535db1..9314fed4 100644 --- a/webui/src/components/basic/ab-search.vue +++ b/webui/src/components/basic/ab-search.vue @@ -1,28 +1,25 @@ @@ -41,86 +38,47 @@ onMounted(() => { shadow-inner > + -
-
- {{ provider }} -
-
- -
-
- -
-
- {{ site }} +
+ {{ provider }} +
+
+ +
-
-
-
-
diff --git a/webui/src/components/layout/ab-topbar.vue b/webui/src/components/layout/ab-topbar.vue index a216116f..c3d0230f 100644 --- a/webui/src/components/layout/ab-topbar.vue +++ b/webui/src/components/layout/ab-topbar.vue @@ -7,12 +7,14 @@ import { Power, Refresh, } from '@icon-park/vue-next'; +import type {BangumiRule} from "#/bangumi"; const {t, changeLocale} = useMyI18n(); const {running, onUpdate, offUpdate} = useAppInfo(); -const show = ref(false); +const showAccount = ref(false); const showAdd = ref(false); +const searchRule = ref() const {start, pause, shutdown, restart, resetRule} = useProgramStore(); @@ -52,13 +54,19 @@ const items = [ label: () => t('topbar.profile.title'), icon: Me, handle: () => { - show.value = true; + showAccount.value = true; }, }, ]; const onSearchFocus = ref(false); +function addSearchResult(bangumi: BangumiRule) { + showAdd.value = true; + searchRule.value = bangumi; + console.log('searchRule', searchRule.value); +} + onBeforeMount(() => { onUpdate(); }); @@ -76,7 +84,7 @@ onUnmounted(() => { AutoBangumi - +
@@ -88,8 +96,8 @@ onUnmounted(() => { >
- + - + diff --git a/webui/src/pages/index/bangumi.vue b/webui/src/pages/index/bangumi.vue index 322b041f..dff22418 100644 --- a/webui/src/pages/index/bangumi.vue +++ b/webui/src/pages/index/bangumi.vue @@ -14,8 +14,11 @@ definePage({