import React, { ReactElement, useCallback, useEffect } from "react";
import { useSelector, useDispatch } from "react-redux";
import {
fetchComicBookMetadata,
getImportJobResultStatistics,
setQueueControl,
} from "../actions/fileops.actions";
import "react-loader-spinner/dist/loader/css/react-spinner-loader.css";
import { format } from "date-fns";
import Loader from "react-loader-spinner";
import { isEmpty, isNil, isUndefined } from "lodash";
interface IProps {
matches?: unknown;
fetchComicMetadata?: any;
path: string;
covers?: any;
}
/**
* Returns the average of two numbers.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @param x - The first input number
* @param y - The second input number
* @returns The arithmetic mean of `x` and `y`
*
* @beta
*/
export const Import = (props: IProps): ReactElement => {
const dispatch = useDispatch();
const successfulImportJobCount = useSelector(
(state: RootState) => state.fileOps.successfulJobCount,
);
const failedImportJobCount = useSelector(
(state: RootState) => state.fileOps.failedJobCount,
);
const lastQueueJob = useSelector(
(state: RootState) => state.fileOps.lastQueueJob,
);
const libraryQueueImportStatus = useSelector(
(state: RootState) => state.fileOps.LSQueueImportStatus,
);
const allImportJobResults = useSelector(
(state: RootState) => state.fileOps.importJobStatistics,
);
const initiateImport = useCallback(() => {
if (typeof props.path !== "undefined") {
dispatch(fetchComicBookMetadata(props.path));
}
}, [dispatch]);
const toggleQueue = useCallback(
(queueAction: string, queueStatus: string) => {
dispatch(setQueueControl(queueAction, queueStatus));
},
[],
);
useEffect(() => {
dispatch(getImportJobResultStatistics());
}, []);
const renderQueueControls = (status: string): ReactElement | null => {
switch (status) {
case "running":
return (
);
case "paused":
return (
);
case "drained":
return null;
default:
return null;
}
};
return (
Import Comics
Import Comics
will add comics identified from the mapped folder into ThreeTwo's
database.
Metadata from ComicInfo.xml, if present, will also be extracted.
This process could take a while, if you have a lot of comics, or
are importing over a network connection.
{libraryQueueImportStatus !== "drained" &&
!isUndefined(libraryQueueImportStatus) && (
<>
| Completed Jobs |
Failed Jobs |
Queue Controls |
Queue Status |
|
{successfulImportJobCount > 0 && (
{successfulImportJobCount}
)}
|
{failedImportJobCount > 0 && (
{failedImportJobCount}
)}
|
{renderQueueControls(libraryQueueImportStatus)} |
{libraryQueueImportStatus !== undefined ? (
{libraryQueueImportStatus}
) : null}
|
Imported{" "}
{lastQueueJob}
>
)}
{/* Past imports */}
Past Imports
| Time Started |
Session Id |
Imported |
Failed |
{allImportJobResults.map((jobResult, id) => {
return (
|
{format(
new Date(jobResult.earliestTimestamp),
"EEEE, hh:mma, do LLLL Y",
)}
|
{jobResult.sessionId}
|
{jobResult.completedJobs}
|
{jobResult.failedJobs}
|
);
})}
);
};
export default Import;