mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-04-08 21:20:32 +08:00
feat: add refresh poster api.
This commit is contained in:
@@ -146,7 +146,6 @@ class TorrentManager(Database):
|
||||
msg_zh=f"刷新海报链接成功。",
|
||||
)
|
||||
|
||||
|
||||
def search_all_bangumi(self):
|
||||
datas = self.bangumi.search_all()
|
||||
if not datas:
|
||||
@@ -165,3 +164,7 @@ class TorrentManager(Database):
|
||||
)
|
||||
else:
|
||||
return data
|
||||
|
||||
if __name__ == '__main__':
|
||||
with TorrentManager() as manager:
|
||||
manager.refresh_poster()
|
||||
|
||||
@@ -1,129 +1,137 @@
|
||||
import type { BangumiAPI, BangumiRule } from '#/bangumi';
|
||||
import type { ApiSuccess } from '#/api';
|
||||
import type {BangumiAPI, BangumiRule} from '#/bangumi';
|
||||
import type {ApiSuccess} from '#/api';
|
||||
|
||||
|
||||
export const apiBangumi = {
|
||||
/**
|
||||
* 获取所有 bangumi 数据
|
||||
* @returns 所有 bangumi 数据
|
||||
*/
|
||||
async getAll() {
|
||||
const { data } = await axios.get<BangumiAPI[]>('api/v1/bangumi/get/all');
|
||||
const result: BangumiRule[] = data.map((bangumi) => (
|
||||
{
|
||||
...bangumi,
|
||||
filter: bangumi.filter.split(','),
|
||||
rss_link: bangumi.rss_link.split(','),
|
||||
/**
|
||||
* 获取所有 bangumi 数据
|
||||
* @returns 所有 bangumi 数据
|
||||
*/
|
||||
async getAll() {
|
||||
const {data} = await axios.get<BangumiAPI[]>('api/v1/bangumi/get/all');
|
||||
const result: BangumiRule[] = data.map((bangumi) => (
|
||||
{
|
||||
...bangumi,
|
||||
filter: bangumi.filter.split(','),
|
||||
rss_link: bangumi.rss_link.split(','),
|
||||
}
|
||||
));
|
||||
return result;
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取指定 bangumiId 的规则
|
||||
* @param bangumiId bangumi id
|
||||
* @returns 指定 bangumi 的规则
|
||||
*/
|
||||
async getRule(bangumiId: number) {
|
||||
const {data} = await axios.get<BangumiAPI>(
|
||||
`api/v1/bangumi/get/${bangumiId}`
|
||||
);
|
||||
const result: BangumiRule = {
|
||||
...data,
|
||||
filter: data.filter.split(','),
|
||||
rss_link: data.rss_link.split(','),
|
||||
}
|
||||
));
|
||||
return result;
|
||||
},
|
||||
return result;
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取指定 bangumiId 的规则
|
||||
* @param bangumiId bangumi id
|
||||
* @returns 指定 bangumi 的规则
|
||||
*/
|
||||
async getRule(bangumiId: number) {
|
||||
const { data } = await axios.get<BangumiAPI>(
|
||||
`api/v1/bangumi/get/${bangumiId}`
|
||||
);
|
||||
const result: BangumiRule = {
|
||||
...data,
|
||||
filter: data.filter.split(','),
|
||||
rss_link: data.rss_link.split(','),
|
||||
/**
|
||||
* 更新指定 bangumiId 的规则
|
||||
* @param bangumiId - 需要更新的 bangumi 的 id
|
||||
* @param bangumiRule
|
||||
* @returns axios 请求返回的数据
|
||||
*/
|
||||
async updateRule(bangumiId: number, bangumiRule: BangumiRule) {
|
||||
const rule: BangumiAPI = {
|
||||
...bangumiRule,
|
||||
filter: bangumiRule.filter.join(','),
|
||||
rss_link: bangumiRule.rss_link.join(','),
|
||||
}
|
||||
const post = omit(rule, ['id'])
|
||||
const {data} = await axios.patch<ApiSuccess>(
|
||||
`api/v1/bangumi/update/${bangumiId}`,
|
||||
post
|
||||
);
|
||||
return data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 删除指定 bangumiId 的数据库规则,会在重新匹配到后重建
|
||||
* @param bangumiId - 需要删除的 bangumi 的 id
|
||||
* @param file - 是否同时删除关联文件。
|
||||
* @returns axios 请求返回的数据
|
||||
*/
|
||||
async deleteRule(bangumiId: number | number[], file: boolean) {
|
||||
let url = 'api/v1/bangumi/delete';
|
||||
let ids: undefined | number[];
|
||||
|
||||
if (typeof bangumiId === 'number') {
|
||||
url = `${url}/${bangumiId}`;
|
||||
} else {
|
||||
url = `${url}/many`;
|
||||
ids = bangumiId;
|
||||
}
|
||||
|
||||
const {data} = await axios.delete<ApiSuccess>(url, {
|
||||
data: ids,
|
||||
params: {
|
||||
file,
|
||||
},
|
||||
});
|
||||
return data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 删除指定 bangumiId 的规则。如果 file 为 true,则同时删除关联文件。
|
||||
* @param bangumiId - 需要删除规则的 bangumi 的 id。
|
||||
* @param file - 是否同时删除关联文件。
|
||||
* @returns axios 请求返回的数据
|
||||
*/
|
||||
async disableRule(bangumiId: number | number[], file: boolean) {
|
||||
let url = 'api/v1/bangumi/disable';
|
||||
let ids: undefined | number[];
|
||||
|
||||
if (typeof bangumiId === 'number') {
|
||||
url = `${url}/${bangumiId}`;
|
||||
} else {
|
||||
url = `${url}/many`;
|
||||
ids = bangumiId;
|
||||
}
|
||||
|
||||
const {data} = await axios.delete<ApiSuccess>(url, {
|
||||
data: ids,
|
||||
params: {
|
||||
file,
|
||||
},
|
||||
});
|
||||
return data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 启用指定 bangumiId 的规则
|
||||
* @param bangumiId - 需要启用的 bangumi 的 id
|
||||
*/
|
||||
async enableRule(bangumiId: number) {
|
||||
const {data} = await axios.get<ApiSuccess>(
|
||||
`api/v1/bangumi/enable/${bangumiId}`
|
||||
);
|
||||
return data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 重置所有 bangumi 数据
|
||||
*/
|
||||
async resetAll() {
|
||||
const {data} = await axios.get<ApiSuccess>('api/v1/bangumi/reset/all');
|
||||
return data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 刷新所有没有海报的 bangumi 海报
|
||||
*/
|
||||
async refreshPoster() {
|
||||
const {data} = await axios.get<ApiSuccess>('api/v1/bangumi/refresh/poster/all');
|
||||
return data;
|
||||
}
|
||||
return result;
|
||||
},
|
||||
|
||||
/**
|
||||
* 更新指定 bangumiId 的规则
|
||||
* @param bangumiId - 需要更新的 bangumi 的 id
|
||||
* @param bangumiRule
|
||||
* @returns axios 请求返回的数据
|
||||
*/
|
||||
async updateRule(bangumiId: number, bangumiRule: BangumiRule) {
|
||||
const rule: BangumiAPI = {
|
||||
...bangumiRule,
|
||||
filter: bangumiRule.filter.join(','),
|
||||
rss_link: bangumiRule.rss_link.join(','),
|
||||
}
|
||||
const post = omit(rule, ['id'])
|
||||
const { data } = await axios.patch< ApiSuccess >(
|
||||
`api/v1/bangumi/update/${bangumiId}`,
|
||||
post
|
||||
);
|
||||
return data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 删除指定 bangumiId 的数据库规则,会在重新匹配到后重建
|
||||
* @param bangumiId - 需要删除的 bangumi 的 id
|
||||
* @param file - 是否同时删除关联文件。
|
||||
* @returns axios 请求返回的数据
|
||||
*/
|
||||
async deleteRule(bangumiId: number | number[], file: boolean) {
|
||||
let url = 'api/v1/bangumi/delete';
|
||||
let ids: undefined | number[];
|
||||
|
||||
if (typeof bangumiId === 'number') {
|
||||
url = `${url}/${bangumiId}`;
|
||||
} else {
|
||||
url = `${url}/many`;
|
||||
ids = bangumiId;
|
||||
}
|
||||
|
||||
const { data } = await axios.delete< ApiSuccess >(url, {
|
||||
data: ids,
|
||||
params: {
|
||||
file,
|
||||
},
|
||||
});
|
||||
return data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 删除指定 bangumiId 的规则。如果 file 为 true,则同时删除关联文件。
|
||||
* @param bangumiId - 需要删除规则的 bangumi 的 id。
|
||||
* @param file - 是否同时删除关联文件。
|
||||
* @returns axios 请求返回的数据
|
||||
*/
|
||||
async disableRule(bangumiId: number | number[], file: boolean) {
|
||||
let url = 'api/v1/bangumi/disable';
|
||||
let ids: undefined | number[];
|
||||
|
||||
if (typeof bangumiId === 'number') {
|
||||
url = `${url}/${bangumiId}`;
|
||||
} else {
|
||||
url = `${url}/many`;
|
||||
ids = bangumiId;
|
||||
}
|
||||
|
||||
const { data } = await axios.delete< ApiSuccess >(url, {
|
||||
data: ids,
|
||||
params: {
|
||||
file,
|
||||
},
|
||||
});
|
||||
return data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 启用指定 bangumiId 的规则
|
||||
* @param bangumiId - 需要启用的 bangumi 的 id
|
||||
*/
|
||||
async enableRule(bangumiId: number) {
|
||||
const { data } = await axios.get< ApiSuccess >(
|
||||
`api/v1/bangumi/enable/${bangumiId}`
|
||||
);
|
||||
return data;
|
||||
},
|
||||
|
||||
/**
|
||||
* 重置所有 bangumi 数据
|
||||
*/
|
||||
async resetAll() {
|
||||
const { data } = await axios.get< ApiSuccess >('api/v1/bangumi/reset/all');
|
||||
return data;
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script lang="ts" setup>
|
||||
import {Menu, MenuButton, MenuItem, MenuItems} from '@headlessui/vue';
|
||||
import {AddOne, International, More} from '@icon-park/vue-next';
|
||||
import {AddOne, International, More, System} from '@icon-park/vue-next';
|
||||
|
||||
withDefaults(
|
||||
defineProps<{
|
||||
@@ -54,7 +54,7 @@ function abLabel(label: string | (() => string)) {
|
||||
/>
|
||||
|
||||
<MenuButton bg-transparent is-btn btn-click>
|
||||
<More theme="outline" size="24" fill="#fff"/>
|
||||
<System theme="outline" size="24" fill="#fff"/>
|
||||
</MenuButton>
|
||||
|
||||
<ab-status :running="running"/>
|
||||
|
||||
@@ -7,7 +7,7 @@ import {
|
||||
Power,
|
||||
Refresh,
|
||||
} from '@icon-park/vue-next';
|
||||
import { ruleTemplate } from "#/bangumi";
|
||||
import {ruleTemplate} from "#/bangumi";
|
||||
import type {BangumiRule} from "#/bangumi";
|
||||
|
||||
const {t, changeLocale} = useMyI18n();
|
||||
@@ -18,6 +18,7 @@ const showAddRSS = ref(false);
|
||||
const searchRule = ref<BangumiRule>()
|
||||
|
||||
const {start, pause, shutdown, restart, resetRule} = useProgramStore();
|
||||
const {refreshPoster} = useBangumiStore();
|
||||
|
||||
const items = [
|
||||
{
|
||||
@@ -46,12 +47,18 @@ const items = [
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
label: () => t('topbar.refresh_poster'),
|
||||
icon: Refresh,
|
||||
handle: refreshPoster
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
label: () => t('topbar.reset_rule'),
|
||||
icon: Format,
|
||||
handle: resetRule,
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
id: 7,
|
||||
label: () => t('topbar.profile.title'),
|
||||
icon: Me,
|
||||
handle: () => {
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
"restart": "Restart",
|
||||
"shutdown": "Shutdown",
|
||||
"reset_rule": "Reset Rule",
|
||||
"refresh_poster": "Refresh Poster",
|
||||
"search": {
|
||||
"placeholder": "Type to search"
|
||||
},
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
"restart": "重启",
|
||||
"shutdown": "关闭",
|
||||
"reset_rule": "重置规则",
|
||||
"refresh_poster": "刷新海报",
|
||||
"search": {
|
||||
"placeholder": "输入关键字搜索"
|
||||
},
|
||||
|
||||
@@ -1,88 +1,94 @@
|
||||
import type { BangumiRule } from '#/bangumi';
|
||||
import { ruleTemplate } from '#/bangumi';
|
||||
import type { ApiSuccess } from '#/api';
|
||||
import type {BangumiRule} from '#/bangumi';
|
||||
import {ruleTemplate} from '#/bangumi';
|
||||
import type {ApiSuccess} from '#/api';
|
||||
|
||||
export const useBangumiStore = defineStore('bangumi', () => {
|
||||
const message = useMessage();
|
||||
const message = useMessage();
|
||||
|
||||
const bangumi = ref<BangumiRule[]>();
|
||||
const editRule = reactive<{
|
||||
show: boolean;
|
||||
item: BangumiRule;
|
||||
}>({
|
||||
show: false,
|
||||
item: ruleTemplate,
|
||||
});
|
||||
const bangumi = ref<BangumiRule[]>();
|
||||
const editRule = reactive<{
|
||||
show: boolean;
|
||||
item: BangumiRule;
|
||||
}>({
|
||||
show: false,
|
||||
item: ruleTemplate,
|
||||
});
|
||||
|
||||
const { execute: getAll, onResult: onBangumiResult } = useApi(
|
||||
apiBangumi.getAll
|
||||
);
|
||||
const { execute: updateRule, onResult: onUpdateRuleResult } = useApi(
|
||||
apiBangumi.updateRule
|
||||
);
|
||||
const { execute: enableRule, onResult: onEnableRuleResult } = useApi(
|
||||
apiBangumi.enableRule
|
||||
);
|
||||
const { execute: disableRule, onResult: onDisableRuleResult } = useApi(
|
||||
apiBangumi.disableRule
|
||||
);
|
||||
const { execute: deleteRule, onResult: onDeleteRuleResult } = useApi(
|
||||
apiBangumi.deleteRule
|
||||
);
|
||||
const {execute: getAll, onResult: onBangumiResult} = useApi(
|
||||
apiBangumi.getAll
|
||||
);
|
||||
const {execute: updateRule, onResult: onUpdateRuleResult} = useApi(
|
||||
apiBangumi.updateRule
|
||||
);
|
||||
const {execute: enableRule, onResult: onEnableRuleResult} = useApi(
|
||||
apiBangumi.enableRule
|
||||
);
|
||||
const {execute: disableRule, onResult: onDisableRuleResult} = useApi(
|
||||
apiBangumi.disableRule
|
||||
);
|
||||
const {execute: deleteRule, onResult: onDeleteRuleResult} = useApi(
|
||||
apiBangumi.deleteRule
|
||||
);
|
||||
const {execute: refreshPoster, onResult: onRefreshPosterResult} = useApi(
|
||||
apiBangumi.refreshPoster
|
||||
);
|
||||
|
||||
onBangumiResult((res) => {
|
||||
function sort(arr: BangumiRule[]) {
|
||||
return arr.sort((a, b) => b.id - a.id);
|
||||
onBangumiResult((res) => {
|
||||
function sort(arr: BangumiRule[]) {
|
||||
return arr.sort((a, b) => b.id - a.id);
|
||||
}
|
||||
|
||||
const enabled = sort(res.filter((e) => !e.deleted));
|
||||
const disabled = sort(res.filter((e) => e.deleted));
|
||||
|
||||
bangumi.value = [...enabled, ...disabled];
|
||||
});
|
||||
|
||||
function refresh() {
|
||||
editRule.show = false;
|
||||
getAll();
|
||||
}
|
||||
|
||||
const enabled = sort(res.filter((e) => !e.deleted));
|
||||
const disabled = sort(res.filter((e) => e.deleted));
|
||||
|
||||
bangumi.value = [...enabled, ...disabled];
|
||||
});
|
||||
|
||||
function refresh() {
|
||||
editRule.show = false;
|
||||
getAll();
|
||||
}
|
||||
|
||||
function actionSuccess(apiRes: ApiSuccess) {
|
||||
message.success(apiRes.msg_en);
|
||||
refresh();
|
||||
}
|
||||
onUpdateRuleResult(actionSuccess);
|
||||
onDisableRuleResult(actionSuccess);
|
||||
onEnableRuleResult(actionSuccess);
|
||||
onDeleteRuleResult(actionSuccess);
|
||||
|
||||
function openEditPopup(data: BangumiRule) {
|
||||
editRule.show = true;
|
||||
editRule.item = data;
|
||||
}
|
||||
|
||||
function ruleManage(
|
||||
type: 'disable' | 'delete',
|
||||
id: number,
|
||||
deleteFile: boolean
|
||||
) {
|
||||
if (type === 'disable') {
|
||||
disableRule(id, deleteFile);
|
||||
function actionSuccess(apiRes: ApiSuccess) {
|
||||
message.success(apiRes.msg_en);
|
||||
refresh();
|
||||
}
|
||||
if (type === 'delete') {
|
||||
deleteRule(id, deleteFile);
|
||||
|
||||
onUpdateRuleResult(actionSuccess);
|
||||
onDisableRuleResult(actionSuccess);
|
||||
onEnableRuleResult(actionSuccess);
|
||||
onDeleteRuleResult(actionSuccess);
|
||||
onRefreshPosterResult(actionSuccess);
|
||||
|
||||
function openEditPopup(data: BangumiRule) {
|
||||
editRule.show = true;
|
||||
editRule.item = data;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
bangumi,
|
||||
editRule,
|
||||
function ruleManage(
|
||||
type: 'disable' | 'delete',
|
||||
id: number,
|
||||
deleteFile: boolean
|
||||
) {
|
||||
if (type === 'disable') {
|
||||
disableRule(id, deleteFile);
|
||||
}
|
||||
if (type === 'delete') {
|
||||
deleteRule(id, deleteFile);
|
||||
}
|
||||
}
|
||||
|
||||
getAll,
|
||||
updateRule,
|
||||
enableRule,
|
||||
disableRule,
|
||||
deleteRule,
|
||||
openEditPopup,
|
||||
ruleManage,
|
||||
};
|
||||
return {
|
||||
bangumi,
|
||||
editRule,
|
||||
|
||||
getAll,
|
||||
updateRule,
|
||||
enableRule,
|
||||
disableRule,
|
||||
deleteRule,
|
||||
refreshPoster,
|
||||
openEditPopup,
|
||||
ruleManage,
|
||||
};
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user