Add version info to help menu in GUI

This commit is contained in:
AnimeDL 2023-07-15 19:12:24 -07:00
parent 7872bc343d
commit b6187c48a8
8 changed files with 33 additions and 2 deletions

View file

@ -6,6 +6,7 @@ import { LanguageItem } from '../modules/module.langsData';
export interface MessageHandler { export interface MessageHandler {
name: string name: string
auth: (data: AuthData) => Promise<AuthResponse>; auth: (data: AuthData) => Promise<AuthResponse>;
version: () => Promise<string>;
checkToken: () => Promise<CheckTokenResponse>; checkToken: () => Promise<CheckTokenResponse>;
search: (data: SearchData) => Promise<SearchResponse>, search: (data: SearchData) => Promise<SearchResponse>,
availableDubCodes: () => Promise<string[]>, availableDubCodes: () => Promise<string[]>,

1
@types/ws.d.ts vendored
View file

@ -18,6 +18,7 @@ export type UnknownWSMessage = {
export type MessageTypes = { export type MessageTypes = {
'auth': [AuthData, AuthResponse], 'auth': [AuthData, AuthResponse],
'version': [undefined, string],
'checkToken': [undefined, CheckTokenResponse], 'checkToken': [undefined, CheckTokenResponse],
'search': [SearchData, SearchResponse], 'search': [SearchData, SearchResponse],
'default': [string, unknown], 'default': [string, unknown],

View file

@ -7,8 +7,18 @@ import { StoreState } from '../../provider/Store'
const MenuBar: React.FC = () => { const MenuBar: React.FC = () => {
const [ openMenu, setMenuOpen ] = React.useState<'settings'|'help'|undefined>(); const [ openMenu, setMenuOpen ] = React.useState<'settings'|'help'|undefined>();
const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null); const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(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']) => { const transformService = (service: StoreState['service']) => {
switch(service) { switch(service) {
case 'crunchy': case 'crunchy':
@ -92,6 +102,11 @@ const MenuBar: React.FC = () => {
}}> }}>
Discord Discord
</MenuItem> </MenuItem>
<MenuItem onClick={() => {
handleClose();
}}>
Version: {store.version}
</MenuItem>
</Menu> </Menu>
<Typography variant="h5" color="text.primary" component="div" align="center" sx={{flexGrow: 1}}> <Typography variant="h5" color="text.primary" component="div" align="center" sx={{flexGrow: 1}}>
{transformService(store.service)} {transformService(store.service)}

View file

@ -214,6 +214,7 @@ const MessageChannelProvider: FCWithChildren = ({ children }) => {
const messageHandler: FrontEndMessages = { const messageHandler: FrontEndMessages = {
name: "default", name: "default",
auth: async (data) => (await messageAndResponse(socket, { name: 'auth', data })).data, 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, checkToken: async () => (await messageAndResponse(socket, { name: 'checkToken', data: undefined })).data,
search: async (data) => (await messageAndResponse(socket, { name: 'search', data })).data, search: async (data) => (await messageAndResponse(socket, { name: 'search', data })).data,
handleDefault: async (data) => (await messageAndResponse(socket, { name: 'default', data })).data, handleDefault: async (data) => (await messageAndResponse(socket, { name: 'default', data })).data,

View file

@ -20,6 +20,7 @@ export type StoreState = {
episodeListing: Episode[]; episodeListing: Episode[];
downloadOptions: DownloadOptions, downloadOptions: DownloadOptions,
service: 'crunchy'|'funi'|'hidive'|undefined, service: 'crunchy'|'funi'|'hidive'|undefined,
version: string,
} }
export type StoreAction<T extends (keyof StoreState)> = { export type StoreAction<T extends (keyof StoreState)> = {
@ -51,6 +52,7 @@ const initialState: StoreState = {
}, },
service: undefined, service: undefined,
episodeListing: [], episodeListing: [],
version: '',
}; };
const Store: FCWithChildren = ({children}) => { const Store: FCWithChildren = ({children}) => {

View file

@ -7,6 +7,7 @@ import CrunchyHandler from './services/crunchyroll';
import FunimationHandler from './services/funimation'; import FunimationHandler from './services/funimation';
import HidiveHandler from './services/hidive'; import HidiveHandler from './services/hidive';
import WebSocketHandler from './websocket'; import WebSocketHandler from './websocket';
import packageJson from '../../package.json';
export default class ServiceHandler { export default class ServiceHandler {
@ -51,6 +52,9 @@ export default class ServiceHandler {
return respond({ isOk: false, reason: new Error('No service selected') }); return respond({ isOk: false, reason: new Error('No service selected') });
respond(await this.service.auth(data)); 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('type', async (_, respond) => respond(this.service === undefined ? undefined : this.service.name as 'hidive'|'crunchy'|'funi'));
this.ws.events.on('checkToken', async (_, respond) => { this.ws.events.on('checkToken', async (_, respond) => {
if (this.service === undefined) if (this.service === undefined)

View file

@ -6,6 +6,7 @@ import { cfg } from '..';
import path from 'path'; import path from 'path';
import { console } from '../../../modules/log'; import { console } from '../../../modules/log';
import { getState, setState } from '../../../modules/module.cfg-loader'; import { getState, setState } from '../../../modules/module.cfg-loader';
import packageJson from '../../../package.json';
export default class Base { export default class Base {
private state: GuiState; private state: GuiState;
@ -19,6 +20,12 @@ export default class Base {
private queue: QueueItem[] = []; private queue: QueueItem[] = [];
private workOnQueue = false; private workOnQueue = false;
version(): Promise<string> {
return new Promise(() => {
return packageJson.version;
});
}
initState() { initState() {
if (this.state.services[this.name]) { if (this.state.services[this.name]) {
this.queue = this.state.services[this.name].queue; this.queue = this.state.services[this.name].queue;

View file

@ -1,7 +1,7 @@
{ {
"name": "multi-downloader-nx", "name": "multi-downloader-nx",
"short_name": "aniDL", "short_name": "aniDL",
"version": "4.3.0b5", "version": "4.3.0b6",
"description": "Downloader for Crunchyroll, Funimation, or Hidive via CLI or GUI", "description": "Downloader for Crunchyroll, Funimation, or Hidive via CLI or GUI",
"keywords": [ "keywords": [
"download", "download",