optional conversion of heic if needed for preview
This commit is contained in:
parent
063797df55
commit
4b420b2144
|
@ -285,7 +285,7 @@ const PhotoFrame = ({
|
||||||
if (galleryContext.files.has(item.id)) {
|
if (galleryContext.files.has(item.id)) {
|
||||||
url = galleryContext.files.get(item.id);
|
url = galleryContext.files.get(item.id);
|
||||||
} else {
|
} else {
|
||||||
url = await DownloadManager.getFile(item);
|
url = await DownloadManager.getFile(item, true);
|
||||||
galleryContext.files.set(item.id, url);
|
galleryContext.files.set(item.id, url);
|
||||||
}
|
}
|
||||||
updateSrcUrl(item.dataIndex, url);
|
updateSrcUrl(item.dataIndex, url);
|
||||||
|
|
|
@ -7,7 +7,7 @@ import { File } from './fileService';
|
||||||
import { logError } from 'utils/sentry';
|
import { logError } from 'utils/sentry';
|
||||||
|
|
||||||
class DownloadManager {
|
class DownloadManager {
|
||||||
private fileDownloads = new Map<number, string>();
|
private fileDownloads = new Map<string, string>();
|
||||||
|
|
||||||
private thumbnailDownloads = new Map<number, string>();
|
private thumbnailDownloads = new Map<number, string>();
|
||||||
|
|
||||||
|
@ -55,14 +55,19 @@ class DownloadManager {
|
||||||
return URL.createObjectURL(new Blob([decrypted]));
|
return URL.createObjectURL(new Blob([decrypted]));
|
||||||
}
|
}
|
||||||
|
|
||||||
getFile = async (file: File) => {
|
getFile = async (file: File, forPreview=false) => {
|
||||||
try {
|
try {
|
||||||
if (!this.fileDownloads.get(file.id)) {
|
if (!this.fileDownloads.get(`${file.id}_${forPreview}`)) {
|
||||||
const fileStream = await this.downloadFile(file);
|
const fileStream = await this.downloadFile(file);
|
||||||
const download = URL.createObjectURL(await new Response(fileStream).blob());
|
let fileBlob= await new Response(fileStream).blob();
|
||||||
this.fileDownloads.set(file.id, download);
|
if (forPreview) {
|
||||||
|
if (fileIsHEIC(file.metadata.title)) {
|
||||||
|
fileBlob = await convertHEIC2JPEG(fileBlob);
|
||||||
}
|
}
|
||||||
return await this.fileDownloads.get(file.id);
|
}
|
||||||
|
this.fileDownloads.set(`${file.id}_${forPreview}`, URL.createObjectURL(fileBlob));
|
||||||
|
}
|
||||||
|
return this.fileDownloads.get(`${file.id}_${forPreview}`);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logError(e, 'Failed to get File');
|
logError(e, 'Failed to get File');
|
||||||
}
|
}
|
||||||
|
@ -86,16 +91,10 @@ class DownloadManager {
|
||||||
await worker.fromB64(file.file.decryptionHeader),
|
await worker.fromB64(file.file.decryptionHeader),
|
||||||
file.key,
|
file.key,
|
||||||
);
|
);
|
||||||
let decryptedBlob = new Blob([decrypted]);
|
|
||||||
|
|
||||||
if (fileIsHEIC(file.metadata.title)) {
|
|
||||||
decryptedBlob = await convertHEIC2JPEG(decryptedBlob);
|
|
||||||
}
|
|
||||||
return new ReadableStream({
|
return new ReadableStream({
|
||||||
async start(controller: ReadableStreamDefaultController) {
|
async start(controller: ReadableStreamDefaultController) {
|
||||||
controller.enqueue(
|
controller.enqueue(decrypted);
|
||||||
new Uint8Array(await decryptedBlob.arrayBuffer()),
|
|
||||||
);
|
|
||||||
controller.close();
|
controller.close();
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue