Releases: imagodata/filter_mate
FilterMate v4.6.3
FilterMate v4.6.3
i18n - 34 Languages & Live Language Switching
Expanded internationalization from 22 to 34 languages and fixed live language switching.
New Languages (+12)
- 🇰🇷 Korean (ko), 🇯🇵 Japanese (ja), 🇸🇦 Arabic (ar), 🇹🇭 Thai (th)
- 🇺🇦 Ukrainian (uk), 🇨🇿 Czech (cs), 🇷🇴 Romanian (ro), 🇬🇷 Greek (el)
- 🇭🇺 Hungarian (hu), 🇧🇬 Bulgarian (bg), 🇲🇾 Malay (ms), 🏴 Catalan (ca)
Bug Fixes
- Live language switching: Changing language from config or QGIS settings now retranslates the entire UI immediately (
.uifile strings, indicator tooltips, buffer tooltips, combo/picker tooltips, menu/toolbar actions) retranslate_all_ui(): New unified retranslation method with reentrant guard, called from config UI andQEvent.LanguageChangechangeEvent(LanguageChange): Dockwidget now handles Qt language change events, covering QGIS locale changes without going through FilterMate configretranslate_actions(): Menu and toolbar action texts are now retranslated on language changeapp_initializer._retranslate_ui(): Delegates to unifiedretranslate_all_ui()for consistency
Bug Fixes - Feature Picker & Exploring
Multiple fixes to the feature picker widget and exploring sidebar for improved stability and usability.
Bug Fixes
- Feature picker debounce: Store FID instead of C++ QgsFeature object to prevent crashes from dangling references
- Feature picker refresh: Properly refresh picker when display field changes
- Feature picker browser buttons: Fix next/prev browser buttons initialization
- Exploring sidebar: Always-enabled identify/zoom buttons + debounce feature picker typing
QGIS 4 / Qt6 Compatibility
Full migration for QGIS 4 and Qt6 compatibility.
New
- Edit mode popup: Warning popup before filter/unfilter operations when a layer is in edit mode
- i18n: All user-facing strings wrapped and translated, 22 languages at 100%
- Config harmonization: Single source of truth config system with backward-compatible helpers
Changes
- Migrate plugin for QGIS 4 / Qt6 compatibility
- Refactor filter orchestrator, app, SQL utils and controllers
- Fix backward-compat guard for DEFAULT_IS_LINKING in exploring controller
Feature - GPKG Embedded Project Export
Exported GeoPackages now embed a full QGIS project that preserves layer group hierarchy, styles, and CRS. When opening the GPKG in QGIS, the embedded project automatically restores the original group structure.
New
- gpkg_layer_tree_writer.py: New module that embeds a QGIS project into exported GeoPackages using pure sqlite3 + xml.etree (safe for QGIS 3.44, no QgsProject lifecycle issues)
- Reads source project layer tree and reproduces group hierarchy in the embedded project
- Embeds layer styles (renderer, labeling, etc.) when "Save styles" is checked
- Uses export CRS when data is reprojected, preserving correct spatial reference
- Project stored as hex-encoded QGZ (ZIP) matching native QGIS GeoPackage project storage format
Bug Fix
- Fix action buttons not disabled when switching to exporting tab after filtering
Technical Details
The embedded project is built as XML, wrapped in QGZ (ZIP) format, hex-encoded, and inserted into the qgis_projects table — exactly matching how QGIS natively stores projects in GeoPackages. This ensures full compatibility with QGIS "Open Project from GeoPackage" workflow.
Bug Fix - GPKG Export Crash (Thread-Safety)
Symptom: QGIS crashes with "Windows fatal exception: access violation" when exporting to GPKG
Root Cause: iface.messageBar() was called from QgsTask background thread instead of main GUI thread
Changes
- layer_exporter.py: Remove
iface.messageBar().pushSuccess()fromexport_to_gpkg()- success message now displayed byfinished_handleron main thread - layer_management_task.py: Add
_deferred_warningslist to queue warnings for display infinished()callback - layer_management_task.py: Move PostgreSQL PRIMARY KEY warning from
run()to deferred display infinished()
Technical Details
Qt GUI operations are NOT thread-safe. Calling iface.messageBar() from a worker thread (QgsTask.run()) causes access violations on Windows. The fix defers all GUI operations to the finished() callback which runs on the main thread.
Bug Fix
- Fix key sidebar buttons appearing rectangular instead of square
- ButtonStyler._configure_pushbuttons() now excludes key sidebar buttons (exploring/filtering/exporting) whose Fixed/Fixed square sizing is managed by DimensionsManager
- Align exploring sidebar layout properties with filtering style (Expanding spacers, spacing=2)
Changes
- Website launch at https://imagodata.github.io/filter_mate/
- GitHub org migration: all URLs moved from sducournau to imagodata
- 600 unit tests across 34 files (quality score 9.0/10)
- Startup optimization for large GeoPackage projects (7 quick wins)
- filter_task.py reduced to 2,929 lines (-50.3%), 12 extracted handlers
- SignalBlocker context manager replaces all manual blockSignals
- CI/CD: GitHub Actions pytest (Python 3.10 + 3.12)
- i18n: 22 languages supported
Changes
- Version bump
Bug Fix - Buffer table creation fails on tables without id column
Symptom: Dynamic buffer expression like "largeur_de_chaussee" * 5 returns 1 = 0 (no features)
Root Cause: Buffer table creation SQL was hardcoded with "id" as source_id, failing on tables with different primary key names (e.g., cleabs, fid, ogc_fid)
Problem Analysis
When creating the pre-calculated buffer table for dynamic expressions:
-- v4.4.4 (BUG): Hardcoded "id" column
---
📦 **Installation** : téléchargez `filter_mate_v4.6.3.zip` et installez-le via *Extensions → Installer depuis un ZIP*.
🌐 **Plugin QGIS** : https://plugins.qgis.org/plugins/filter_mate/v4.6.0
v4.2.5
Full Changelog: v4.1.0...v4.2.5
v2.5.4
Full Changelog: v2.5.0...v2.5.4
v2.5.0
Full Changelog: v2.4.7...v2.5.0
v2.3.7
Full Changelog: v2.3.6...v2.3.7
v2.3.4
Full Changelog: v2.3.3...v2.3.4
v2.2.4
Full Changelog: v2.2.3...v2.2.4
2.2.2
Full Changelog: v2.2.1...2.2.2
v2.2.1
Full Changelog: v2.0.0...v2.2.1