feat: add Direct Local Folder Save via File System Access API and zero-lag STORE zip mode

This commit is contained in:
2026-08-23 14:02:35 -07:00
parent 20d81a2b4d
commit 82cea2002c
2 changed files with 180 additions and 78 deletions
+36 -22
View File
@@ -158,40 +158,45 @@
</div>
</section>
<!-- Card 4: Packaging Formats -->
<!-- Card 4: Destination & Output -->
<section class="card">
<div class="card-header">
<div class="card-title-group">
<span class="step-num">4</span>
<h2>Archive Formats</h2>
<h2>Destination & Output</h2>
</div>
</div>
<div class="card-content">
<!-- Direct Folder Destination Picker (Recommended) -->
<div class="folder-destination-box" style="background: rgba(255, 107, 53, 0.05); border: 1.5px dashed var(--primary); border-radius: var(--radius-md); padding: 14px 16px; margin-bottom: 18px;">
<div style="display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 8px;">
<div style="display: flex; align-items: center; gap: 8px;">
<span style="font-size: 20px;">📁</span>
<div>
<strong style="font-size: 13.5px; color: var(--text);">Direct Local Folder Save</strong>
<span class="badge" style="background: var(--primary); color: #fff; font-size: 10px; padding: 2px 6px; border-radius: 4px; margin-left: 6px;">Fastest & Zero Lag</span>
</div>
</div>
<button type="button" id="chooseFolderBtn" class="secondary-btn" style="padding: 6px 12px; font-size: 12px; white-space: nowrap; border-color: var(--primary); color: var(--primary); font-weight: 600;">
Choose Folder...
</button>
</div>
<div id="folderStatusBox" style="font-size: 12px; color: var(--text-muted);">
<span id="folderPathText">No folder selected (will download as instant ZIP)</span>
<button type="button" id="clearFolderBtn" style="display: none; background: none; border: none; color: var(--error); font-size: 11px; text-decoration: underline; cursor: pointer; margin-left: 8px;">Reset</button>
</div>
<small style="display: block; margin-top: 6px; color: var(--text-muted); font-size: 11px;">
⚡ Streams photos & videos directly to your hard drive in real-time as they download. No zip compression delay!
</small>
</div>
<div class="checkbox-group">
<label class="custom-checkbox">
<input type="checkbox" id="fmtZip" checked>
<span class="checkmark"></span>
<div class="checkbox-label">
<strong>Folder-Organized ZIP Archive</strong>
<small>Structured by <code>/YYYY/MM/photos/</code> and <code>/videos/</code></small>
</div>
</label>
<label class="custom-checkbox">
<input type="checkbox" id="fmtViewer" checked>
<span class="checkmark"></span>
<div class="checkbox-label">
<strong>Offline Interactive Timeline Viewer</strong>
<small>Standalone <code>index.html</code> bundled inside the archive</small>
</div>
</label>
<label class="custom-checkbox">
<input type="checkbox" id="fmtJson" checked>
<span class="checkmark"></span>
<div class="checkbox-label">
<strong>Raw JSON Manifest (<code>manifest.json</code>)</strong>
<small>Complete structured metadata for data portability</small>
<strong>Unified JSON Archive (<code>activities.json</code>)</strong>
<small>Single source of truth containing all structured & raw data</small>
</div>
</label>
@@ -203,6 +208,15 @@
<small>Open in Excel, Numbers, or Google Sheets</small>
</div>
</label>
<label class="custom-checkbox">
<input type="checkbox" id="fmtViewer" checked>
<span class="checkmark"></span>
<div class="checkbox-label">
<strong>Offline Memories Web Viewer (<code>index.html</code>)</strong>
<small>Standalone interactive browser app with gallery & timeline</small>
</div>
</label>
</div>
</div>
</section>