summaryrefslogtreecommitdiffstats
path: root/ui/hugo_panel.py
blob: 4305b79d8b00f9ac2b56a2379981ff320ab546c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from __future__ import annotations
from pathlib import Path
from PyQt6.QtWidgets import (
    QWidget, QVBoxLayout, QHBoxLayout,
    QLabel, QPushButton, QPlainTextEdit,
)
from PyQt6.QtCore import QUrl
from PyQt6.QtGui import QDesktopServices
from workers.hugo_worker import HugoWorker

class HugoPanel(QWidget):
    def __init__(self, repo_path: Path, parent=None):
        super().__init__(parent)
        self._worker = HugoWorker(repo_path, parent=self)
        self._worker.log_line.connect(self._on_log)
        self._worker.started.connect(self._on_started)
        self._worker.stopped.connect(self._on_stopped)
        self._worker.error.connect(lambda e: self._log.appendPlainText(f"[ERRORE] {e}"))
        self._build_ui()

    def _build_ui(self):
        layout = QVBoxLayout(self)

        top = QHBoxLayout()
        self._status_label = QLabel("🔴 Hugo server: fermo")
        self._status_label.setStyleSheet("color:#ff6b6b;font-weight:bold;")
        top.addWidget(self._status_label)
        top.addStretch()

        self._start_btn = QPushButton("▶ Avvia")
        self._start_btn.clicked.connect(self._worker.start)
        self._stop_btn = QPushButton("⏹ Ferma")
        self._stop_btn.clicked.connect(self._worker.stop)
        self._stop_btn.setEnabled(False)
        top.addWidget(self._start_btn)
        top.addWidget(self._stop_btn)

        self._url_btn = QPushButton("🌐 http://localhost:1313")
        self._url_btn.setFlat(True)
        self._url_btn.setStyleSheet("color:#60a5fa;text-decoration:underline;")
        self._url_btn.clicked.connect(lambda: QDesktopServices.openUrl(QUrl("http://localhost:1313")))
        self._url_btn.setVisible(False)
        top.addWidget(self._url_btn)

        layout.addLayout(top)

        self._log = QPlainTextEdit()
        self._log.setReadOnly(True)
        self._log.setStyleSheet("background:#0a0a12;color:#00ff88;font-family:monospace;font-size:11px;")
        layout.addWidget(self._log)

    def _on_log(self, line: str):
        self._log.appendPlainText(line)

    def _on_started(self):
        self._status_label.setText("🟢 Hugo server: in esecuzione")
        self._status_label.setStyleSheet("color:#00ff88;font-weight:bold;")
        self._start_btn.setEnabled(False)
        self._stop_btn.setEnabled(True)
        self._url_btn.setVisible(True)

    def _on_stopped(self):
        self._status_label.setText("🔴 Hugo server: fermo")
        self._status_label.setStyleSheet("color:#ff6b6b;font-weight:bold;")
        self._start_btn.setEnabled(True)
        self._stop_btn.setEnabled(False)
        self._url_btn.setVisible(False)

    def closeEvent(self, event):
        self._worker.stop()
        super().closeEvent(event)