aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/src/meshbay_hub/static/drive-sync.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/drive-sync.js')
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/drive-sync.js29
1 files changed, 29 insertions, 0 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/drive-sync.js b/packages/meshbay-hub/src/meshbay_hub/static/drive-sync.js
new file mode 100644
index 0000000..5ddf188
--- /dev/null
+++ b/packages/meshbay-hub/src/meshbay_hub/static/drive-sync.js
@@ -0,0 +1,29 @@
+// Files backup: the folders the person chose through the system's picker,
+// sent into `<folder>/<account>-drive/<chosen folder>/…` of the destination
+// every backup shares (sync-destination.js), once a day, on an unmetered
+// network, like photos (docs/MESHBAY_DESIGN.md §9.13).
+//
+// The phone (platform.driveSync) lists the files, leaves out what the photo
+// backup sends, keeps the ledger and hands each file over a range at a time;
+// the running is the photo backup's own (createBackup). Additive by
+// construction: a new version of a file goes beside the one sent, and nothing
+// here deletes, renames or replaces anything on the node.
+
+import * as platform from './platform.js';
+import { t } from './i18n.js';
+import { createBackup } from './photo-sync.js';
+import { LASTING, failureText } from './phone-sync.js';
+
+const drive = createBackup({
+ name: 'files',
+ sync: platform.driveSync,
+ configured: (status) => Boolean(status.on) && (status.folders || []).length > 0,
+ progress: 'drivesync.notif_progress',
+ failures: LASTING,
+ say: (code) => t('phonesync.notice', { what: t('drivesync.heading'), reason: failureText(code) }),
+});
+
+export const startDriveSync = (context) => drive.start(context);
+export const stopDriveSync = () => drive.stop();
+export const runDriveSync = (opts) => drive.run(opts);
+export const subscribe = (fn) => drive.subscribe(fn);