From d17f49baf4947f5ac8331ce682fb12f9c749a6d5 Mon Sep 17 00:00:00 2001 From: Rishi Ghan Date: Tue, 19 Apr 2022 01:01:34 -0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=8E=20DC++=20manual=20search=20scaffol?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/client/actions/comicinfo.actions.tsx | 11 +- src/client/actions/fileops.actions.tsx | 21 +- .../ComicDetail/AcquisitionPanel.tsx | 298 ++++++++++-------- src/client/components/Search.tsx | 6 +- 4 files changed, 186 insertions(+), 150 deletions(-) diff --git a/src/client/actions/comicinfo.actions.tsx b/src/client/actions/comicinfo.actions.tsx index 92b28af..c42a781 100644 --- a/src/client/actions/comicinfo.actions.tsx +++ b/src/client/actions/comicinfo.actions.tsx @@ -1,8 +1,9 @@ import axios from "axios"; import rateLimiter from "axios-rate-limit"; -import { AxiosCacheRequestConfig, createCacheAdapter } from 'axios-simple-cache-adapter'; - - +import { + AxiosCacheRequestConfig, + createCacheAdapter, +} from "axios-simple-cache-adapter"; import qs from "qs"; import { CV_SEARCH_SUCCESS, @@ -25,7 +26,6 @@ import { LIBRARY_SERVICE_BASE_URI, } from "../constants/endpoints"; - const axiosCacheAdapter = createCacheAdapter(); const http = rateLimiter(axios.create(), { maxRequests: 1, @@ -39,7 +39,6 @@ export const getWeeklyPullList = (options) => async (dispatch) => { type: CV_WEEKLY_PULLLIST_CALL_IN_PROGRESS, }); - await axios(`${COMICVINE_SERVICE_URI}/getWeeklyPullList`, { method: "get", params: options, @@ -145,7 +144,7 @@ export const analyzeLibrary = (issues) => async (dispatch) => { }); }; -export const getLibraryStatistics = () => async dispatch => { +export const getLibraryStatistics = () => async (dispatch) => { dispatch({ type: LIBRARY_STATISTICS_CALL_IN_PROGRESS, }); diff --git a/src/client/actions/fileops.actions.tsx b/src/client/actions/fileops.actions.tsx index 3141e2f..f5ab76d 100644 --- a/src/client/actions/fileops.actions.tsx +++ b/src/client/actions/fileops.actions.tsx @@ -52,15 +52,9 @@ export async function walkFolder(path: string): Promise> { } /** * Fetches comic book covers along with some metadata - * - * using {@link Renderer}. - * - * Used by external plugins - * - * @param {Object} options - * @return {Promise} HTML of the page + * @return the comic book metadata */ -export const fetchComicBookMetadata = (options) => async (dispatch) => { +export const fetchComicBookMetadata = () => async (dispatch) => { const extractionOptions = { extractTarget: "cover", targetExtractionFolder: "./userdata/covers", @@ -97,6 +91,11 @@ export const toggleImportQueueStatus = (options) => async (dispatch) => { data: { manjhul: "jigyadam", action: options.action }, }); }; +/** + * Fetches comic book metadata for various types + * @return metadata for the comic book object categories + * @param options + **/ export const getComicBooks = (options) => async (dispatch) => { const { paginationOptions, predicate, comicStatus } = options; @@ -127,6 +126,11 @@ export const getComicBooks = (options) => async (dispatch) => { } }; +/** + * Makes a call to library service to import the comic book metadata into the ThreeTwo data store. + * @returns Nothing. + * @param payload + */ export const importToDB = (payload?: any) => (dispatch) => { try { const comicBookMetadata = { @@ -164,6 +168,7 @@ export const importToDB = (payload?: any) => (dispatch) => { }); } }; + export const fetchVolumeGroups = () => async (dispatch) => { try { dispatch({ diff --git a/src/client/components/ComicDetail/AcquisitionPanel.tsx b/src/client/components/ComicDetail/AcquisitionPanel.tsx index 9984375..212e943 100644 --- a/src/client/components/ComicDetail/AcquisitionPanel.tsx +++ b/src/client/components/ComicDetail/AcquisitionPanel.tsx @@ -13,6 +13,7 @@ import { 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 { @@ -106,21 +107,52 @@ export const AcquisitionPanel = ( <>
{!isEmpty(ADCPPSocket) ? ( -
- -
+
( +
+
+
+ + {({ input, meta }) => { + return ( +
+ + + Use this to manually override the search. + +
+ ); + }} +
+ +
+ +
+
+
+
+ )} + /> ) : (
@@ -131,131 +163,131 @@ export const AcquisitionPanel = (
)} - {/* AirDC++ search instance details */} - {!isNil(searchInfo) && !isNil(searchInstance) && ( - <> -
-
-
-
-
-
-
- {userSettings.directConnect.client.hubs.map( - ({ value }) => ( - - {value} - - ), - )} -
-
-
Query: {searchInfo.query.pattern}
-
- Extensions: {searchInfo.query.extensions.join(", ")} -
-
File type: {searchInfo.query.file_type}
-
-
-
-
-
-
-
-
-
-
-
Search Instance: {searchInstance.id}
-
Owned by {searchInstance.owner}
-
Expires in: {searchInstance.expires_in}
-
-
-
-
-
- - )}
+ + {/* AirDC++ search instance details */} + {!isNil(searchInfo) && !isNil(searchInstance) && ( +
+
+
+
+
+
+
+ {userSettings.directConnect.client.hubs.map( + ({ value }) => ( + + {value} + + ), + )} +
+
+
Query: {searchInfo.query.pattern}
+
Extensions: {searchInfo.query.extensions.join(", ")}
+
File type: {searchInfo.query.file_type}
+
+
+
+
+
+
+
+
+
Search Instance: {searchInstance.id}
+
Owned by {searchInstance.owner}
+
Expires in: {searchInstance.expires_in}
+
+
+
+
+
+ )} + {/* AirDC++ results */}
{!isNil(airDCPPSearchResults) && !isEmpty(airDCPPSearchResults) ? ( - - - - - - - - - - - {map(airDCPPSearchResults, ({ result }, idx) => { - return ( - - + + + + ); + })} + +
NameTypeSlotsActions
-

- {result.type.id === "directory" ? ( - - ) : null}{" "} - {ellipsize(result.name, 70)} -

+
+ + + + + + + + + + + {map(airDCPPSearchResults, ({ result }, idx) => { + return ( + + - - + - - - ); - })} - -
NameTypeSlotsActions
+

+ {result.type.id === "directory" ? ( + + ) : null}{" "} + {ellipsize(result.name, 70)} +

-
-
-
- {!isNil(result.dupe) ? ( - Dupe - ) : null} - - {result.users.user.nicks} - - {result.users.user.flags.map((flag, idx) => ( - - {flag} +
+
+
+ {!isNil(result.dupe) ? ( + Dupe + ) : null} + + {result.users.user.nicks} - ))} -
-
-
-
- - {result.type.id === "directory" - ? "directory" - : result.type.str} - - -
- - {result.slots.free} free + {result.users.user.flags.map((flag, idx) => ( + + {flag} + + ))} +
+ + +
+ + {result.type.id === "directory" + ? "directory" + : result.type.str} - - {result.slots.total} - - - - - downloadDCPPResult( - searchInstance.id, - result.id, - props.comicObjectid, - ) - } - > - - -
+
+
+ + {result.slots.free} free + + + {result.slots.total} + +
+
+ + downloadDCPPResult( + searchInstance.id, + result.id, + props.comicObjectid, + ) + } + > + + +
+
) : (
diff --git a/src/client/components/Search.tsx b/src/client/components/Search.tsx index 51a5de6..31d1935 100644 --- a/src/client/components/Search.tsx +++ b/src/client/components/Search.tsx @@ -8,9 +8,9 @@ import { search } from "../services/api/SearchApi"; import { Form, Field } from "react-final-form"; import Card from "./Carda"; -interface ISearchProps {} +interface ISearchProps { } -export const Search = ({}: ISearchProps): ReactElement => { +export const Search = ({ }: ISearchProps): ReactElement => { const formData = { search: "", }; @@ -83,7 +83,7 @@ export const Search = ({}: ISearchProps): ReactElement => { )} /> {!isNil(comicVineSearchResults.results) && - !isEmpty(comicVineSearchResults.results) ? ( + !isEmpty(comicVineSearchResults.results) ? (
{comicVineSearchResults.results.map((result) => { return (