summaryrefslogtreecommitdiffstats
path: root/ui/translation_view.py
diff options
context:
space:
mode:
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,