blob: cf20fa40f3a4af20bcc87b841ba9fb76e8a6b315 [file] [log] [blame]
/*
* Copyright 2020, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import JSZip from 'jszip';
export default {
name: 'SaveAsZip',
methods: {
saveAs(blob, filename) {
const a = document.createElement('a');
a.style = 'display: none';
document.body.appendChild(a);
const url = window.URL.createObjectURL(blob);
a.href = url;
a.download = filename;
a.click();
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
},
/**
* Returns the file name, if the file has an extension use its default,
* otherwise use ".mp4" for screen recording (name from proxy script) and
* ".winscope" for traces
* @param {*} fileName
*/
getFileName(fileName) {
var re = /(?:\.([^.]+))?$/;
var extension = re.exec(fileName)[1];
if (!extension) {
extension = "";
}
switch (extension) {
case "": {
if (fileName == "Screen recording") {
return fileName + ".mp4"
}
return fileName + ".winscope"
}
default: return fileName
}
},
async downloadAsZip(traces) {
const zip = new JSZip();
this.buttonClicked("Download All")
for (const trace of traces) {
const traceFolder = zip.folder(trace.type);
for (const file of trace.files) {
var fileName = this.getFileName(file.filename);
const blob = await fetch(file.blobUrl).then((r) => r.blob());
traceFolder.file(fileName, blob);
}
}
const zipFile = await zip.generateAsync({type: 'blob'});
this.saveAs(zipFile, 'winscope.zip');
},
},
};