mirror of
https://github.com/RetroGameSets/RGSX.git
synced 2026-05-19 18:03:35 +02:00
Compare commits
1 Commits
v2.6.1.6
...
v2.6.1.6.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a7dad84108 |
@@ -27,7 +27,7 @@ except Exception:
|
||||
pygame = None # type: ignore
|
||||
|
||||
# Version actuelle de l'application
|
||||
app_version = "2.6.1.6"
|
||||
app_version = "2.6.1.6.1"
|
||||
|
||||
# Nombre de jours avant de proposer la mise à jour de la liste des jeux
|
||||
GAMELIST_UPDATE_DAYS = 1
|
||||
|
||||
@@ -1766,6 +1766,9 @@ def handle_controls(event, sources, joystick, screen):
|
||||
is_zip_non_supported = pending_download[3] if len(pending_download) > 3 else False
|
||||
|
||||
if is_1fichier_url(url):
|
||||
ensure_download_provider_keys(False)
|
||||
if missing_all_provider_keys():
|
||||
logger.warning("Aucune clé API - Mode gratuit 1fichier sera utilisé (attente requise)")
|
||||
task = asyncio.create_task(download_from_1fichier(url, platform, game_name, is_zip_non_supported, task_id))
|
||||
else:
|
||||
task = asyncio.create_task(download_rom(url, platform, game_name, is_zip_non_supported, task_id))
|
||||
|
||||
@@ -620,19 +620,40 @@ def download_1fichier_free_mode(url, dest_dir, session, log_callback=None, progr
|
||||
]
|
||||
|
||||
direct_link = None
|
||||
# Examine each pattern and validate the candidate link via HEAD/GET to avoid landing pages (/register, /login)
|
||||
for idx, pattern in enumerate(patterns):
|
||||
match = re.search(pattern, html, re.IGNORECASE)
|
||||
if not match:
|
||||
continue
|
||||
try:
|
||||
captured_link = match.group(1)
|
||||
except IndexError:
|
||||
logger.warning(f"1fichier: Pattern {idx} matched but no capture group(1)")
|
||||
continue
|
||||
candidate_entries: list[tuple[int, str]] = []
|
||||
seen_candidates: set[str] = set()
|
||||
|
||||
# Resolve relative links
|
||||
candidate = captured_link if captured_link.startswith(('http://', 'https://')) else urljoin(page_url, captured_link)
|
||||
for anchor_match in re.finditer(r'<a[^>]+href=[\"\']([^\"\']+)[\"\'][^>]*>(.*?)</a>', html, re.IGNORECASE | re.DOTALL):
|
||||
href = html_module.unescape(anchor_match.group(1).strip())
|
||||
anchor_text = re.sub(r'<[^>]+>', ' ', anchor_match.group(2))
|
||||
normalized_anchor_text = _normalize_1fichier_text(anchor_text)
|
||||
if not href or not normalized_anchor_text:
|
||||
continue
|
||||
if not any(token in normalized_anchor_text for token in ('download', 'telecharg', 'tlcharg', 'click', 'cliquer')):
|
||||
continue
|
||||
candidate = href if href.startswith(('http://', 'https://')) else urljoin(page_url, href)
|
||||
if candidate in seen_candidates:
|
||||
continue
|
||||
seen_candidates.add(candidate)
|
||||
candidate_entries.append((0, candidate))
|
||||
|
||||
for idx, pattern in enumerate(patterns):
|
||||
for match in re.finditer(pattern, html, re.IGNORECASE):
|
||||
try:
|
||||
captured_link = html_module.unescape(match.group(1).strip())
|
||||
except (IndexError, AttributeError):
|
||||
logger.warning(f"1fichier: Pattern {idx} matched but no usable capture group(1)")
|
||||
continue
|
||||
if not captured_link:
|
||||
continue
|
||||
candidate = captured_link if captured_link.startswith(('http://', 'https://')) else urljoin(page_url, captured_link)
|
||||
if candidate in seen_candidates:
|
||||
continue
|
||||
seen_candidates.add(candidate)
|
||||
candidate_entries.append((idx, candidate))
|
||||
|
||||
# Examine each pattern and validate the candidate link via HEAD/GET to avoid landing pages (/register, /login)
|
||||
for idx, candidate in candidate_entries:
|
||||
logger.debug(f"1fichier: Pattern {idx} matched, candidate link: {candidate}")
|
||||
|
||||
# Quick heuristic: skip known non-download endpoints
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{
|
||||
"version": "2.6.1.6"
|
||||
"version": "2.6.1.6.1"
|
||||
}
|
||||
Reference in New Issue
Block a user