1
0
Fork 0

feat: add motd to server config, show in web UI

This commit is contained in:
Sean Sube 2024-01-08 21:03:48 -06:00
parent 1dae8eea6f
commit 3101be8b78
Signed by: ssube
GPG Key ID: 3EED7B957D362AF1
7 changed files with 61 additions and 8 deletions

View File

@ -36,9 +36,6 @@ class Progress:
self.current = current self.current = current
self.total = total self.total = total
def __repr__(self) -> str:
return "Progress(%d, %d)" % (self.current, self.total)
def __str__(self) -> str: def __str__(self) -> str:
return "%s/%s" % (self.current, self.total) return "%s/%s" % (self.current, self.total)

View File

@ -1,5 +1,11 @@
{ {
"version": "0.12.0", "version": "0.12.0",
"motd": {
"de": "Willkommen bei onnx-web!",
"en": "Welcome to onnx-web!",
"es": "Bienvenido a onnx-web!",
"fr": "Bienvenue sur onnx-web!"
},
"batch": { "batch": {
"default": 1, "default": 1,
"min": 1, "min": 1,

30
gui/src/Motd.tsx Normal file
View File

@ -0,0 +1,30 @@
import React, { useState } from 'react';
import { Alert, Collapse, IconButton } from '@mui/material';
import { Close } from '@mui/icons-material';
import { useTranslation } from 'react-i18next';
export function Motd() {
const [open, setOpen] = useState(true);
const { t } = useTranslation();
return <Collapse in={open}>
<Alert
action={
<IconButton
aria-label="close"
color="inherit"
size="small"
onClick={() => {
setOpen(false);
}}
>
<Close fontSize="inherit" />
</IconButton>
}
severity='info'
sx={{ mb: 2 }}
>
{t('motd')}
</Alert>
</Collapse>;
}

View File

@ -1,7 +1,7 @@
import { mustExist } from '@apextoaster/js-utils'; import { mustExist } from '@apextoaster/js-utils';
import { TabContext, TabList, TabPanel } from '@mui/lab'; import { TabContext, TabList, TabPanel } from '@mui/lab';
import { Box, Container, CssBaseline, Divider, Tab, useMediaQuery } from '@mui/material'; import { Box, Container, CssBaseline, Divider, Tab, useMediaQuery } from '@mui/material';
import { createTheme, ThemeProvider } from '@mui/material/styles'; import { ThemeProvider, createTheme } from '@mui/material/styles';
import * as React from 'react'; import * as React from 'react';
import { useContext, useMemo } from 'react'; import { useContext, useMemo } from 'react';
import { useHash } from 'react-use/lib/useHash'; import { useHash } from 'react-use/lib/useHash';
@ -17,9 +17,14 @@ import { Models } from './tab/Models.js';
import { Settings } from './tab/Settings.js'; import { Settings } from './tab/Settings.js';
import { Txt2Img } from './tab/Txt2Img.js'; import { Txt2Img } from './tab/Txt2Img.js';
import { Upscale } from './tab/Upscale.js'; import { Upscale } from './tab/Upscale.js';
import { getTab, getTheme, TAB_LABELS } from './utils.js'; import { TAB_LABELS, getTab, getTheme } from './utils.js';
import { Motd } from '../Motd.js';
export function OnnxWeb() { export interface OnnxWebProps {
motd: boolean;
}
export function OnnxWeb(props: OnnxWebProps) {
/* checks for system light/dark mode preference */ /* checks for system light/dark mode preference */
const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)'); const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');
const store = mustExist(useContext(StateContext)); const store = mustExist(useContext(StateContext));
@ -43,6 +48,7 @@ export function OnnxWeb() {
<Box sx={{ my: 4 }}> <Box sx={{ my: 4 }}>
<Logo /> <Logo />
</Box> </Box>
{props.motd && <Motd />}
<TabContext value={getTab(hash)}> <TabContext value={getTab(hash)}>
<Box sx={{ borderBottom: 1, borderColor: 'divider' }}> <Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
<TabList onChange={(_e, idx) => { <TabList onChange={(_e, idx) => {

View File

@ -4,6 +4,12 @@
}, },
"params": { "params": {
"version": "0.12.0", "version": "0.12.0",
"motd": {
"de": "Willkommen bei onnx-web!",
"en": "Welcome to onnx-web!",
"es": "Bienvenido a onnx-web!",
"fr": "Bienvenue sur onnx-web!"
},
"batch": { "batch": {
"default": 1, "default": 1,
"min": 1, "min": 1,

View File

@ -71,6 +71,7 @@ export type ServerParams = ConfigRanges<Required<
UpscaleParams & UpscaleParams &
HighresParams HighresParams
>> & { >> & {
motd?: Record<string, string>;
version: string; version: string;
}; };
/* eslint-enable */ /* eslint-enable */

View File

@ -1,4 +1,4 @@
import { mustDefault, mustExist, timeout, TimeoutError } from '@apextoaster/js-utils'; import { doesExist, mustDefault, mustExist, timeout, TimeoutError } from '@apextoaster/js-utils';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { createLogger, Logger } from 'browser-bunyan'; import { createLogger, Logger } from 'browser-bunyan';
import i18n from 'i18next'; import i18n from 'i18next';
@ -46,6 +46,13 @@ export async function renderApp(config: Config, params: ServerParams, logger: Lo
} }
} }
if (doesExist(params.motd)) {
logger.debug({ motd: params.motd }, 'adding server motd strings');
for (const [lang, message] of Object.entries(params.motd)) {
i18n.addResource(lang, 'translation', 'motd', message);
}
}
// prep zustand with a slice for each tab, using local storage // prep zustand with a slice for each tab, using local storage
const { const {
createDefaultSlice, createDefaultSlice,
@ -116,7 +123,7 @@ export async function renderApp(config: Config, params: ServerParams, logger: Lo
<LoggerContext.Provider value={reactLogger}> <LoggerContext.Provider value={reactLogger}>
<I18nextProvider i18n={i18n}> <I18nextProvider i18n={i18n}>
<StateContext.Provider value={state}> <StateContext.Provider value={state}>
<OnnxWeb /> <OnnxWeb motd={doesExist(params.motd)} />
</StateContext.Provider> </StateContext.Provider>
</I18nextProvider> </I18nextProvider>
</LoggerContext.Provider> </LoggerContext.Provider>