diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 3ac3ed0d..3f5639a4 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -603,6 +603,12 @@ "print_progress": "Progress", "layers": "Layers" }, + "moviebot": { + "subscribe": "SUB", + "sites": "SITE", + "todayUp": "UPLOADED", + "todayDl": "DOWNLOAD" + }, "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..95d9fa40 100644 --- a/public/locales/zh-CN/common.json +++ b/public/locales/zh-CN/common.json @@ -461,6 +461,12 @@ "print_progress": "打印进程", "layers": "层" }, + "moviebot": { + "subscribe": "订阅中", + "sites": "站点", + "todayUp": "今日上传", + "todayDl": "今日下载" + }, "medusa": { "wanted": "关注中", "queued": "已加入队列", 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..2f0110ab --- /dev/null +++ b/src/widgets/moviebot/component.jsx @@ -0,0 +1,43 @@ +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 { widget } = service; + + const { data: listTVResult } = useWidgetAPI(widget, "SubscribeList", { + refreshInterval: 60000, + media_type: "TV", + }); + const { data: listMovieResult } = useWidgetAPI(widget, "SubscribeList", { + refreshInterval: 60000, + media_type: "Movie", + }); + + 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 ( + + + + + + + + ); +} diff --git a/src/widgets/moviebot/widget.js b/src/widgets/moviebot/widget.js new file mode 100644 index 00000000..9a67303d --- /dev/null +++ b/src/widgets/moviebot/widget.js @@ -0,0 +1,31 @@ +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: { + 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/overview", + 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,