implement backup export
This commit is contained in:
Vendored
+12
-2
@@ -1814,6 +1814,14 @@
|
|||||||
this.transferChannel.value = transferData.channel;
|
this.transferChannel.value = transferData.channel;
|
||||||
this.transferKey.value = transferData.key;
|
this.transferKey.value = transferData.key;
|
||||||
};
|
};
|
||||||
|
this.downloadFile = async () => {
|
||||||
|
const date = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
|
||||||
|
const backup = await this.coreViewModel.fileTransferModel.generateBackup(this.selectedPaths.value.values(), this.exportKey.value);
|
||||||
|
const anchor = document.createElement("a");
|
||||||
|
anchor.href = window.URL.createObjectURL(backup);
|
||||||
|
anchor.download = `comms-${date}.bak`;
|
||||||
|
anchor.click();
|
||||||
|
};
|
||||||
// view
|
// view
|
||||||
this.showDirectionSelectionModal = () => {
|
this.showDirectionSelectionModal = () => {
|
||||||
this.coreViewModel.context = this;
|
this.coreViewModel.context = this;
|
||||||
@@ -7024,7 +7032,7 @@
|
|||||||
"button",
|
"button",
|
||||||
{
|
{
|
||||||
class: "primary flex",
|
class: "primary flex",
|
||||||
"on:click": fileTransferViewModel2,
|
"on:click": fileTransferViewModel2.downloadFile,
|
||||||
"toggle:disabled": fileTransferViewModel2.cannotExport
|
"toggle:disabled": fileTransferViewModel2.cannotExport
|
||||||
},
|
},
|
||||||
coreViewModel2.translations.dataTransferModal.downloadFileButton,
|
coreViewModel2.translations.dataTransferModal.downloadFileButton,
|
||||||
@@ -7399,7 +7407,9 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
const rawBackup = stringify(files);
|
const rawBackup = stringify(files);
|
||||||
return await encryptString(rawBackup, passphrase);
|
const encrypted = await encryptString(rawBackup, passphrase);
|
||||||
|
const blob = new Blob([encrypted], { type: "text/plain" });
|
||||||
|
return blob;
|
||||||
};
|
};
|
||||||
this.prepareFileForSending = (filePath) => {
|
this.prepareFileForSending = (filePath) => {
|
||||||
if (this.transferData == void 0) return;
|
if (this.transferData == void 0) return;
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ export default class FileTransferModel {
|
|||||||
readonly generateBackup = async (
|
readonly generateBackup = async (
|
||||||
directoryPaths: IteratorObject<string[]>,
|
directoryPaths: IteratorObject<string[]>,
|
||||||
passphrase: string,
|
passphrase: string,
|
||||||
): Promise<string> => {
|
): Promise<Blob> => {
|
||||||
const files: string[] = [];
|
const files: string[] = [];
|
||||||
for (const directoryPath of directoryPaths) {
|
for (const directoryPath of directoryPaths) {
|
||||||
this.storageModel.recurse(directoryPath, (filePath: string[]) => {
|
this.storageModel.recurse(directoryPath, (filePath: string[]) => {
|
||||||
@@ -149,7 +149,9 @@ export default class FileTransferModel {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
const rawBackup = stringify(files);
|
const rawBackup = stringify(files);
|
||||||
return await encryptString(rawBackup, passphrase);
|
const encrypted = await encryptString(rawBackup, passphrase);
|
||||||
|
const blob = new Blob([encrypted], {type: "text/plain"});
|
||||||
|
return blob;
|
||||||
};
|
};
|
||||||
|
|
||||||
readonly prepareFileForSending = (filePath: string[]): string => {
|
readonly prepareFileForSending = (filePath: string[]): string => {
|
||||||
|
|||||||
@@ -750,7 +750,7 @@ function ExportModal(
|
|||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
class="primary flex"
|
class="primary flex"
|
||||||
on:click={fileTransferViewModel}
|
on:click={fileTransferViewModel.downloadFile}
|
||||||
toggle:disabled={
|
toggle:disabled={
|
||||||
fileTransferViewModel.cannotExport
|
fileTransferViewModel.cannotExport
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,6 +120,16 @@ export default class FileTransferViewModel extends Context {
|
|||||||
this.transferKey.value = transferData.key;
|
this.transferKey.value = transferData.key;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
downloadFile = async (): Promise<void> => {
|
||||||
|
const date = new Date().toISOString().split("T")[0];
|
||||||
|
|
||||||
|
const backup: Blob = await this.coreViewModel.fileTransferModel.generateBackup(this.selectedPaths.value.values(), this.exportKey.value);
|
||||||
|
const anchor = document.createElement("a");
|
||||||
|
anchor.href = window.URL.createObjectURL(backup);
|
||||||
|
anchor.download = `comms-${date}.bak`;
|
||||||
|
anchor.click();
|
||||||
|
}
|
||||||
|
|
||||||
// view
|
// view
|
||||||
showDirectionSelectionModal = (): void => {
|
showDirectionSelectionModal = (): void => {
|
||||||
this.coreViewModel.context = this;
|
this.coreViewModel.context = this;
|
||||||
|
|||||||
Reference in New Issue
Block a user