{"name": "02Agent OSM Downloader", "package_name": "zero2agent_osm_downloader", "version": "1.2.1", "experimental": false, "qgis_min": "3.28.0", "qgis_max": "4.99.0", "downloads": 761, "uploaded_by": "geo140195philo", "upload_datetime": "2026-08-19T08:10:29.023881", "changelog": "## [1.2.1] - 2026-08-19\r\n\r\n### Fixed\r\n\r\n- **Every download after the first one could crash.** The persistent Overpass\r\n  cache added in 1.2.0 opened one SQLite connection and reused it from\r\n  whatever thread called it first; QGIS runs each download on its own worker\r\n  thread, so a later download from a different thread hit\r\n  `sqlite3.ProgrammingError: SQLite objects created in a thread can only be\r\n  used in that same thread` and failed outright. The connection is now opened\r\n  with `check_same_thread=False` and every access is serialized through a\r\n  lock.\r\n- **A single failed tile discarded an entire tiled download.** A large extent\r\n  split into several bounded requests aborted completely \u2014 throwing away\r\n  every tile that had already succeeded \u2014 the moment one tile exhausted all\r\n  three Overpass mirrors. A failing tile is now skipped and reported by\r\n  number; the tiles that did succeed are still merged into layers, and a\r\n  retry only needs to fill the gap since successful tiles stay cached.\r\n- **The docked panel didn't fit a short QGIS panel height and couldn't\r\n  scroll.** The tab widget claimed a stretch factor it didn't need, leaving a\r\n  block of empty space inside the active tab while the \"Run download\"\r\n  section and Download button could run off the bottom of a docked panel\r\n  with no way to reach them. The tab widget now sizes to its actual content,\r\n  and the whole dock is wrapped in a scroll area.\r\n\r\n### Changed\r\n\r\n- The dock now opens tabbed with QGIS's **Browser** panel instead of as a\r\n  separate stacked row in the left dock area.\r\n- A small **\"+ OSM basemap\"** button now sits in the tab bar's top-right\r\n  corner (a soft purple-grey accent, distinct from the plugin's green), so\r\n  the basemap can be added from any tab without opening Run download.\r\n- A finished download's layer group is now **inserted at the top** of the\r\n  layer tree instead of appended at the bottom, so it is immediately visible.\r\n\r\n## [1.2.0] - 2026-08-19\r\n\r\n### Query\r\n\r\n- **Exclude tag.** Every download endpoint (Presets, Place, Custom tag,\r\n  Advanced query) now accepts an optional exclude key/value. A matching\r\n  feature is dropped once the OSM response arrives \u2014 a client-side filter,\r\n  not additional Overpass query text \u2014 and is surfaced on the Query tab as\r\n  \"Exclude tag (optional)\".\r\n- **Regex value matching.** The Advanced query panel gained a \"Match values\r\n  as regex (~)\" checkbox that renders every filled value as an Overpass\r\n  regex selector instead of an exact match. Regex values still cannot carry\r\n  quotes, backslashes or semicolons, capped at 60 characters.\r\n- **Six tag filters**, up from four (`MAX_ADVANCED_FILTERS`).\r\n- **Persistent Overpass cache.** Responses now persist to a small on-disk\r\n  SQLite cache under the QGIS profile directory instead of an in-session\r\n  dictionary, so re-downloading the same region stays instant even after\r\n  restarting QGIS.\r\n- **Mirror retry.** A transient failure (a dropped connection, a 5xx) gets\r\n  one retry against the same mirror, with a short pause, before the request\r\n  moves on to the next pinned mirror.\r\n\r\n### Command\r\n\r\n- **Typo tolerance.** A misspelled preset word (`buildngs`, `helthcare`)\r\n  now falls back to a bounded offline fuzzy match when no exact phrase is\r\n  found, weighted so a word owned by one preset outweighs one shared by\r\n  several.\r\n- **Negation.** \"download parking without charging\" now extracts an\r\n  exclude tag and routes the match to the Query tab, pre-filled with both\r\n  the matched tag(s) and the exclusion.\r\n- **Same-theme combination.** A command naming two datasets from the same\r\n  group (e.g. \"parks and water\") now checks both, generalising the existing\r\n  Urban Context special case.\r\n- **Command history.** The Command tab keeps a clickable list of the last\r\n  ten interpreted commands.", "external_deps": null, "download_url": "https://plugins.qgis.org/plugins/zero2agent_osm_downloader/version/1.2.1/download/"}