Link to both new and old manifests in item support

This commit is contained in:
Emi Matchu 2021-03-11 08:52:46 -08:00
parent 78354a35d0
commit 15d4a27657

View file

@ -121,6 +121,14 @@ function ItemLayerSupportModal({
} }
); );
// TODO: Would be nicer to just learn the correct URL from the server, but we
// don't happen to be saving it, and it would be extra stuff to put on
// the GraphQL request for non-Support users. We could also just try
// loading them, but, ehhh…
const [newManifestUrl, oldManifestUrl] = convertSwfUrlToPossibleManifestUrls(
itemLayer.swfUrl
);
return ( return (
<Modal size="xl" isOpen={isOpen} onClose={onClose}> <Modal size="xl" isOpen={isOpen} onClose={onClose}>
<ModalOverlay> <ModalOverlay>
@ -146,11 +154,22 @@ function ItemLayerSupportModal({
as="a" as="a"
size="xs" size="xs"
target="_blank" target="_blank"
href={convertSwfUrlToManifestUrl(itemLayer.swfUrl)} href={newManifestUrl}
colorScheme="teal" colorScheme="teal"
> >
Manifest <ExternalLinkIcon ml="1" /> Manifest (new) <ExternalLinkIcon ml="1" />
</Button> </Button>
<Button
as="a"
size="xs"
target="_blank"
href={oldManifestUrl}
colorScheme="teal"
>
Manifest (old) <ExternalLinkIcon ml="1" />
</Button>
</HStack>
<HStack spacing="2" marginTop="1">
{itemLayer.canvasMovieLibraryUrl ? ( {itemLayer.canvasMovieLibraryUrl ? (
<Button <Button
as="a" as="a"
@ -211,7 +230,7 @@ function ItemLayerSupportModal({
colorScheme="gray" colorScheme="gray"
onClick={() => setUploadModalIsOpen(true)} onClick={() => setUploadModalIsOpen(true)}
> >
Upload <ChevronRightIcon /> Upload PNG <ChevronRightIcon />
</Button> </Button>
<ItemLayerSupportUploadModal <ItemLayerSupportUploadModal
item={item} item={item}
@ -507,9 +526,9 @@ function ItemLayerSupportModalRemoveButton({
); );
} }
const SWF_URL_PATTERN = /^http:\/\/images\.neopets\.com\/cp\/(.+?)\/swf\/(.+?)_[a-z0-9]+\.swf$/; const SWF_URL_PATTERN = /^http:\/\/images\.neopets\.com\/cp\/(bio|items)\/swf\/(.+?)_([a-z0-9]+)\.swf$/;
function convertSwfUrlToManifestUrl(swfUrl) { function convertSwfUrlToPossibleManifestUrls(swfUrl) {
const match = swfUrl.match(SWF_URL_PATTERN); const match = swfUrl.match(SWF_URL_PATTERN);
if (!match) { if (!match) {
throw new Error(`unexpected SWF URL format: ${JSON.stringify(swfUrl)}`); throw new Error(`unexpected SWF URL format: ${JSON.stringify(swfUrl)}`);
@ -517,8 +536,14 @@ function convertSwfUrlToManifestUrl(swfUrl) {
const type = match[1]; const type = match[1];
const folders = match[2]; const folders = match[2];
const hash = match[3];
return `http://images.neopets.com/cp/${type}/data/${folders}/manifest.json`; // TODO: There are a few potential manifest URLs in play! Long-term, we
// should get this from modeling data. But these are some good guesses!
return [
`http://images.neopets.com/cp/${type}/data/${folders}/manifest.json`,
`http://images.neopets.com/cp/${type}/data/${folders}_${hash}/manifest.json`,
];
} }
export default ItemLayerSupportModal; export default ItemLayerSupportModal;