From dfd99e45b64902ceb55761e57b3799372a810af1 Mon Sep 17 00:00:00 2001 From: Rishi Ghan Date: Wed, 29 Nov 2023 23:24:34 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20Implementing=20download=20method?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ComicDetail/AcquisitionPanel.tsx | 93 ++++++++++++++----- 1 file changed, 70 insertions(+), 23 deletions(-) diff --git a/src/client/components/ComicDetail/AcquisitionPanel.tsx b/src/client/components/ComicDetail/AcquisitionPanel.tsx index 4de7ff8..3c40b3f 100644 --- a/src/client/components/ComicDetail/AcquisitionPanel.tsx +++ b/src/client/components/ComicDetail/AcquisitionPanel.tsx @@ -1,9 +1,5 @@ import React, { useCallback, ReactElement, useEffect, useState } from "react"; -import { - downloadAirDCPPItem, - getBundlesForComic, - sleep, -} from "../../actions/airdcpp.actions"; +import { getBundlesForComic, sleep } from "../../actions/airdcpp.actions"; import { SearchQuery, PriorityEnum, SearchResponse } from "threetwo-ui-typings"; import { RootState, SearchInstance } from "threetwo-ui-typings"; import ellipsize from "ellipsize"; @@ -13,6 +9,7 @@ import { isEmpty, isNil, map } from "lodash"; import { useStore } from "../../store"; import { useShallow } from "zustand/react/shallow"; import { useQuery } from "@tanstack/react-query"; +import axios from "axios"; interface IAcquisitionPanelProps { query: any; @@ -45,25 +42,8 @@ export const AcquisitionPanel = ( }); 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); interface SearchData { query: Pick & Partial>; hub_urls: string[] | undefined | null; @@ -91,6 +71,11 @@ export const AcquisitionPanel = ( setDcppQuery(dcppSearchQuery); }, []); + /** + * Method to perform a search via an AirDC++ websocket + * @param {SearchData} data - a SearchData query + * @param {any} ADCPPSocket - an intialized AirDC++ socket instance + */ const search = async (data: SearchData, ADCPPSocket: any) => { try { if (!ADCPPSocket.isConnected()) { @@ -165,6 +150,68 @@ export const AcquisitionPanel = ( throw error; } }; + + /** + * Method to download a bundle associated with a search result from AirDC++ + * @param {Number} searchInstanceId - description + * @param {String} resultId - description + * @param {String} comicObjectId - description + * @param {String} name - description + * @param {Number} size - description + * @param {any} type - description + * @param {any} ADCPPSocket - description + * @returns {void} - description + */ + const download = async ( + searchInstanceId: Number, + resultId: String, + comicObjectId: String, + name: String, + size: Number, + type: any, + ADCPPSocket: any, + ): void => { + try { + if (!ADCPPSocket.isConnected()) { + await ADCPPSocket.connect(); + } + let bundleDBImportResult = {}; + const downloadResult = await ADCPPSocket.post( + `search/${searchInstanceId}/results/${resultId}/download`, + ); + + if (!isNil(downloadResult)) { + bundleDBImportResult = await axios({ + method: "POST", + url: `${LIBRARY_SERVICE_BASE_URI}/applyAirDCPPDownloadMetadata`, + headers: { + "Content-Type": "application/json; charset=utf-8", + }, + data: { + bundleId: downloadResult.bundle_info.id, + comicObjectId, + name, + size, + type, + }, + }); + + // dispatch({ + // type: AIRDCPP_RESULT_DOWNLOAD_INITIATED, + // downloadResult, + // bundleDBImportResult, + // }); + // + // dispatch({ + // type: IMS_COMIC_BOOK_DB_OBJECT_FETCHED, + // comicBookDetail: bundleDBImportResult.data, + // IMS_inProgress: false, + // }); + } + } catch (error) { + throw error; + } + }; const getDCPPSearchResults = async (searchQuery) => { const manualQuery = { query: { @@ -396,7 +443,7 @@ export const AcquisitionPanel = (