From 1f4fbb845a21f9f6b23c63db7a976a9bfbbb9598 Mon Sep 17 00:00:00 2001 From: Vxrtrauter Date: Thu, 9 Oct 2025 15:10:18 +0200 Subject: [PATCH] refactor: streamline scraper functions to utilize centralized state management --- core/data/scrapers/rutracker.py | 7 ++++--- core/data/scrapers/uztracker.py | 10 ++++++---- core/data/utils/state.py | 11 +++++++++++ core/interface/gui.py | 24 ++++++++++++------------ core/network/aria2_wrapper.py | 5 ----- 5 files changed, 33 insertions(+), 24 deletions(-) create mode 100644 core/data/utils/state.py diff --git a/core/data/scrapers/rutracker.py b/core/data/scrapers/rutracker.py index 0d08748..9766128 100644 --- a/core/data/scrapers/rutracker.py +++ b/core/data/scrapers/rutracker.py @@ -1,8 +1,9 @@ import requests +from ..utils.state import state -def scrape_rutracker(search_text, debug, server): - search = requests.get(f"{server}/search/{search_text}") +def scrape_rutracker(search_text): + search = requests.get(f"{state.api_url}/search/{search_text}") if search: try: data = search.json() @@ -10,7 +11,7 @@ def scrape_rutracker(search_text, debug, server): resultlinks = data["links"] return resulttitles, resultlinks except Exception: - if debug: + if state.debug: print("No results found / No response from server") return None diff --git a/core/data/scrapers/uztracker.py b/core/data/scrapers/uztracker.py index bf20e6a..435fbe5 100644 --- a/core/data/scrapers/uztracker.py +++ b/core/data/scrapers/uztracker.py @@ -2,6 +2,8 @@ import requests import asyncio import aiohttp from bs4 import BeautifulSoup +from ..utils.state import state + global url_uztracker url_uztracker = "https://uztracker.net/tracker.php?nm=" @@ -24,7 +26,7 @@ async def init_uztracker(): asyncio.run(init_uztracker()) -async def scrape_uztracker(search, debug, max_results=450): +async def scrape_uztracker(search, max_results=450): if up: result = False global results @@ -36,7 +38,7 @@ async def scrape_uztracker(search, debug, max_results=450): for start in range(0, max_results, per_page): search_url = url_uztracker + search + f"&start={start}" - if debug: + if state.debug: print(search_url) async with aiohttp.ClientSession() as session: @@ -72,7 +74,7 @@ async def scrape_uztracker(search, debug, max_results=450): return resulttitles, results -def get_post_title(post_url, debug): +def get_post_title(post_url): if up: response = requests.get(post_url) soup = BeautifulSoup(response.text, 'html.parser') @@ -80,7 +82,7 @@ def get_post_title(post_url, debug): if maintitle: return maintitle.text else: - if debug: + if state.debug: print("Program not found") else: print("Error: Uztracker down") diff --git a/core/data/utils/state.py b/core/data/utils/state.py new file mode 100644 index 0000000..e042842 --- /dev/null +++ b/core/data/utils/state.py @@ -0,0 +1,11 @@ +from dataclasses import dataclass + + +@dataclass +class AppState: + debug: bool = False + tracker: str = "rutracker" + api_url: str = "https://api.michijackson.xyz" + + +state = AppState() \ No newline at end of file diff --git a/core/interface/gui.py b/core/interface/gui.py index 215128f..7efa83d 100644 --- a/core/interface/gui.py +++ b/core/interface/gui.py @@ -24,17 +24,17 @@ from core.data.scrapers.uztracker import scrape_uztracker from core.data.scrapers.rutracker import scrape_rutracker from core.data.utils.tracker import get_item_index from core.data.utils.settings import save_settings -from core.network.aria2_integration import dlprogress, set_threads +from core.data.utils.state import state +from core.network.aria2_integration import dlprogress def state_debug(setting): - global debug if setting is True: - debug = True + state.debug = True else: - debug = False + state.debug = False def pass_aria(aria): @@ -148,7 +148,7 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): def settings_dialog(self): - if debug: + if state.debug: print("Settings dialog opened") dialog = QDialog(self) dialog.setWindowTitle("Settings") @@ -223,11 +223,11 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): def download_selected(self): item = self.softwareList.currentItem() if item is not None: - if debug: + if state.debug: print(f"network {self.softwareList.currentItem().text()}") - self.run_thread(threading.Thread(target=get_item_index, args=(tracker, self.softwareList.currentItem().text(), self.postnames, self.postlinks, debug))) + self.run_thread(threading.Thread(target=get_item_index, args=(tracker, self.softwareList.currentItem().text(), self.postnames, self.postlinks, state.debug))) else: - if debug: + if state.debug: print("No item selected for download.") # add gui notification for no item selected @@ -235,15 +235,15 @@ class MainWindow(QtWidgets.QMainWindow, QWidget): def return_pressed(self): search_text = self.searchbar.text() if search_text == "": - if debug: + if state.debug: print("Error: Can't search for nothing") return - if debug: + if state.debug: print("User searched for:", search_text) if tracker == "uztracker": - response = asyncio.run(scrape_uztracker(search_text, debug)) + response = asyncio.run(scrape_uztracker(search_text)) if tracker == "rutracker": - response = asyncio.run(scrape_rutracker(search_text, debug, api_url)) + response = asyncio.run(scrape_rutracker(search_text)) if response: self.postnames, self.postlinks = response self.softwareList.clear() diff --git a/core/network/aria2_wrapper.py b/core/network/aria2_wrapper.py index ff9747b..c3be92c 100644 --- a/core/network/aria2_wrapper.py +++ b/core/network/aria2_wrapper.py @@ -8,9 +8,4 @@ def add_magnet(uri): aria2.add_magnet(uri) -def terminate(): - return - - -