|
11 | 11 | from PySide6.QtWidgets import QApplication, QFileDialog, QMessageBox |
12 | 12 |
|
13 | 13 | from ..WidgetsCreator import ProgressDialog |
| 14 | +from ..i18n import log_i18n_level, log_with_level |
14 | 15 |
|
15 | 16 |
|
16 | 17 | class VenvManager: |
@@ -407,9 +408,54 @@ def _safe_decode(self, data: bytes, error_handling: str = "replace") -> str: |
407 | 408 | except Exception: |
408 | 409 | return "[Decode Error]" |
409 | 410 |
|
410 | | - def _safe_log(self, text: str, text_en: str | None = None): |
| 411 | + def _infer_log_level(self, text: str | None) -> str: |
411 | 412 | try: |
412 | | - # If both FR/EN provided and parent has translator, resolve first. |
| 413 | + s = str(text or "").strip() |
| 414 | + except Exception: |
| 415 | + s = "" |
| 416 | + if not s: |
| 417 | + return "info" |
| 418 | + emoji_levels = { |
| 419 | + "❌": "error", |
| 420 | + "⚠️": "warning", |
| 421 | + "✅": "success", |
| 422 | + "ℹ️": "info", |
| 423 | + "📝": "state", |
| 424 | + "📋": "state", |
| 425 | + "🔍": "state", |
| 426 | + "🔧": "state", |
| 427 | + "🔨": "state", |
| 428 | + "➡️": "state", |
| 429 | + "📦": "state", |
| 430 | + "🗑️": "state", |
| 431 | + } |
| 432 | + for emoji, lvl in emoji_levels.items(): |
| 433 | + if s.startswith(emoji): |
| 434 | + return lvl |
| 435 | + low = s.lower() |
| 436 | + if any(tok in low for tok in ("error", "erreur", "échec", "echec", "failed", "invalid", "refus")): |
| 437 | + return "error" |
| 438 | + if any(tok in low for tok in ("warning", "avert", "warn", "attention")): |
| 439 | + return "warning" |
| 440 | + if any(tok in low for tok in ("success", "succès", "reussi", "réussi")): |
| 441 | + return "success" |
| 442 | + if any(tok in low for tok in ("state", "status", "état", "etat")): |
| 443 | + return "state" |
| 444 | + return "info" |
| 445 | + |
| 446 | + def _safe_log(self, text: str, text_en: str | None = None, level: str | None = None): |
| 447 | + gui = getattr(self, "parent", None) or self |
| 448 | + lvl = level or self._infer_log_level(text_en if text_en is not None else text) |
| 449 | + try: |
| 450 | + if text_en is not None: |
| 451 | + log_i18n_level(gui, lvl, text, text_en) |
| 452 | + else: |
| 453 | + log_with_level(gui, lvl, text) |
| 454 | + return |
| 455 | + except Exception: |
| 456 | + pass |
| 457 | + try: |
| 458 | + # Fallback: If both FR/EN provided and parent has translator, resolve first. |
413 | 459 | if text_en is not None and hasattr(self.parent, "tr"): |
414 | 460 | try: |
415 | 461 | text = self.parent.tr(text, text_en) |
|
0 commit comments