This commit is contained in:
Yuvi9587
2025-08-10 09:16:31 -07:00
parent f7c4d892a8
commit 26fa3b9bc1
6 changed files with 414 additions and 288 deletions

View File

@@ -1,7 +1,7 @@
import time
import traceback
from urllib.parse import urlparse
import json # Ensure json is imported
import json
import requests
from ..utils.network_utils import extract_post_info, prepare_cookies_for_request
from ..config.constants import (
@@ -120,7 +120,8 @@ def download_from_api(
selected_cookie_file=None,
app_base_dir=None,
manga_filename_style_for_sort_check=None,
processed_post_ids=None
processed_post_ids=None,
fetch_all_first=False
):
headers = {
'User-Agent': 'Mozilla/5.0',
@@ -183,6 +184,7 @@ def download_from_api(
logger("⚠️ Page range (start/end page) is ignored when a specific post URL is provided (searching all pages for the post).")
is_manga_mode_fetch_all_and_sort_oldest_first = manga_mode and (manga_filename_style_for_sort_check != STYLE_DATE_POST_TITLE) and not target_post_id
should_fetch_all = fetch_all_first or is_manga_mode_fetch_all_and_sort_oldest_first
api_base_url = f"https://{api_domain}/api/v1/{service}/user/{user_id}"
page_size = 50
if is_manga_mode_fetch_all_and_sort_oldest_first:

View File

@@ -3,12 +3,20 @@ import requests
import json
from urllib.parse import urlparse
def fetch_server_channels(server_id, logger, cookies=None):
def fetch_server_channels(server_id, logger, cookies=None, cancellation_event=None, pause_event=None):
"""
Fetches the list of channels for a given Discord server ID from the Kemono API.
UPDATED to be pausable and cancellable.
"""
domains_to_try = ["kemono.cr", "kemono.su"]
for domain in domains_to_try:
if cancellation_event and cancellation_event.is_set():
logger(" Channel fetching cancelled by user.")
return None
while pause_event and pause_event.is_set():
if cancellation_event and cancellation_event.is_set(): break
time.sleep(0.5)
lookup_url = f"https://{domain}/api/v1/discord/channel/lookup/{server_id}"
logger(f" Attempting to fetch channel list from: {lookup_url}")
try:

View File

@@ -1934,7 +1934,8 @@ class DownloadThread(QThread):
single_pdf_mode=False,
project_root_dir=None,
processed_post_ids=None,
start_offset=0):
start_offset=0,
fetch_first=False):
super().__init__()
self.api_url_input = api_url_input
self.output_dir = output_dir
@@ -2000,6 +2001,7 @@ class DownloadThread(QThread):
self.project_root_dir = project_root_dir
self.processed_post_ids_set = set(processed_post_ids) if processed_post_ids is not None else set()
self.start_offset = start_offset
self.fetch_first = fetch_first
if self.compress_images and Image is None:
self.logger("⚠️ Image compression disabled: Pillow library not found (DownloadThread).")
@@ -2046,7 +2048,8 @@ class DownloadThread(QThread):
selected_cookie_file=self.selected_cookie_file,
app_base_dir=self.app_base_dir,
manga_filename_style_for_sort_check=self.manga_filename_style if self.manga_mode_active else None,
processed_post_ids=self.processed_post_ids_set
processed_post_ids=self.processed_post_ids_set,
fetch_all_first=self.fetch_first
)
for posts_batch_data in post_generator: