download is in download.py, needs to move

This commit is contained in:
nosch
2026-03-09 16:59:05 +01:00
parent ec950b751b
commit 39522a4068
7 changed files with 79 additions and 36 deletions
+4 -3
View File
@@ -35,7 +35,7 @@ def _get_telegram_posts():
for bubble in bubbles:
post_txt = bubble.find("div", class_="tgme_widget_message_text js-message_text")
if not post_txt or not post_txt.b:
if not post_txt is None or not post_txt.b is None:
continue
title = post_txt.b.text
@@ -75,13 +75,14 @@ def scrape_m0nkrus(query):
def get_magnet(post: Dict):
_, post_links, _, _, _ = format_data([post])
return post_links[0]
return get_magnet_link(post_links[0])
Metadata = {
"name" : "m0nkrus",
"headers" : ["Post Title", "Author"],
"scrapeFunc" : scrape_m0nkrus,
""
"linkFunc" : get_magnet,
"isMagnet" : True,
}
def init_m0nkrus():
+4 -4
View File
@@ -1,5 +1,6 @@
import requests
import re
from core.utils.logging.loghandler import consoleLog
def scrape_gofile(url):
@@ -18,13 +19,12 @@ def scrape_gofile(url):
f"https://api.gofile.io/contents/{filetoken}",
headers=headers,
)
try:
temp: dict = r.json()["data"]["children"]
child = [key for key in temp.keys()]
return temp[child[0]]["link"]
except:
consoleLog("gofile didnt auth you, either the api has changed\n or you sent to many requests, please try again later.\n If it still doesnt work please open an issue on Github.")
out = scrape_gofile("https://gofile.io/d/tvvzAD")
print(out)
+4 -3
View File
@@ -1,6 +1,7 @@
import requests
from core.utils.data.state import state
from core.utils.logging.logs import consoleLog
from core.utils.data.tracker import get_magnet_link
from core.utils.network.jsonhandler import split_data, format_data
from typing import Dict
@@ -30,15 +31,15 @@ def scrape_rutracker(query):
return []
def get_magnet_link(post: Dict):
def get_magnet(post: Dict):
_, post_links, _, _, _ = format_data([post])
return post_links[0]
return get_magnet_link(post_links[0])
Metadata = {
"name" : "rutracker",
"headers" : ["Post Title", "Author", "Seeders", "Leechers"],
"scrapeFunc" : scrape_rutracker,
"linkFunc" : get_magnet_link,
"linkFunc" : get_magnet,
"isMagnet" : True,
}
+10 -5
View File
@@ -1,12 +1,13 @@
import os
from bs4 import BeautifulSoup
from fuzzyfinder.main import fuzzyfinder
import requests
import re
import time
import webbrowser
from typing import Generator
from core.data.scrapers.provider.buzzheavier import scrape_buzzheavier
from core.data.scrapers.provider.gofile import scrape_gofile
from typing import Generator, Dict
from core.utils.data.state import state
from core.utils.logging.logs import consoleLog
@@ -94,12 +95,14 @@ def get_download_link(post: Dict):
links = scrape_steamrip_game_downloads(url)
best = ""
for link in links:
if link[0] != "h":
if link[0] == "h":
best = link
break
if links.index(best) < 2:
return best
if links.index(best) == 0:
return scrape_buzzheavier(best)
elif links.index(best) == 1:
return scrape_gofile(best)
else:
consoleLog("cant scrape this cuz of captcha... opening in the browser")
webbrowser.open(best)
@@ -118,6 +121,8 @@ Metadata = {
"name" : "steamrip",
"headers" : ["Game"],
"scrapeFunc" : filter_steamrip,
"linkFunc" : get_download_link,
"isMagnet" : False,
}
def init_steamrip():
+7 -5
View File
@@ -3,6 +3,7 @@ from bs4 import BeautifulSoup
from urllib.parse import urljoin
from core.utils.logging.logs import consoleLog
from core.utils.data.state import state
from core.utils.data.tracker import get_magnet_link
from typing import Dict
@@ -39,16 +40,17 @@ def scrape_uztracker(query):
consoleLog(f"Failed to fetch {search_url}: {e}")
return None
def get_magnet(post: Dict):
item = "https://uztracker.net/" + post["url"].lstrip("./")
return get_magnet_link(item)
Metadata = {
"name" : "uztracker",
"headers" : ["Post Title", "Author"],
"searchkey" : None,
"scrapeFunc" : scrape_uztracker,
"scrapeSearches" : True,
"linkFunc" : get_magnet,
"isMagnet" : True,
}
def get_magnet_link(post: Dict):
item = "https://uztracker.net/" + post["url"].lstrip("./")
return item
def init_uztracker():
state.trackers.update({Metadata["name"] : Metadata})
+1 -3
View File
@@ -540,9 +540,7 @@ class MainWindow(QtWidgets.QMainWindow, QWidget):
self.downloadList.setItemDelegateForColumn(0, delegate)
delegate.clicked.connect(on_pause_resume_clicked)
#! FIX THIS
self.dlbutton.clicked.connect(lambda: run_thread(threading.Thread(target=download_selected, args=(state.trackertable.currentItem(), state.posts))))
self.dlbutton.clicked.connect(lambda: run_thread(threading.Thread(target=download_selected, args=(state.trackertable.selectedItems(),))))
container.setLayout(containerLayout)
self.setCentralWidget(container)
+46 -10
View File
@@ -1,12 +1,15 @@
from PySide6.QtWidgets import QTableWidgetItem
from core.utils.logging.logs import consoleLog
from core.utils.data.tracker import get_magnet_link
from core.network.libtorrent_wrapper import add_download
from core.network.libtorrent_wrapper import add_magnet
from core.utils.general.wrappers import run_thread
from core.utils.logging.logs import add_download_log
from core.network.libtorrent_int import add_seed
from core.utils.data.state import state
from urllib.parse import urlparse, unquote
import threading
import re
import requests
import random
def download_selected(items: list[QTableWidgetItem]):
@@ -21,19 +24,52 @@ def download_selected(items: list[QTableWidgetItem]):
if text != "" and text not in seen:
seen.add(text)
consoleLog(f"Downloading {text}")
run_thread(threading.Thread(target=run_download, args=(text, state.posts[item.row()])))
run_thread(threading.Thread(target=run_download, args=(state.posts[item.row()],)))
def run_download(item, posts, post_titles):
post_url = get_item_url(item, posts, post_titles)
consoleLog(f"Selected URL: {post_url}")
magnet_uri = get_magnet_link(post_url)
def get_direct_filename(url: str, headers) -> str:
cd = headers.get('content-disposition', '')
if cd:
match = re.search(r'filename\*=UTF-8\'\'(.+)', cd) # RFC 5987 encoded
if match:
return unquote(match.group(1))
match = re.search(r'filename="?([^";\n]+)"?', cd)
if match:
return match.group(1).strip()
if add_download(magnet_uri):
add_download_log(item, post_url, magnet_uri, False)
path = urlparse(url).path
name = path.split('/')[-1]
if name:
return unquote(name)
return f"download{random.randint(1,9999)}" #avoid collision
def filedownload(url):
try:
with requests.get(url, stream=True, timeout=30) as r:
r.raise_for_status()
name = get_direct_filename(url, r.headers)
with open(state.download_path + f"/{name}", 'wb') as f:
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)
consoleLog(f"Finished downloading {name}")
except Exception as e:
consoleLog(f"Error downloading: {e}")
def run_download(post):
linkfunc = state.trackers[state.currenttracker]["linkFunc"]
ismagnet = state.trackers[state.currenttracker]["isMagnet"]
link = linkfunc(post)
if ismagnet:
add_magnet(link)
else:
filedownload(link)
def run_download_direct(magnet_uri):
consoleLog(f"Direct download: {magnet_uri[:60]}")
add_download(magnet_uri)
add_magnet(magnet_uri)
add_download_log("Direct Download", "", magnet_uri, False)
def seed_magnet(magnet_uri, file_path):