feat: enhance error handling and logging in various modules; improve timeout settings for network requests / fix basic issues

This commit is contained in:
Vxrtrauter
2026-03-08 13:32:30 +01:00
parent 43cbfe056c
commit 9ba11bfa78
10 changed files with 33 additions and 28 deletions
+3 -1
View File
@@ -16,7 +16,9 @@ def scrape_uztracker(query):
links = soup.find_all('tr', class_="tCenter hl-tr", id=lambda x: x and x.startswith('tor_')) links = soup.find_all('tr', class_="tCenter hl-tr", id=lambda x: x and x.startswith('tor_'))
for link in links: for link in links:
theme_link = link.find('a', class_="genmed tLink", href=lambda x: x and x.startswith('./viewtopic')) theme_link = link.find('a', class_="genmed tLink", href=lambda x: x and x.startswith('./viewtopic'))
if not theme_link or not theme_link.b:
continue
url = urljoin(base_url, theme_link['href']) url = urljoin(base_url, theme_link['href'])
title = theme_link.b.text title = theme_link.b.text
author_link = link.find('a', class_="med") author_link = link.find('a', class_="med")
-2
View File
@@ -224,8 +224,6 @@ def settings_dialog(self):
else: else:
interface_select.setCurrentIndex(0) interface_select.setCurrentIndex(0)
interface_select.setFixedWidth(180)
interface_select.setFixedHeight(30)
interface_select.setFixedWidth(180) interface_select.setFixedWidth(180)
interface_select.setFixedHeight(30) interface_select.setFixedHeight(30)
interface_layout.addWidget(interface_select) interface_layout.addWidget(interface_select)
+5 -10
View File
@@ -30,7 +30,6 @@ import libtorrent as lt
import sys import sys
import json import json
import base64 import base64
import winreg
from core.utils.logging.logs import consoleLog, remove_download_log, flush_log_buffer from core.utils.logging.logs import consoleLog, remove_download_log, flush_log_buffer
from core.utils.general.wrappers import run_thread from core.utils.general.wrappers import run_thread
from core.utils.data.state import state from core.utils.data.state import state
@@ -157,17 +156,13 @@ def download_update(latest_version):
response = r.get(url, allow_redirects=True, stream=True) response = r.get(url, allow_redirects=True, stream=True)
total = int(response.headers.get("content-length", 0)) total = int(response.headers.get("content-length", 0))
downloaded = 0 downloaded = 0
chunks = []
for chunk in response.iter_content(chunk_size=65536):
chunks.append(chunk)
downloaded += len(chunk)
if total > 0:
progress.setValue(int(downloaded * 100 / total))
QtWidgets.QApplication.processEvents()
with open(installer_path, "wb") as f: with open(installer_path, "wb") as f:
for chunk in chunks: for chunk in response.iter_content(chunk_size=65536):
f.write(chunk) f.write(chunk)
downloaded += len(chunk)
if total > 0:
progress.setValue(int(downloaded * 100 / total))
QtWidgets.QApplication.processEvents()
if not os.path.exists(installer_path): if not os.path.exists(installer_path):
progress.close() progress.close()
+1 -1
View File
@@ -50,7 +50,7 @@ def return_pressed(self):
elif state.tracker is not None: elif state.tracker is not None:
state.posts = scrapers[state.tracker](search_text) state.posts = scrapers[state.tracker](search_text)
if state.posts == []: if not state.posts:
consoleLog(f"No Results for {search_text}") consoleLog(f"No Results for {search_text}")
state.tracker_list[state.tracker].clear() state.tracker_list[state.tracker].clear()
self.show_empty_results(True) self.show_empty_results(True)
+14 -8
View File
@@ -74,10 +74,13 @@ def add_download(magnet_uri, dl_path=state.download_path):
consoleLog("Skipping Downloading, download already running... ") consoleLog("Skipping Downloading, download already running... ")
return False return False
magnetdl = lt.parse_magnet_uri(magnet_uri) try:
magnetdl.save_path = dl_path magnetdl = lt.parse_magnet_uri(magnet_uri)
magnetdl.save_path = dl_path
download = state.dl_session.add_torrent(magnetdl) download = state.dl_session.add_torrent(magnetdl)
except Exception as e:
consoleLog(f"Failed to add torrent: {e}")
return False
state.active_downloads[magnet_uri] = download state.active_downloads[magnet_uri] = download
consoleLog(f"Added {magnet_uri} to downloads") consoleLog(f"Added {magnet_uri} to downloads")
@@ -95,10 +98,13 @@ def add_seed(magnet_uri, file_path):
consoleLog("Already seeding this torrent") consoleLog("Already seeding this torrent")
return False return False
magnetdl = lt.parse_magnet_uri(magnet_uri) try:
magnetdl.save_path = os.path.dirname(file_path) magnetdl = lt.parse_magnet_uri(magnet_uri)
magnetdl.save_path = os.path.dirname(file_path)
handle = state.dl_session.add_torrent(magnetdl) handle = state.dl_session.add_torrent(magnetdl)
except Exception as e:
consoleLog(f"Failed to add seed: {e}")
return False
state.active_downloads[magnet_uri] = handle state.active_downloads[magnet_uri] = handle
state.seeded_magnets.add(magnet_uri) state.seeded_magnets.add(magnet_uri)
return True return True
+1 -1
View File
@@ -30,7 +30,7 @@ def get_item_url(item, posts, post_titles): # softwarelist currentitem, post lis
def get_magnet_link(post_url): def get_magnet_link(post_url):
try: try:
response = requests.get(post_url) # eventually impl. cloudscraper response = requests.get(post_url, timeout=15) # eventually impl. cloudscraper
consoleLog("Sent Request to retrieve Magnet Link...") consoleLog("Sent Request to retrieve Magnet Link...")
response.raise_for_status() response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser') soup = BeautifulSoup(response.text, 'html.parser')
+4 -1
View File
@@ -22,7 +22,10 @@ def check_downloads(downloads):
for download in downloads: for download in downloads:
if os.path.exists(download.path): if os.path.exists(download.path):
consoleLog(f"Existing Download: {download.title}") consoleLog(f"Existing Download: {download.title}")
seed_magnet(download.magnet_uri, download.path) try:
seed_magnet(download.magnet_uri, download.path)
except Exception as e:
consoleLog(f"Failed to seed {download.title}: {e}")
else: else:
consoleLog(f"Inexistent Download: {download.title}") consoleLog(f"Inexistent Download: {download.title}")
remove_download_log(download.magnet_uri) remove_download_log(download.magnet_uri)
+1 -1
View File
@@ -89,7 +89,7 @@ def _remove_download_log_inner(magnet_uri) -> DownloadList:
magnet_link = (magnet_uri or "").strip() magnet_link = (magnet_uri or "").strip()
title = next((getattr(d, 'title', 'Unknown') for d in downloads if (getattr(d, 'magnet_uri', None) or '').strip() == magnet_link or (getattr(d, 'url', None) or '').strip() == magnet_link)) title = next((getattr(d, 'title', 'Unknown') for d in downloads if (getattr(d, 'magnet_uri', None) or '').strip() == magnet_link or (getattr(d, 'url', None) or '').strip() == magnet_link), 'Unknown')
downloads = [d for d in downloads if (getattr(d, 'magnet_uri', None) or "").strip() != magnet_link and (getattr(d, 'url', None) or "").strip() != magnet_link] downloads = [d for d in downloads if (getattr(d, 'magnet_uri', None) or "").strip() != magnet_link and (getattr(d, 'url', None) or "").strip() != magnet_link]
consoleLog(f"Removed {title} from Log File") consoleLog(f"Removed {title} from Log File")
+2 -2
View File
@@ -4,11 +4,11 @@ from core.utils.logging.logs import consoleLog
def check_for_updates(): def check_for_updates():
url = f"https://api.github.com/repos/KeksPirates/SoftwareManager/releases" url = f"https://api.github.com/repos/KeksPirates/SoftwareManager/releases"
response = requests.get(url) response = requests.get(url, timeout=15)
if response.status_code != 200: if response.status_code != 200:
consoleLog(f"Failed to fetch releases: {response.status_code}") consoleLog(f"Failed to fetch releases: {response.status_code}")
exit(1) return None, None
releases = response.json() releases = response.json()
releases.sort(key=lambda r: r["published_at"], reverse=True) releases.sort(key=lambda r: r["published_at"], reverse=True)
+2 -1
View File
@@ -56,7 +56,8 @@ def main():
consoleLog("Started Thread: check_completed") consoleLog("Started Thread: check_completed")
run_thread(threading.Thread(target=check_deleted_files, args=(shutdown_event,), daemon=True)) run_thread(threading.Thread(target=check_deleted_files, args=(shutdown_event,), daemon=True))
consoleLog("Started Thread: check_deleted_files") consoleLog("Started Thread: check_deleted_files")
check_downloads(downloads) run_thread(threading.Thread(target=check_downloads, args=(downloads,)))
consoleLog("Started Thread: check_downloads")
elapsed = time.perf_counter() - start_time elapsed = time.perf_counter() - start_time
consoleLog(f"Initialization completed in {elapsed:.2f}s. Launching GUI") consoleLog(f"Initialization completed in {elapsed:.2f}s. Launching GUI")
run_gui() run_gui()