diff --git a/src/client/actions/airdcpp.actions.tsx b/src/client/actions/airdcpp.actions.tsx index 5811e62..0cbe54a 100644 --- a/src/client/actions/airdcpp.actions.tsx +++ b/src/client/actions/airdcpp.actions.tsx @@ -12,8 +12,9 @@ import { AIRDCPP_DOWNLOAD_PROGRESS_TICK, AIRDCPP_BUNDLES_FETCHED, AIRDCPP_SEARCH_IN_PROGRESS, + IMS_COMIC_BOOK_DB_OBJECT_FETCHED, } from "../constants/action-types"; -import { each, isNil, isUndefined } from "lodash"; +import { each, isNil, isUndefined, result } from "lodash"; import axios from "axios"; interface SearchData { @@ -32,7 +33,7 @@ export const search = (data: SearchData) => async (dispatch) => { await SocketService.connect("admin", "password", true); } const instance: SearchInstance = await SocketService.post("search"); - console.log(instance) + console.log(instance); dispatch({ type: AIRDCPP_SEARCH_IN_PROGRESS, }); @@ -145,6 +146,11 @@ export const downloadAirDCPPItem = downloadResult: downloadResult, bundleDBImportResult, }); + dispatch({ + type: IMS_COMIC_BOOK_DB_OBJECT_FETCHED, + comicBookDetail: bundleDBImportResult.data, + IMS_inProgress: false, + }); } } catch (error) { throw error; @@ -179,7 +185,7 @@ export const getBundlesForComic = if (!SocketService.isConnected()) { await SocketService.connect("admin", "password", true); } - const bundles = await SocketService.get("queue/bundles/0/500"); + // const bundles = await SocketService.get("queue/bundles/0/50"); const comicObject = await axios({ method: "POST", url: "http://localhost:3000/api/import/getComicBookById", @@ -191,18 +197,14 @@ export const getBundlesForComic = }, }); // get only the bundles applicable for the comic - const filteredBundles = []; - comicObject.data.acquisition.directconnect.map(({ bundleId }) => { - each(bundles, (bundle) => { - if (bundle.id === bundleId) { - filteredBundles.push(bundle); - } - }); - }); - + const filteredBundles = comicObject.data.acquisition.directconnect.map( + async ({ bundleId }) => { + return await SocketService.get(`queue/bundles/${bundleId}`); + }, + ); dispatch({ type: AIRDCPP_BUNDLES_FETCHED, - bundles: filteredBundles, + bundles: await Promise.all(filteredBundles), }); } catch (error) { throw error; diff --git a/src/client/assets/scss/App.scss b/src/client/assets/scss/App.scss index 519b4bd..d9deadb 100644 --- a/src/client/assets/scss/App.scss +++ b/src/client/assets/scss/App.scss @@ -183,6 +183,18 @@ $border-color: red; } } +// Comic Detail +.tabs { + .download-icon-labels { + .downloads-count { + margin: 0 1em 0 0.4em; + border: 1px solid #CCC; + } + } + .download-tab-name { + } +} + .comic-vine-match-drawer { // comic detail drawer .search-criteria-card { @@ -207,6 +219,9 @@ $border-color: red; .slide-pane__header { margin-top: 52px; } +.slide-pane__close { + display: none; +} .search-results-container { margin: 15px 0 0 0; overflow: hidden; diff --git a/src/client/components/AcquisitionPanel.tsx b/src/client/components/AcquisitionPanel.tsx index e87731b..dcc71b4 100644 --- a/src/client/components/AcquisitionPanel.tsx +++ b/src/client/components/AcquisitionPanel.tsx @@ -1,8 +1,13 @@ import React, { useCallback, ReactElement } from "react"; -import { search, downloadAirDCPPItem } from "../actions/airdcpp.actions"; +import { + search, + downloadAirDCPPItem, + getBundlesForComic, +} from "../actions/airdcpp.actions"; import { useDispatch, useSelector } from "react-redux"; import { RootState, SearchInstance } from "threetwo-ui-typings"; -import { isNil, map } from "lodash"; +import ellipsize from "ellipsize"; +import { isEmpty, isNil, map } from "lodash"; interface IAcquisitionPanelProps { comicBookMetadata: any; @@ -47,10 +52,12 @@ export const AcquisitionPanel = ( }; const downloadDCPPResult = useCallback( - (searchInstanceId, resultId, comicBookObjectId) => + (searchInstanceId, resultId, comicBookObjectId) => { dispatch( downloadAirDCPPItem(searchInstanceId, resultId, comicBookObjectId), - ), + ); + dispatch(getBundlesForComic(comicBookObjectId)); + }, [dispatch], ); return ( @@ -104,7 +111,7 @@ export const AcquisitionPanel = ( {/* AirDC++ results */}
- {!isNil(airDCPPSearchResults) && ( + {!isNil(airDCPPSearchResults) && !isEmpty(airDCPPSearchResults) && ( @@ -123,7 +130,7 @@ export const AcquisitionPanel = ( {result.type.id === "directory" ? ( ) : null}{" "} - {result.name} + {ellipsize(result.name, 70)}

diff --git a/src/client/components/ComicDetail.tsx b/src/client/components/ComicDetail.tsx index e3292a1..410d21b 100644 --- a/src/client/components/ComicDetail.tsx +++ b/src/client/components/ComicDetail.tsx @@ -1,4 +1,10 @@ -import React, { useState, useEffect, useCallback, ReactElement } from "react"; +import React, { + useState, + useEffect, + useLayoutEffect, + useCallback, + ReactElement, +} from "react"; import { useParams } from "react-router-dom"; import Card from "./Carda"; import MatchResult from "./MatchResult"; @@ -15,6 +21,7 @@ import { isEmpty, isUndefined, isNil } from "lodash"; import { RootState } from "threetwo-ui-typings"; import { fetchComicVineMatches } from "../actions/fileops.actions"; import { getComicBookDetailById } from "../actions/comicinfo.actions"; +import { getBundlesForComic } from "../actions/airdcpp.actions"; import dayjs from "dayjs"; const prettyBytes = require("pretty-bytes"); @@ -154,9 +161,20 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => { }, { id: 4, - icon: , - name: "Downloads", - content: , + icon: null, + name: + !isNil(comicBookDetailData) && !isEmpty(comicBookDetailData) ? ( + Downloads + ) : ( + "Downloads" + ), + content: !isNil(comicBookDetailData) && !isEmpty(comicBookDetailData) && ( + + ), }, ]; const MetadataTabGroup = () => { @@ -171,7 +189,18 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => { onClick={() => setActive(id)} > - {icon} + {id === 4 && + !isNil(comicBookDetailData) && + !isEmpty(comicBookDetailData) ? ( + + + + {comicBookDetailData.acquisition.directconnect.length} + + + ) : ( + {icon} + )} {name} diff --git a/src/client/components/DownloadsPanel.tsx b/src/client/components/DownloadsPanel.tsx index f0ad53b..dfa4c1d 100644 --- a/src/client/components/DownloadsPanel.tsx +++ b/src/client/components/DownloadsPanel.tsx @@ -1,8 +1,5 @@ import React, { useEffect, ReactElement } from "react"; -import { - getDownloadProgress, - getBundlesForComic, -} from "../actions/airdcpp.actions"; +import { getDownloadProgress } from "../actions/airdcpp.actions"; import { useDispatch, useSelector } from "react-redux"; import { RootState } from "threetwo-ui-typings"; import { isNil, map } from "lodash"; @@ -10,6 +7,7 @@ import prettyBytes from "pretty-bytes"; interface IDownloadsPanelProps { data: any; + comicObjectId: string; } export const DownloadsPanel = ( @@ -18,16 +16,11 @@ export const DownloadsPanel = ( const downloadProgressTick = useSelector( (state: RootState) => state.airdcpp.downloadProgressData, ); - const bundles = useSelector((state: RootState) => state.airdcpp.bundles); const dispatch = useDispatch(); // useEffect(() => { // dispatch(getDownloadProgress(props.data._id)); // }, [dispatch]); - useEffect(() => { - dispatch(getBundlesForComic(props.data._id)); - }, [dispatch]); - const ProgressTick = (props) => (
{JSON.stringify(props.downloadProgressTick)} @@ -71,7 +64,7 @@ export const DownloadsPanel = ( ); }; - return !isNil(bundles) ? : null; + return !isNil(props.data) ? : null; }; export default DownloadsPanel; diff --git a/src/client/components/Navbar.tsx b/src/client/components/Navbar.tsx index 9df6537..fedd65f 100644 --- a/src/client/components/Navbar.tsx +++ b/src/client/components/Navbar.tsx @@ -7,7 +7,7 @@ const Navbar: React.FunctionComponent = (props) => { const socketConnection = useSelector((state: RootState) => state.fileOps); return ( -