72 lines
No EOL
2.7 KiB
Python
72 lines
No EOL
2.7 KiB
Python
# 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 "{}") |