summaryrefslogtreecommitdiffstats
path: root/ui/translation_view.py
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-05-05 10:51:56 +0200
committerDanilo M. <danix@danix.xyz>2026-05-05 10:51:56 +0200
commit54ad3e37c6e9d2242f932c192119dd6de64966cf (patch)
tree84c7018152825a63c2f6b009f18634a8585d996a /ui/translation_view.py
parent48b84da95d0736124f8be6849aa32df31bdb29aa (diff)
downloadpublisher-54ad3e37c6e9d2242f932c192119dd6de64966cf.tar.gz
publisher-54ad3e37c6e9d2242f932c192119dd6de64966cf.zip
feat: check OLLAMA_HOST reachability before starting translationv1.6
Non-blocking QThread check hits /api/tags on the resolved ollama host before launching TranslationWorker. Shows QMessageBox.warning() if unreachable; proceeds silently if reachable. Adds ollama_host field to Config with env-var fallback to http://localhost:11434. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'ui/translation_view.py')
-rw-r--r--ui/translation_view.py35
1 files changed, 33 insertions, 2 deletions
diff --git a/ui/translation_view.py b/ui/translation_view.py
index cf72ce5..06767cb 100644
--- a/ui/translation_view.py
+++ b/ui/translation_view.py
@@ -1,14 +1,16 @@
from __future__ import annotations
+import os
import subprocess
from pathlib import Path
from PyQt6.QtWidgets import (
QWidget, QVBoxLayout, QHBoxLayout, QLabel,
- QPushButton, QPlainTextEdit, QTextBrowser,
+ QPushButton, QPlainTextEdit, QTextBrowser, QMessageBox,
)
from PyQt6.QtCore import pyqtSignal
from core.models import Article
from core.frontmatter import parse_frontmatter
from workers.translation_worker import TranslationWorker
+from workers.ollama_check_worker import OllamaCheckWorker
import re
def _strip_shortcodes(text: str) -> str:
@@ -18,13 +20,17 @@ class TranslationView(QWidget):
push_master = pyqtSignal()
publish = pyqtSignal()
- def __init__(self, transart_script: str, typora_bin: str, typora_args: str = "", parent=None):
+ def __init__(self, transart_script: str, typora_bin: str, typora_args: str = "",
+ ollama_host: str = "", parent=None):
super().__init__(parent)
self._transart_script = transart_script
self._typora_bin = typora_bin
self._typora_args = typora_args
+ self._ollama_host = ollama_host
self._article: Article | None = None
+ self._pending_article: Article | None = None
self._worker: TranslationWorker | None = None
+ self._check_worker: OllamaCheckWorker | None = None
self._output_path: str = ""
self._build_ui()
@@ -72,6 +78,8 @@ class TranslationView(QWidget):
layout.addWidget(self._action_bar)
def start_translation(self, article: Article):
+ if self._check_worker and self._check_worker.isRunning():
+ return
if self._worker is not None:
self._worker.log_line.disconnect()
self._worker.finished.disconnect()
@@ -84,6 +92,29 @@ class TranslationView(QWidget):
direction = "it-en" if article.lang == "it" else "en-it"
self._header.setText(f"Traduzione: {article.slug} ({article.lang.upper()} → {('EN' if article.lang == 'it' else 'IT')})")
+ self._log.appendPlainText("Controllo backend ollama...")
+ self._pending_article = article
+ resolved = self._ollama_host or os.environ.get("OLLAMA_HOST", "http://localhost:11434")
+ self._check_worker = OllamaCheckWorker(resolved, parent=self)
+ self._check_worker.reachable.connect(self._on_backend_checked)
+ self._check_worker.start()
+
+ def _on_backend_checked(self, ok: bool, url: str):
+ if not ok:
+ self._log.appendPlainText(f"[ERRORE] Backend non raggiungibile: {url}")
+ QMessageBox.warning(
+ self,
+ "Backend non disponibile",
+ f"Il backend transart non è raggiungibile a:\n{url}\n\nAttiva RunPod e riprova.",
+ )
+ self._pending_article = None
+ return
+ if self._pending_article is not None:
+ self._start_worker(self._pending_article)
+ self._pending_article = None
+
+ def _start_worker(self, article: Article):
+ direction = "it-en" if article.lang == "it" else "en-it"
self._worker = TranslationWorker(
Path(self._transart_script),
article.path,