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

{allImportJobResults.map((jobResult, id) => { return ( ); })}
Time Started Session Id Imported Failed
{format( new Date(jobResult.earliestTimestamp), "EEEE, hh:mma, do LLLL Y", )} {jobResult.sessionId} {jobResult.completedJobs} {jobResult.failedJobs}
); }; export default Import;