From 478e105e480979b90617ecce03a1c3ebd3dae30b Mon Sep 17 00:00:00 2001 From: Rishi Ghan Date: Thu, 7 Oct 2021 12:42:54 -0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=95=B5=F0=9F=8F=BC=E2=80=8D=E2=99=80?= =?UTF-8?q?=EF=B8=8F=20TPB,=20Mini-series,=20GN=20detection=20WIP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/client/components/ComicDetail.tsx | 15 +++++--- src/client/components/LibraryGrid.tsx | 4 +-- src/client/components/RecentlyImported.tsx | 19 ++++++---- .../shared/utils/tradepaperback.utils.ts | 36 ++++++++++++++----- 4 files changed, 53 insertions(+), 21 deletions(-) diff --git a/src/client/components/ComicDetail.tsx b/src/client/components/ComicDetail.tsx index 9fab909..d130372 100644 --- a/src/client/components/ComicDetail.tsx +++ b/src/client/components/ComicDetail.tsx @@ -19,7 +19,7 @@ import { getComicBookDetailById, extractComicArchive, } from "../actions/comicinfo.actions"; -import { detectTradePaperbacks } from "../shared/utils/tradepaperback.utils"; +import { detectIssueTypes } from "../shared/utils/tradepaperback.utils"; import dayjs from "dayjs"; const prettyBytes = require("pretty-bytes"); import { DnD } from "./DnD"; @@ -398,8 +398,8 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => {
{props.data.number}
- {!isEmpty( - detectTradePaperbacks( + {!isUndefined( + detectIssueTypes( comicBookDetailData.sourcedMetadata.comicvine.volumeInformation .description, ), @@ -407,7 +407,14 @@ export const ComicDetail = ({}: ComicDetailProps): ReactElement => {
Detected Type - Trade Paperback + + { + detectIssueTypes( + comicBookDetailData.sourcedMetadata.comicvine + .volumeInformation.description, + ).displayName + } +
) : ( diff --git a/src/client/components/LibraryGrid.tsx b/src/client/components/LibraryGrid.tsx index 7d3b3b5..c832b87 100644 --- a/src/client/components/LibraryGrid.tsx +++ b/src/client/components/LibraryGrid.tsx @@ -13,7 +13,7 @@ import { getComicBooks } from "../actions/fileops.actions"; import { isNil, isEmpty } from "lodash"; import Masonry from "react-masonry-css"; import Card from "./Carda"; -import { detectTradePaperbacks } from "../shared/utils/tradepaperback.utils"; +import { detectIssueTypes } from "../shared/utils/tradepaperback.utils"; import { Link } from "react-router-dom"; interface ILibraryGridProps {} @@ -81,7 +81,7 @@ export const LibraryGrid = (libraryGridProps: ILibraryGridProps) => { )} {!isNil(sourcedMetadata.comicvine) && !isEmpty( - detectTradePaperbacks( + detectIssueTypes( sourcedMetadata.comicvine.volumeInformation.description, ), ) ? ( diff --git a/src/client/components/RecentlyImported.tsx b/src/client/components/RecentlyImported.tsx index 2d3929c..e69dc0f 100644 --- a/src/client/components/RecentlyImported.tsx +++ b/src/client/components/RecentlyImported.tsx @@ -6,8 +6,8 @@ import { removeLeadingPeriod, escapePoundSymbol, } from "../shared/utils/formatting.utils"; -import { isEmpty, isNil, map } from "lodash"; -import { detectTradePaperbacks } from "../shared/utils/tradepaperback.utils"; +import { isNil, isUndefined, map } from "lodash"; +import { detectIssueTypes } from "../shared/utils/tradepaperback.utils"; import Masonry from "react-masonry-css"; type RecentlyImportedProps = { @@ -71,13 +71,20 @@ export const RecentlyImported = ({ )} - {!isNil(sourcedMetadata.comicvine) && - !isEmpty( - detectTradePaperbacks( + {!isUndefined(sourcedMetadata.comicvine) && + !isNil( + detectIssueTypes( sourcedMetadata.comicvine.volumeInformation.description, ), ) ? ( - TPB + + { + detectIssueTypes( + sourcedMetadata.comicvine.volumeInformation + .description, + ).displayName + } + ) : null}
diff --git a/src/client/shared/utils/tradepaperback.utils.ts b/src/client/shared/utils/tradepaperback.utils.ts index 0a29f22..d2331a4 100644 --- a/src/client/shared/utils/tradepaperback.utils.ts +++ b/src/client/shared/utils/tradepaperback.utils.ts @@ -1,13 +1,29 @@ -import { compact } from "lodash"; +import { flatten, compact, map, isEmpty } from "lodash"; -export const detectTradePaperbacks = (deck): any => { - const paperback = [ - /((trade)?\s?(paperback)|(tpb))/gim, // https://regex101.com/r/FhuowT/1 - /(hard\s?cover)\s?(collect((ion)|(ed)|(ing)))/gim, //https://regex101.com/r/eFJVRM/1 +export const detectIssueTypes = (deck: string): any => { + const issueTypeMatchers = [ + { + regex: [ + /((trade)?\s?(paperback)|(tpb))/gim, // https://regex101.com/r/FhuowT/1 + /(hard\s?cover)\s?(collect((ion)|(ed)|(ing)))/gim, //https://regex101.com/r/eFJVRM/1 + ], + displayName: "Trade Paperback", + }, + { regex: [/mini\Wseries/gim], displayName: "Mini-Series" }, ]; - const miniSeries = [/mini\Wseries/gim]; - const matches = paperback + const matches = map(issueTypeMatchers, (matcher) => { + return getIssueTypeDisplayName(deck, matcher.regex, matcher.displayName); + }); + return compact(matches)[0]; +}; + +const getIssueTypeDisplayName = ( + deck: string, + regexPattern: RegExp[], + displayName: string, +) => { + const matches = [...regexPattern] .map((regex) => { return deck.match(regex); }) @@ -16,6 +32,8 @@ export const detectTradePaperbacks = (deck): any => { return item; } }); - // console.log(compact(matches)); - return compact(matches); + const results = flatten(compact(matches)); + if (!isEmpty(results)) { + return { displayName, results }; + } };