Settings.
import React, { useCallback, useContext, ReactElement, useEffect, useState, } from "react"; import { search, downloadAirDCPPItem, getBundlesForComic, } from "../../actions/airdcpp.actions"; import { useDispatch, useSelector } from "react-redux"; import { RootState, SearchInstance } from "threetwo-ui-typings"; import ellipsize from "ellipsize"; import { Form, Field } from "react-final-form"; import { isEmpty, isNil, map } from "lodash"; import { AirDCPPSocketContext } from "../../context/AirDCPPSocket"; interface IAcquisitionPanelProps { query: any; comicObjectId: any; comicObject: any; settings: any; } export const AcquisitionPanel = ( props: IAcquisitionPanelProps, ): ReactElement => { const issueName = props.query.issue.name || ""; // const { settings } = props; const sanitizedIssueName = issueName.replace(/[^a-zA-Z0-9 ]/g, " "); // Selectors for picking state const airDCPPSearchResults = useSelector((state: RootState) => { return state.airdcpp.searchResults; }); const isAirDCPPSearchInProgress = useSelector( (state: RootState) => state.airdcpp.isAirDCPPSearchInProgress, ); const searchInfo = useSelector( (state: RootState) => state.airdcpp.searchInfo, ); const searchInstance: SearchInstance = useSelector( (state: RootState) => state.airdcpp.searchInstance, ); // const settings = useSelector((state: RootState) => state.settings.data); const airDCPPConfiguration = useContext(AirDCPPSocketContext); const dispatch = useDispatch(); const [dcppQuery, setDcppQuery] = useState({}); useEffect(() => { if (!isEmpty(airDCPPConfiguration.airDCPPState.settings)) { // AirDC++ search query const dcppSearchQuery = { query: { pattern: `${sanitizedIssueName.replace(/#/g, "")}`, extensions: ["cbz", "cbr", "cb7"], }, hub_urls: map( airDCPPConfiguration.airDCPPState.settings.directConnect.client.hubs, (item) => item.value, ), priority: 5, }; setDcppQuery(dcppSearchQuery); } }, [airDCPPConfiguration]); const getDCPPSearchResults = useCallback( async (searchQuery) => { const manualQuery = { query: { pattern: `${searchQuery.issueName}`, extensions: ["cbz", "cbr", "cb7"], }, hub_urls: map( airDCPPConfiguration.airDCPPState.settings.directConnect.client.hubs, (item) => item.value, ), priority: 5, }; dispatch( search(manualQuery, airDCPPConfiguration.airDCPPState.socket, { username: `${airDCPPConfiguration.airDCPPState.settings.directConnect.client.host.username}`, password: `${airDCPPConfiguration.airDCPPState.settings.directConnect.client.host.password}`, }), ); }, [dispatch, airDCPPConfiguration], ); // download via AirDC++ const downloadDCPPResult = useCallback( (searchInstanceId, resultId, name, size, type) => { dispatch( downloadAirDCPPItem( searchInstanceId, resultId, props.comicObjectId, name, size, type, airDCPPConfiguration.airDCPPState.socket, { username: `${airDCPPConfiguration.airDCPPState.settings.directConnect.client.host.username}`, password: `${airDCPPConfiguration.airDCPPState.settings.directConnect.client.host.password}`, }, ), ); // this is to update the download count badge on the downloads tab dispatch( getBundlesForComic( props.comicObjectId, airDCPPConfiguration.airDCPPState.socket, { username: `${airDCPPConfiguration.airDCPPState.settings.directConnect.client.host.username}`, password: `${airDCPPConfiguration.airDCPPState.settings.directConnect.client.host.password}`, }, ), ); }, [airDCPPConfiguration], ); return ( <>
Settings.
| Name | Type | Slots | Actions |
|---|---|---|---|
|
{result.type.id === "directory" ? ( ) : null}{" "} {ellipsize(result.name, 70)}
|
{result.type.id === "directory" ? "directory" : result.type.str} |
{result.slots.free} free
{result.slots.total}
|
downloadDCPPResult( searchInstance.id, result.id, result.name, result.size, result.type, ) } > |
ADCS hubs are
more reliable than NMDCS ones.