Skip to content

Releases: imagodata/filter_mate

FilterMate v4.6.3

07 Apr 08:58

Choose a tag to compare

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 (.ui file 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 and QEvent.LanguageChange
  • changeEvent(LanguageChange): Dockwidget now handles Qt language change events, covering QGIS locale changes without going through FilterMate config
  • retranslate_actions(): Menu and toolbar action texts are now retranslated on language change
  • app_initializer._retranslate_ui(): Delegates to unified retranslate_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() from export_to_gpkg() - success message now displayed by finished_handler on main thread
  • layer_management_task.py: Add _deferred_warnings list to queue warnings for display in finished() callback
  • layer_management_task.py: Move PostgreSQL PRIMARY KEY warning from run() to deferred display in finished()

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

18 Feb 14:07

Choose a tag to compare

v4.6.0: GPKG export with embedded QGIS project (layer groups, styles …

v4.2.5

19 Jan 13:23

Choose a tag to compare

Full Changelog: v4.1.0...v4.2.5

v2.5.4

29 Dec 17:28

Choose a tag to compare

Full Changelog: v2.5.0...v2.5.4

v2.5.0

29 Dec 14:43

Choose a tag to compare

Full Changelog: v2.4.7...v2.5.0

v2.3.7

18 Dec 21:46

Choose a tag to compare

Full Changelog: v2.3.6...v2.3.7

v2.3.4

16 Dec 21:06

Choose a tag to compare

Full Changelog: v2.3.3...v2.3.4

v2.2.4

08 Dec 12:21

Choose a tag to compare

Full Changelog: v2.2.3...v2.2.4

2.2.2

07 Dec 23:50

Choose a tag to compare

Full Changelog: v2.2.1...2.2.2

v2.2.1

07 Dec 22:11

Choose a tag to compare

Full Changelog: v2.0.0...v2.2.1