ente/src/services/motionPhotoService.ts

35 lines
1 KiB
TypeScript

import JSZip from 'jszip';
import { fileExtensionWithDot } from 'utils/file';
class MotionPhoto {
image: Uint8Array;
video: Uint8Array;
imageNameTitle: string;
videoNameTitle: string;
}
export const decodeMotionPhoto = async (
zipBlob: Blob,
originalName: string
) => {
const zip = await JSZip.loadAsync(zipBlob, { createFolders: true });
const motionPhoto = new MotionPhoto();
for (const zipFilename in zip.files) {
if (zipFilename.startsWith('image')) {
motionPhoto.imageNameTitle =
originalName + fileExtensionWithDot(zipFilename);
motionPhoto.image = await zip.files[zipFilename].async(
'uint8array'
);
} else if (zipFilename.startsWith('video')) {
motionPhoto.videoNameTitle =
originalName + fileExtensionWithDot(zipFilename);
motionPhoto.video = await zip.files[zipFilename].async(
'uint8array'
);
}
}
return motionPhoto;
};