144-python-email-extractor/src/gui/tabs/database_tab.py

72 lines
2.7 KiB
Python
Raw Normal View History

2026-10-05 03:18:15 +00:00
# src/gui/tabs/database_tab.py
from PySide6.QtWidgets import (
QWidget, QVBoxLayout, QHBoxLayout, QTableWidget, QTableWidgetItem,
QHeaderView, QLabel, QTextEdit, QSplitter, QPushButton
)
from PySide6.QtCore import Qt
from models.database import fetch_all_emails
class DatabaseTab(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.init_ui()
def init_ui(self):
layout = QVBoxLayout(self)
# Top Control Bar
top_bar = QHBoxLayout()
self.btn_refresh = QPushButton("Refresh Table")
self.btn_refresh.clicked.connect(self.refresh_table)
top_bar.addWidget(QLabel("SQLite Indexed Records:"))
top_bar.addStretch()
top_bar.addWidget(self.btn_refresh)
layout.addLayout(top_bar)
# Main Splitter (Table on top/left, JSON detail on bottom/right)
splitter = QSplitter(Qt.Vertical)
self.table = QTableWidget()
self.table.setColumnCount(6)
self.table.setHorizontalHeaderLabels(["ID", "Account", "Subject", "Sender", "Date", "File Path"])
self.table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
self.table.horizontalHeader().setSectionResizeMode(2, QHeaderView.Stretch)
self.table.itemSelectionChanged.connect(self.on_row_selected)
splitter.addWidget(self.table)
# JSON Inspector Box
json_box = QWidget()
box_layout = QVBoxLayout(json_box)
box_layout.setContentsMargins(0, 0, 0, 0)
box_layout.addWidget(QLabel("JSON Metadata Preview:"))
self.txt_json = QTextEdit()
self.txt_json.setReadOnly(True)
self.txt_json.setStyleSheet("font-family: monospace;")
box_layout.addWidget(self.txt_json)
splitter.addWidget(json_box)
splitter.setSizes([350, 150])
layout.addWidget(splitter)
self.refresh_table()
def refresh_table(self):
rows = fetch_all_emails()
self.table.setRowCount(0)
self.raw_rows = rows # Keep full data in memory for JSON preview
for row_idx, row_data in enumerate(rows):
self.table.insertRow(row_idx)
# Render ID, Account, Subject, Sender, Date, Path
for col_idx in range(6):
val = str(row_data[col_idx])
item = QTableWidgetItem(val)
self.table.setItem(row_idx, col_idx, item)
def on_row_selected(self):
curr_row = self.table.currentRow()
if curr_row >= 0 and curr_row < len(self.raw_rows):
# Extra JSON metadata is at index 6 in the tuple
json_blob = self.raw_rows[curr_row][6]
self.txt_json.setText(json_blob or "{}")