[general]
name=Sen Hydro - Watershed Delineation
qgisMinimumVersion=3.28
description=Sen Hydro delineates the upstream watershed of any point clicked on the map, using the free Global Watersheds API (mghydro.com), based on MERIT-Hydro/HydroSHEDS data. Useful for hydrology, water resource management, flood risk assessment and land-use planning. Includes a built-in Senegal boundary layer for clipping and stream-order-based river styling. Requires an internet connection.
about=Click anywhere on the map to instantly delineate the upstream watershed boundary of that point, together with the associated river network and outlet point. Powered by the free "Global Watersheds" HTTP API (mghydro.com), which applies the method of the Python package "delineator" (MIT License, Matthew Heberger) to global MERIT-Hydro/HydroSHEDS data - no local Python dependencies required, but an internet connection is needed for each delineation. Includes configurable calculation options (precision, simplification, beautification), custom styling, an on-screen watershed report (area, perimeter, river length), and optional clipping of results to Senegal's official commune boundaries. Ideal for hydrological studies, irrigation planning, flood risk analysis, integrated water resources management (IWRM), and teaching hydrology in West Africa and beyond.

 Sen Hydro delimite le bassin versant en amont de tout point clique sur la carte, via l'API HTTP gratuite Global Watersheds (mghydro.com), basee sur les donnees MERIT-Hydro/HydroSHEDS. Comprend des options de calcul, un style personnalisable, un rapport du bassin versant, et un decoupage optionnel selon les limites communales du Senegal. Necessite une connexion internet.
version=1.10.1
author=Adiouma FALL - Geo Senegal
email=mouridefalltouba@gmail.com
homepage=https://github.com/Ghostline1313/Sen-Hydro
tracker=https://github.com/Ghostline1313/Sen-Hydro/issues
repository=https://github.com/Ghostline1313/Sen-Hydro
category=Analysis
tags=hydrology,watershed,basin,delineation,MERIT-Hydro,HydroSHEDS,water,irrigation,flood,senegal,hydrologie,bassin versant
icon=icon.png
experimental=False
deprecated=False
changelog=1.10.1 : correction du probleme de securite critique signale par l'analyse automatique du depot (regle Bandit B110, "try/except/pass") dans _abort_pending_replies() : l'exception levee lors de l'annulation d'une requete HTTP en attente est desormais journalisee dans le Panneau des messages QGIS au lieu d'etre ignoree silencieusement. Aucun changement fonctionnel.
1.10.0 : remplacement complet du moteur de calcul local. Le plugin n'installe plus (et n'a plus besoin) d'un environnement Python dedie contenant le package 'delineator' (venv cree via pip, ou zip "vendor" pre-empaquete) : il appelle desormais directement, en HTTP asynchrone, l'API gratuite "Global Watersheds" (mghydro.com/app/watershed_api et upstream_rivers_api), qui applique la meme methode sur les memes donnees MERIT-Hydro/HydroSHEDS. Consequences : plus aucune dependance Python locale (numpy, geopandas, rasterio, numba...), suppression de delineate_worker.py et de tout le mecanisme venv/vendor (source de la plupart des plantages au clic rencontres jusqu'ici : venv absent/corrompu, echec pip, antivirus, proxy, version de Python de QGIS trop ancienne), interface reactive en permanence (plus de risque de "Ne repond pas"). En contrepartie, une connexion internet est desormais necessaire a chaque delimitation (et non plus une seule fois a l'installation). Les options de calcul du panneau ont ete simplifiees pour correspondre exactement aux parametres acceptes par l'API (precision, simplifier, beautifier) ; les statistiques du rapport (perimetre, longueur et ordre du reseau hydrographique) sont desormais calculees cote client, dans QGIS.
1.9.3 : deux correctifs de reactivite/confort. (1) Les lancements de python.exe (worker de calcul, verification vendor, creation du venv) ouvraient une fenetre de console visible sous Windows ; elle est desormais masquee systematiquement (CREATE_NO_WINDOW). (2) L'attente de la reponse du worker de calcul (a chaque clic sur la carte, pas seulement le premier) se faisait via un appel bloquant (stdout.readline()) qui gelait completement QGIS pendant toute la duree du calcul, pouvant le faire apparaitre comme "Ne repond pas" meme quand tout se deroulait normalement. La lecture se fait desormais dans un thread dedie pendant que l'interface reste reactive, et la duree reelle de chaque calcul est journalisee dans le Panneau des messages QGIS (onglet "Sen Hydro") pour faciliter le diagnostic de lenteurs eventuelles.
1.9.2 : correction d'un blocage de QGIS ("Ne repond pas", necessitant de le fermer via le Gestionnaire des taches) lors de l'installation de l'environnement pre-empaquete ("vendor"). Cause : l'extraction du zip vendor (dizaines de milliers de petits fichiers - numpy, scipy, rasterio, scikit-image, numba...) se faisait en un seul appel bloquant (ZipFile.extractall), sans aucun retour visuel ni bouton Annuler ; sur un poste avec antivirus d'entreprise scannant chaque fichier ecrit, cette etape pouvait prendre plusieurs minutes et donnait l'impression d'un plantage. L'extraction se fait desormais fichier par fichier, avec une vraie barre de progression, un bouton Annuler fonctionnel, et l'interface de QGIS reste reactive pendant toute l'operation. La verification finale ("import delineator") dispose egalement d'une echeance explicite (5 minutes) au lieu de pouvoir potentiellement bloquer sans limite.
1.9.1 : correction d'un echec frequent sous Windows lors de la creation du venv dedie, avec le message "Command [...python3.exe, -m, ensurepip, --upgrade, --default-pip] returned non-zero exit status 1". Cause : le Python OSGeo4W embarque par QGIS ne fournit pas toujours une roue pip valide dans Lib/ensurepip/_bundled, ce qui fait echouer "python -m venv" avant meme la creation de l'environnement. Le plugin detecte desormais cette erreur specifique et se rabat automatiquement sur une creation du venv sans pip (--without-pip) suivie d'un bootstrap de pip via get-pip.py. Corrige egalement un cas ou un venv partiellement cree (executables presents mais sans pip) pouvait etre pris a tort pour un environnement pret des le clic suivant : le dossier est desormais nettoye systematiquement apres tout echec de creation.
1.9.0 : ajout d'un mode d'installation "vendor" pre-empaquete (Option 4) qui n'exige plus de connexion internet ni de pip cote utilisateur : le plugin detecte et extrait automatiquement un fichier senhydro_vendor_....zip (fourni a cote du plugin, dans le dossier parent, ou dans Telechargements). Nouveaux scripts dans tools/ : build_vendor_env.bat (fabrication du zip par l'auteur), install_senhydro_vendor.bat/.sh (deploiement manuel/IT sans ouvrir QGIS). L'installation historique par pip/venv (Option 3) reste disponible en repli automatique si aucun zip vendor n'est trouve. Messages d'erreur clarifies (Option 2) en cas d'environnement incomplet/corrompu, avec detection du mode actif (vendor ou venv).
1.8.4 : correction de qgisMinimumVersion (3.16 -> 3.28), qui etait incorrect : le package 'delineator' exige Python >= 3.10, non fourni par les versions de QGIS anterieures a 3.28/3.34. Ajout d'une verification explicite de la version Python de QGIS avant toute tentative d'installation, avec message clair invitant a mettre a jour QGIS si necessaire (au lieu d'un echec pip peu comprehensible). L'installeur se declenche desormais des l'activation de l'outil (bouton "Activer"), avec une vraie fenetre de progression, et verifie que 'delineator' s'importe reellement apres l'installation (detection des echecs silencieux lies a un antivirus d'entreprise).
1.8 : integration directe (embarquee) des couches 'unites_aquiferes_corrige' (nappes phreatiques) et 'Morpho_Pedo' (types de sol/pedologie) dans le plugin - plus besoin de les charger manuellement dans le projet. Nouvelle case a cocher unique pour croiser le bassin versant delimite avec ces deux couches, avec rapport detaille (unites concernees et surfaces) et couches d'intersection ajoutees a la carte.
1.7.1 : installation automatique de l'environnement Python dedie ('senhydro_venv' + package 'delineator') au premier clic, avec confirmation utilisateur, au lieu d'afficher une simple erreur demandant une commande manuelle. Corrige le message d'erreur trompeur qui suggerait d'installer 'delineator' directement dans le Python de QGIS (risque de conflit numpy).
1.7 : ajout du croisement optionnel du bassin versant delimite avec la couche des unites aquiferes (nappes phreatiques) du projet, avec rapport de surface par unite.
1.6 : version precedente.
