From d43d6e57cc4e507a24bf8f8302488d5b7d46e542 Mon Sep 17 00:00:00 2001 From: Vxrtrauter <101264710+Vxrtrauter@users.noreply.github.com> Date: Thu, 5 Feb 2026 00:36:12 +0100 Subject: [PATCH] add more interface stuff --- core/interface/gui.py | 64 +++++++++++++++++++-------------------- core/network/interface.py | 36 ++++++++++++++++++++-- core/utils/data/state.py | 2 +- main.py | 4 +-- test.py | 37 +++++++++++++--------- 5 files changed, 90 insertions(+), 53 deletions(-) diff --git a/core/interface/gui.py b/core/interface/gui.py index 2f31163..4e17dc6 100644 --- a/core/interface/gui.py +++ b/core/interface/gui.py @@ -74,7 +74,7 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): def get_asset_path(filename): if getattr(sys, 'frozen', False): - base_path = sys._MEIPASS + base_path = sys._MEIPASS else: base_path = os.path.dirname(__file__) @@ -134,18 +134,18 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): self.searchbar.returnPressed.connect(lambda: run_thread(threading.Thread(target=return_pressed, args=(self,)))) # Triggers data function thread on enter self.dlbutton = QtWidgets.QPushButton("Download") - self.dlbutton.setCursor(Qt.PointingHandCursor) + self.dlbutton.setCursor(Qt.CursorShape.PointingHandCursor) self.libraryList = QListWidget() self.emptyResults = QLabel("No Results") - self.emptyResults.setAlignment(Qt.AlignCenter) + self.emptyResults.setAlignment(Qt.AlignmentFlag.AlignCenter) self.emptyResults.hide() self.download_model = None self.downloadList = QTableView() self.emptyLibrary = QLabel("No items in library.") self.emptyDownload = QLabel("No items in downloads.") - self.emptyDownload.setAlignment(Qt.AlignCenter) + self.emptyDownload.setAlignment(Qt.AlignmentFlag.AlignCenter) self.consoleLog = QTextEdit() self.progressbar = QProgressBar() @@ -154,22 +154,22 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): self.qtablewidget = QTableWidget() self.qtablewidget.setColumnCount(2) - self.qtablewidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) + self.qtablewidget.setEditTriggers(QtWidgets.QAbstractItemView.EditTrigger.NoEditTriggers) self.qtablewidget.verticalHeader().setVisible(False) self.qtablewidget.setHorizontalHeaderLabels(["Post Title", "Author"]) header = self.qtablewidget.horizontalHeader() - header.setSectionResizeMode(0, QHeaderView.Stretch) - header.setSectionResizeMode(1, QHeaderView.Fixed) + header.setSectionResizeMode(0, QHeaderView.ResizeMode.Stretch) + header.setSectionResizeMode(1, QHeaderView.ResizeMode.Fixed) header.setStretchLastSection(False) - self.qtablewidget.setAttribute(Qt.WA_TranslucentBackground) - self.qtablewidget.viewport().setAttribute(Qt.WA_TranslucentBackground) + self.qtablewidget.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground) + self.qtablewidget.viewport().setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground) header = self.qtablewidget.horizontalHeader() - header.setSectionResizeMode(1, QHeaderView.Fixed) + header.setSectionResizeMode(1, QHeaderView.ResizeMode.Fixed) header.resizeSection(1, 500) container = QWidget() @@ -188,19 +188,19 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): def columnCount(self, parent=QModelIndex()): return len(self.headers) - def headerData(self, section, orientation, role=Qt.DisplayRole): - if role == Qt.DisplayRole and orientation == Qt.Horizontal: + def headerData(self, section, orientation, role=Qt.DisplayRole): + if role == Qt.DisplayRole and orientation == Qt.Horizontal: return self.headers[section] return None - def data(self, index, role=Qt.DisplayRole): - if role == Qt.DisplayRole: + def data(self, index, role=Qt.DisplayRole): + if role == Qt.DisplayRole: col = index.column() if index.row() >= len(state.active_downloads) or index.row() < 0: return None - magnet_link = list(state.active_downloads.keys())[index.row()] + magnet_link = list(state.active_downloads.keys())[index.row()] magnetdl = state.active_downloads[magnet_link] status = magnetdl.status() @@ -210,9 +210,9 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): elif col == 1: return status.name if status.has_metadata else "Fetching metadata..." elif col == 2: - if status.state == lt.torrent_status.downloading: + if status.state == lt.torrent_status.downloading: return "Downloading" - elif status.state == lt.torrent_status.seeding: + elif status.state == lt.torrent_status.seeding: return "Seeding" elif status.paused: return "Paused" @@ -256,8 +256,8 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): else: return "∞" if status.paused else "Stalled" - if role == Qt.UserRole and index.column() == 0: - magnet_link = list(state.active_downloads.keys())[index.row()] + if role == Qt.UserRole and index.column() == 0: + magnet_link = list(state.active_downloads.keys())[index.row()] magnetdl = state.active_downloads[magnet_link] return magnetdl.status().paused @@ -268,11 +268,11 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): if row >= len(state.active_downloads) or row < 0: return - magnet_link = list(state.active_downloads.keys())[row] + magnet_link = list(state.active_downloads.keys())[row] magnetdl = state.active_downloads[magnet_link] status = magnetdl.status() - if status.state == lt.torrent_status.seeding: + if status.state == lt.torrent_status.seeding: save_path = magnetdl.save_path() if save_path and os.path.exists(save_path): if platform.system() == "Windows": @@ -299,18 +299,18 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): def setEditorData(self, editor, index): button = editor.findChild(QtWidgets.QPushButton) - magnet_link = list(state.active_downloads.keys())[index.row()] + magnet_link = list(state.active_downloads.keys())[index.row()] magnetdl = state.active_downloads[magnet_link] status = magnetdl.status() if button: - if status.state == lt.torrent_status.seeding: + if status.state == lt.torrent_status.seeding: button.setText("📁") else: button.setText("▶︎" if status.paused else "⏸︎") def createEditor(self, parent, option, index): - magnet_link = list(state.active_downloads.keys())[index.row()] + magnet_link = list(state.active_downloads.keys())[index.row()] magnetdl = state.active_downloads[magnet_link] status = magnetdl.status() @@ -318,7 +318,7 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): widget.setStyleSheet("border: none;") layout = QHBoxLayout(widget) layout.setContentsMargins(0, 0, 0, 0) - if status.state == lt.torrent_status.seeding: + if status.state == lt.torrent_status.seeding: btnPause = QtWidgets.QPushButton("📁") else: btnPause = QtWidgets.QPushButton("▶︎" if status.paused else "⏸︎") @@ -338,10 +338,10 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): self.download_model = DownloadModel() self.downloadList.setModel(self.download_model) self.downloadList.horizontalHeader().setStretchLastSection(False) - self.downloadList.horizontalHeader().setSectionResizeMode(1, QHeaderView.Stretch) - self.downloadList.setSelectionBehavior(QTableView.SelectRows) - self.downloadList.setAttribute(Qt.WA_TranslucentBackground) - self.downloadList.viewport().setAttribute(Qt.WA_TranslucentBackground) + self.downloadList.horizontalHeader().setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch) + self.downloadList.setSelectionBehavior(QTableView.SelectionBehavior.SelectRows) + self.downloadList.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground) + self.downloadList.viewport().setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground) download_model = self.download_model @@ -540,7 +540,7 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): if row < 0 or row >= len(state.active_downloads): return - magnet_link = list(state.active_downloads.keys())[row] + magnet_link = list(state.active_downloads.keys())[row] magnetdl = state.active_downloads[magnet_link] download_path = magnetdl.save_path() @@ -561,7 +561,7 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): if row < 0 or row >= len(state.active_downloads): return - magnet_link = list(state.active_downloads.keys())[row] + magnet_link = list(state.active_downloads.keys())[row] clipboard = QtWidgets.QApplication.clipboard() clipboard.setText(magnet_link) @@ -574,7 +574,7 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): if row < 0 or row >= len(state.active_downloads): return - magnet_link = list(state.active_downloads.keys())[row] + magnet_link = list(state.active_downloads.keys())[row] magnetdl = state.active_downloads[magnet_link] confirm = QMessageBox.question(self, "Cancel Download", f"Are you sure you want to cancel the download of '{magnetdl.status().name}'?", QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No) diff --git a/core/network/interface.py b/core/network/interface.py index bd63e27..8c33939 100644 --- a/core/network/interface.py +++ b/core/network/interface.py @@ -1,10 +1,40 @@ from core.utils.general.logs import consoleLog import psutil - +addrs = psutil.net_if_addrs() +stats = psutil.net_if_stats() def get_net_interfaces(): - addrs = psutil.net_if_addrs() for interface in addrs.keys(): consoleLog(f"Found Interface: {interface}") - return addrs.keys() \ No newline at end of file + return addrs.keys() + + +def get_active_interfaces(): + active = [] + + for interface, addr_list in addrs.items(): + up = stats[interface].isup + for addr in addr_list: + if addr.family == 2: # ipv4 + ipv4 = addr.address + if not ipv4.startswith("127.") and not ipv4.startswith("169.254") and up == True: + active.append(interface) + consoleLog(f"Found Active: {interface}") + + return active + + +def list_interfaces() -> None: + + for interface, addr_list in addrs.items(): + up = stats[interface].isup + for addr in addr_list: + if addr.family == 2: # ipv4 + ipv4 = addr.address + if not ipv4.startswith("127.") and not ipv4.startswith("169.254") and up == True: + status = "ACTIVE" + else: + status = "INACTIVE" + consoleLog(f"Found Interface: {interface} [{status}]") + diff --git a/core/utils/data/state.py b/core/utils/data/state.py index 7d40269..d6f3afb 100644 --- a/core/utils/data/state.py +++ b/core/utils/data/state.py @@ -23,7 +23,7 @@ class AppState(QObject): self.down_speed_limit: int = 0 self.max_connections: int = 200 self.max_downloads: int = 10 - self.settings_path: str = None + self.settings_path: str = "" self.dl_session: Any = None self.active_downloads: List[str] = {} self.window_transparency: bool = False diff --git a/main.py b/main.py index 6cac47b..e91e4a6 100644 --- a/main.py +++ b/main.py @@ -6,7 +6,7 @@ from core.utils.general.logs import get_download_logs from core.utils.general.shutdown import closehelper, shutdown_event from core.utils.general.wrappers import run_thread from core.utils.general.loghandler import split_data, check_completed -from core.network.interface import get_net_interfaces +from core.network.interface import list_interfaces from core.utils.config.config import read_config from PySide6 import QtWidgets from PySide6.QtCore import Qt @@ -53,7 +53,7 @@ if __name__ == "__main__": run_thread(threading.Thread(target=check_completed, args=(downloads, state.autoresume))) consoleLog("Started check_completed thread") consoleLog("Fetching Network Interfaces...") - get_net_interfaces() + list_interfaces() consoleLog("Launching GUI") run_gui() diff --git a/test.py b/test.py index 3bd08e4..d2e82b9 100644 --- a/test.py +++ b/test.py @@ -3,26 +3,33 @@ import psutil addrs = psutil.net_if_addrs() stats = psutil.net_if_stats() -for interface, addr_list in addrs.items(): - up = stats[interface].isup - for addr in addr_list: - if addr.family == 2: # ipv4 - ipv4 = addr.address - if not ipv4.startswith("127.") and not ipv4.startswith("169.254"): - print(f'"{interface}": True') -print(addrs) -print() -sigmer = list() -for interface in stats.keys(): - print(f"{interface}: UP = {stats[interface].isup}") - sigmer.append(f"{interface}: {stats[interface].isup}") +def get_active_interfaces(): + active = [] + + for interface, addr_list in addrs.items(): + up = stats[interface].isup + for addr in addr_list: + if addr.family == 2: # ipv4 + ipv4 = addr.address + if not ipv4.startswith("127.") and not ipv4.startswith("169.254") and up == True: + print(f'"{interface}": True') + active.append(interface) + print(active) + return active +get_active_interfaces() + +# print(addrs) +# print() +# sigmer = list() +# for interface in stats.keys(): +# print(f"{interface}: UP = {stats[interface].isup}") +# sigmer.append(f"{interface}: {stats[interface].isup}") - -print(sigmer) \ No newline at end of file +# print(sigmer) \ No newline at end of file