mirror of
https://github.com/DI0IK/homepage-plus.git
synced 2025-07-10 15:28:47 +00:00
Feature: GameDig Widget (#1717)
* Adding Counter-Strike: Global Offensive (CSGO) Adding Counter-Strike: Global Offensive (CSGO) widget * Changed to GameDig Converted csgo widget to gamedig Added game server type as widget parameter Added more fields * Limited widget displayed fields to 4 * Moved fields limit to gamedig widget
This commit is contained in:
parent
6586af17a3
commit
420aa896d7
9 changed files with 497 additions and 3 deletions
|
@ -22,6 +22,7 @@ const components = {
|
|||
fileflows: dynamic(() => import("./fileflows/component")),
|
||||
flood: dynamic(() => import("./flood/component")),
|
||||
freshrss: dynamic(() => import("./freshrss/component")),
|
||||
gamedig: dynamic(() => import("./gamedig/component")),
|
||||
ghostfolio: dynamic(() => import("./ghostfolio/component")),
|
||||
gluetun: dynamic(() => import("./gluetun/component")),
|
||||
gotify: dynamic(() => import("./gotify/component")),
|
||||
|
|
59
src/widgets/gamedig/component.jsx
Normal file
59
src/widgets/gamedig/component.jsx
Normal file
|
@ -0,0 +1,59 @@
|
|||
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 { widget } = service;
|
||||
const { data: serverData, error: serverError } = useWidgetAPI(widget, "status");
|
||||
const { t } = useTranslation();
|
||||
|
||||
if(serverError){
|
||||
return <Container service={service} error={serverError} />;
|
||||
}
|
||||
|
||||
// Default fields
|
||||
if (widget.fields == null || widget.fields.length === 0) {
|
||||
widget.fields = ["map", "currentPlayers", "ping"];
|
||||
}
|
||||
const MAX_ALLOWED_FIELDS = 4;
|
||||
// Limits max number of displayed fields
|
||||
if (widget.fields != null && widget.fields.length > MAX_ALLOWED_FIELDS) {
|
||||
widget.fields = widget.fields.slice(0, MAX_ALLOWED_FIELDS);
|
||||
}
|
||||
|
||||
if (!serverData) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="gamedig.name"/>
|
||||
<Block label="gamedig.map"/>
|
||||
<Block label="gamedig.currentPlayers" />
|
||||
<Block label="gamedig.players" />
|
||||
<Block label="gamedig.maxPlayers" />
|
||||
<Block label="gamedig.bots" />
|
||||
<Block label="gamedig.ping" />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
const name = serverData.online ? serverData.name : "-";
|
||||
const map = serverData.online ? serverData.map : "-";
|
||||
const currentPlayers = serverData.online ? `${serverData.players} / ${serverData.maxplayers}` : "-";
|
||||
const players = serverData.online ? `${serverData.players}` : "-";
|
||||
const maxPlayers = serverData.online ? `${serverData.maxplayers}` : "-";
|
||||
const bots = serverData.online ? `${serverData.bots}` : "-";
|
||||
const ping = serverData.online ? `${serverData.ping}` : 0;
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="gamedig.name" value={name} />
|
||||
<Block label="gamedig.map" value={map} />
|
||||
<Block label="gamedig.currentPlayers" value={currentPlayers} />
|
||||
<Block label="gamedig.players" value={players} />
|
||||
<Block label="gamedig.maxPlayers" value={maxPlayers} />
|
||||
<Block label="gamedig.bots" value={bots} />
|
||||
<Block label="gamedig.ping" value={t("common.ms", { value: ping, style: "unit", unit: "millisecond" })} />
|
||||
</Container>
|
||||
);
|
||||
}
|
37
src/widgets/gamedig/proxy.js
Normal file
37
src/widgets/gamedig/proxy.js
Normal file
|
@ -0,0 +1,37 @@
|
|||
import createLogger from "utils/logger";
|
||||
import getServiceWidget from "utils/config/service-helpers";
|
||||
|
||||
const proxyName = "gamedigProxyHandler";
|
||||
const logger = createLogger(proxyName);
|
||||
const gamedig = require("gamedig");
|
||||
|
||||
export default async function gamedigProxyHandler(req, res) {
|
||||
const { group, service } = req.query;
|
||||
const serviceWidget = await getServiceWidget(group, service);
|
||||
const url = new URL(serviceWidget.url);
|
||||
|
||||
try {
|
||||
const serverData = await gamedig.query({
|
||||
type: serviceWidget.serverType,
|
||||
host: url.hostname,
|
||||
port: url.port,
|
||||
givenPortOnly: true,
|
||||
});
|
||||
|
||||
res.status(200).send({
|
||||
online: true,
|
||||
name: serverData.name,
|
||||
map: serverData.map,
|
||||
players: serverData.players.length,
|
||||
maxplayers: serverData.maxplayers,
|
||||
bots: serverData.bots.length,
|
||||
ping: serverData.ping,
|
||||
});
|
||||
} catch (e) {
|
||||
logger.error(e);
|
||||
|
||||
res.status(200).send({
|
||||
online: false
|
||||
});
|
||||
}
|
||||
}
|
7
src/widgets/gamedig/widget.js
Normal file
7
src/widgets/gamedig/widget.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
import gamedigProxyHandler from "./proxy";
|
||||
|
||||
const widget = {
|
||||
proxyHandler: gamedigProxyHandler
|
||||
}
|
||||
|
||||
export default widget;
|
|
@ -17,6 +17,7 @@ import evcc from "./evcc/widget";
|
|||
import fileflows from "./fileflows/widget";
|
||||
import flood from "./flood/widget";
|
||||
import freshrss from "./freshrss/widget";
|
||||
import gamedig from "./gamedig/widget";
|
||||
import ghostfolio from "./ghostfolio/widget";
|
||||
import gluetun from "./gluetun/widget";
|
||||
import gotify from "./gotify/widget";
|
||||
|
@ -107,6 +108,7 @@ const widgets = {
|
|||
fileflows,
|
||||
flood,
|
||||
freshrss,
|
||||
gamedig,
|
||||
ghostfolio,
|
||||
gluetun,
|
||||
gotify,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue