⬇️ Added bundles to downloads tab for corresponding comic book object
This commit is contained in:
@@ -10,8 +10,9 @@ import {
|
|||||||
AIRDCPP_HUB_SEARCHES_SENT,
|
AIRDCPP_HUB_SEARCHES_SENT,
|
||||||
AIRDCPP_RESULT_DOWNLOAD_INITIATED,
|
AIRDCPP_RESULT_DOWNLOAD_INITIATED,
|
||||||
AIRDCPP_DOWNLOAD_PROGRESS_TICK,
|
AIRDCPP_DOWNLOAD_PROGRESS_TICK,
|
||||||
|
AIRDCPP_BUNDLES_FETCHED,
|
||||||
} from "../constants/action-types";
|
} from "../constants/action-types";
|
||||||
import { isNil } from "lodash";
|
import { each, isNil } from "lodash";
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
|
|
||||||
interface SearchData {
|
interface SearchData {
|
||||||
@@ -51,7 +52,6 @@ export const search = (data: SearchData) => async (dispatch) => {
|
|||||||
type: AIRDCPP_SEARCH_RESULTS_RECEIVED,
|
type: AIRDCPP_SEARCH_RESULTS_RECEIVED,
|
||||||
results,
|
results,
|
||||||
});
|
});
|
||||||
SocketService.disconnect();
|
|
||||||
return results;
|
return results;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -59,12 +59,25 @@ export const downloadAirDCPPItem =
|
|||||||
(instanceId: string, resultId: string, comicObjectId: string): void =>
|
(instanceId: string, resultId: string, comicObjectId: string): void =>
|
||||||
async (dispatch) => {
|
async (dispatch) => {
|
||||||
try {
|
try {
|
||||||
|
if (!SocketService.isConnected()) {
|
||||||
|
await SocketService.connect("admin", "password", true);
|
||||||
|
}
|
||||||
let bundleDBImportResult = {};
|
let bundleDBImportResult = {};
|
||||||
await SocketService.connect("admin", "password", true);
|
|
||||||
const downloadResult = await SocketService.post(
|
const downloadResult = await SocketService.post(
|
||||||
`search/${instanceId}/results/${resultId}/download`,
|
`search/${instanceId}/results/${resultId}/download`,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let bundleId;
|
||||||
|
let directoryIds;
|
||||||
|
if (!isNil(downloadResult.bundle_info)) {
|
||||||
|
bundleId = downloadResult.bundle_info.id;
|
||||||
|
}
|
||||||
|
if (!isNil(downloadResult.directory_download_ids)) {
|
||||||
|
directoryIds = downloadResult.directory_download_ids.map(
|
||||||
|
(item) => item.id,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (!isNil(downloadResult)) {
|
if (!isNil(downloadResult)) {
|
||||||
bundleDBImportResult = await axios({
|
bundleDBImportResult = await axios({
|
||||||
method: "POST",
|
method: "POST",
|
||||||
@@ -75,8 +88,9 @@ export const downloadAirDCPPItem =
|
|||||||
data: {
|
data: {
|
||||||
resultId,
|
resultId,
|
||||||
comicObjectId,
|
comicObjectId,
|
||||||
downloadResult,
|
|
||||||
searchInstanceId: instanceId,
|
searchInstanceId: instanceId,
|
||||||
|
bundleId,
|
||||||
|
directoryIds,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
dispatch({
|
dispatch({
|
||||||
@@ -85,18 +99,18 @@ export const downloadAirDCPPItem =
|
|||||||
bundleDBImportResult,
|
bundleDBImportResult,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
SocketService.disconnect();
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getDownloadProgress =
|
export const getDownloadProgress =
|
||||||
(fileId: string, directoryId?: string): void =>
|
(comicObjectId: string): void =>
|
||||||
async (dispatch) => {
|
async (dispatch) => {
|
||||||
try {
|
try {
|
||||||
await SocketService.connect("admin", "password", true);
|
if (!SocketService.isConnected()) {
|
||||||
|
await SocketService.connect("admin", "password", true);
|
||||||
|
}
|
||||||
SocketService.addListener(
|
SocketService.addListener(
|
||||||
`queue`,
|
`queue`,
|
||||||
"queue_bundle_tick",
|
"queue_bundle_tick",
|
||||||
@@ -111,3 +125,39 @@ export const getDownloadProgress =
|
|||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getBundlesForComic =
|
||||||
|
(comicObjectId: string) => async (dispatch) => {
|
||||||
|
try {
|
||||||
|
if (!SocketService.isConnected()) {
|
||||||
|
await SocketService.connect("admin", "password", true);
|
||||||
|
}
|
||||||
|
const bundles = await SocketService.get("queue/bundles/0/500");
|
||||||
|
const comicObject = await axios({
|
||||||
|
method: "POST",
|
||||||
|
url: "http://localhost:3000/api/import/getComicBookById",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json; charset=utf-8",
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
id: `${comicObjectId}`,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
// 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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
dispatch({
|
||||||
|
type: AIRDCPP_BUNDLES_FETCHED,
|
||||||
|
bundles: filteredBundles,
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|||||||
@@ -52,9 +52,6 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => {
|
|||||||
(state: RootState) => state.comicInfo.comicBookDetail,
|
(state: RootState) => state.comicInfo.comicBookDetail,
|
||||||
);
|
);
|
||||||
|
|
||||||
const bundleMetadata = useSelector(
|
|
||||||
(state: RootState) => state.comicInfo.downloadResult,
|
|
||||||
);
|
|
||||||
const { comicObjectId } = useParams<{ comicObjectId: string }>();
|
const { comicObjectId } = useParams<{ comicObjectId: string }>();
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const toggleActionDropdown = () =>
|
const toggleActionDropdown = () =>
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
import React, { useEffect, ReactElement } from "react";
|
import React, { useEffect, ReactElement } from "react";
|
||||||
import { getDownloadProgress } from "../actions/airdcpp.actions";
|
import {
|
||||||
|
getDownloadProgress,
|
||||||
|
getBundlesForComic,
|
||||||
|
} from "../actions/airdcpp.actions";
|
||||||
import { useDispatch, useSelector } from "react-redux";
|
import { useDispatch, useSelector } from "react-redux";
|
||||||
import { RootState } from "threetwo-ui-typings";
|
import { RootState } from "threetwo-ui-typings";
|
||||||
import { isNil } from "lodash";
|
import { isNil, map } from "lodash";
|
||||||
import prettyBytes from "pretty-bytes";
|
import prettyBytes from "pretty-bytes";
|
||||||
|
|
||||||
interface IDownloadsPanelProps {
|
interface IDownloadsPanelProps {
|
||||||
@@ -15,37 +18,60 @@ export const DownloadsPanel = (
|
|||||||
const downloadProgressTick = useSelector(
|
const downloadProgressTick = useSelector(
|
||||||
(state: RootState) => state.airdcpp.downloadProgressData,
|
(state: RootState) => state.airdcpp.downloadProgressData,
|
||||||
);
|
);
|
||||||
|
const bundles = useSelector((state: RootState) => state.airdcpp.bundles);
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
// useEffect(() => {
|
||||||
|
// dispatch(getDownloadProgress(props.data._id));
|
||||||
|
// }, [dispatch]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
dispatch(getDownloadProgress("12312"));
|
dispatch(getBundlesForComic(props.data._id));
|
||||||
}, [dispatch]);
|
}, [dispatch]);
|
||||||
return !isNil(downloadProgressTick) ? (
|
|
||||||
|
const ProgressTick = (props) => (
|
||||||
<div className="column is-one-quarter">
|
<div className="column is-one-quarter">
|
||||||
{JSON.stringify(downloadProgressTick)}
|
{JSON.stringify(props.downloadProgressTick)}
|
||||||
<progress
|
<progress
|
||||||
className="progress is-small is-success"
|
className="progress is-small is-success"
|
||||||
value={downloadProgressTick.downloaded_bytes}
|
value={props.downloaded_bytes}
|
||||||
max={downloadProgressTick.size}
|
max={props.size}
|
||||||
>
|
>
|
||||||
{(parseInt(downloadProgressTick.downloaded_bytes) /
|
{(parseInt(props.downloaded_bytes) / parseInt(props.size)) * 100}%
|
||||||
parseInt(downloadProgressTick.size)) *
|
|
||||||
100}
|
|
||||||
%
|
|
||||||
</progress>
|
</progress>
|
||||||
<dl>
|
<dl>
|
||||||
<dt>{downloadProgressTick.name}</dt>
|
<dt>{props.name}</dt>
|
||||||
<dd>
|
<dd>
|
||||||
{prettyBytes(downloadProgressTick.downloaded_bytes)} of
|
{prettyBytes(props.downloaded_bytes)} of
|
||||||
{prettyBytes(downloadProgressTick.size)}
|
{prettyBytes(props.size)}
|
||||||
</dd>
|
</dd>
|
||||||
<dd>
|
<dd>
|
||||||
{prettyBytes(downloadProgressTick.speed)} per second. Time left:
|
{prettyBytes(props.speed)} per second. Time left:
|
||||||
{parseInt(downloadProgressTick.seconds_left) / 60}
|
{parseInt(props.seconds_left) / 60}
|
||||||
</dd>
|
</dd>
|
||||||
<dd>{downloadProgressTick.target}</dd>
|
<dd>{props.target}</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
) : null;
|
);
|
||||||
|
|
||||||
|
const Bundles = (props) => {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<dl>
|
||||||
|
{!isNil(props.data) &&
|
||||||
|
props.data &&
|
||||||
|
map(props.data, (bundle) => (
|
||||||
|
<>
|
||||||
|
<dt>{bundle.name}</dt>
|
||||||
|
<dd>{bundle.target}</dd>
|
||||||
|
<dd>{bundle.size}</dd>
|
||||||
|
</>
|
||||||
|
))}
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
return !isNil(bundles) ? <Bundles data={bundles} /> : null;
|
||||||
};
|
};
|
||||||
|
|
||||||
export default DownloadsPanel;
|
export default DownloadsPanel;
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
export const CV_API_CALL_IN_PROGRESS = "CV_SEARCH_IN_PROGRESS";
|
export const CV_API_CALL_IN_PROGRESS = "CV_SEARCH_IN_PROGRESS";
|
||||||
export const CV_SEARCH_FAILURE = "CV_SEARCH_FAILURE";
|
export const CV_SEARCH_FAILURE = "CV_SEARCH_FAILURE";
|
||||||
export const CV_SEARCH_SUCCESS = "CV_SEARCH_SUCCESS";
|
export const CV_SEARCH_SUCCESS = "CV_SEARCH_SUCCESS";
|
||||||
@@ -39,4 +38,5 @@ export const AIRDCPP_SEARCH_RESULTS_RECEIVED =
|
|||||||
export const AIRDCPP_HUB_SEARCHES_SENT = "AIRDCPP_HUB_SEARCHES_SENT";
|
export const AIRDCPP_HUB_SEARCHES_SENT = "AIRDCPP_HUB_SEARCHES_SENT";
|
||||||
export const AIRDCPP_RESULT_DOWNLOAD_INITIATED =
|
export const AIRDCPP_RESULT_DOWNLOAD_INITIATED =
|
||||||
"AIRDCPP_RESULT_DOWNLOAD_INITIATED";
|
"AIRDCPP_RESULT_DOWNLOAD_INITIATED";
|
||||||
|
export const AIRDCPP_BUNDLES_FETCHED = "AIRDCPP_BUNDLES_FETCHED";
|
||||||
export const AIRDCPP_DOWNLOAD_PROGRESS_TICK = "AIRDCPP_DOWNLOAD_PROGRESS_TICK";
|
export const AIRDCPP_DOWNLOAD_PROGRESS_TICK = "AIRDCPP_DOWNLOAD_PROGRESS_TICK";
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import {
|
|||||||
AIRDCPP_HUB_SEARCHES_SENT,
|
AIRDCPP_HUB_SEARCHES_SENT,
|
||||||
AIRDCPP_RESULT_DOWNLOAD_INITIATED,
|
AIRDCPP_RESULT_DOWNLOAD_INITIATED,
|
||||||
AIRDCPP_DOWNLOAD_PROGRESS_TICK,
|
AIRDCPP_DOWNLOAD_PROGRESS_TICK,
|
||||||
|
AIRDCPP_BUNDLES_FETCHED,
|
||||||
} from "../constants/action-types";
|
} from "../constants/action-types";
|
||||||
import { LOCATION_CHANGE } from "connected-react-router";
|
import { LOCATION_CHANGE } from "connected-react-router";
|
||||||
|
|
||||||
@@ -50,6 +51,12 @@ function airdcppReducer(state = initialState, action) {
|
|||||||
...state,
|
...state,
|
||||||
downloadProgressData: action.downloadProgressData,
|
downloadProgressData: action.downloadProgressData,
|
||||||
};
|
};
|
||||||
|
case AIRDCPP_BUNDLES_FETCHED:
|
||||||
|
console.log(action)
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
bundles: action.bundles,
|
||||||
|
};
|
||||||
case LOCATION_CHANGE:
|
case LOCATION_CHANGE:
|
||||||
return {
|
return {
|
||||||
initialState,
|
initialState,
|
||||||
|
|||||||
Reference in New Issue
Block a user