diff options
Diffstat (limited to 'ui')
| -rw-r--r-- | ui/main_window.py | 1 | ||||
| -rw-r--r-- | ui/translation_view.py | 35 |
2 files changed, 34 insertions, 2 deletions
diff --git a/ui/main_window.py b/ui/main_window.py index 8aa2762..83a2eed 100644 --- a/ui/main_window.py +++ b/ui/main_window.py @@ -105,6 +105,7 @@ class MainWindow(QMainWindow): self.config.transart_script, self.config.typora_bin, self.config.typora_args, + ollama_host=self.config.ollama_host, parent=self, ) self._translation_view.push_master.connect(lambda: self._do_git_push("master")) 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, |
