208 Zeilen
8.3 KiB
Python
208 Zeilen
8.3 KiB
Python
"""
|
|
Tab zur Verwaltung der erstellten Social-Media-Accounts.
|
|
"""
|
|
|
|
import logging
|
|
from PyQt5.QtWidgets import (
|
|
QWidget, QVBoxLayout, QHBoxLayout, QTableWidget,
|
|
QTableWidgetItem, QPushButton, QHeaderView, QMessageBox
|
|
)
|
|
from PyQt5.QtCore import pyqtSignal, Qt
|
|
|
|
logger = logging.getLogger("accounts_tab")
|
|
|
|
class AccountsTab(QWidget):
|
|
"""Widget für den Konten-Tab."""
|
|
|
|
# Signale
|
|
refresh_requested = pyqtSignal()
|
|
export_requested = pyqtSignal()
|
|
delete_requested = pyqtSignal(int) # account_id
|
|
|
|
def __init__(self, platform_name=None, db_manager=None, language_manager=None):
|
|
super().__init__()
|
|
self.platform_name = platform_name
|
|
self.db_manager = db_manager
|
|
self.language_manager = language_manager
|
|
self.init_ui()
|
|
if self.language_manager:
|
|
self.language_manager.language_changed.connect(self.update_texts)
|
|
self.update_texts()
|
|
|
|
# Konten laden, falls db_manager vorhanden
|
|
if self.db_manager:
|
|
self.load_accounts()
|
|
|
|
def init_ui(self):
|
|
"""Initialisiert die Benutzeroberfläche."""
|
|
layout = QVBoxLayout(self)
|
|
|
|
# Konten-Tabelle
|
|
self.accounts_table = QTableWidget()
|
|
self.accounts_table.setColumnCount(8)
|
|
self.accounts_table.setHorizontalHeaderLabels([
|
|
"ID",
|
|
"Benutzername",
|
|
"Passwort",
|
|
"E-Mail",
|
|
"Handynummer",
|
|
"Name",
|
|
"Plattform",
|
|
"Erstellt am",
|
|
])
|
|
self.accounts_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
|
|
# ID-Spalte verstecken
|
|
self.accounts_table.setColumnHidden(0, True)
|
|
|
|
layout.addWidget(self.accounts_table)
|
|
|
|
# Button-Leiste
|
|
button_layout = QHBoxLayout()
|
|
|
|
self.refresh_button = QPushButton("Aktualisieren")
|
|
self.refresh_button.clicked.connect(self.on_refresh_clicked)
|
|
|
|
self.export_button = QPushButton("Exportieren")
|
|
self.export_button.clicked.connect(self.on_export_clicked)
|
|
|
|
self.delete_button = QPushButton("Löschen")
|
|
self.delete_button.clicked.connect(self.on_delete_clicked)
|
|
|
|
button_layout.addWidget(self.refresh_button)
|
|
button_layout.addWidget(self.export_button)
|
|
button_layout.addWidget(self.delete_button)
|
|
|
|
layout.addLayout(button_layout)
|
|
|
|
def load_accounts(self):
|
|
"""Lädt Konten aus der Datenbank und zeigt sie in der Tabelle an."""
|
|
try:
|
|
if (self.platform_name and str(self.platform_name).lower() not in ["all", ""]
|
|
and hasattr(self.db_manager, "get_accounts_by_platform")):
|
|
accounts = self.db_manager.get_accounts_by_platform(self.platform_name.lower())
|
|
else:
|
|
accounts = self.db_manager.get_all_accounts()
|
|
if self.platform_name and str(self.platform_name).lower() not in ["all", ""]:
|
|
accounts = [
|
|
acc for acc in accounts
|
|
if acc.get("platform", "").lower() == str(self.platform_name).lower()
|
|
]
|
|
|
|
self.display_accounts(accounts)
|
|
except Exception as e:
|
|
logger.error(f"Fehler beim Laden der Konten: {e}")
|
|
QMessageBox.critical(self, "Fehler", f"Fehler beim Laden der Konten:\n{str(e)}")
|
|
|
|
def display_accounts(self, accounts):
|
|
"""Zeigt die Konten in der Tabelle an."""
|
|
self.accounts_table.setRowCount(len(accounts))
|
|
|
|
for row, account in enumerate(accounts):
|
|
self.accounts_table.setItem(row, 0, QTableWidgetItem(str(account.get("id", ""))))
|
|
self.accounts_table.setItem(row, 1, QTableWidgetItem(account.get("username", "")))
|
|
self.accounts_table.setItem(row, 2, QTableWidgetItem(account.get("password", "")))
|
|
self.accounts_table.setItem(row, 3, QTableWidgetItem(account.get("email", "")))
|
|
self.accounts_table.setItem(row, 4, QTableWidgetItem(account.get("phone", "")))
|
|
self.accounts_table.setItem(row, 5, QTableWidgetItem(account.get("full_name", "")))
|
|
self.accounts_table.setItem(row, 6, QTableWidgetItem(account.get("platform", "")))
|
|
self.accounts_table.setItem(row, 7, QTableWidgetItem(account.get("created_at", "")))
|
|
|
|
def on_refresh_clicked(self):
|
|
"""Wird aufgerufen, wenn der Aktualisieren-Button geklickt wird."""
|
|
self.refresh_requested.emit()
|
|
|
|
# Direkt aktualisieren, falls db_manager vorhanden
|
|
if self.db_manager:
|
|
self.load_accounts()
|
|
|
|
def on_export_clicked(self):
|
|
"""Wird aufgerufen, wenn der Exportieren-Button geklickt wird."""
|
|
self.export_requested.emit()
|
|
|
|
def on_delete_clicked(self):
|
|
"""Wird aufgerufen, wenn der Löschen-Button geklickt wird."""
|
|
selected_rows = self.accounts_table.selectionModel().selectedRows()
|
|
if not selected_rows:
|
|
title = "Kein Konto ausgewählt"
|
|
text = "Bitte wählen Sie ein Konto zum Löschen aus."
|
|
if self.language_manager:
|
|
title = self.language_manager.get_text(
|
|
"accounts_tab.no_selection_title", title
|
|
)
|
|
text = self.language_manager.get_text(
|
|
"accounts_tab.no_selection_text", text
|
|
)
|
|
QMessageBox.warning(self, title, text)
|
|
return
|
|
|
|
account_id = int(self.accounts_table.item(selected_rows[0].row(), 0).text())
|
|
username = self.accounts_table.item(selected_rows[0].row(), 1).text()
|
|
|
|
q_title = "Konto löschen"
|
|
q_text = f"Möchten Sie das Konto '{username}' wirklich löschen?"
|
|
if self.language_manager:
|
|
q_title = self.language_manager.get_text("accounts_tab.delete_title", q_title)
|
|
q_text = self.language_manager.get_text(
|
|
"accounts_tab.delete_text", q_text
|
|
).format(username=username)
|
|
reply = QMessageBox.question(
|
|
self,
|
|
q_title,
|
|
q_text,
|
|
QMessageBox.Yes | QMessageBox.No,
|
|
QMessageBox.No,
|
|
)
|
|
|
|
if reply == QMessageBox.Yes:
|
|
self.delete_requested.emit(account_id)
|
|
|
|
# Direkt aktualisieren, falls db_manager vorhanden
|
|
if self.db_manager:
|
|
success = self.db_manager.delete_account(account_id)
|
|
if success:
|
|
self.load_accounts()
|
|
suc_title = "Erfolg"
|
|
suc_text = f"Konto '{username}' wurde gelöscht."
|
|
if self.language_manager:
|
|
suc_title = self.language_manager.get_text(
|
|
"accounts_tab.delete_success_title", suc_title
|
|
)
|
|
suc_text = self.language_manager.get_text(
|
|
"accounts_tab.delete_success_text", suc_text
|
|
).format(username=username)
|
|
QMessageBox.information(self, suc_title, suc_text)
|
|
else:
|
|
err_title = "Fehler"
|
|
err_text = f"Konto '{username}' konnte nicht gelöscht werden."
|
|
if self.language_manager:
|
|
err_title = self.language_manager.get_text(
|
|
"accounts_tab.delete_error_title", err_title
|
|
)
|
|
err_text = self.language_manager.get_text(
|
|
"accounts_tab.delete_error_text", err_text
|
|
).format(username=username)
|
|
QMessageBox.critical(self, err_title, err_text)
|
|
|
|
def update_texts(self):
|
|
"""Aktualisiert UI-Texte gemäß aktueller Sprache."""
|
|
if not self.language_manager:
|
|
return
|
|
lm = self.language_manager
|
|
self.refresh_button.setText(lm.get_text("buttons.refresh", "Aktualisieren"))
|
|
self.export_button.setText(lm.get_text("buttons.export", "Exportieren"))
|
|
self.delete_button.setText(lm.get_text("buttons.delete", "Löschen"))
|
|
headers = lm.get_text(
|
|
"accounts_tab.headers",
|
|
[
|
|
"ID",
|
|
"Benutzername",
|
|
"Passwort",
|
|
"E-Mail",
|
|
"Handynummer",
|
|
"Name",
|
|
"Plattform",
|
|
"Erstellt am",
|
|
],
|
|
)
|
|
self.accounts_table.setHorizontalHeaderLabels(headers)
|