fix: rss api bug. fix ui.

This commit is contained in:
EstrellaXD
2023-08-29 21:27:18 +08:00
parent 7ccee98e2e
commit ce8baff938
4 changed files with 44 additions and 32 deletions

View File

@@ -138,6 +138,7 @@ async def download_collection(data: Bangumi, current_user=Depends(get_current_us
resp = collector.collect_season(data, data.rss_link[0])
return u_response(resp)
@router.post("/subscribe", response_model=APIResponse)
async def subscribe(data: Bangumi, current_user=Depends(get_current_user)):
if not current_user:

View File

@@ -71,7 +71,7 @@ class TitleParser:
subtitle=episode.sub,
eps_collect=False if episode.episode > 1 else True,
offset=0,
filter=settings.rss_parser.filter,
filter=",".join(settings.rss_parser.filter),
)
logger.debug(f"RAW:{raw} >> {title_raw}")
return data

View File

@@ -1,25 +1,24 @@
import type { BangumiRule } from '#/bangumi';
import type { ApiSuccess } from '#/api';
import type { BangumiAPI, BangumiRule } from '#/bangumi';
import type { RSS } from '#/rss';
import type { ApiError, ApiSuccess } from '#/api';
export const apiDownload = {
/**
* 解析 RSS 链接
* @param rss_link - RSS 链接
* @param rss_item - RSS 链接
*/
async analysis(rss_link: string) {
const { data } = await axios.post<BangumiRule & { status?: string }>(
'api/v1/download/analysis',
{
rss_link,
}
async analysis(rss_item: RSS) {
const { data } = await axios.post<BangumiAPI>(
'api/v1/rss/analysis',
rss_item
);
// 解析失败抛出错误
if (data.status) {
throw data;
const result: BangumiRule = {
...data,
filter: data.filter.split(','),
rss_link: data.rss_link.split(','),
}
return data;
return result;
},
/**
@@ -27,9 +26,14 @@ export const apiDownload = {
* @param bangumiData - Bangumi 数据
*/
async collection(bangumiData: BangumiRule) {
const postData: BangumiAPI = {
...bangumiData,
filter: bangumiData.filter.join(','),
rss_link: bangumiData.rss_link.join(','),
}
const { data } = await axios.post<ApiSuccess>(
'api/v1/download/collection',
bangumiData
'api/v1/rss/collection',
postData
);
return data;
},
@@ -39,9 +43,14 @@ export const apiDownload = {
* @param bangumiData - Bangumi 数据
*/
async subscribe(bangumiData: BangumiRule) {
const postData: BangumiAPI = {
...bangumiData,
filter: bangumiData.filter.join(','),
rss_link: bangumiData.rss_link.join(','),
}
const { data } = await axios.post<ApiSuccess>(
'api/v1/download/subscribe',
bangumiData
'api/v1/rss/subscribe',
postData
);
return data;
},

View File

@@ -18,8 +18,9 @@ const rule = ref<BangumiRule>(ruleTemplate);
const parserType = ['mikan', 'tmdb', 'parser'];
const analysis = reactive({
const window = reactive({
loading: false,
rule: false,
next: false,
});
const loading = reactive({
@@ -31,7 +32,7 @@ watch(show, (val) => {
if (!val) {
rss.value = rssTemplate;
setTimeout(() => {
analysis.next = false;
window.next = false;
}, 300);
}
});
@@ -41,10 +42,10 @@ async function addRss() {
message.error('Please enter the RSS link!');
} else if (rss.value.aggregate) {
try {
analysis.loading = true;
window.loading = true;
const data = await apiRSS.add(rss.value);
analysis.loading = false;
analysis.next = true;
window.loading = false;
window.next = true;
message.success(data.msg_en);
show.value = false;
console.log('rss', data);
@@ -52,16 +53,17 @@ async function addRss() {
const err = error as ApiError;
message.error(err.msg_en);
console.log('error', err.msg_en);
analysis.loading = false;
window.loading = false;
}
} else {
try {
analysis.loading = true;
const data = await apiDownload.analysis(rss.value.url);
analysis.loading = false;
window.loading = true;
const data = await apiDownload.analysis(rss.value);
window.loading = false;
rule.value = data;
analysis.next = true;
window.next = true;
window.rule = true;
console.log('rule', data);
} catch (error) {
const err = error as ApiError;
@@ -113,7 +115,7 @@ async function subscribe() {
<template>
<ab-popup v-model:show="show" :title="$t('topbar.add.title')" css="w-360px">
<div v-if="!analysis.next" space-y-12px>
<div v-if="!window.next" space-y-12px>
<ab-setting
v-model:data="rss.url"
:label="$t('topbar.add.rss_link')"
@@ -148,14 +150,14 @@ async function subscribe() {
<div flex="~ justify-end">
<ab-button
size="small"
:loading="analysis.loading"
:loading="window.loading"
@click="addRss"
>{{ $t('topbar.add.button') }}</ab-button
>
</div>
</div>
<div v-else>
<div v-else-if="window.rule">
<ab-rule v-model:rule="rule"></ab-rule>
<div flex="~ justify-end" space-x-10px>