AppImage video fix, proper import posts, first-run chooser, file pickers

- bundleMediaFramework: true — bundles full GStreamer plugin set in AppImage.
  Fixes WebKit hang on video/audio (missing appsink/autoaudiosink plugins).
  MSDK/VA plugins removed post-build to avoid Ubuntu DMA assertion crash.
- Import creates complete posts: BlobHeader, VisibilityIntent, pinned blobs,
  self-follow. Imported posts now indistinguishable from locally created ones.
- First-run chooser: Start Fresh or Import Identity on fresh install only.
  Profile setup shown for existing identities without display name.
- File pickers: native Browse buttons on export (folder) and import (ZIP)
  via tauri-plugin-dialog.
- Export path: relative paths resolved against home dir.
- Lightbox close: only on overlay/image click, not inner form content.
- Growth loop skips self as N2 candidate.
- Node shutdown on identity switch (prevents zombie background tasks).
- media-src CSP includes asset protocol.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Scott Reimers 2026-04-16 13:49:52 -04:00
parent ec731fdb4b
commit cba30a1bb3
7 changed files with 186 additions and 11 deletions

View file

@ -3514,7 +3514,6 @@ $('#import-btn').addEventListener('click', () => {
}
status.textContent = result;
toast('Import complete!');
loadFeed(true);
} catch (e) {
status.textContent = 'Error: ' + e;
toast('Import failed: ' + e);
@ -3674,7 +3673,7 @@ async function init() {
} catch (_) {}
}
if (isFirstRun) {
// First-run chooser: start fresh or import
// First-run: start fresh or import
const chooser = document.createElement('div');
chooser.className = 'image-lightbox';
chooser.style.cursor = 'default';
@ -3698,6 +3697,10 @@ async function init() {
// Open the import wizard
document.getElementById('import-btn')?.click();
});
} else if (info && !info.hasProfile) {
// Not first run, but no profile set — show name setup
setupOverlay.classList.remove('hidden');
setupName.focus();
}
// Pre-load feed + messages from local DB (instant — no network needed)
await loadFeed(true).catch(() => {});