From b6187c48a8e12dd34f08a830b951f21ab79c814b Mon Sep 17 00:00:00 2001 From: AnimeDL Date: Sat, 15 Jul 2023 19:12:24 -0700 Subject: [PATCH] Add version info to help menu in GUI --- @types/messageHandler.d.ts | 1 + @types/ws.d.ts | 1 + gui/react/src/components/MenuBar/MenuBar.tsx | 17 ++++++++++++++++- gui/react/src/provider/MessageChannel.tsx | 1 + gui/react/src/provider/Store.tsx | 2 ++ gui/server/serviceHandler.ts | 4 ++++ gui/server/services/base.ts | 7 +++++++ package.json | 2 +- 8 files changed, 33 insertions(+), 2 deletions(-) diff --git a/@types/messageHandler.d.ts b/@types/messageHandler.d.ts index 96a1762..3929178 100644 --- a/@types/messageHandler.d.ts +++ b/@types/messageHandler.d.ts @@ -6,6 +6,7 @@ import { LanguageItem } from '../modules/module.langsData'; export interface MessageHandler { name: string auth: (data: AuthData) => Promise; + version: () => Promise; checkToken: () => Promise; search: (data: SearchData) => Promise, availableDubCodes: () => Promise, diff --git a/@types/ws.d.ts b/@types/ws.d.ts index 01887fa..fab66b8 100644 --- a/@types/ws.d.ts +++ b/@types/ws.d.ts @@ -18,6 +18,7 @@ export type UnknownWSMessage = { export type MessageTypes = { 'auth': [AuthData, AuthResponse], + 'version': [undefined, string], 'checkToken': [undefined, CheckTokenResponse], 'search': [SearchData, SearchResponse], 'default': [string, unknown], diff --git a/gui/react/src/components/MenuBar/MenuBar.tsx b/gui/react/src/components/MenuBar/MenuBar.tsx index 08311d1..5d74377 100644 --- a/gui/react/src/components/MenuBar/MenuBar.tsx +++ b/gui/react/src/components/MenuBar/MenuBar.tsx @@ -7,8 +7,18 @@ import { StoreState } from '../../provider/Store' const MenuBar: React.FC = () => { const [ openMenu, setMenuOpen ] = React.useState<'settings'|'help'|undefined>(); const [anchorEl, setAnchorEl] = React.useState(null); - const [store] = useStore(); + const [store, dispatch] = useStore(); + const messageChannel = React.useContext(messageChannelContext); + const getVersion = async() => { + dispatch({ + type: 'version', + payload: await messageChannel?.version() + }); + } + + getVersion(); + const transformService = (service: StoreState['service']) => { switch(service) { case 'crunchy': @@ -92,6 +102,11 @@ const MenuBar: React.FC = () => { }}> Discord + { + handleClose(); + }}> + Version: {store.version} + {transformService(store.service)} diff --git a/gui/react/src/provider/MessageChannel.tsx b/gui/react/src/provider/MessageChannel.tsx index aa6da47..0341b7d 100644 --- a/gui/react/src/provider/MessageChannel.tsx +++ b/gui/react/src/provider/MessageChannel.tsx @@ -214,6 +214,7 @@ const MessageChannelProvider: FCWithChildren = ({ children }) => { const messageHandler: FrontEndMessages = { name: "default", auth: async (data) => (await messageAndResponse(socket, { name: 'auth', data })).data, + version: async () => (await messageAndResponse(socket, { name: 'version', data: undefined })).data, checkToken: async () => (await messageAndResponse(socket, { name: 'checkToken', data: undefined })).data, search: async (data) => (await messageAndResponse(socket, { name: 'search', data })).data, handleDefault: async (data) => (await messageAndResponse(socket, { name: 'default', data })).data, diff --git a/gui/react/src/provider/Store.tsx b/gui/react/src/provider/Store.tsx index 07e63e2..5054051 100644 --- a/gui/react/src/provider/Store.tsx +++ b/gui/react/src/provider/Store.tsx @@ -20,6 +20,7 @@ export type StoreState = { episodeListing: Episode[]; downloadOptions: DownloadOptions, service: 'crunchy'|'funi'|'hidive'|undefined, + version: string, } export type StoreAction = { @@ -51,6 +52,7 @@ const initialState: StoreState = { }, service: undefined, episodeListing: [], + version: '', }; const Store: FCWithChildren = ({children}) => { diff --git a/gui/server/serviceHandler.ts b/gui/server/serviceHandler.ts index 22a96e8..9e8e365 100644 --- a/gui/server/serviceHandler.ts +++ b/gui/server/serviceHandler.ts @@ -7,6 +7,7 @@ import CrunchyHandler from './services/crunchyroll'; import FunimationHandler from './services/funimation'; import HidiveHandler from './services/hidive'; import WebSocketHandler from './websocket'; +import packageJson from '../../package.json'; export default class ServiceHandler { @@ -51,6 +52,9 @@ export default class ServiceHandler { return respond({ isOk: false, reason: new Error('No service selected') }); respond(await this.service.auth(data)); }); + this.ws.events.on('version', async (_, respond) => { + respond(packageJson.version); + }); this.ws.events.on('type', async (_, respond) => respond(this.service === undefined ? undefined : this.service.name as 'hidive'|'crunchy'|'funi')); this.ws.events.on('checkToken', async (_, respond) => { if (this.service === undefined) diff --git a/gui/server/services/base.ts b/gui/server/services/base.ts index 833e222..a192d18 100644 --- a/gui/server/services/base.ts +++ b/gui/server/services/base.ts @@ -6,6 +6,7 @@ import { cfg } from '..'; import path from 'path'; import { console } from '../../../modules/log'; import { getState, setState } from '../../../modules/module.cfg-loader'; +import packageJson from '../../../package.json'; export default class Base { private state: GuiState; @@ -19,6 +20,12 @@ export default class Base { private queue: QueueItem[] = []; private workOnQueue = false; + version(): Promise { + return new Promise(() => { + return packageJson.version; + }); + } + initState() { if (this.state.services[this.name]) { this.queue = this.state.services[this.name].queue; diff --git a/package.json b/package.json index c16405b..802a49f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "multi-downloader-nx", "short_name": "aniDL", - "version": "4.3.0b5", + "version": "4.3.0b6", "description": "Downloader for Crunchyroll, Funimation, or Hidive via CLI or GUI", "keywords": [ "download",