# 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 "{}")