You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Added
QGIS 4 / Qt6 support. The plugin now loads and runs on QGIS 4 (it previously failed under Qt6). Qt imports go through qgis.PyQt, enums use the PyQt6-scoped form, exec_() → exec(), GRASS algorithm IDs are resolved across provider versions (grass: / grass7:), and the metadata declares qgisMinimumVersion=3.16 / qgisMaximumVersion=4.99. (#9)
Fixed
Price estimation returned 0 € for pipelines shorter than one booster segment on QGIS 4 / Python 3.12. Python 3.12's compensated sum() broke the final-segment float comparison; the final segment is now detected by index. (#15)
Random crashes (SIGSEGV). Background tasks were writing to QgsProject and touching the UI from a worker thread. Tasks now follow a three-phase prepare / work / publish contract: input is read on the main thread, heavy computation runs in the background, and layers are added to the project on the main thread. (#2)
False success on failures. Background operations no longer report "completed successfully" when they actually failed — errors now surface via the log and an error dialog. (#7)
Plugin lifecycle / ghost UI. Reloading or disabling the plugin no longer leaves a stale toolbar/menu entry or a dangling layersAdded connection. The dialog is now parented to the main window and the toolbar action has a stable object name. (#3)
Changed
Centralized the COMET cost model — the formula and its constants now live in a single source of truth, so the routing surface and the CAPEX estimate cannot drift apart. (#4)
Reduced duplication (DRY) — shared helpers for raster resampling, layer access, dropdown population, and UI scaffolding. (#5)
Separated UI from domain logic — all processing moved into a dialog-free, unit-testable core/ package; the source is reorganized into core / constants / ui / widgets / utils. (#6)
Tooling — added Ruff + pre-commit and formatted the codebase (resolved ~499 long-line / E501 issues; line length 120).
Internationalization — decided to ship English-only for now; the Qt tr() + .ts path is documented for future translation. (#8)
Compatibility
Requires QGIS 3.16+ (works on QGIS 3.16–3.34 and QGIS 4.x).
Requires the GRASS provider with a GRASS installation available to QGIS (used by the LCP routing).