Forráskód Böngészése

feat: afficher le nom de l'application dans la vue d'ensemble des archives

Réutilise get_ynh_apps() pour résoudre le label de l'app (au lieu de
n'afficher que le slug technique, ex: nextcloud__2) dans les vues
"par job" et "par destination" de la page overview.

chore: bump version 1.6~ynh1
Cedric Hansen 1 napja
szülő
commit
cae4d323ed
3 módosított fájl, 12 hozzáadás és 8 törlés
  1. 1 1
      manifest.toml
  2. 10 6
      sources/blueprints/overview.py
  3. 1 1
      v3/apps.json

+ 1 - 1
manifest.toml

@@ -4,7 +4,7 @@ name = "Backup Manager"
 description.en = "Centralized backup manager for YunoHost"
 description.en = "Centralized backup manager for YunoHost"
 description.fr = "Gestionnaire de sauvegardes centralisé pour YunoHost"
 description.fr = "Gestionnaire de sauvegardes centralisé pour YunoHost"
 
 
-version = "1.5~ynh1"
+version = "1.6~ynh1"
 
 
 maintainers = []
 maintainers = []
 
 

+ 10 - 6
sources/blueprints/overview.py

@@ -7,6 +7,7 @@ from concurrent.futures import ThreadPoolExecutor
 from flask import Blueprint, current_app, flash, redirect, render_template, request, url_for
 from flask import Blueprint, current_app, flash, redirect, render_template, request, url_for
 
 
 from db import db, Job, Destination, RemoteInstance, _size_human
 from db import db, Job, Destination, RemoteInstance, _size_human
+from helpers import get_ynh_apps
 
 
 bp = Blueprint("overview", __name__)
 bp = Blueprint("overview", __name__)
 
 
@@ -29,20 +30,22 @@ def _retention_label(job):
     return "—"
     return "—"
 
 
 
 
-def _job_detail(job):
+def _job_detail(job, ynh_app_labels=None):
     """Détail affiché à côté du nom du job pour distinguer des jobs homonymes
     """Détail affiché à côté du nom du job pour distinguer des jobs homonymes
     (ex: instances multiples d'une même app YunoHost, toutes nommées pareil)."""
     (ex: instances multiples d'une même app YunoHost, toutes nommées pareil)."""
     if job.type not in ("ynh_app", "custom_dir", "mysql", "postgresql"):
     if job.type not in ("ynh_app", "custom_dir", "mysql", "postgresql"):
         return ""
         return ""
     cfg = json.loads(job.config_json or "{}")
     cfg = json.loads(job.config_json or "{}")
     if job.type == "ynh_app":
     if job.type == "ynh_app":
-        return cfg.get("app_id", "")
+        app_id = cfg.get("app_id", "")
+        label = (ynh_app_labels or {}).get(app_id)
+        return f"{label} ({app_id})" if label and label != app_id else app_id
     if job.type == "custom_dir":
     if job.type == "custom_dir":
         return cfg.get("source_path", "")
         return cfg.get("source_path", "")
     return cfg.get("database", "")
     return cfg.get("database", "")
 
 
 
 
-def _group_archives(archive_list, jobs, instance):
+def _group_archives(archive_list, jobs, instance, ynh_app_labels=None):
     """
     """
     archive_list : [{"name": "jerry_nextcloud_20260716", "size_bytes": N}]
     archive_list : [{"name": "jerry_nextcloud_20260716", "size_bytes": N}]
     Retourne (groups, orphaned) où chaque group est associé à un job.
     Retourne (groups, orphaned) où chaque group est associé à un job.
@@ -63,7 +66,7 @@ def _group_archives(archive_list, jobs, instance):
         groups.append({
         groups.append({
             "job": job,
             "job": job,
             "retention_label": _retention_label(job),
             "retention_label": _retention_label(job),
-            "detail": _job_detail(job),
+            "detail": _job_detail(job, ynh_app_labels),
             "archives": matching,
             "archives": matching,
         })
         })
 
 
@@ -142,6 +145,7 @@ def overview():
     data_dir = current_app.config["DATA_DIR"]
     data_dir = current_app.config["DATA_DIR"]
     instance = current_app.config["INSTANCE_NAME"]
     instance = current_app.config["INSTANCE_NAME"]
     jobs = Job.query.order_by(Job.name).all()
     jobs = Job.query.order_by(Job.name).all()
+    ynh_app_labels = {a["id"]: a.get("label") or a.get("name", "") for a in get_ynh_apps()}
 
 
     # Construire la liste des tâches de collecte dans l'ordre d'affichage souhaité
     # Construire la liste des tâches de collecte dans l'ordre d'affichage souhaité
     dests = Destination.query.filter_by(enabled=True).order_by(Destination.name).all()
     dests = Destination.query.filter_by(enabled=True).order_by(Destination.name).all()
@@ -180,7 +184,7 @@ def overview():
         if error:
         if error:
             locations.append({**meta, "error": error, "groups": [], "orphaned": []})
             locations.append({**meta, "error": error, "groups": [], "orphaned": []})
         else:
         else:
-            groups, orphaned = _group_archives(archives, jobs, instance)
+            groups, orphaned = _group_archives(archives, jobs, instance, ynh_app_labels)
             locations.append({**meta, "error": None, "groups": groups, "orphaned": orphaned})
             locations.append({**meta, "error": None, "groups": groups, "orphaned": orphaned})
 
 
     # --- Vue par job : pivot de locations → jobs ---
     # --- Vue par job : pivot de locations → jobs ---
@@ -205,7 +209,7 @@ def overview():
         jobs_view.append({
         jobs_view.append({
             "job": job,
             "job": job,
             "retention_label": _retention_label(job),
             "retention_label": _retention_label(job),
-            "detail": _job_detail(job),
+            "detail": _job_detail(job, ynh_app_labels),
             "locations": jlocs,
             "locations": jlocs,
         })
         })
 
 

+ 1 - 1
v3/apps.json

@@ -24,7 +24,7 @@
         "packaging_format": 2,
         "packaging_format": 2,
         "id": "backupmanager",
         "id": "backupmanager",
         "name": "Backup Manager",
         "name": "Backup Manager",
-        "version": "1.5~ynh1",
+        "version": "1.6~ynh1",
         "description": {
         "description": {
           "en": "Centralized backup manager for YunoHost",
           "en": "Centralized backup manager for YunoHost",
           "fr": "Gestionnaire de sauvegardes centralisé pour YunoHost"
           "fr": "Gestionnaire de sauvegardes centralisé pour YunoHost"