Implement mailcow widget

This commit is contained in:
grimsi 2024-06-01 02:06:48 +02:00
parent c267eeabf8
commit 370936095e
7 changed files with 79 additions and 0 deletions

View File

@ -0,0 +1,15 @@
---
title: Mailcow
description: Mailcow Widget Configuration
---
Learn more about [Mailcow](https://github.com/mailcow/mailcow-dockerized).
Allowed fields: `["domains", "mailboxes", "mails", "storage"]`.
```yaml
widget:
type: mailcow
url: https://mailcow.host.or.ip
key: mailcowapikey
```

View File

@ -252,6 +252,12 @@
"queued": "In Warteschlange", "queued": "In Warteschlange",
"artists": "Künstler" "artists": "Künstler"
}, },
"mailcow": {
"domains": "Domänen",
"mailboxes": "E-Mail-Postfächer",
"mails": "E-Mails",
"storage": "Speicher"
},
"readarr": { "readarr": {
"wanted": "Gesucht", "wanted": "Gesucht",
"queued": "In Warteschlange", "queued": "In Warteschlange",

View File

@ -252,6 +252,12 @@
"queued": "Queued", "queued": "Queued",
"artists": "Artists" "artists": "Artists"
}, },
"mailcow": {
"domains": "Domains",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Storage"
},
"readarr": { "readarr": {
"wanted": "Wanted", "wanted": "Wanted",
"queued": "Queued", "queued": "Queued",

View File

@ -53,6 +53,7 @@ const components = {
komga: dynamic(() => import("./komga/component")), komga: dynamic(() => import("./komga/component")),
kopia: dynamic(() => import("./kopia/component")), kopia: dynamic(() => import("./kopia/component")),
lidarr: dynamic(() => import("./lidarr/component")), lidarr: dynamic(() => import("./lidarr/component")),
mailcow: dynamic(() => import("./mailcow/component")),
mastodon: dynamic(() => import("./mastodon/component")), mastodon: dynamic(() => import("./mastodon/component")),
mealie: dynamic(() => import("./mealie/component")), mealie: dynamic(() => import("./mealie/component")),
medusa: dynamic(() => import("./medusa/component")), medusa: dynamic(() => import("./medusa/component")),

View File

@ -0,0 +1,41 @@
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: resultData, error: resultError } = useWidgetAPI(widget, "result");
if (resultError) {
return <Container service={service} error={resultError} />;
}
if (!resultData) {
return (
<Container service={service}>
,
<Block label="mailcow.mailboxes" />
<Block label="mailcow.aliases" />
<Block label="mailcow.quarantined" />
</Container>
);
}
const domains = resultData.length;
const mailboxes = resultData.reduce((acc, val) => acc + val.mboxes_in_domain, 0);
const mails = resultData.reduce((acc, val) => acc + val.msgs_total, 0);
const storage = resultData.reduce((acc, val) => acc + val.bytes_total, 0);
return (
<Container service={service}>
<Block label="mailcow.domains" value={t("common.number", { value: domains })} />
<Block label="mailcow.mailboxes" value={t("common.number", { value: mailboxes })} />
<Block label="mailcow.mails" value={t("common.number", { value: mails })} />
<Block label="mailcow.storage" value={t("common.bytes", { value: storage })} />
</Container>
);
}

View File

@ -0,0 +1,8 @@
import credentialedProxyHandler from "../../utils/proxy/handlers/credentialed";
const widget = {
api: "{url}/api/v1/get/domain/all",
proxyHandler: credentialedProxyHandler,
};
export default widget;

View File

@ -45,6 +45,7 @@ import kavita from "./kavita/widget";
import komga from "./komga/widget"; import komga from "./komga/widget";
import kopia from "./kopia/widget"; import kopia from "./kopia/widget";
import lidarr from "./lidarr/widget"; import lidarr from "./lidarr/widget";
import mailcow from "./mailcow/widget";
import mastodon from "./mastodon/widget"; import mastodon from "./mastodon/widget";
import mealie from "./mealie/widget"; import mealie from "./mealie/widget";
import medusa from "./medusa/widget"; import medusa from "./medusa/widget";
@ -163,6 +164,7 @@ const widgets = {
komga, komga,
kopia, kopia,
lidarr, lidarr,
mailcow,
mastodon, mastodon,
mealie, mealie,
medusa, medusa,