From b4405c525ab78f1bc7e17f585b7fe703350bfb32 Mon Sep 17 00:00:00 2001 From: GodD6366 Date: Wed, 10 Apr 2024 12:33:52 +0800 Subject: [PATCH 1/3] =?UTF-8?q?:sparkles:=20=E6=96=B0=E5=A2=9E=20moviebot?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/widgets/components.js | 1 + src/widgets/moviebot/component.jsx | 44 ++++++++++++++++++++++++++++++ src/widgets/moviebot/widget.js | 27 ++++++++++++++++++ src/widgets/widgets.js | 2 ++ 4 files changed, 74 insertions(+) create mode 100644 src/widgets/moviebot/component.jsx create mode 100644 src/widgets/moviebot/widget.js diff --git a/src/widgets/components.js b/src/widgets/components.js index 500fe0ce..4a401122 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -61,6 +61,7 @@ const components = { mikrotik: dynamic(() => import("./mikrotik/component")), mjpeg: dynamic(() => import("./mjpeg/component")), moonraker: dynamic(() => import("./moonraker/component")), + moviebot: dynamic(() => import("./moviebot/component")), mylar: dynamic(() => import("./mylar/component")), navidrome: dynamic(() => import("./navidrome/component")), netalertx: dynamic(() => import("./netalertx/component")), diff --git a/src/widgets/moviebot/component.jsx b/src/widgets/moviebot/component.jsx new file mode 100644 index 00000000..429d6e0f --- /dev/null +++ b/src/widgets/moviebot/component.jsx @@ -0,0 +1,44 @@ +import { useTranslation } from "next-i18next"; + +import Block from "components/services/widget/block"; +import Container from "components/services/widget/container"; +import useWidgetAPI from "utils/proxy/use-widget-api"; + +export default function Component({ service }) { + const { t } = useTranslation(); + + const { widget } = service; + + const { data: listTVResult } = useWidgetAPI(widget, "SubscribeList", { + refreshInterval: 60000, + media_type: "TV", + }); + const { data: listMovieResult } = useWidgetAPI(widget, "SubscribeList", { + refreshInterval: 60000, + media_type: "Movie", + }); + + let subingTVList = []; + let subingMovieList = []; + if (listTVResult && listMovieResult) { + subingTVList = listTVResult.data.filter((item) => item.status === 0); + subingMovieList = listMovieResult.data.filter((item) => item.status === 0); + } + + const result = useWidgetAPI(widget, "GetSites", { + refreshInterval: 60000, + }); + const sites = result.data?.data || []; + + return ( + + + + s.status === 1).length })} /> + s.status === 0).length })} + /> + + ); +} diff --git a/src/widgets/moviebot/widget.js b/src/widgets/moviebot/widget.js new file mode 100644 index 00000000..7f965197 --- /dev/null +++ b/src/widgets/moviebot/widget.js @@ -0,0 +1,27 @@ +import genericProxyHandler from "utils/proxy/handlers/generic"; + +const widget = { + api: "{url}/{endpoint}&access_key={key}", + proxyHandler: genericProxyHandler, + + mappings: { + SubscribeList: { + headers: { + "User-Agent": "Mozilla/5.0", // Crowdsec requires a user-agent + "Content-Type": "application/json", + }, + endpoint: "api/subscribe/list", + params: ["media_type"], + }, + GetSites: { + headers: { + "User-Agent": "Mozilla/5.0", // Crowdsec requires a user-agent + "Content-Type": "application/json", + }, + endpoint: "api/site/get_sites", + params: ["refreshInterval"], + }, + }, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 7ed98bfb..1745532d 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -53,6 +53,7 @@ import miniflux from "./miniflux/widget"; import mikrotik from "./mikrotik/widget"; import mjpeg from "./mjpeg/widget"; import moonraker from "./moonraker/widget"; +import moviebot from "./moviebot/widget"; import mylar from "./mylar/widget"; import navidrome from "./navidrome/widget"; import netalertx from "./netalertx/widget"; @@ -169,6 +170,7 @@ const widgets = { mikrotik, mjpeg, moonraker, + moviebot, mylar, navidrome, netalertx, From 5d611701395060933504e81ec1d6ffb43658283c Mon Sep 17 00:00:00 2001 From: GodD6366 Date: Wed, 10 Apr 2024 12:34:13 +0800 Subject: [PATCH 2/3] =?UTF-8?q?:sparkles:=20=E5=A2=9E=E5=8A=A0=E7=BF=BB?= =?UTF-8?q?=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/locales/en/common.json | 6 ++++++ public/locales/zh-CN/common.json | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 3ac3ed0d..ebbd5135 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -603,6 +603,12 @@ "print_progress": "Progress", "layers": "Layers" }, + "moviebot": { + "tv": "TV", + "movie": "MOVIE", + "sites": "normal site", + "errorSites": "error site" + }, "octoprint": { "printer_state": "Status", "temp_tool": "Tool temp", diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json index d9ab4c62..807f1f27 100644 --- a/public/locales/zh-CN/common.json +++ b/public/locales/zh-CN/common.json @@ -461,6 +461,12 @@ "print_progress": "打印进程", "layers": "层" }, + "moviebot": { + "tv": "剧集", + "movie": "电影", + "sites": "正常站点", + "errorSites": "错误站点" + }, "medusa": { "wanted": "关注中", "queued": "已加入队列", From 72dd9e450590109cd1a682010d345f4c0017d71f Mon Sep 17 00:00:00 2001 From: GodD6366 Date: Wed, 10 Apr 2024 12:53:24 +0800 Subject: [PATCH 3/3] =?UTF-8?q?:sparkles:=20=E5=A2=9E=E5=8A=A0=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/locales/en/common.json | 8 +++---- public/locales/zh-CN/common.json | 8 +++---- src/widgets/moviebot/component.jsx | 35 +++++++++++++++--------------- src/widgets/moviebot/widget.js | 6 ++++- 4 files changed, 30 insertions(+), 27 deletions(-) diff --git a/public/locales/en/common.json b/public/locales/en/common.json index ebbd5135..3f5639a4 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -604,10 +604,10 @@ "layers": "Layers" }, "moviebot": { - "tv": "TV", - "movie": "MOVIE", - "sites": "normal site", - "errorSites": "error site" + "subscribe": "SUB", + "sites": "SITE", + "todayUp": "UPLOADED", + "todayDl": "DOWNLOAD" }, "octoprint": { "printer_state": "Status", diff --git a/public/locales/zh-CN/common.json b/public/locales/zh-CN/common.json index 807f1f27..95d9fa40 100644 --- a/public/locales/zh-CN/common.json +++ b/public/locales/zh-CN/common.json @@ -462,10 +462,10 @@ "layers": "层" }, "moviebot": { - "tv": "剧集", - "movie": "电影", - "sites": "正常站点", - "errorSites": "错误站点" + "subscribe": "订阅中", + "sites": "站点", + "todayUp": "今日上传", + "todayDl": "今日下载" }, "medusa": { "wanted": "关注中", diff --git a/src/widgets/moviebot/component.jsx b/src/widgets/moviebot/component.jsx index 429d6e0f..2f0110ab 100644 --- a/src/widgets/moviebot/component.jsx +++ b/src/widgets/moviebot/component.jsx @@ -1,12 +1,8 @@ -import { useTranslation } from "next-i18next"; - import Block from "components/services/widget/block"; import Container from "components/services/widget/container"; import useWidgetAPI from "utils/proxy/use-widget-api"; export default function Component({ service }) { - const { t } = useTranslation(); - const { widget } = service; const { data: listTVResult } = useWidgetAPI(widget, "SubscribeList", { @@ -18,27 +14,30 @@ export default function Component({ service }) { media_type: "Movie", }); - let subingTVList = []; - let subingMovieList = []; - if (listTVResult && listMovieResult) { - subingTVList = listTVResult.data.filter((item) => item.status === 0); - subingMovieList = listMovieResult.data.filter((item) => item.status === 0); - } - const result = useWidgetAPI(widget, "GetSites", { refreshInterval: 60000, }); const sites = result.data?.data || []; + const SitesOverview = useWidgetAPI(widget, "SitesOverview", { + refreshInterval: 60000, + }); + + const subingTVList = listTVResult?.data.filter((item) => item.status === 0) || 0; + const subingMovieList = listMovieResult?.data.filter((item) => item.status === 0) || 0; + + const todayUp = SitesOverview.data?.data?.today_up || 0; + const todayDl = SitesOverview.data?.data?.today_dl || 0; + const normalSites = sites.filter((s) => s.status === 1).length || 0; + const errorSites = sites.filter((s) => s.status === 0).length || 0; + return ( - - - s.status === 1).length })} /> - s.status === 0).length })} - /> + + + + + ); } diff --git a/src/widgets/moviebot/widget.js b/src/widgets/moviebot/widget.js index 7f965197..9a67303d 100644 --- a/src/widgets/moviebot/widget.js +++ b/src/widgets/moviebot/widget.js @@ -14,11 +14,15 @@ const widget = { params: ["media_type"], }, GetSites: { + endpoint: "api/site/get_sites", + params: ["refreshInterval"], + }, + SitesOverview: { headers: { "User-Agent": "Mozilla/5.0", // Crowdsec requires a user-agent "Content-Type": "application/json", }, - endpoint: "api/site/get_sites", + endpoint: "api/site/overview", params: ["refreshInterval"], }, },