From d8fec74de14b4097477ede4acaeb3ed0f3b684c5 Mon Sep 17 00:00:00 2001 From: nosch Date: Sun, 8 Mar 2026 01:42:59 +0100 Subject: [PATCH] every menu works, now the downloads need fixing --- src/core/data/scrapers/monkrus.py | 2 +- src/core/data/scrapers/rutracker.py | 16 ++++++- src/core/data/scrapers/steamrip.py | 2 +- src/core/data/scrapers/uztracker.py | 2 +- src/core/interface/gui.py | 59 ++++++++++++++++++++---- src/core/interface/utils/searchhelper.py | 19 ++------ src/core/utils/network/download.py | 2 +- 7 files changed, 72 insertions(+), 30 deletions(-) diff --git a/src/core/data/scrapers/monkrus.py b/src/core/data/scrapers/monkrus.py index d41c020..b6baa5b 100644 --- a/src/core/data/scrapers/monkrus.py +++ b/src/core/data/scrapers/monkrus.py @@ -47,9 +47,9 @@ def _get_telegram_posts(): if post_url not in added: added.add(post_url) posts.append(dict( + title=title, author="m0nkrus", id=len(posts) + 1, - title=title, url=post_url )) diff --git a/src/core/data/scrapers/rutracker.py b/src/core/data/scrapers/rutracker.py index 5641cdf..46255fb 100644 --- a/src/core/data/scrapers/rutracker.py +++ b/src/core/data/scrapers/rutracker.py @@ -9,8 +9,22 @@ def scrape_rutracker(query): consoleLog("[core.data.scrapers.rutracker] Sent request to server") if search: _, data, _, _, _ = split_data(search.text) + + sorteddata = [] - return data + for entry in data: + sorteddata.append( + { + "title" : entry["title"], + "author" : entry["author"], + "seeders" : entry["seeders"], + "leechers" : entry["leechers"], + "url" : entry["url"], + "id" : entry["id"], + } + ) + + return sorteddata else: consoleLog("[core.data.scrapers.rutracker] No search Text, returning nothing") return [] diff --git a/src/core/data/scrapers/steamrip.py b/src/core/data/scrapers/steamrip.py index 52aaae1..961ca59 100644 --- a/src/core/data/scrapers/steamrip.py +++ b/src/core/data/scrapers/steamrip.py @@ -98,7 +98,7 @@ def filter_steamrip(query: str): Metadata = { "name" : "steamrip", - "headers" : ["Game", "Available Downloads"], + "headers" : ["Game"], "scrapeFunc" : filter_steamrip, } diff --git a/src/core/data/scrapers/uztracker.py b/src/core/data/scrapers/uztracker.py index 0746a2d..f66d415 100644 --- a/src/core/data/scrapers/uztracker.py +++ b/src/core/data/scrapers/uztracker.py @@ -29,8 +29,8 @@ def scrape_uztracker(query): posts.append(dict( title=title, + author=author, url=url, - author=author )) return posts diff --git a/src/core/interface/gui.py b/src/core/interface/gui.py index 87bc723..825db3b 100644 --- a/src/core/interface/gui.py +++ b/src/core/interface/gui.py @@ -13,6 +13,7 @@ from PySide6.QtWidgets import ( QHeaderView, QMessageBox, QTableWidget, + QTableWidgetItem, QTextEdit, QStyledItemDelegate, QStatusBar @@ -162,11 +163,13 @@ def windowCloseHelper(): class MainWindow(QtWidgets.QMainWindow, QWidget): log_signal = Signal(str) # Thread-safe signal for logging + search_results_signal = Signal(list) # and searching def __init__(self): super().__init__() MainWindow._instance = self self.log_signal.connect(self._on_log_signal) + self.search_results_signal.connect(self._on_search_results) pixmap = QPixmap() image_data = base64.b64decode(logo_base64) @@ -248,8 +251,10 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): state.trackertable.verticalHeader().setVisible(False) state.trackertable.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground) state.trackertable.viewport().setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground) - - + model = state.trackertable.model() + model.dataChanged.disconnect() + state.trackertable.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents) + class TrackerHoverDelegate(QStyledItemDelegate): def paint(self, painter, option, index): if index.row() == MainWindow._instance._tracker_hovered_row: @@ -491,8 +496,9 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): self.downloadList.setItemDelegateForColumn(0, delegate) delegate.clicked.connect(on_pause_resume_clicked) - # download button triggers - #! THIS IS TEMPORARY self.dlbutton.clicked.connect(lambda: run_thread(threading.Thread(target=download_selected, args=(state.trackertable.currentItem(), state.posts, state.posts)))) + #! FIX THIS + + self.dlbutton.clicked.connect(lambda: run_thread(threading.Thread(target=download_selected, args=(state.trackertable.currentItem(), state.posts, state.trackers[state.currenttracker]["headers"])))) container.setLayout(containerLayout) self.setCentralWidget(container) @@ -636,6 +642,24 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): self.consoleLog.verticalScrollBar().maximum() ) + def _on_search_results(self, headers): + + if state.posts is None or state.posts == []: + self.show_empty_results(True) + return + else: + self.show_empty_results(False) + + state.trackertable.clearContents() + state.trackertable.setColumnCount(len(headers)) + state.trackertable.setHorizontalHeaderLabels(headers) + state.trackertable.setRowCount(len(state.posts)) + for x, rowdata in enumerate(state.posts): + for y, data in enumerate(rowdata.values()): + state.trackertable.setItem(x, y, QTableWidgetItem(str(data))) + + self._resize_tracker_columns() + def update_image_overlay(self, new_image_path): self.image = QImage(new_image_path) self.pixmap = QPixmap.fromImage(self.image) @@ -693,9 +717,7 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): def mousePressEvent(self, event): - self.rutrackerlist.clearSelection() - self.uztrackerlist.clearSelection() - self.monkruslist.clearSelection() + state.trackertable.clearSelection() self.downloadList.clearSelection() super().mousePressEvent(event) @@ -764,11 +786,28 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): self.emptyDownload.show() self.downloadList.hide() - # thank you claude + # thanks claude + def _resize_tracker_columns(self): + header = state.trackertable.horizontalHeader() + col_count = header.count() + if col_count == 0: + return + + for i in range(col_count): + state.trackertable.resizeColumnToContents(i) + + content_widths = [header.sectionSize(i) for i in range(col_count)] + total_content_width = sum(content_widths) + remaining = state.trackertable.viewport().width() - total_content_width + extra = max(0, remaining) // col_count + + header.setSectionResizeMode(QHeaderView.ResizeMode.Fixed) + for i in range(col_count): + header.resizeSection(i, content_widths[i] + extra) + def resizeEvent(self, event): super().resizeEvent(event) - table_width = state.trackertable.viewport().width() - state.trackertable.setColumnWidth(1, int(table_width * 0.3)) + self._resize_tracker_columns() def contextMenuEvent(self, event: QContextMenuEvent): if self.downloadList.underMouse(): diff --git a/src/core/interface/utils/searchhelper.py b/src/core/interface/utils/searchhelper.py index ec36a7a..7b04010 100644 --- a/src/core/interface/utils/searchhelper.py +++ b/src/core/interface/utils/searchhelper.py @@ -1,12 +1,13 @@ from PySide6.QtWidgets import QTableWidgetItem, QHeaderView from core.utils.logging.logs import consoleLog -from core.data.scrapers.uztracker import scrape_uztracker from core.data.scrapers.rutracker import scrape_rutracker +from core.data.scrapers.uztracker import scrape_uztracker from core.data.scrapers.monkrus import scrape_m0nkrus from core.data.scrapers.steamrip import filter_steamrip from core.utils.data.state import state def return_pressed(self): + self.show_empty_results(False) search_text = self.searchbar.text() if search_text == "": consoleLog("Error: Can't search for nothing") @@ -18,18 +19,6 @@ def return_pressed(self): scrapefunc: function = tracker["scrapeFunc"] state.posts = scrapefunc(search_text) - - state.trackertable.clearContents() - if state.posts == []: - self.show_empty_results(True) - - state.trackertable.setColumnCount(len(tracker["headers"])) - state.trackertable.setHorizontalHeaderLabels(tracker["headers"]) - state.trackertable.setRowCount(len(state.posts)) - - for x, rowdata in enumerate(state.posts): - for y, data in enumerate(rowdata.values()): - state.trackertable.setItem(x, y, QTableWidgetItem(data)) - - consoleLog("[searchhelper] updated table") + from core.interface.gui import MainWindow + MainWindow._instance.search_results_signal.emit(tracker["headers"]) diff --git a/src/core/utils/network/download.py b/src/core/utils/network/download.py index 69082b0..66cdb17 100644 --- a/src/core/utils/network/download.py +++ b/src/core/utils/network/download.py @@ -37,4 +37,4 @@ def run_download_direct(magnet_uri): def seed_magnet(magnet_uri, file_path): consoleLog(f"Seeding: {magnet_uri[:60]}") - add_seed(magnet_uri, file_path) \ No newline at end of file + add_seed(magnet_uri, file_path)