From c7ad45f069a102b5ea2abd5e605c5f1a617ff3c9 Mon Sep 17 00:00:00 2001
From: Eizock <>
Date: Tue, 10 Jan 2023 14:02:46 +0000
Subject: [PATCH] Add Moonraker (Klipper) widget
---
public/locales/en/common.json | 7 +++
src/widgets/components.js | 1 +
src/widgets/moonraker/component.jsx | 78 +++++++++++++++++++++++++++++
src/widgets/moonraker/widget.js | 20 ++++++++
src/widgets/widgets.js | 2 +
5 files changed, 108 insertions(+)
create mode 100644 src/widgets/moonraker/component.jsx
create mode 100644 src/widgets/moonraker/widget.js
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 032c1dfe..510b2b7e 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -412,5 +412,12 @@
"memory": "Active Memory",
"wanUpload": "WAN Upload",
"wanDownload": "WAN Download"
+ },
+ "moonraker": {
+ "printer_state": "Printer State",
+ "print_status": "Print Status",
+ "print_progress": "Progress",
+ "layers": "Layers",
+ "filename": "Filename"
}
}
diff --git a/src/widgets/components.js b/src/widgets/components.js
index 10277732..d9240460 100644
--- a/src/widgets/components.js
+++ b/src/widgets/components.js
@@ -23,6 +23,7 @@ const components = {
mastodon: dynamic(() => import("./mastodon/component")),
miniflux: dynamic(() => import("./miniflux/component")),
mikrotik: dynamic(() => import("./mikrotik/component")),
+ moonraker: dynamic(() => import("./moonraker/component")),
navidrome: dynamic(() => import("./navidrome/component")),
nextdns: dynamic(() => import("./nextdns/component")),
npm: dynamic(() => import("./npm/component")),
diff --git a/src/widgets/moonraker/component.jsx b/src/widgets/moonraker/component.jsx
new file mode 100644
index 00000000..632e88cd
--- /dev/null
+++ b/src/widgets/moonraker/component.jsx
@@ -0,0 +1,78 @@
+import { useTranslation } from "next-i18next";
+
+import Container from "components/services/widget/container";
+import Block from "components/services/widget/block";
+import useWidgetAPI from "utils/proxy/use-widget-api";
+
+export default function Component({ service }) {
+ const { t } = useTranslation();
+
+ const { widget } = service;
+
+ const { data: mr_print_stats, error: mre_print_stats } = useWidgetAPI(widget, "print_stats");
+ const { data: mr_display_status, error: mre_display_status } = useWidgetAPI(widget, "display_status");
+ const { data: mr_webhooks, error: mre_webhooks } = useWidgetAPI(widget, "webhooks");
+
+ if (mre_print_stats || mre_display_status || mre_webhooks) {
+ const finalError = mre_print_stats ?? mre_display_status ?? mre_webhooks;
+ return ;
+ }
+
+ if (!mr_print_stats || !mr_display_status || !mr_webhooks) {
+ return (
+
+
+
+ );
+ }
+
+ const filename = "-";
+ if(!mr_print_stats.result.status.print_stats.filename == "") {
+ filename = mr_print_stats.result.status.print_stats.filename;
+ }
+
+ if (mr_webhooks.result.status.webhooks.state == "shutdown") {
+ return (
+
+
+
+ );
+ }
+
+ const current_layer = "-";
+ const total_layer = "-";
+ if(!mr_print_stats.result.status.print_stats.info.current_layer == "") {
+ current_layer = mr_print_stats.result.status.print_stats.info.current_layer;
+ total_layer = mr_print_stats.result.status.print_stats.info.total_layer;
+ }
+
+ return (
+
+
+
+ );
+}
diff --git a/src/widgets/moonraker/widget.js b/src/widgets/moonraker/widget.js
new file mode 100644
index 00000000..314a8670
--- /dev/null
+++ b/src/widgets/moonraker/widget.js
@@ -0,0 +1,20 @@
+import genericProxyHandler from "utils/proxy/handlers/generic";
+
+const widget = {
+ api: "{url}/printer/objects/query?{endpoint}",
+ proxyHandler: genericProxyHandler,
+
+ mappings: {
+ print_stats: {
+ endpoint: "print_stats",
+ },
+ display_status: {
+ endpoint: "display_status",
+ },
+ webhooks: {
+ endpoint: "webhooks",
+ },
+ },
+};
+
+export default widget;
diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js
index 3e73e55f..091a616f 100644
--- a/src/widgets/widgets.js
+++ b/src/widgets/widgets.js
@@ -18,6 +18,7 @@ import lidarr from "./lidarr/widget";
import mastodon from "./mastodon/widget";
import miniflux from "./miniflux/widget";
import mikrotik from "./mikrotik/widget";
+import moonraker from "./moonraker/widget";
import navidrome from "./navidrome/widget";
import nextdns from "./nextdns/widget";
import npm from "./npm/widget";
@@ -75,6 +76,7 @@ const widgets = {
mastodon,
miniflux,
mikrotik,
+ moonraker,
navidrome,
nextdns,
npm,