🔧 AirDC++ Settings wired up (first draft)

This commit is contained in:
2021-11-17 22:09:48 -08:00
parent 6e1b431600
commit 925008bdcb
5 changed files with 127 additions and 96 deletions

View File

@@ -1,5 +1,4 @@
import axios from "axios"; import axios from "axios";
import { IExtractionOptions } from "threetwo-ui-typings";
import { SETTINGS_OBJECT_FETCHED } from "../constants/action-types"; import { SETTINGS_OBJECT_FETCHED } from "../constants/action-types";
import { SETTINGS_SERVICE_BASE_URI } from "../constants/endpoints"; import { SETTINGS_SERVICE_BASE_URI } from "../constants/endpoints";
@@ -10,6 +9,7 @@ export const saveSettings =
method: "POST", method: "POST",
data: { settingsObject, airdcppUserSettings }, data: { settingsObject, airdcppUserSettings },
}); });
console.log(result.data);
dispatch({ dispatch({
type: SETTINGS_OBJECT_FETCHED, type: SETTINGS_OBJECT_FETCHED,
data: result.data, data: result.data,

View File

@@ -44,22 +44,21 @@ export const AcquisitionPanel = (
const dispatch = useDispatch(); const dispatch = useDispatch();
useEffect(() => { useEffect(() => {
dispatch(getSettings()); dispatch(getSettings());
if (!isUndefined(airDCPPClientSettings[0])) { if (!isEmpty(airDCPPClientSettings)) {
const dcppSocket = new AirDCPPSocket({ const dcppSocket = new AirDCPPSocket({
hostname: `${airDCPPClientSettings[0].directConnect.client.hostname}`, hostname: `${airDCPPClientSettings.directConnect.client.hostname}`,
}); });
setADCPPSocket(dcppSocket); setADCPPSocket(dcppSocket);
} }
}, [dispatch, airDCPPClientSettings.length]); }, [dispatch]);
console.log(ADCPPSocket);
const getDCPPSearchResults = useCallback( const getDCPPSearchResults = useCallback(
(searchQuery) => { (searchQuery) => {
dispatch(search(searchQuery)); dispatch(search(searchQuery));
}, },
[dispatch], [dispatch],
); );
console.log(airDCPPClientSettings);
const dcppQuery = { const dcppQuery = {
query: { query: {
pattern: `${sanitizedVolumeName.replace(/#/g, "")}`, pattern: `${sanitizedVolumeName.replace(/#/g, "")}`,
@@ -84,21 +83,33 @@ export const AcquisitionPanel = (
return ( return (
<> <>
<div className="comic-detail columns"> <div className="comic-detail columns">
<div className="column is-one-fifth"> {!isEmpty(airDCPPClientSettings) &&
<button !isUndefined(airDCPPClientSettings) ? (
className={ <div className="column is-one-fifth">
isAirDCPPSearchInProgress <button
? "button is-loading is-warning" className={
: "button" isAirDCPPSearchInProgress
} ? "button is-loading is-warning"
onClick={() => getDCPPSearchResults(dcppQuery)} : "button"
> }
<span className="icon is-small"> onClick={() => getDCPPSearchResults(dcppQuery)}
<img src="/img/airdcpp_logo.svg" /> >
</span> <span className="icon is-small">
<span className="airdcpp-text">Search on AirDC++</span> <img src="/img/airdcpp_logo.svg" />
</button> </span>
</div> <span className="airdcpp-text">Search on AirDC++</span>
</button>
</div>
) : (
<div className="column is-three-fifths">
<article className="message is-info">
<div className="message-body is-size-6 is-family-secondary">
AirDC++ is not configured. Please configure it in{" "}
<code>Settings</code>.
</div>
</article>
</div>
)}
{/* AirDC++ search instance details */} {/* AirDC++ search instance details */}
{!isNil(searchInfo) && !isNil(searchInstance) && ( {!isNil(searchInfo) && !isNil(searchInstance) && (
<> <>

View File

@@ -0,0 +1,71 @@
import React, { ReactElement } from "react";
export const AirDCPPSettingsConfirmation = (settingsObject): ReactElement => {
const { settings } = settingsObject;
return (
<div className="mt-4 is-clearfix">
<div className="card">
<div className="card-content">
<span className="icon is-medium is-pulled-right">
<i className="fa-solid fa-circle has-text-success"></i>
</span>
<div className="content is-size-7">
<dl>
<dt>{settings._id}</dt>
<dt>
Client version:{" "}
{
settings.directConnect.client.airdcppUserSettings.system_info
.client_version
}
</dt>
<dt>
Hostname:{" "}
{
settings.directConnect.client.airdcppUserSettings.system_info
.hostname
}
</dt>
<dt>
Platform:{" "}
{
settings.directConnect.client.airdcppUserSettings.system_info
.platform
}
</dt>
<dt>
Username:{" "}
{
settings.directConnect.client.airdcppUserSettings.user
.username
}
</dt>
<dt>
Active Sessions:{" "}
{
settings.directConnect.client.airdcppUserSettings.user
.active_sessions
}
</dt>
<dt>
Permissions:{" "}
<pre>
{JSON.stringify(
settings.directConnect.client.airdcppUserSettings.user
.permissions,
undefined,
2,
)}
</pre>
</dt>
</dl>
</div>
</div>
</div>
</div>
);
};
export default AirDCPPSettingsConfirmation;

View File

@@ -2,12 +2,13 @@ import React, { ReactElement, useEffect } from "react";
import { Form, Field } from "react-final-form"; import { Form, Field } from "react-final-form";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { saveSettings, getSettings } from "../actions/settings.actions"; import { saveSettings, getSettings } from "../actions/settings.actions";
import { AirDCPPSettingsConfirmation } from "./AirDCPPSettings/AirDCPPSettingsConfirmation";
import axios from "axios"; import axios from "axios";
import { isUndefined, isEmpty } from "lodash"; import { isUndefined, isEmpty } from "lodash";
export const AirDCPPSettingsForm = (): ReactElement => { export const AirDCPPSettingsForm = (): ReactElement => {
const airdcppClientSettings = useSelector( const airdcppClientSettings = useSelector(
(state: RootState) => state.settings.data[0], (state: RootState) => state.settings.data,
); );
const dispatch = useDispatch(); const dispatch = useDispatch();
@@ -34,9 +35,11 @@ export const AirDCPPSettingsForm = (): ReactElement => {
} }
}; };
const validate = async () => {}; const validate = async () => {};
const initFormData = !isUndefined(airdcppClientSettings) const initFormData =
? airdcppClientSettings.directConnect.client !isEmpty(airdcppClientSettings.directConnect) ||
: null; !isUndefined(airdcppClientSettings.directConnect)
? airdcppClientSettings.directConnect.client
: {};
return ( return (
<> <>
<Form <Form
@@ -51,9 +54,8 @@ export const AirDCPPSettingsForm = (): ReactElement => {
<p className="control"> <p className="control">
<span className="select"> <span className="select">
<Field name="protocol" component="select"> <Field name="protocol" component="select">
<option value="http://" defaultValue={"http://"}> <option>Protocol</option>
http:// <option value="http://">http://</option>
</option>
<option value="https://">https://</option> <option value="https://">https://</option>
</Field> </Field>
</span> </span>
@@ -104,77 +106,23 @@ export const AirDCPPSettingsForm = (): ReactElement => {
</div> </div>
</div> </div>
</div> </div>
<div className="field is-grouped">
<button type="submit" className="button is-primary"> <p className="control">
{!isEmpty(initFormData) ? "Update" : "Save"} <button type="submit" className="button is-primary">
</button> {!isEmpty(initFormData) ? "Update" : "Save"}
</button>
</p>
{!isUndefined(airdcppClientSettings) ? (
<p className="control">
<button className="button is-danger">Delete</button>
</p>
) : null}
</div>
</form> </form>
)} )}
/> />
{!isUndefined(airdcppClientSettings) && {!isEmpty(airdcppClientSettings) ? (
!isEmpty(airdcppClientSettings) ? ( <AirDCPPSettingsConfirmation settings={airdcppClientSettings} />
<div className="mt-4 is-clearfix">
<div className="card">
<div className="card-content">
<span className="icon is-medium is-pulled-right">
<i className="fa-solid fa-circle has-text-success"></i>
</span>
<div className="content is-size-7">
<dl>
<dt>{airdcppClientSettings._id}</dt>
<dt>
Client version:{" "}
{
airdcppClientSettings.directConnect.client
.airdcppUserSettings.system_info.client_version
}
</dt>
<dt>
Hostname:{" "}
{
airdcppClientSettings.directConnect.client
.airdcppUserSettings.system_info.hostname
}
</dt>
<dt>
Platform:{" "}
{
airdcppClientSettings.directConnect.client
.airdcppUserSettings.system_info.platform
}
</dt>
<dt>
Username:{" "}
{
airdcppClientSettings.directConnect.client
.airdcppUserSettings.user.username
}
</dt>
<dt>
Active Sessions:{" "}
{
airdcppClientSettings.directConnect.client
.airdcppUserSettings.user.active_sessions
}
</dt>
<dt>
Permissions:{" "}
<pre>
{JSON.stringify(
airdcppClientSettings.directConnect.client
.airdcppUserSettings.user.permissions,
undefined,
2,
)}
</pre>
</dt>
</dl>
</div>
</div>
</div>
</div>
) : null} ) : null}
</> </>
); );

View File

@@ -20,6 +20,7 @@ function settingsReducer(state = initialState, action) {
return { return {
...state, ...state,
data: action.data, data: action.data,
inProgress: false,
}; };
default: default: