2021-08-11 09:46:57 +00:00
|
|
|
import downloadManager from "./downloadManager"
|
|
|
|
import { File } from './fileService';
|
|
|
|
import JSZip from 'jszip';
|
2021-08-11 10:23:30 +00:00
|
|
|
import { fileExtensionWithDot, fileNameWithoutExtension } from "utils/file";
|
2021-08-11 09:46:57 +00:00
|
|
|
|
|
|
|
class MotionPhoto {
|
|
|
|
imageBlob: Promise<Uint8Array>
|
|
|
|
videoBlob: Promise<Uint8Array>
|
2021-08-11 10:23:30 +00:00
|
|
|
title: String
|
|
|
|
// name of the file which contains image
|
|
|
|
_zipImageName: String
|
|
|
|
// name of the file which contains video
|
|
|
|
_zipVideoName: String
|
|
|
|
|
|
|
|
imageName() {
|
|
|
|
return fileNameWithoutExtension(this.title) + fileExtensionWithDot(this._zipImageName);
|
|
|
|
}
|
|
|
|
|
|
|
|
videoName() {
|
|
|
|
return fileNameWithoutExtension(this.title) + fileExtensionWithDot(this._zipVideoName);
|
|
|
|
}
|
|
|
|
|
2021-08-11 09:46:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export const downloadAndDecodeMotionPhoto = async (file: File) => {
|
|
|
|
const fileStream = await downloadManager.downloadFile(file);
|
|
|
|
let zipBlob = await new Response(fileStream).blob();
|
|
|
|
return JSZip.loadAsync(zipBlob, { createFolders: true })
|
|
|
|
.then(function (zip) {
|
|
|
|
let instnace = new MotionPhoto();
|
2021-08-11 10:23:30 +00:00
|
|
|
instnace.title = file.metadata.title
|
2021-08-11 09:46:57 +00:00
|
|
|
Object.keys(zip.files).forEach(function (filename) {
|
|
|
|
if (filename.startsWith("image")) {
|
2021-08-11 10:23:30 +00:00
|
|
|
instnace._zipImageName = filename
|
2021-08-11 09:46:57 +00:00
|
|
|
instnace.imageBlob = zip.files[filename].async('uint8array');
|
|
|
|
} else if (filename.startsWith("video")) {
|
2021-08-11 10:23:30 +00:00
|
|
|
instnace._zipVideoName = filename
|
2021-08-11 09:46:57 +00:00
|
|
|
instnace.videoBlob = zip.files[filename].async('uint8array');
|
|
|
|
}
|
|
|
|
})
|
|
|
|
return instnace;
|
|
|
|
});
|
2021-08-11 10:42:42 +00:00
|
|
|
}
|