diff --git a/src/client/actions/settings.actions.tsx b/src/client/actions/settings.actions.tsx index 387ea59..3a85216 100644 --- a/src/client/actions/settings.actions.tsx +++ b/src/client/actions/settings.actions.tsx @@ -10,19 +10,18 @@ import { SETTINGS_SERVICE_BASE_URI, } from "../constants/endpoints"; -export const saveSettings = - (settingsPayload, settingsObjectId?) => async (dispatch) => { - const result = await axios({ - url: `${SETTINGS_SERVICE_BASE_URI}/saveSettings`, - method: "POST", - data: { settingsPayload, settingsObjectId }, - }); - console.log(result.data); - dispatch({ - type: SETTINGS_OBJECT_FETCHED, - data: result.data, - }); - }; +export const saveSettings = (settingsPayload) => async (dispatch) => { + const result = await axios({ + url: `${SETTINGS_SERVICE_BASE_URI}/saveSettings`, + method: "POST", + data: { settingsPayload }, + }); + console.log(result.data); + dispatch({ + type: SETTINGS_OBJECT_FETCHED, + data: result.data, + }); +}; export const getSettings = (settingsKey?) => async (dispatch) => { const result = await axios({ diff --git a/src/client/components/AirDCPPSettings/AirDCPPSettingsConfirmation.tsx b/src/client/components/AirDCPPSettings/AirDCPPSettingsConfirmation.tsx index 7476a42..a7b5d0a 100644 --- a/src/client/components/AirDCPPSettings/AirDCPPSettingsConfirmation.tsx +++ b/src/client/components/AirDCPPSettings/AirDCPPSettingsConfirmation.tsx @@ -2,7 +2,7 @@ import React, { ReactElement } from "react"; export const AirDCPPSettingsConfirmation = (settingsObject): ReactElement => { const { settings } = settingsObject; - + console.log(settings); return (
- {JSON.stringify(
- settings.directConnect.client.airDCPPUserSettings.user
- .permissions,
- undefined,
- 2,
- )}
+ {JSON.stringify(settings.user.permissions, undefined, 2)}
- ) : null} + ) : null} */} > ); }; diff --git a/src/client/components/App.tsx b/src/client/components/App.tsx index 5b90fd2..798b9ba 100644 --- a/src/client/components/App.tsx +++ b/src/client/components/App.tsx @@ -25,10 +25,14 @@ import { isEmpty, isNil, isUndefined } from "lodash"; const AirDCPPSocketComponent = (): ReactElement => { const airDCPPConfiguration = useContext(AirDCPPSocketContext); - const { AirDCPPSocket, settings } = airDCPPConfiguration; + console.log(airDCPPConfiguration); + useEffect(() => { const foo = async () => { - if (!isUndefined(AirDCPPSocket)) { + if ( + !isUndefined(airDCPPConfiguration.airDCPPState) && + !isEmpty(airDCPPConfiguration.airDCPPState.settings) + ) { await AirDCPPSocket.addListener( "queue", "queue_bundle_added", @@ -40,7 +44,7 @@ const AirDCPPSocketComponent = (): ReactElement => { } }; foo(); - }, [settings]); + }, []); return <>>; }; export const App = (): ReactElement => { diff --git a/src/client/components/SystemSettings/SystemSettingsForm.tsx b/src/client/components/SystemSettings/SystemSettingsForm.tsx index 7a3b46f..18a70f1 100644 --- a/src/client/components/SystemSettings/SystemSettingsForm.tsx +++ b/src/client/components/SystemSettings/SystemSettingsForm.tsx @@ -2,8 +2,7 @@ import React, { ReactElement, useCallback } from "react"; import { flushDb } from "../../actions/settings.actions"; import { useDispatch, useSelector } from "react-redux"; -export const SystemSettingsForm = (settingsObject): ReactElement => { - +export const SystemSettingsForm = (): ReactElement => { const dispatch = useDispatch(); const isSettingsCallInProgress = useSelector( (state: RootState) => state.settings.inProgress, diff --git a/src/client/context/AirDCPPSocket.tsx b/src/client/context/AirDCPPSocket.tsx index a247a2f..69ce74e 100644 --- a/src/client/context/AirDCPPSocket.tsx +++ b/src/client/context/AirDCPPSocket.tsx @@ -1,46 +1,81 @@ -import axios from "axios"; +import { isEmpty, isUndefined } from "lodash"; import React, { createContext, useEffect, useMemo, useState } from "react"; -import { SETTINGS_SERVICE_BASE_URI } from "../constants/endpoints"; +import { useDispatch, useSelector } from "react-redux"; +import { getSettings } from "../actions/settings.actions"; import AirDCPPSocket from "../services/DcppSearchService"; -const AirDCPPSocketContext = createContext({}); const AirDCPPSocketContextProvider = ({ children }) => { - const [airDCPPConfiguration, setValue] = useState({}); + // setter for settings for use in the context consumer + const setSettings = (settingsObject) => { + persistSettings({ + ...airDCPPState, + airDCPPState: { + settings: settingsObject, + socket: {}, + socketConnectionInformation: {}, + }, + }); + }; + // 1. default zero-state for AirDC++ configuration + const initState = { + airDCPPState: { settings: {}, socket: {}, socketConnectionInformation: {} }, + setSettings: setSettings, + }; + const dispatch = useDispatch(); + const [airDCPPState, persistSettings] = useState(initState); + const airDCPPSettings = useSelector( + (state: RootState) => state.settings.data, + ); + // 1. get settings from mongo useEffect(() => { - const initializeAirDCPPSocket = () => { - axios({ - url: `${SETTINGS_SERVICE_BASE_URI}/getSettings`, - method: "POST", - data: "", - }) - .then(async (data) => { - const { directConnect } = data.data; - const initializedAirDCPPSocket = new AirDCPPSocket({ - protocol: `${directConnect.client.host.protocol}`, - hostname: `${directConnect.client.host.hostname}`, - }); - - await initializedAirDCPPSocket.connect( - `${directConnect.client.host.username}`, - `${directConnect.client.host.password}`, - true, - ); - setValue({ - AirDCPPSocket: initializedAirDCPPSocket, - settings: data.data, - }); - }) - .catch((error) => console.log(error)); - }; - initializeAirDCPPSocket(); + dispatch(getSettings()); }, []); + + // 2. If available, init AirDC++ Socket with those settings + useEffect(() => { + if (!isEmpty(airDCPPSettings)) { + initializeAirDCPPSocket(airDCPPSettings); + } + }, [airDCPPSettings]); + + // Method to init AirDC++ Socket with supplied settings + const initializeAirDCPPSocket = async (configuration) => { + const { + directConnect: { + client: { host }, + }, + } = configuration; + const initializedAirDCPPSocket = new AirDCPPSocket({ + protocol: `${host.protocol}`, + hostname: `${host.hostname}`, + }); + + const socketConnectionInformation = await initializedAirDCPPSocket.connect( + `${host.username}`, + `${host.password}`, + true, + ); + persistSettings({ + ...airDCPPState, + airDCPPState: { + settings: configuration, + socket: initializedAirDCPPSocket, + socketConnectionInformation, + }, + }); + }; + // the Provider gives access to the context to its children return ( -