import { filter, isEmpty, isUndefined, min, minBy } from "lodash"; import { LIBRARY_SERVICE_HOST } from "../../constants/endpoints"; import { escapePoundSymbol } from "./formatting.utils"; export const determineCoverFile = (data) => { /* For a payload like this: const foo = { rawFileDetails: {}, // #1 comicInfo: {}, comicvine: {}, // #2 locg: {}, // #3 }; */ const coverFile = { rawFile: { objectReference: "rawFileDetails", priority: 1, url: "", issueName: "", publisher: "", }, comicvine: { objectReference: "comicvine", priority: 2, url: "", issueName: "", publisher: "", }, locg: { objectReference: "locg", priority: 3, url: "", issueName: "", publisher: "", }, }; if ( !isUndefined(data.comicvine) && !isUndefined(data.comicvine.volumeInformation) ) { coverFile.comicvine.url = data.comicvine.image.small_url; coverFile.comicvine.issueName = data.comicvine.name; coverFile.comicvine.publisher = data.comicvine.volumeInformation.publisher; } if (!isEmpty(data.rawFileDetails.cover)) { const encodedFilePath = encodeURI( `${LIBRARY_SERVICE_HOST}/${data.rawFileDetails.cover.filePath}`, ); coverFile.rawFile.url = escapePoundSymbol(encodedFilePath); coverFile.rawFile.issueName = data.rawFileDetails.name; } if (!isUndefined(data.locg)) { coverFile.locg.url = data.locg.cover; coverFile.locg.issueName = data.locg.name; coverFile.locg.publisher = data.locg.publisher; } const result = filter(coverFile, (item) => item.url !== ""); if (result.length > 1) { const highestPriorityCoverFile = minBy(result, (item) => item.priority); if (!isUndefined(highestPriorityCoverFile)) { return highestPriorityCoverFile; } } else { return result[0]; } }; export const determineExternalMetadata = ( metadataSource: string, source: any ) => { switch (metadataSource) { case "comicvine": return { coverURL: source.comicvine.image.small_url, issue: source.comicvine.name, icon: "cvlogo.svg", }; case "locg": return { coverURL: source.locg.cover, issue: source.locg.name, icon: "locglogo.svg", }; case undefined: return {}; default: break; } };