Compare commits

...

7 Commits

Author SHA1 Message Date
Vxrtrauter b573ca8fed fix: download logging for already completed downloads & improve logging for certain parts of the program 2026-02-10 02:20:14 +01:00
shayaa 8a45d71655 Revise README for clarity and format changes
Updated README to clarify usage instructions and dependencies format.
2026-02-10 01:48:51 +01:00
shayaa 0c7bc426db Change code block syntax from sh to yml 2026-02-10 01:48:25 +01:00
shayaa 1f06a19c17 Change code block language from py to sh 2026-02-10 01:48:03 +01:00
Vxrtrauter da92c4ab0a Merge branch 'main' of https://github.com/KeksPirates/SoftwareManager 2026-02-10 01:47:29 +01:00
Vxrtrauter f6e3ff4f27 docs: update README to clarify features and installation instructions 2026-02-10 01:47:27 +01:00
KeksNino 88042b2d3d fix: downloads randomly resuming after a few seconds when paused
credits to claude opus 4.5, i could not figure this out
2026-02-09 23:17:18 +01:00
4 changed files with 50 additions and 15 deletions
+37 -10
View File
@@ -1,11 +1,11 @@
# SoftwareManager - A Download Manager/Launcher
SoftwareManager is a Python-based GUI/TUI tool that simplifies downloading and managing free software from various sources.
# SoftwareManager
SoftwareManager is a Python-based GUI tool that simplifies searching and downloading software from various sources, including Rutracker, Uztracker and the official M0nkrus Telegram channel.
## Features
- VPN Binding (impl. soon)
- Bandwidth/Download speed limiting
- Start downloads via a predefined magnet URI.
- View detailed download information (name, speed, and status).
- Searching & Downloading Software from various pages
- Network Interface Binding
- Simple UI, Speed Limiting etc.
- No Logins required
## Installation
1. Download the binary file for your operating system from releases
@@ -14,18 +14,40 @@ SoftwareManager is a Python-based GUI/TUI tool that simplifies downloading and m
## Manual Installation
1. Ensure Python 3.x is installed on your system.
2. Clone the Repository:
```bash
git clone https://github.com/KeksPirates/SoftwareManager.git && cd SoftwareManager
```
2. Install Dependencies:
```bash
pip install -r requirements.txt
```
3. Run main.py:
```bash
python3 main.py
python main.py
```
## Notes
- If you want to host your own server, clone the server branch of this repo, enter your cookie for rutracker.org and run server.py. Detailed Instructions on how to get your rutracker cookie are in the README of its branch.
- This tool is for educational purposes only. Use it responsibly.
## Additional Information
- SoftwareManager is still in Development and most likely contains issues. Please report any bugs you find via the Issues tab. Contributions are also greatly appreciated.
- MacOS Builds haven't been properly tested - We're thankful to receive feedback.
- If you want to host your own server, clone the server branch of this repo, enter your cookie for rutracker.org and run server.py. Detailed Instructions on how to get your rutracker cookie are in the README of the server branch.
## Python Dependencies
(also included in requirements.txt)
```bash
requests (2.32.2)
PySide6 (6.10.1)
beautifulsoup (44.13.5)
darkdetect (0.7.1)
pyinstaller (6.15.0)
PyQtDarkTheme-fork (2.3.4)
aiohttp (3.13.0)
plyer (2.1.0)
psutil (7.1.0)
libtorrent (2.0.11)
libtorrent-windows-dll (0.0.3)
```
## Activity
@@ -41,6 +63,11 @@ SoftwareManager is a Python-based GUI/TUI tool that simplifies downloading and m
</picture>
</a>
## Contributors
<a href="https://github.com/KeksPirates/SoftwareManager/graphs/contributors">
<img src="https://contrib.rocks/image?repo=KeksPirates/SoftwareManager" />
</a>
---
**Disclaimer:** SoftwareManager is intended for legal and ethical use only. Ensure compliance with applicable laws and regulations when using this tool.
+4 -1
View File
@@ -285,10 +285,13 @@ class MainWindow(QtWidgets.QMainWindow, QWidget):
subprocess.Popen(["open", save_path])
return
if status.paused:
is_paused = bool(magnetdl.flags() & lt.torrent_flags.paused)
if is_paused:
magnetdl.set_flags(lt.torrent_flags.auto_managed)
magnetdl.resume()
consoleLog(f"Resumed download: {status.name}", True)
else:
magnetdl.unset_flags(lt.torrent_flags.auto_managed)
magnetdl.pause()
consoleLog(f"Paused download: {status.name}", True)
+3 -3
View File
@@ -36,7 +36,7 @@ def init_session():
settings["listen_interfaces"] = f"{interface_ip}:6881"
consoleLog(f"Binding to Interface IP: {interface_ip}")
else:
consoleLog(f"Error finding IP for Interface {state.bound_interface}")
consoleLog(f"Skipping Binding, no Interface set. ({state.bound_interface})")
state.dl_session.apply_settings(settings)
@@ -51,7 +51,7 @@ def add_download(magnet_uri, dl_path=state.download_path):
init_session()
if magnet_uri in state.active_downloads:
consoleLog("Skipping, download already running...")
consoleLog("Skipping Downloading, download already running...")
return
magnetdl = lt.parse_magnet_uri(magnet_uri)
@@ -114,7 +114,7 @@ def update_settings():
settings["listen_interfaces"] = f"{interface_ip}:6881"
consoleLog(f"Binding to Interface IP: {interface_ip}")
else:
consoleLog(f"Error finding IP for Interface {state.bound_interface}")
consoleLog(f"Skipping Binding, no Interface set. ({state.bound_interface})")
state.dl_session.apply_settings(settings)
+6 -1
View File
@@ -24,7 +24,12 @@ def add_download_log(title, url, magnet_uri, completed) -> DownloadList:
if any(d.magnet_uri == magnet_uri or d.url == url for d in downloads):
consoleLog("Skipped Logging, download already in file")
if magnet_uri in state.active_downloads:
consoleLog("Skipping Logging, download already running...")
return
consoleLog("File already in Log, updating Download State...")
hash = extract_hash_from_magnet(magnet_uri)
update_download_completed_by_hash(hash, False)
return DownloadList(data=downloads, count=len(downloads)) # thanks again claude (im stupid)