fix: bugs, add disable rss api.

This commit is contained in:
EstrellaXD
2023-08-29 19:28:44 +08:00
parent 4a509deb16
commit 7ccee98e2e
13 changed files with 105 additions and 55 deletions

View File

@@ -227,30 +227,25 @@ jobs:
run: |
cd webui && ls -al && tree && zip -r dist.zip dist
- name: Generate Release
- name: Generate Release info
id: release-info
run: |
if ${{ needs.version-info.outputs.dev == 1 }}; then
echo "version=🌙${{ needs.version-info.outputs.version }}" >> $GITHUB_OUTPUT
echo "pre_release=true" >> $GITHUB_OUTPUT
else
echo "version=🌟${{ needs.version-info.outputs.version }}" >> $GITHUB_OUTPUT
echo "pre_release=false" >> $GITHUB_OUTPUT
- name: Release
id: release
if: ${{ needs.version-info.outputs.dev != 1 }}
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ github.event.pull_request.title }}
name: 🌟${{ github.event.pull_request.title }}
tag_name: ${{ needs.version-info.outputs.version }}
name: ${{ steps.release-info.outputs.version }}
body: ${{ github.event.pull_request.body }}
draft: false
prerelease: false
files: |
webui/dist.zip
env:
GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }}
- name: Generate dev Release
if: ${{ needs.version-info.outputs.dev == 1 }}
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ github.ref_name }}
name: 🌙${{ github.ref_name }}
body: "Dev release"
draft: false
prerelease: true
prerelease: ${{ steps.release-info.outputs.pre_release == 'true' }}
files: |
webui/dist.zip
env:

View File

@@ -80,11 +80,13 @@ async def program_status(current_user=Depends(get_current_user)):
return {
"status": False,
"version": VERSION,
"first_run": program.first_run,
}
else:
return {
"status": True,
"version": VERSION,
"first_run": program.first_run,
}

View File

@@ -47,6 +47,23 @@ async def delete_rss(rss_id: int, current_user=Depends(get_current_user)):
)
@router.patch(path="/disable/{rss_id}", response_model=APIResponse)
async def disable_rss(rss_id: int, current_user=Depends(get_current_user)):
if not current_user:
raise UNAUTHORIZED
with RSSEngine() as engine:
if engine.rss.disable(rss_id):
return JSONResponse(
status_code=200,
content={"msg_en": "Disable RSS successfully.", "msg_zh": "禁用 RSS 成功。"},
)
else:
return JSONResponse(
status_code=406,
content={"msg_en": "Disable RSS failed.", "msg_zh": "禁用 RSS 失败。"},
)
@router.patch(path="/update/{rss_id}", response_model=APIResponse)
async def update_rss(
rss_id: int, data: RSSUpdate, current_user=Depends(get_current_user)

View File

@@ -44,6 +44,18 @@ class RSSDatabase:
self.session.refresh(db_data)
return True
def disable(self, _id: int):
statement = select(RSSItem).where(RSSItem.id == _id)
db_data = self.session.exec(statement).first()
if not db_data:
return False
db_data.enabled = False
self.session.add(db_data)
self.session.commit()
self.session.refresh(db_data)
return True
def search_id(self, _id: int) -> RSSItem:
return self.session.get(RSSItem, _id)

View File

@@ -3,7 +3,7 @@ from pydantic import BaseModel, Field
class Program(BaseModel):
rss_time: int = Field(7200, description="Sleep time")
rss_time: int = Field(900, description="Sleep time")
rename_time: int = Field(60, description="Rename times in one loop")
webui_port: int = Field(7892, description="WebUI port")
@@ -29,7 +29,6 @@ class Downloader(BaseModel):
class RSSParser(BaseModel):
enable: bool = Field(True, description="Enable RSS parser")
type: str = Field("mikan", description="RSS parser type")
filter: list[str] = Field(["720", r"\d+-\d"], description="Filter")
language: str = "zh"

View File

@@ -1,14 +1,15 @@
import re
import logging
import xml.etree.ElementTree
from bs4 import BeautifulSoup
from module.conf import settings
from module.models import Torrent
from .request_url import RequestURL
from .site import mikan_parser
logger = logging.getLogger(__name__)
class RequestContent(RequestURL):
def get_torrents(
@@ -58,5 +59,8 @@ class RequestContent(RequestURL):
return self.check_url(_url)
def get_rss_title(self, _url):
soup = self.get_xml(_url)
return soup.find("./channel/title").text
try:
soup = self.get_xml(_url)
return soup.find("./channel/title").text
except ConnectionError:
logger.warning(f"Failed to get RSS title: {_url}")

View File

@@ -48,7 +48,7 @@ class RSSAnalyser(TitleParser):
if not full_parse:
return [bangumi]
new_data.append(bangumi)
logger.debug(f"[RSS] New title found: {bangumi.official_title}")
logger.info(f"[RSS] New bangumi founded: {bangumi.official_title}")
return new_data
def torrent_to_data(self, torrent: Torrent, rss: RSSItem) -> Bangumi:

View File

@@ -36,6 +36,13 @@ class RSSEngine(Database):
if not name:
with RequestContent() as req:
name = req.get_rss_title(rss_link)
if not name:
return ResponseModel(
status=False,
status_code=406,
msg_en="Failed to get RSS title.",
msg_zh="无法获取 RSS 标题。",
)
rss_data = RSSItem(name=name, url=rss_link, aggregate=aggregate)
if self.rss.add(rss_data):
return ResponseModel(

View File

@@ -18,6 +18,11 @@ export const apiRSS = {
return data!;
},
async disable(rss_id: number) {
const { data } = await axios.patch<ApiSuccess>(`api/v1/rss/disable/${rss_id}`);
return data!;
},
async update(rss_id: number, rss: RSS) {
const { data } = await axios.patch<ApiSuccess>(`api/v1/rss/update/${rss_id}`, rss);
return data!;

View File

@@ -1,5 +1,6 @@
<script lang="ts" setup>
import { ref } from 'vue';
withDefaults(
defineProps<{
name: string;

View File

@@ -45,7 +45,7 @@ $notify-font: #A76E18;
.round-label {
padding: 2px 12px;
font-size: 8px;
font-size: 10px;
display: inline-flex;
flex-direction: column;
align-items: flex-start;

View File

@@ -13,43 +13,46 @@ definePage({
</script>
<template>
<ab-fold-panel :title="$t('rss.title')">
<div flex justify-between>
<div flex space-x-40px>
<div text-h3>{{ $t('rss.selectbox') }}</div>
<div class="spacer-1"></div>
<div text-h3>{{ $t('rss.name') }}</div>
<div class="spacer-2"></div>
<div text-h3>{{ $t('rss.url') }}</div>
<div overflow-auto mt-12px flex-grow>
<ab-container :title="$t('rss.title')">
<div flex justify-between>
<div flex space-x-40px>
<div text-h3>{{ $t('rss.selectbox') }}</div>
<div class="spacer-1"></div>
<div text-h3>{{ $t('rss.name') }}</div>
<div class="spacer-2"></div>
<div text-h3>{{ $t('rss.url') }}</div>
</div>
<div>
<div text-h3>{{ $t('rss.status') }}</div>
</div>
</div>
<div line my-12px></div>
<div>
<div text-h3>{{ $t('rss.status') }}</div>
<ab-rss-item
v-for="i in rss"
:key="i.id"
:name="i.name"
:url="i.url"
:enable="i.enabled"
:parser="i.parser"
:aggregate="i.aggregate">
</ab-rss-item>
</div>
</div>
<div line my-12px></div>
<div>
<ab-rss-item
v-for="i in rss"
:key="i.id"
:name="i.name"
:url="i.url"
:enable="i.enabled"
:parser="i.parser"
:aggregate="i.aggregate">
</ab-rss-item>
</div>
<div line my-12px></div>
<div flex="~ justify-end" space-x-10px>
<ab-button icon="edit">{{ $t('rss.disable') }}</ab-button>
<ab-button class="type-warn" text="delete">{{ $t('rss.delete') }}</ab-button>
</div>
</ab-fold-panel>
<!-- <div line my-12px></div> -->
<!-- <div flex="~ justify-end" space-x-10px> -->
<!-- <ab-button @click="updateRSS">{{ $t('rss.disable') }}</ab-button> -->
<!-- <ab-button class="type-warn" @click="deleteRSS">{{ $t('rss.delete') }}</ab-button> -->
<!-- </div> -->
</ab-container>
</div>
</template>
<style lang="scss" scoped>
.spacer-1 {
width: 32px;
}
.spacer-2 {
width: 200px;
}

View File

@@ -11,6 +11,9 @@ export const useRSSStore = defineStore('rss', () => {
const { execute: updateRSS, onResult: onUpdateRSSResult } = useApi(
apiRSS.update
);
const { execute: disableRSS, onResult: onDisableRSSResult} = useApi(
apiRSS.disable
);
const { execute: deleteRSS, onResult: onDeleteRSSResult } = useApi(
apiRSS.delete
);
@@ -38,12 +41,14 @@ export const useRSSStore = defineStore('rss', () => {
onUpdateRSSResult(actionSuccess);
onDeleteRSSResult(actionSuccess);
onDisableRSSResult(actionSuccess)
return {
rss,
getAll,
refresh,
updateRSS,
disableRSS,
deleteRSS,
};
});