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/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 index 65b642c5..70b0e9d4 100644 --- a/webui/src/components/ab-search-bar.vue +++ b/webui/src/components/ab-search-bar.vue @@ -10,6 +10,7 @@ const { provider, loading, onSearch, + clearSearch, inputValue, bangumiList, } = useSearchStore(); @@ -63,9 +64,11 @@ function onSelect(site: string) {
- + + -.search-result-enter-active, .search-result-leave-active { +.result-enter-active { transition: all 0.3s; } diff --git a/webui/src/components/layout/ab-topbar.vue b/webui/src/components/layout/ab-topbar.vue index 70db3766..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({