IchHabRecht / filefill

Find and fetch missing local files from different remotes
GNU General Public License v2.0
63 stars 34 forks source link

Placeholder for large images #71

Open lochmueller opened 1 year ago

lochmueller commented 1 year ago

Hey everyone,

currently, the placeholder service just stores the result of the URI in the target file without checking for errors. If there are errors/problems in the placeholder service the result is JSON and there is an error message. I got this error, because I use filefill for large images and the images are to large for https://via.placeholder.com/ as result, there is a "jpg" file in the filesystem with a JSON error in it. Bad for further processing like EXT:webp and regular content elements.

As result I add this code after this line https://github.com/IchHabRecht/filefill/blob/main/Classes/Resource/Handler/PlaceholderResource.php#L82 to reduce the file size, if the file size is the problem. I don't check the max file dimension or different errors of the service. This code just handle my usecase.

            if ($response->getHeaderLine('Content-Type') === 'application/json') {
                $result = \json_decode($content);
                if (isset($result->error) && $result->error === 'Requested image size is too large') {

                    $fileData = $fileObject->getProperties();
                    $fileData['identifier'] = $fileObject->getIdentifier();
                    $fileData['name'] = $fileObject->getName();

                    // half size
                    $fileData['width'] = floor($fileData['width'] / 2);
                    $fileData['height'] = floor($fileData['height'] / 2);

                    $fileObjectResized = new File($fileData, $fileObject->getStorage());

                    return $this->getFile($fileData['identifier'], $filePath, $fileObjectResized);
                }
            }

Perhaps PlaceholderResource.php should handle this more generall (at least throw an Exception if the result is json, so the getFile method return false).

Regards, Tim

IchHabRecht commented 1 year ago

Hi @lochmueller,

Are you talking about the file size or the file dimensions? Can you give me some example that will return an error?

lochmueller commented 1 year ago

Hey @IchHabRecht sorry... please replace all "size" with "dimension" :-) Here is an example: https://via.placeholder.com/3840x2160.jpg Regards, Tim

IchHabRecht commented 1 year ago

Hi @lochmueller

Thanks for your feedback. I will work on this issue as soon as I find some spare time.