966528a0bf
- extraction/PyodideWebView.tsx: hidden WebView (1×1 px, off-screen) that
bootstraps Pyodide v0.26.4 from jsDelivr CDN on app startup; loads lxml,
pyyaml, micropip, fitdecode, gpxpy automatically; installs the bincio wheel
lazily on the first extraction call via a blob URL (avoids startup delay)
- extraction/extractActivity.ts: typed bridge — extractFile(filename, base64,
wheelUrl, onStatus) injects JS into the WebView, tracks pending promises by
request ID, resolves with { id, detail, timeseries, geojson, sourceHash }
- app/_layout.tsx: mounts <PyodideWebView> outside SQLiteProvider at root so
the runtime warms up as soon as the app opens
- app/(tabs)/import.tsx: replaces the placeholder alert with real extraction;
reads files as base64, calls extractFile with a progress callback, stores
detail_json + timeseries_json + geojson + real SHA-256 source_hash; resolves
wheel URL via GET /api/wheel/version with fallback to /api/wheel/download;
falls back to bincio.org if no instance is configured
20 lines
647 B
TypeScript
20 lines
647 B
TypeScript
import { Stack } from 'expo-router';
|
|
import { SQLiteProvider } from 'expo-sqlite';
|
|
import { StatusBar } from 'expo-status-bar';
|
|
import { migrateDb } from '@/db';
|
|
import { PyodideWebView } from '@/extraction/PyodideWebView';
|
|
|
|
export default function RootLayout() {
|
|
return (
|
|
<>
|
|
{/* Hidden WebView: starts loading Pyodide immediately so the runtime
|
|
is warm by the time the user opens the Import tab. */}
|
|
<PyodideWebView />
|
|
<SQLiteProvider databaseName="bincio.db" onInit={migrateDb}>
|
|
<StatusBar style="light" />
|
|
<Stack screenOptions={{ headerShown: false }} />
|
|
</SQLiteProvider>
|
|
</>
|
|
);
|
|
}
|