From d7f0bdcdfee533ba1b48ad4d9ccb79644c3ebcd9 Mon Sep 17 00:00:00 2001 From: Rishi Ghan Date: Wed, 18 Aug 2021 13:06:13 -0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=BD=20Wiring=20up=20simple=20mongo=20i?= =?UTF-8?q?mport=20from=20CV=20result?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/client/actions/fileops.actions.tsx | 44 ++++++++++++++- src/client/components/Library.tsx | 10 ++-- src/client/components/Search.tsx | 76 +++++++++++++------------- src/client/constants/action-types.ts | 6 ++ src/client/reducers/fileops.reducer.ts | 22 ++++++++ src/client/services/api/SearchApi.ts | 4 +- 6 files changed, 118 insertions(+), 44 deletions(-) diff --git a/src/client/actions/fileops.actions.tsx b/src/client/actions/fileops.actions.tsx index 69a2189..b60629d 100644 --- a/src/client/actions/fileops.actions.tsx +++ b/src/client/actions/fileops.actions.tsx @@ -13,8 +13,12 @@ import { CV_API_CALL_IN_PROGRESS, CV_SEARCH_SUCCESS, CV_CLEANUP, + IMS_CV_METADATA_IMPORT_CALL_IN_PROGRESS, + IMS_CV_METADATA_IMPORT_SUCCESSFUL, + IMS_CV_METADATA_IMPORT_FAILED, } from "../constants/action-types"; import { refineQuery } from "../shared/utils/filenameparser.utils"; +import { extend } from "lodash"; import sortBy from "array-sort-by"; export async function walkFolder(path: string): Promise> { @@ -80,7 +84,6 @@ export const fetchComicBookMetadata = (options) => async (dispatch) => { }); socket.on("comicBookCoverMetadata", (data: IExtractedComicBookCoverFile) => { - console.log("Recd cover"); dispatch({ type: IMS_COMICBOOK_METADATA_FETCHED, data, @@ -107,6 +110,45 @@ export const getComicBooks = (options) => async (dispatch) => { }); }; +export const importToDB = (payload) => (dispatch) => { + try { + const comicBookMetadata = extend( + { + importStatus: { + isImported: true, + tagged: false, + matchedResult: { + score: "0", + }, + }, + }, + { sourcedMetadata: { comicvine: payload } }, + ); + dispatch({ + type: IMS_CV_METADATA_IMPORT_CALL_IN_PROGRESS, + }); + + return axios + .request({ + url: "http://localhost:3000/api/import/rawImportToDb", + method: "POST", + data: comicBookMetadata, + transformResponse: (r: string) => JSON.parse(r), + }) + .then((response) => { + const { data } = response; + dispatch({ + type: IMS_CV_METADATA_IMPORT_SUCCESSFUL, + importResult: data, + }); + }); + } catch (error) { + dispatch({ + type: IMS_CV_METADATA_IMPORT_FAILED, + importError: error, + }); + } +}; export const fetchComicVineMatches = (searchPayload) => (dispatch) => { try { const issueString = searchPayload.rawFileDetails.name; diff --git a/src/client/components/Library.tsx b/src/client/components/Library.tsx index f47ae61..93f106f 100644 --- a/src/client/components/Library.tsx +++ b/src/client/components/Library.tsx @@ -165,10 +165,12 @@ export const Library = ({}: IComicBookLibraryProps): ReactElement => { ); RawFileDetails.propTypes = { - name: PropTypes.string, - path: PropTypes.string, - fileSize: PropTypes.number, - extension: PropTypes.string, + value: PropTypes.shape({ + name: PropTypes.string, + path: PropTypes.string, + fileSize: PropTypes.number, + extension: PropTypes.string, + }), }; ImportStatus.propTypes = { diff --git a/src/client/components/Search.tsx b/src/client/components/Search.tsx index 4f4a828..04cfd77 100644 --- a/src/client/components/Search.tsx +++ b/src/client/components/Search.tsx @@ -1,13 +1,7 @@ import React, { useMemo, useCallback, ReactElement } from "react"; -import { - removeLeadingPeriod, - escapePoundSymbol, -} from "../shared/utils/formatting.utils"; -import { useTable } from "react-table"; -import prettyBytes from "pretty-bytes"; -import ellipsize from "ellipsize"; -import { isNil, isUndefined, map, isEmpty } from "lodash"; +import { isNil, isEmpty } from "lodash"; import { IExtractedComicBookCoverFile, RootState } from "threetwo-ui-typings"; +import { importToDB } from "../actions/fileops.actions"; import { useSelector, useDispatch } from "react-redux"; import { comicinfoAPICall } from "../actions/comicinfo.actions"; import { search } from "../services/api/SearchApi"; @@ -33,7 +27,7 @@ export const Search = ({}: ISearchProps): ReactElement => { limit: "10", offset: "0", field_list: "id,name,deck,api_detail_url,image,description", - resources: "volume", + resources: "issue", }, }), ); @@ -44,6 +38,23 @@ export const Search = ({}: ISearchProps): ReactElement => { const getDCPPSearchResults = useCallback((searchQuery) => { search(searchQuery); }, []); + const dcppQuery = { + query: { + pattern: "Iron Man - V1 194", + // file_type: "compressed", + extensions: ["cbz", "cbr"], + }, + hub_urls: [ + "adcs://novosibirsk.dc-dev.club:7111/?kp=SHA256/4XFHJFFBFEI2RS75FPRPPXPZMMKPXR764ABVVCC2QGJPQ34SDZGA", + "dc.fly-server.ru", + ], + priority: 1, + }; + + const addToLibrary = useCallback( + (comicData) => dispatch(importToDB(comicData)), + [], + ); const comicVineSearchResults = useSelector( (state: RootState) => state.comicInfo.searchResults, @@ -56,20 +67,7 @@ export const Search = ({}: ISearchProps): ReactElement => {

Search

- getDCPPSearchResults({ - query: { - pattern: "Iron Man - V1 194", - // file_type: "compressed", - extensions: ["cbz", "cbr"], - }, - hub_urls: [ - "adcs://novosibirsk.dc-dev.club:7111/?kp=SHA256/4XFHJFFBFEI2RS75FPRPPXPZMMKPXR764ABVVCC2QGJPQ34SDZGA", - "dc.fly-server.ru", - ], - priority: 1, - }) - } + onSubmit={getCVSearchResults} initialValues={{ ...formData, }} @@ -98,20 +96,24 @@ export const Search = ({}: ISearchProps): ReactElement => { {!isNil(comicVineSearchResults.results) && !isEmpty(comicVineSearchResults.results) ? ( <> - {comicVineSearchResults.results.map( - ({ id, name, description, api_detail_url, image }) => { - return ( -
- {id} {name} -

{api_detail_url}

-

{description}

-
- name -
-
- ); - }, - )} + {comicVineSearchResults.results.map((result) => { + return ( +
+ {result.id} {result.name} +

{result.api_detail_url}

+

{result.description}

+
+ name +
+ +
+ ); + })} ) : (
diff --git a/src/client/constants/action-types.ts b/src/client/constants/action-types.ts index e462171..0edd903 100644 --- a/src/client/constants/action-types.ts +++ b/src/client/constants/action-types.ts @@ -15,6 +15,12 @@ export const IMS_SOCKET_ERROR = "IMS_SOCKET_ERROR"; export const IMS_RAW_IMPORT_SUCCESSFUL = "IMS_RAW_IMPORT_SUCCESSFUL"; export const IMS_RAW_IMPORT_FAILED = "IMS_RAW_IMPORT_FAILED"; +export const IMS_CV_METADATA_IMPORT_CALL_IN_PROGRESS = + "IMS_CV_METADATA_IMPORT_CALL_IN_PROGRESS"; +export const IMS_CV_METADATA_IMPORT_SUCCESSFUL = + "IMS_CV_METADATA_IMPORT_SUCCESSFUL"; +export const IMS_CV_METADATA_IMPORT_FAILED = "IMS_CV_METADATA_IMPORT_FAILED"; + export const IMS_RECENT_COMICS_FETCHED = "IMS_RECENT_COMICS_FETCHED"; export const IMS_DATA_FETCH_ERROR = "IMS_DATA_FETCH_ERROR"; diff --git a/src/client/reducers/fileops.reducer.ts b/src/client/reducers/fileops.reducer.ts index de427f2..cb1fc89 100644 --- a/src/client/reducers/fileops.reducer.ts +++ b/src/client/reducers/fileops.reducer.ts @@ -7,11 +7,16 @@ import { IMS_RAW_IMPORT_FAILED, IMS_RECENT_COMICS_FETCHED, IMS_DATA_FETCH_ERROR, + IMS_CV_METADATA_IMPORT_SUCCESSFUL, + IMS_CV_METADATA_IMPORT_FAILED, + IMS_CV_METADATA_IMPORT_CALL_IN_PROGRESS, } from "../constants/action-types"; const initialState = { dataTransferred: false, comicBookMetadata: [], socketConnected: false, + isComicVineMetadataImportInProgress: false, + comicVineMetadataImportError: {}, rawImportError: {}, }; @@ -44,6 +49,23 @@ function fileOpsReducer(state = initialState, action) { ...state, recentComics: action.data, }; + case IMS_CV_METADATA_IMPORT_SUCCESSFUL: + return { + ...state, + isComicVineMetadataImportInProgress: false, + comicVineMetadataImportDetails: action.importResult, + }; + case IMS_CV_METADATA_IMPORT_CALL_IN_PROGRESS: + return { + ...state, + isComicVineMetadataImportInProgress: true, + }; + case IMS_CV_METADATA_IMPORT_FAILED: + return { + ...state, + isComicVineMetadataImportInProgress: false, + comicVineMetadataImportError: action.importError, + }; default: return state; } diff --git a/src/client/services/api/SearchApi.ts b/src/client/services/api/SearchApi.ts index 55b96da..1965a9a 100644 --- a/src/client/services/api/SearchApi.ts +++ b/src/client/services/api/SearchApi.ts @@ -33,9 +33,10 @@ export const search = async (data: SearchData) => { `search/${instance.id}/hub_search`, data, ); + return searchQueueInfo; }; -const onSearchSent = async (item, instance, unsubscribe, searchInfo): any => { +const onSearchSent = async (item, instance, unsubscribe, searchInfo) => { // Collect the results for 5 seconds await sleep(5000); @@ -53,7 +54,6 @@ const onSearchSent = async (item, instance, unsubscribe, searchInfo): any => { // target_directory: item.target_directory, // }); } - return results; // Remove listener for this search instance unsubscribe(); };