-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtab_logs.py
More file actions
112 lines (91 loc) · 4.13 KB
/
tab_logs.py
File metadata and controls
112 lines (91 loc) · 4.13 KB
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
from PySide6.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QLabel,
QComboBox, QPushButton, QTextEdit, QFrame)
from PySide6.QtGui import QFont, QColor
from PySide6.QtCore import Qt
import locales
from log_manager import LogWorker
class LogsTab(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
layout = QVBoxLayout()
layout.setContentsMargins(20, 20, 20, 20)
layout.setSpacing(15)
# --- CABECERA ---
lbl_title = QLabel("📜 " + locales.get_text("logs_title"))
lbl_title.setFont(QFont("Arial", 16, QFont.Bold))
layout.addWidget(lbl_title)
# --- BARRA DE HERRAMIENTAS ---
toolbar = QHBoxLayout()
# Selector de Categoría
self.combo_type = QComboBox()
self.combo_type.addItem(locales.get_text("logs_category_firewall"), "firewall")
self.combo_type.addItem(locales.get_text("logs_category_antivirus"), "antivirus")
self.combo_type.addItem(locales.get_text("logs_category_system"), "system")
self.combo_type.setFixedWidth(250)
self.combo_type.currentIndexChanged.connect(self.load_logs)
toolbar.addWidget(self.combo_type)
toolbar.addStretch()
# Botón Refrescar
self.btn_refresh = QPushButton("🔄 " + locales.get_text("logs_btn_refresh"))
self.btn_refresh.clicked.connect(self.load_logs)
toolbar.addWidget(self.btn_refresh)
# Botón Limpiar
btn_clear = QPushButton("🧹 " + locales.get_text("logs_btn_clear"))
btn_clear.clicked.connect(lambda: self.log_viewer.clear())
toolbar.addWidget(btn_clear)
layout.addLayout(toolbar)
# --- VISOR DE LOGS ---
self.log_viewer = QTextEdit()
self.log_viewer.setReadOnly(True)
# Estilo Terminal Hacker
self.log_viewer.setStyleSheet("""
QTextEdit {
background-color: #0c0c0c;
color: #00ff00;
font-family: "Consolas", "Monospace";
font-size: 12px;
border: 1px solid #444;
border-radius: 4px;
padding: 10px;
}
""")
layout.addWidget(self.log_viewer)
self.setLayout(layout)
# Carga inicial (pero dejamos un pequeño delay para que no pida pass al arrancar la app entera)
# Lo haremos manual la primera vez o conectado al showEvent
def showEvent(self, event):
"""Cargar logs automáticamente al entrar en la pestaña"""
super().showEvent(event)
# Solo cargar si está vacío para no spamear sudo
if not self.log_viewer.toPlainText():
self.load_logs()
def load_logs(self):
category = self.combo_type.currentData()
self.log_viewer.clear()
self.log_viewer.append(f"⏳ {locales.get_text('logs_loading')}")
self.btn_refresh.setEnabled(False)
self.worker = LogWorker(category)
self.worker.finished_signal.connect(self.display_logs)
self.worker.error_signal.connect(self.display_error)
self.worker.start()
def display_logs(self, lines):
self.btn_refresh.setEnabled(True)
self.log_viewer.clear()
if not lines:
self.log_viewer.append(f"ℹ️ {locales.get_text('logs_empty')}")
return
for line in lines:
# Colorear un poco la salida para que sea legible
if "BLOCK" in line or "REJECT" in line or "DROP" in line:
# Rojo para bloqueos
self.log_viewer.append(f'<span style="color:#ff5555;">{line}</span>')
elif "FOUND" in line: # Virus
self.log_viewer.append(f'<span style="color:#ff5555; font-weight:bold;">{line}</span>')
else:
self.log_viewer.append(f'<span style="color:#00ff00;">{line}</span>')
def display_error(self, error_msg):
self.btn_refresh.setEnabled(True)
self.log_viewer.append(f'<span style="color:orange;">⚠️ {locales.get_text("logs_error")}</span>')
self.log_viewer.append(f'<span style="color:gray;">{error_msg}</span>')