Fix failure to upload thumbnail causing image to send as file (#30086)

* Fix failure to upload thumbnail causing image to send as file

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

* Iterate

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>

---------

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
Michael Telatynski 2025-06-05 10:10:23 +01:00 committed by GitHub
parent 311c038fe1
commit ad71e7bdc4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -63,6 +63,7 @@ import { blobIsAnimated } from "./utils/Image.ts";
const PHYS_HIDPI = [0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01]; const PHYS_HIDPI = [0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01];
export class UploadCanceledError extends Error {} export class UploadCanceledError extends Error {}
export class UploadFailedError extends Error {}
interface IMediaConfig { interface IMediaConfig {
"m.upload.size"?: number; "m.upload.size"?: number;
@ -355,12 +356,19 @@ export async function uploadFile(
// Pass the encrypted data as a Blob to the uploader. // Pass the encrypted data as a Blob to the uploader.
const blob = new Blob([encryptResult.data]); const blob = new Blob([encryptResult.data]);
const { content_uri: url } = await matrixClient.uploadContent(blob, { let url: string;
progressHandler, try {
abortController, ({ content_uri: url } = await matrixClient.uploadContent(blob, {
includeFilename: false, progressHandler,
type: "application/octet-stream", abortController,
}); includeFilename: false,
type: "application/octet-stream",
}));
} catch (e) {
if (abortController.signal.aborted) throw new UploadCanceledError();
console.error("Failed to upload file", e);
throw new UploadFailedError();
}
if (abortController.signal.aborted) throw new UploadCanceledError(); if (abortController.signal.aborted) throw new UploadCanceledError();
// If the attachment is encrypted then bundle the URL along with the information // If the attachment is encrypted then bundle the URL along with the information
@ -372,7 +380,14 @@ export async function uploadFile(
} as EncryptedFile, } as EncryptedFile,
}; };
} else { } else {
const { content_uri: url } = await matrixClient.uploadContent(file, { progressHandler, abortController }); let url: string;
try {
({ content_uri: url } = await matrixClient.uploadContent(file, { progressHandler, abortController }));
} catch (e) {
if (abortController.signal.aborted) throw new UploadCanceledError();
console.error("Failed to upload file", e);
throw new UploadFailedError();
}
if (abortController.signal.aborted) throw new UploadCanceledError(); if (abortController.signal.aborted) throw new UploadCanceledError();
// If the attachment isn't encrypted then include the URL directly. // If the attachment isn't encrypted then include the URL directly.
return { url }; return { url };
@ -570,7 +585,7 @@ export default class ContentMessages {
const imageInfo = await infoForImageFile(matrixClient, roomId, file); const imageInfo = await infoForImageFile(matrixClient, roomId, file);
Object.assign(content.info, imageInfo); Object.assign(content.info, imageInfo);
} catch (e) { } catch (e) {
if (e instanceof HTTPError) { if (e instanceof UploadFailedError) {
// re-throw to main upload error handler // re-throw to main upload error handler
throw e; throw e;
} }