Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 30 additions & 12 deletions apps/geolibre-desktop/src/components/layout/DesktopShell.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,11 @@
} from "../../lib/tauri-io";
import { buildKmlModelLayer } from "../../lib/kml-model-layer";
import { isPhotoDropFileName, type GeotaggedPhotoResult } from "../../lib/geotagged-photos";
import type { LargeVectorDataset } from "../../lib/duckdb-vector-guard";
import type {
DuckDbVectorLoadOptions,
LargeVectorDataset,
LargeVectorFile,
} from "../../lib/duckdb-vector-guard";
import { PANEL_RESIZE_END_EVENT, PANEL_RESIZE_START_EVENT } from "../../lib/panel-resize";
import i18n from "../../i18n";
import {
Expand Down Expand Up @@ -196,6 +200,26 @@
);
}

function confirmLargeVectorFileSize({ name, sizeBytes }: LargeVectorFile) {
return window.confirm(
i18n.t("toolbar.item.largeVectorFileDesc", {
name,
sizeMb: Math.round(sizeBytes / (1024 * 1024)).toLocaleString(),
}),
);
}

/**
* The pair of large-input guards handed to every interactive vector load, so
* the size prompt (which runs before the file is read) and the feature-count
* prompt (which runs once the source is open) stay wired together — attaching
* only one silently loses half the protection.
*/
const largeVectorGuards: DuckDbVectorLoadOptions = {
onLargeDataset: confirmLargeVectorDataset,
onLargeFile: confirmLargeVectorFileSize,
};

Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
const ProcessingDialog = lazy(() =>
import("../processing/ProcessingDialog")
.then((module) => ({
Expand Down Expand Up @@ -1372,20 +1396,18 @@
// pyramid, which a path-less browser File cannot support.
const layers =
paths.length === imports.length
? await loadDroppedVectorPaths(paths, {
onLargeDataset: confirmLargeVectorDataset,
})
? await loadDroppedVectorPaths(paths, largeVectorGuards)
: await loadDroppedVectorFiles(
imports.map(({ file }) => file),
{ onLargeDataset: confirmLargeVectorDataset },
largeVectorGuards,
);
Comment thread
giswqs marked this conversation as resolved.
Comment thread
giswqs marked this conversation as resolved.
Outdated
addImportedVectorLayers(layers);
} catch (error) {
setDropError(error instanceof Error ? error.message : t("kml.importFailed"));
}
});
return () => setKmlFileImportHandler(null);
}, [addImportedVectorLayers, confirmLargeVectorDataset, t]);
}, [addImportedVectorLayers, t]);
Comment thread
giswqs marked this conversation as resolved.

const addDroppedPhotos = useCallback(
(result: GeotaggedPhotoResult | null): number => {
Expand Down Expand Up @@ -1623,9 +1645,7 @@

if (restPaths.length > 0) {
const rasterCount = await addDroppedRasters(await loadDroppedRasterPaths(restPaths));
const importedLayers = await loadDroppedVectorPaths(restPaths, {
onLargeDataset: confirmLargeVectorDataset,
});
const importedLayers = await loadDroppedVectorPaths(restPaths, largeVectorGuards);
// See the browser handler: skip finishDrop's empty-input error
// when PBF or photo files were present (even if rejected/failed).
// See the browser handler: suppress the empty-input error when
Expand Down Expand Up @@ -1661,7 +1681,7 @@
disposed = true;
unlisten?.();
};
}, [

Check warning on line 1684 in apps/geolibre-desktop/src/components/layout/DesktopShell.tsx

View workflow job for this annotation

GitHub Actions / Build and test

React Hook useEffect has a missing dependency: 't'. Either include it or remove the dependency array
clearDropMessageLater,
finishDrop,
addDroppedRasters,
Expand Down Expand Up @@ -1779,9 +1799,7 @@

if (restFiles.length > 0) {
const rasterCount = await addDroppedRasters(loadDroppedRasterFiles(restFiles));
const importedLayers = await loadDroppedVectorFiles(restFiles, {
onLargeDataset: confirmLargeVectorDataset,
});
const importedLayers = await loadDroppedVectorFiles(restFiles, largeVectorGuards);
// Call finishDrop (which reports success or throws the empty-input
// error) only when the other files produced something, or when the
// drop contained no PBF/photo files at all. If those were present —
Expand All @@ -1805,7 +1823,7 @@
clearDropMessageLater();
}
},
[

Check warning on line 1826 in apps/geolibre-desktop/src/components/layout/DesktopShell.tsx

View workflow job for this annotation

GitHub Actions / Build and test

React Hook useCallback has a missing dependency: 't'. Either include it or remove the dependency array
clearDropMessageLater,
finishDrop,
addDroppedRasters,
Expand Down
1 change: 1 addition & 0 deletions apps/geolibre-desktop/src/i18n/locales/ar.json
Original file line number Diff line number Diff line change
Expand Up @@ -2703,6 +2703,7 @@
"largeOsmPbfTitle": "ملف OSM PBF كبير",
"largeOsmPbfDesc": "حجم هذا الملف نحو {{sizeMb}} ميغابايت. يؤدي تحليله إلى تحويل كل معلم إلى GeoJSON في الذاكرة، وقد يكون ذلك بطيئًا وقد يستهلك قدرًا كبيرًا من ذاكرة المتصفح. هل تريد المتابعة؟",
"largeVectorDesc": "يحتوي {{name}} على نحو {{count}} من المعالم. يؤدي تحميله إلى تحويل كل معلم إلى GeoJSON في الذاكرة، وقد يبطئ التطبيق أو يجمّده. هل تريد المتابعة؟",
"largeVectorFileDesc": "حجم {{name}} نحو {{sizeMb}} ميغابايت. تستهلك قراءة ملف بهذا الحجم ذاكرة كبيرة وقد تبطئ التطبيق أو تجمّده. تحويله أولاً إلى PMTiles أو GeoParquet (معالجة ← التحويل) يجعل التحميل أسرع بكثير. هل تريد المتابعة؟",
"addOsmPbfLayerTitle": "إضافة طبقة OSM PBF",
"addOsmPbfLayerDesc": "تحميل ملف .osm.pbf من OpenStreetMap. يُحلَّل الملف في متصفحك ويُقسَّم إلى طبقات منفصلة للنقاط والخطوط والمضلعات.",
"urlLabel": "عنوان URL",
Expand Down
1 change: 1 addition & 0 deletions apps/geolibre-desktop/src/i18n/locales/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -2528,6 +2528,7 @@
"largeOsmPbfTitle": "Große OSM-PBF-Datei",
"largeOsmPbfDesc": "Diese Datei ist etwa {{sizeMb}} MB groß. Das Parsen wandelt jedes Objekt im Arbeitsspeicher in GeoJSON um, was langsam sein kann und im Browser viel Speicher verbrauchen kann. Fortfahren?",
"largeVectorDesc": "{{name}} hat etwa {{count}} Objekte. Das Laden wandelt jedes Objekt im Arbeitsspeicher in GeoJSON um und kann die App verlangsamen oder einfrieren lassen. Fortfahren?",
"largeVectorFileDesc": "{{name}} ist etwa {{sizeMb}} MB groß. Das Lesen einer so großen Datei benötigt viel Arbeitsspeicher und kann die App verlangsamen oder einfrieren lassen. Eine vorherige Umwandlung in PMTiles oder GeoParquet (Verarbeitung → Konvertierung) lädt deutlich schneller. Fortfahren?",
"addOsmPbfLayerTitle": "OSM-PBF-Ebene hinzufügen",
"addOsmPbfLayerDesc": "Lädt eine OpenStreetMap-.osm.pbf-Datei. Sie wird in Ihrem Browser geparst und in separate Punkt-, Linien- und Polygonebenen aufgeteilt.",
"urlLabel": "URL",
Expand Down
1 change: 1 addition & 0 deletions apps/geolibre-desktop/src/i18n/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -2560,6 +2560,7 @@
"largeOsmPbfTitle": "Large OSM PBF file",
"largeOsmPbfDesc": "This file is about {{sizeMb}} MB. Parsing it converts every feature to GeoJSON in memory, which can be slow and may use a lot of memory in the browser. Continue?",
"largeVectorDesc": "{{name}} has about {{count}} features. Loading it converts every feature to GeoJSON in memory and may slow down or freeze the app. Continue?",
"largeVectorFileDesc": "{{name}} is about {{sizeMb}} MB. Reading a file this large uses a lot of memory and may slow down or freeze the app. Converting it to PMTiles or GeoParquet first (Processing → Conversion) loads much faster. Continue?",
"addOsmPbfLayerTitle": "Add OSM PBF Layer",
"addOsmPbfLayerDesc": "Load an OpenStreetMap .osm.pbf file. It is parsed in your browser and split into separate point, line, and polygon layers.",
"urlLabel": "URL",
Expand Down
1 change: 1 addition & 0 deletions apps/geolibre-desktop/src/i18n/locales/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -2528,6 +2528,7 @@
"largeOsmPbfTitle": "Archivo OSM PBF grande",
"largeOsmPbfDesc": "Este archivo tiene aproximadamente {{sizeMb}} MB. Analizarlo convierte cada entidad a GeoJSON en memoria, lo que puede ser lento y usar mucha memoria en el navegador. ¿Continuar?",
"largeVectorDesc": "{{name}} tiene aproximadamente {{count}} entidades. Cargarlo convierte cada entidad a GeoJSON en memoria y puede ralentizar o bloquear la aplicación. ¿Continuar?",
"largeVectorFileDesc": "{{name}} ocupa unos {{sizeMb}} MB. Leer un archivo tan grande consume mucha memoria y puede ralentizar o bloquear la aplicación. Convertirlo antes a PMTiles o GeoParquet (Procesamiento → Conversión) se carga mucho más rápido. ¿Continuar?",
"addOsmPbfLayerTitle": "Añadir capa OSM PBF",
"addOsmPbfLayerDesc": "Carga un archivo .osm.pbf de OpenStreetMap. Se analiza en su navegador y se divide en capas separadas de puntos, líneas y polígonos.",
"urlLabel": "URL",
Expand Down
1 change: 1 addition & 0 deletions apps/geolibre-desktop/src/i18n/locales/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -2528,6 +2528,7 @@
"largeOsmPbfTitle": "Fichier OSM PBF volumineux",
"largeOsmPbfDesc": "Ce fichier fait environ {{sizeMb}} Mo. L'analyser convertit chaque entité en GeoJSON en mémoire, ce qui peut être lent et utiliser beaucoup de mémoire dans le navigateur. Continuer ?",
"largeVectorDesc": "{{name}} contient environ {{count}} entités. Le charger convertit chaque entité en GeoJSON en mémoire et peut ralentir ou bloquer l'application. Continuer ?",
"largeVectorFileDesc": "{{name}} pèse environ {{sizeMb}} Mo. Lire un fichier de cette taille consomme beaucoup de mémoire et peut ralentir ou bloquer l'application. Le convertir au préalable en PMTiles ou GeoParquet (Traitement → Conversion) permet un chargement bien plus rapide. Continuer ?",
"addOsmPbfLayerTitle": "Ajouter une couche OSM PBF",
"addOsmPbfLayerDesc": "Charger un fichier OpenStreetMap .osm.pbf. Il est analysé dans votre navigateur et divisé en couches de points, lignes et polygones distinctes.",
"urlLabel": "URL",
Expand Down
1 change: 1 addition & 0 deletions apps/geolibre-desktop/src/i18n/locales/hi.json
Original file line number Diff line number Diff line change
Expand Up @@ -2528,6 +2528,7 @@
"largeOsmPbfTitle": "बड़ी OSM PBF फ़ाइल",
"largeOsmPbfDesc": "यह फ़ाइल लगभग {{sizeMb}} MB की है। इसे पार्स करने पर हर फ़ीचर मेमोरी में GeoJSON में परिवर्तित हो जाता है, जो धीमा हो सकता है और ब्राउज़र में बहुत अधिक मेमोरी का उपयोग कर सकता है। जारी रखें?",
"largeVectorDesc": "{{name}} में लगभग {{count}} फ़ीचर हैं। इसे लोड करने पर हर फ़ीचर मेमोरी में GeoJSON में परिवर्तित हो जाता है और यह ऐप को धीमा कर सकता है या फ्रीज कर सकता है। जारी रखें?",
"largeVectorFileDesc": "{{name}} का आकार लगभग {{sizeMb}} MB है। इतनी बड़ी फ़ाइल पढ़ने में बहुत मेमोरी लगती है और यह ऐप को धीमा कर सकती है या फ्रीज़ कर सकती है। इसे पहले PMTiles या GeoParquet में बदलने पर (प्रोसेसिंग → रूपांतरण) यह कहीं तेज़ी से लोड होगी। जारी रखें?",
"addOsmPbfLayerTitle": "OSM PBF परत जोड़ें",
"addOsmPbfLayerDesc": "एक OpenStreetMap .osm.pbf फ़ाइल लोड करें। इसे आपके ब्राउज़र में पार्स किया जाता है और अलग-अलग बिंदु, रेखा और बहुभुज परतों में विभाजित किया जाता है।",
"urlLabel": "URL",
Expand Down
1 change: 1 addition & 0 deletions apps/geolibre-desktop/src/i18n/locales/id.json
Original file line number Diff line number Diff line change
Expand Up @@ -2484,6 +2484,7 @@
"largeOsmPbfTitle": "File OSM PBF besar",
"largeOsmPbfDesc": "File ini berukuran sekitar {{sizeMb}} MB. Mengurainya mengonversi setiap fitur ke GeoJSON dalam memori, yang bisa lambat dan mungkin menggunakan banyak memori di browser. Lanjutkan?",
"largeVectorDesc": "{{name}} memiliki sekitar {{count}} fitur. Memuatnya mengonversi setiap fitur ke GeoJSON dalam memori dan dapat memperlambat atau membekukan aplikasi. Lanjutkan?",
"largeVectorFileDesc": "{{name}} berukuran sekitar {{sizeMb}} MB. Membaca berkas sebesar ini menggunakan banyak memori dan dapat memperlambat atau membekukan aplikasi. Mengonversinya lebih dulu ke PMTiles atau GeoParquet (Pemrosesan → Konversi) akan jauh lebih cepat dimuat. Lanjutkan?",
"addOsmPbfLayerTitle": "Tambahkan Layer OSM PBF",
"addOsmPbfLayerDesc": "Muat file .osm.pbf OpenStreetMap. File diuraikan di browser Anda dan dipisah menjadi layer titik, garis, dan poligon terpisah.",
"urlLabel": "URL",
Expand Down
1 change: 1 addition & 0 deletions apps/geolibre-desktop/src/i18n/locales/it.json
Original file line number Diff line number Diff line change
Expand Up @@ -2528,6 +2528,7 @@
"largeOsmPbfTitle": "File OSM PBF di grandi dimensioni",
"largeOsmPbfDesc": "Questo file è di circa {{sizeMb}} MB. L'analisi lo converte interamente in GeoJSON in memoria, il che può essere lento e usare molta memoria nel browser. Continuare?",
"largeVectorDesc": "{{name}} ha circa {{count}} elementi. Caricarlo converte ogni elemento in GeoJSON in memoria e potrebbe rallentare o bloccare l'app. Continuare?",
"largeVectorFileDesc": "{{name}} occupa circa {{sizeMb}} MB. Leggere un file così grande usa molta memoria e potrebbe rallentare o bloccare l'app. Convertirlo prima in PMTiles o GeoParquet (Elaborazione → Conversione) si carica molto più velocemente. Continuare?",
"addOsmPbfLayerTitle": "Aggiungi livello OSM PBF",
"addOsmPbfLayerDesc": "Carica un file .osm.pbf di OpenStreetMap. Viene analizzato nel tuo browser e suddiviso in livelli separati di punti, linee e poligoni.",
"urlLabel": "URL",
Expand Down
1 change: 1 addition & 0 deletions apps/geolibre-desktop/src/i18n/locales/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -2484,6 +2484,7 @@
"largeOsmPbfTitle": "大きな OSM PBF ファイル",
"largeOsmPbfDesc": "このファイルは約 {{sizeMb}} MB です。解析するとすべてのフィーチャがメモリ上で GeoJSON に変換されるため、処理に時間がかかったり、ブラウザで大量のメモリを消費したりする場合があります。続行しますか?",
"largeVectorDesc": "{{name}} には約 {{count}} 件のフィーチャがあります。読み込むとすべてのフィーチャがメモリ上で GeoJSON に変換され、アプリの動作が遅くなったりフリーズしたりする場合があります。続行しますか?",
"largeVectorFileDesc": "{{name}} は約 {{sizeMb}} MB です。このサイズのファイルの読み込みは大量のメモリを消費し、アプリの動作が遅くなったりフリーズしたりする場合があります。先に PMTiles または GeoParquet に変換すると(プロセシング → 変換)、はるかに高速に読み込めます。続行しますか?",
"addOsmPbfLayerTitle": "OSM PBF レイヤーを追加",
"addOsmPbfLayerDesc": "OpenStreetMap の .osm.pbf ファイルを読み込みます。ブラウザ内で解析され、ポイント・ライン・ポリゴンの各レイヤーに分割されます。",
"urlLabel": "URL",
Expand Down
1 change: 1 addition & 0 deletions apps/geolibre-desktop/src/i18n/locales/ka.json
Original file line number Diff line number Diff line change
Expand Up @@ -2528,6 +2528,7 @@
"largeOsmPbfTitle": "დიდი OSM PBF ფაილი",
"largeOsmPbfDesc": "ეს ფაილი დაახლოებით {{sizeMb}} MB-ია. მისი დამუშავება ყოველ ობიექტს მეხსიერებაში GeoJSON-ად გარდაქმნის, რაც შეიძლება იყოს ნელი და ბრაუზერში ბევრი მეხსიერება მოიხმაროს. გავაგრძელოთ?",
"largeVectorDesc": "{{name}}-ს აქვს დაახლოებით {{count}} ობიექტი. მისი ჩატვირთვა ყოველ ობიექტს მეხსიერებაში GeoJSON-ად გარდაქმნის და შეიძლება აპლიკაცია შეანელოს ან გააჩეროს. გავაგრძელოთ?",
"largeVectorFileDesc": "{{name}}-ის ზომაა დაახლოებით {{sizeMb}} მბ. ასეთი დიდი ფაილის წაკითხვა ბევრ მეხსიერებას მოითხოვს და შეიძლება აპლიკაცია შეანელოს ან გააჩეროს. თუ ჯერ PMTiles-ად ან GeoParquet-ად გადაიყვანთ (დამუშავება → კონვერტაცია), ჩატვირთვა ბევრად უფრო სწრაფი იქნება. გავაგრძელოთ?",
"addOsmPbfLayerTitle": "OSM PBF შრის დამატება",
"addOsmPbfLayerDesc": "ჩატვირთეთ OpenStreetMap-ის .osm.pbf ფაილი. ის მუშავდება თქვენს ბრაუზერში და იყოფა ცალკე წერტილოვან, ხაზოვან და პოლიგონურ შრეებად.",
"urlLabel": "URL",
Expand Down
1 change: 1 addition & 0 deletions apps/geolibre-desktop/src/i18n/locales/ko.json
Original file line number Diff line number Diff line change
Expand Up @@ -2484,6 +2484,7 @@
"largeOsmPbfTitle": "대용량 OSM PBF 파일",
"largeOsmPbfDesc": "이 파일은 약 {{sizeMb}} MB입니다. 파싱하면 모든 피처가 메모리에서 GeoJSON으로 변환되므로 속도가 느려지거나 브라우저에서 메모리를 많이 사용할 수 있습니다. 계속하시겠습니까?",
"largeVectorDesc": "{{name}}에는 약 {{count}}개의 피처가 있습니다. 불러오면 모든 피처가 메모리에서 GeoJSON으로 변환되어 앱이 느려지거나 멈출 수 있습니다. 계속하시겠습니까?",
"largeVectorFileDesc": "{{name}}은(는) 약 {{sizeMb}} MB입니다. 이 정도 크기의 파일을 읽으면 메모리를 많이 사용하며 앱이 느려지거나 멈출 수 있습니다. 먼저 PMTiles 또는 GeoParquet으로 변환하면(처리 → 변환) 훨씬 빠르게 불러올 수 있습니다. 계속하시겠습니까?",
"addOsmPbfLayerTitle": "OSM PBF 레이어 추가",
"addOsmPbfLayerDesc": "OpenStreetMap .osm.pbf 파일을 불러옵니다. 브라우저에서 파싱되어 점, 선, 폴리곤 레이어로 각각 분리됩니다.",
"urlLabel": "URL",
Expand Down
1 change: 1 addition & 0 deletions apps/geolibre-desktop/src/i18n/locales/nl.json
Original file line number Diff line number Diff line change
Expand Up @@ -2528,6 +2528,7 @@
"largeOsmPbfTitle": "Groot OSM PBF-bestand",
"largeOsmPbfDesc": "Dit bestand is ongeveer {{sizeMb}} MB groot. Het verwerken ervan converteert elke feature naar GeoJSON in het geheugen, wat traag kan zijn en veel geheugen in de browser kan gebruiken. Doorgaan?",
"largeVectorDesc": "{{name}} bevat ongeveer {{count}} features. Het laden ervan converteert elke feature naar GeoJSON in het geheugen en kan de app vertragen of laten vastlopen. Doorgaan?",
"largeVectorFileDesc": "{{name}} is ongeveer {{sizeMb}} MB groot. Het lezen van zo'n groot bestand gebruikt veel geheugen en kan de app vertragen of laten vastlopen. Het eerst converteren naar PMTiles of GeoParquet (Verwerking → Conversie) laadt veel sneller. Doorgaan?",
"addOsmPbfLayerTitle": "OSM PBF-laag toevoegen",
"addOsmPbfLayerDesc": "Laad een OpenStreetMap .osm.pbf-bestand. Het wordt in uw browser verwerkt en opgesplitst in afzonderlijke punt-, lijn- en polygoonlagen.",
"urlLabel": "URL",
Expand Down
1 change: 1 addition & 0 deletions apps/geolibre-desktop/src/i18n/locales/pt.json
Original file line number Diff line number Diff line change
Expand Up @@ -2528,6 +2528,7 @@
"largeOsmPbfTitle": "Arquivo OSM PBF grande",
"largeOsmPbfDesc": "Este arquivo tem cerca de {{sizeMb}} MB. Analisá-lo converte cada feição para GeoJSON na memória, o que pode ser lento e usar bastante memória no navegador. Continuar?",
"largeVectorDesc": "{{name}} tem cerca de {{count}} feições. Carregá-lo converte cada feição para GeoJSON na memória e pode deixar o aplicativo lento ou travado. Continuar?",
"largeVectorFileDesc": "{{name}} tem cerca de {{sizeMb}} MB. Ler um arquivo desse tamanho usa muita memória e pode deixar o aplicativo lento ou travado. Convertê-lo antes para PMTiles ou GeoParquet (Processamento → Conversão) carrega muito mais rápido. Continuar?",
"addOsmPbfLayerTitle": "Adicionar camada OSM PBF",
"addOsmPbfLayerDesc": "Carregue um arquivo .osm.pbf do OpenStreetMap. Ele é analisado no seu navegador e dividido em camadas separadas de pontos, linhas e polígonos.",
"urlLabel": "URL",
Expand Down
Loading
Loading