facebook-tool/gui/main_window.py

96 lines
3.9 KiB
Python

from PyQt6.QtWidgets import QMainWindow, QTabWidget, QMessageBox
from gui.tabs.accounts.account_tab import AccountTab
from gui.tabs.products.product_tab import ProductTab
from gui.tabs.import_tab import ImportTab
from gui.tabs.listeds.listed_tab import ListedTab
from gui.tabs.settings.settings_tab import SettingsTab
from gui.core.login_handle_dialog import LoginHandleDialog
from stores.shared_store import SharedStore
from tasks.listed_tasks import start_background_listed
from gui.global_signals import global_signals
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Facebook Marketplace Manager")
self.resize(1200, 600)
# --- Tabs ---
self.tabs = QTabWidget()
self.account_tab = AccountTab()
self.product_tab = ProductTab()
self.import_tab = ImportTab()
self.listed_tab = ListedTab()
self.setting_tab = SettingsTab()
self.tabs.addTab(self.account_tab, "Accounts")
self.tabs.addTab(self.product_tab, "Products")
self.tabs.addTab(self.listed_tab, "Queue Handle")
self.tabs.addTab(self.import_tab, "Import Data")
self.tabs.addTab(self.setting_tab, "Setting")
self.tabs.currentChanged.connect(self.on_tab_changed)
self.setCentralWidget(self.tabs)
self.on_tab_changed(0)
# --- Signals ---
# global_signals.listed_finished.connect(self.on_listed_task_finished)
# global_signals.dialog_finished.connect(self.on_dialog_finished)
# global_signals.open_login_dialog.connect(self.show_login_dialog)
# --- Background tasks ---
# start_background_listed()
# --- Store opened dialogs ---
self.login_dialogs = []
# ----------------------------------------------------------------------
def show_login_dialog(self, account_id: int, listed_id: int):
"""Hiển thị dialog xử lý login (modeless)"""
print(f"[INFO] Open LoginHandleDialog for acc={account_id}, listed={listed_id}")
dialog = LoginHandleDialog(account_id=account_id, listed_id=listed_id)
dialog.setParent(self) # đảm bảo dialog đóng theo MainWindow
dialog.show()
self.login_dialogs.append(dialog)
# Cleanup khi dialog đóng
dialog.finished.connect(
lambda: self._on_dialog_closed(dialog, account_id, listed_id)
)
# ----------------------------------------------------------------------
def _on_dialog_closed(self, dialog, account_id, listed_id):
"""Xử lý khi dialog đóng"""
if dialog in self.login_dialogs:
self.login_dialogs.remove(dialog)
self.on_dialog_finished(account_id, listed_id)
# ----------------------------------------------------------------------
def on_dialog_finished(self, account_id, listed_id):
"""Khi dialog xử lý xong"""
store = SharedStore.get_instance()
store.remove(listed_id)
# ----------------------------------------------------------------------
def on_tab_changed(self, index: int):
"""Lazy-load dữ liệu khi đổi tab"""
tab = self.tabs.widget(index)
if hasattr(tab, "load_data") and not getattr(tab, "is_loaded", False):
tab.load_data()
tab.is_loaded = True
# ----------------------------------------------------------------------
def on_listed_task_finished(self):
"""Khi task nền hoàn tất"""
QMessageBox.information(
self, "Auto Listing", "All pending listed items have been processed!"
)
# ----------------------------------------------------------------------
def closeEvent(self, event):
"""Khi đóng MainWindow -> đóng hết dialog con"""
for dialog in self.login_dialogs[:]: # copy để tránh modify khi lặp
dialog.close()
event.accept()