Improve mime type handling using magic byes

Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
2023-07-30 16:07:06 +03:00
parent 5a35191d12
commit f635c9d961
12 changed files with 371 additions and 91 deletions

View File

@@ -17,7 +17,8 @@ import {
allowedMimeTypes,
deleteMeme,
favoriteMeme,
getMemeType,
getMemeTypeFromMimeType,
guessMimeType,
noOp,
validateMemeTitle,
} from '../../utilities';
@@ -47,6 +48,7 @@ const EditMeme = ({
const [hasChanges, setHasChanges] = useState(false);
const [memeError, setMemeError] = useState<Error>();
const [memeTitle, setMemeTitle] = useState(validateMemeTitle(meme.title));
const [memeTags, setMemeTags] = useState(
new Map<string, Tag>(meme.tags.map(tag => [tag.id.toHexString(), tag])),
@@ -104,10 +106,16 @@ const EditMeme = ({
const file = await pickSingle({ type: allowedMimeTypes }).catch(noOp);
if (!file) return;
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const mimeType = file.type!;
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const memeType = getMemeType(mimeType)!;
const mimeType = await guessMimeType(file.uri, file.type);
if (!mimeType) {
setMemeError(
new Error('Could not determine MIME type or file is not supported.'),
);
return;
}
const memeType = getMemeTypeFromMimeType(mimeType);
if (!memeType) return;
const fileExtension = extension(mimeType) as string;
if (!fileExtension) return;
@@ -122,7 +130,7 @@ const EditMeme = ({
realm.write(() => {
meme.filename = filename;
meme.type = memeType;
meme.memeType = memeType;
meme.mimeType = mimeType;
meme.size = size;
});