[general]
name=GeoDeploy
qgisMinimumVersion=3.28
description=Browse a GeoDeploy instance, add its layers, and publish layers back to it.
about=GeoDeploy is a self-hosted spatial data platform and geoportal builder. This plugin connects
    QGIS to an instance: browse what it publishes (no account needed for public data), add a layer
    using the fastest source it offers, and upload a QGIS layer back — including multi-gigabyte
    files, which go straight to object storage. Pure Python, no external dependencies.
version=0.3.4
author=Koffi Dodji Noumonvi
email=noumonvikoffidodji@hotmail.fr

tracker=https://github.com/bravemaster3/GeoDeploy/issues
repository=https://github.com/bravemaster3/GeoDeploy
homepage=https://docs-geodeploy.kndev.org/qgis/
; Tags are how somebody finds this in the Plugin Manager's search. The cookbook asks for
; informative ones — "vector" tells a reader nothing, "geoparquet" tells them whether this is for
; them — so these name the SURFACES and formats the plugin actually speaks.
tags=web,cloud,server,upload,publish,style,symbology,portal,webmap,ogc,stac,cog,pmtiles,geoparquet,postgis
category=Web
icon=icon.png
experimental=True
deprecated=False
license=Apache-2.0

; The client is vendored under vendor/geodeploy — a plugin cannot pip-install into a user's QGIS.
; It is the same package published as `geodeploy` on PyPI, kept identical by integrations/qgis-plugin/scripts/vendor.py.
changelog=0.3.4 - The plugin wears the GeoDeploy logo instead of a placeholder circle, six
    QDialogButtonBox enums missed by the first Qt6 pass are scoped (the scope belongs to the class
    you are calling, and that one is not QMessageBox), and a handful of unused imports and an
    ambiguous variable name are gone.
    0.3.3 - Ready for QGIS 4. Qt6 only reaches an enum member through its scope
    (Qt.PenStyle.NoPen, not Qt.NoPen), so every one of the 94 places this plugin read an enum now
    goes through a small resolver that asks for the scoped name and falls back to the flat one -
    which keeps QGIS 3.28 working exactly as before. Dialogs call exec() rather than the removed
    exec_(). No behaviour changes on QGIS 3.
    0.3.2 - The 0.3.1 security declarations are applied inline instead of in a bundled
    .bandit file. plugins.qgis.org runs bandit with an explicit list of tests, and a config file
    that skips any of them makes bandit abort without scanning anything - which is what the 0.3.1
    scan report showed. Same declarations, same fixes, now honoured.
    0.3.1 - Security-scan round. Two findings pointed at real weaknesses and were fixed
    rather than waved through: every URL the plugin opens is now checked to be http or https before
    it is opened - it follows links that come BACK from an instance, so a hostile one could
    otherwise have pointed it at a local file - and a WMTS capabilities document that declares XML
    entities is refused outright, which removes the entity-expansion class of attack without adding
    a dependency a QGIS plugin cannot have. The remaining findings are deliberate and are declared,
    with reasons, in a bundled .bandit config.
    0.3.0 - First public release. Browse a GeoDeploy instance (no account needed for public
    data), add a layer using the fastest source it offers, open a whole portal as a styled QGIS
    group, and upload back - including multi-gigabyte files. Styling travels BOTH WAYS: single
    symbol, graduated and categorized vectors; colormap, stretch, band, hillshade, contours and
    colour-per-value rasters; size-from-a-field; marker shape, stroke colour and width; a polygon's
    outline width. A layer opens looking like the portal, and what you change goes home.
    Which renderer QGIS offers depends on the SOURCE, so a per-layer Source picker and a
    "Restyle this layer..." button get you onto the surface that can actually be restyled. A PostGIS
    layer opens over OGC API - Features, ready to classify by a field; tiled GeoParquet keeps its
    tiles. A portal opens either as it draws it, or editable - every layer from its own data with
    the portal's styling painted on - so a portal's layers restyle exactly like single ones.
    KNOWN LIMITATION: a layer's 3D extrusion is carried safely (opening one and pushing it back
    does not remove it) but is NOT yet drawn in QGIS's 3D view, so 3D cannot be edited here.
    0.2.1 - A polygon's outline WIDTH now travels, which was the one property that could
    not: GeoDeploy draws a fill's edge as a real line layer now, so the number means something.
    0.2.0 - First public release. Browse a GeoDeploy instance (no account needed for public
    data), add a layer using the fastest source it offers, open a whole portal as a styled QGIS
    group, and upload back - including multi-gigabyte files. Styling travels BOTH WAYS for every
    layer type: single symbol, graduated and categorized vectors; colormap, stretch, band, hillshade,
    contours and colour-per-value rasters; 3D extrusion for polygons and points; size-from-a-field;
    marker shape and stroke. A layer opens looking like the portal, and what you change goes home.
    Which renderer QGIS offers depends on the SOURCE, so a per-layer Source picker and a
    "Restyle this layer..." button get you onto the surface that can actually be restyled. A PostGIS
    layer opens over OGC API - Features, ready to classify by a field; tiled GeoParquet keeps its
    tiles. A portal opens either as it draws it, or editable - every layer from its own data with
    the portal's styling painted on - so a portal's layers restyle exactly like single ones.
    0.1.15 - A classified raster's stretch is no longer compared. GeoDeploy does not
    apply a stretch to a colour-per-value palette - the classes are matched on raw pixel values, and
    a stretch would change the very numbers they key on - so a stretch sitting beside one is not a
    visible difference and must not report the layer as restyled.
    0.1.14 - Class LABELS now travel with a classified raster. "Water" and "Trees" are
    the whole point of a classification, and the reader only carried the value and the colour - so
    pushing a land-cover raster back from QGIS replaced its classes with unlabelled ones and every
    legend fell back to bare numbers. A class QGIS labelled with its own value still counts as
    unlabelled, so a raster whose classes were never named does not report as edited.
    0.1.13 - Raster symbology is editable, 3D extrusion travels both ways, and contour
    lines round-trip. Why a raster offered nothing to change: QGIS picks its renderer from the layer
    TYPE, and server-rendered tiles arrive as one band of RGBA - "Singleband color data", no bands,
    no classes. Vector tiles are the same shape of limit: no categorized or graduated renderer at
    all. Opening the data instead used to cost you GeoDeploy's colours; now the GeoTIFF opens WITH
    its colormap, stretch, band and classification applied, so you can classify it and send it back.
    A per-layer Source picker replaces the old global checkbox, and a new "Restyle this layer..."
    button reopens whatever is selected from its data, in place, keeping the styling it has. For a
    portal's raster that styling is read out of the portal's own tile URL, so you restyle what the
    portal shows rather than the layer's default. 3D EXTRUSION now applies and reads back for
    polygons and points - heights from a field, fixed heights, bases, colours, and a point pillar's
    footprint - and what QGIS cannot express is preserved rather than flattened by the next push.
    Contour styling is carried the same way. Nothing is slower: the default source is unchanged.
    0.1.12 - Rasters can finally be restyled, and every symbol property now travels. A
    raster's real bands come from its GeoTIFF, and that file was refused unless the layer was shared
    publicly - so for a private raster there was no way to restyle it at all. It is now readable by
    anyone who may see the layer, and the plugin gives GDAL the token (scoped to your instance) so
    /vsicurl/ can use it. Tick "Prefer the real data over the styled view", restyle, then "Save
    styling to GeoDeploy". Marker outline WIDTH and shape, and size-by-field, are now applied and read
    back like everything else, and a push no longer deletes styling QGIS cannot draw (3D extrusion,
    imported paint, popup fields) - it updates what it understands and leaves the rest.
    0.1.11 - Change detection is right in both directions. Changing only a symbol's STROKE
    (or its marker shape) is now noticed - before, only the fill was read, so a stroke-only edit came
    back byte-identical and reported "unchanged". And opening a portal and pushing it straight back no
    longer reports every layer as restyled: a style read out of QGIS is always complete while a stored
    one holds only what you chose, so the two are now compared through the same defaults. A raster
    drawn from server tiles still cannot be restyled in QGIS - the checkbox that opens the real
    GeoTIFF now says so on its label, and the explanation is logged as information rather than as
    three warnings that look like failures.
    0.1.10 - Restyling a POINT layer and pushing it back now registers. QGIS's vector-tile
    symbology editor keeps one style per geometry type - polygons, lines, points - and the plugin read
    the first of them, so a changed marker came back as the untouched polygon colour: identical to the
    old style, so "Push group to portal" saw no change and "Save styling to GeoDeploy" appeared to do
    nothing. The layer's geometry is now recorded when it is added and used to pick the right one.
    0.1.9 - "Open in GeoDeploy" now opens a PORTAL in the editor rather than repeating what
    "Open portal in browser" already does, and the actions that need a token (push a group, upload,
    save styling, edit a portal) are disabled with the reason in their tooltip until you connect with
    one. A public layer's page opens for anyone, with the map, the extent and the share links, and
    without any of the buttons that would need an account.
    0.1.8 - Restyling a layer inside a portal group and pushing it back now works. A portal's
    layers open as TILES, and QGIS renders those through a different renderer than a normal vector
    layer - so the styling was read from the wrong place and nothing was sent. It is now read back
    properly, classes and all. A raster opened from portal tiles has no bands to restyle ("Singleband
    color data"), so its portal styling is now LEFT ALONE instead of being replaced with nothing -
    which used to wipe the colormap. To restyle a raster, tick "Prefer the real data over the styled
    view", restyle that, and use "Save styling to GeoDeploy". Also fixes marker size and line width
    changing slightly every time a layer was pushed back.
    0.1.7 - New "Open in GeoDeploy" button: opens the selected layer's page on the instance
    in your browser - map, metadata, fields, extent and every share link. Works without an account
    for a public layer; a private one asks you to sign in there.
    0.1.6 - A portal now opens the same way whether or not you are signed in. The API's portal
    document does not carry a layer's source, geometry or name - only the published style does - so
    every fix in 0.1.5 covered the signed-out path alone: with a token, rasters still opened in the
    layer's default colours and 3D layers were drawn from the wrong tiles. The two are now merged.
    0.1.5 - Fixes layers drawn with the wrong kind of symbol. A vector-tile style is bound to
    ONE geometry type, and the plugin was falling back to "point" whenever it could not tell - so
    polygons and lines arrived as a dot at every vertex, or did not draw at all. The geometry is now
    read from the portal's own published style (and from how the layer is DRAWN, so 3D layers work
    too); where it is genuinely unknown, every geometry type gets a symbol instead of one being
    guessed. A portal's own tiles are also no longer swapped for the layer's when the two differ.
    0.1.4 - Opening a portal is much faster and looks like the portal. Layers are styled
    before they join the map instead of after (one redraw each, not two), the canvas is frozen while
    a group is assembled (one redraw for the whole portal, not one per layer), and the documents
    that describe a layer are fetched once and reused - in the background thread, not between
    layers. A portal opened WITHOUT an account now uses the portal's own colours, width, outline and
    transparency rather than each layer's default style, and no longer loses a layer when a vector
    and a raster share an id. Polygons are drawn at the map's 0.45 fill opacity, lines at its default width.
    0.1.3 - A raster opened as part of a portal is drawn the way THAT portal draws it, not
    in the layer's default style - the portal bakes its colormap, stretch and hillshade into its own
    tile URL, and the same raster can look different in two portals. Layer opacity now travels in as
    well as out, so a half-transparent overlay opens half-transparent.
    0.1.2 - Points are drawn at the size and colour the map draws them. A layer whose style
    names a colour but no radius kept QGIS's default marker number under our points unit - a third
    of the intended size - under QGIS's dark default outline, so styled point layers arrived as
    tiny black dots. They now take the portal's own defaults: radius 5, white 1px stroke.
    0.1.1 - Vector layers are added through their TileJSON, so QGIS asks only for tiles that
    exist: no more requests past the deepest real zoom, and "Zoom to layer" lands on the layer. A
    PMTiles archive is no longer opened whole (GDAL reads every tile at the deepest zoom to answer
    a feature count). Vector-tile layers now carry the layer's real symbology - graduated and
    categorized classes, not just a base colour. Portal groups show the portal's title.
    0.1.0 - First release: browse an instance (public data without an account), add vector and
    raster layers, upload the active layer.
