update download plugin
This commit is contained in:
@@ -429,9 +429,11 @@ def prepare_magnet(
|
||||
def _flatten_files_with_relpath(items: Any) -> Iterable[Dict[str, Any]]:
|
||||
for node in AllDebrid._flatten_files(items):
|
||||
enriched = dict(node)
|
||||
enriched.setdefault("name", node.get("n") or node.get("name"))
|
||||
enriched.setdefault("link", node.get("l") or node.get("link"))
|
||||
rel = node.get("_relpath") or node.get("relpath")
|
||||
if not rel:
|
||||
name = node.get("n") or node.get("name")
|
||||
name = enriched.get("name")
|
||||
rel = str(name or "").strip()
|
||||
enriched["relpath"] = rel
|
||||
yield enriched
|
||||
@@ -447,7 +449,7 @@ def download_magnet(
|
||||
path_from_result: Callable[[Any], Path],
|
||||
on_emit: Callable[[Path, str, str, Dict[str, Any]], None],
|
||||
) -> tuple[int, Optional[int]]:
|
||||
client, magnet_id, _magnet_info = prepare_magnet(magnet_spec, config)
|
||||
client, magnet_id, magnet_info = prepare_magnet(magnet_spec, config)
|
||||
if client is None or magnet_id is None:
|
||||
return 0, None
|
||||
|
||||
@@ -486,6 +488,11 @@ def download_magnet(
|
||||
log(f"AllDebrid magnet {magnet_id} produced no files", file=sys.stderr)
|
||||
return 0, magnet_id
|
||||
|
||||
magnet_folder_name = _resolve_alldebrid_folder_name(
|
||||
magnet_info,
|
||||
fallback_metadata=magnet_files,
|
||||
magnet_id=magnet_id,
|
||||
)
|
||||
downloaded = 0
|
||||
for node in _flatten_files_with_relpath(file_nodes):
|
||||
file_url = str(node.get("link") or "").strip()
|
||||
@@ -494,15 +501,12 @@ def download_magnet(
|
||||
if not file_url or not relpath:
|
||||
continue
|
||||
|
||||
target_path = final_output_dir
|
||||
rel_path_obj = Path(relpath)
|
||||
output_dir = target_path
|
||||
if rel_path_obj.parent:
|
||||
output_dir = target_path / rel_path_obj.parent
|
||||
try:
|
||||
output_dir.mkdir(parents=True, exist_ok=True)
|
||||
except Exception:
|
||||
output_dir = target_path
|
||||
output_dir = adjust_output_dir_for_alldebrid(
|
||||
final_output_dir,
|
||||
{"folder": magnet_folder_name, "relpath": relpath},
|
||||
magnet_files,
|
||||
)
|
||||
|
||||
try:
|
||||
result_obj = download_direct_file(
|
||||
@@ -519,6 +523,7 @@ def download_magnet(
|
||||
downloaded_path = path_from_result(result_obj)
|
||||
metadata = {
|
||||
"magnet_id": magnet_id,
|
||||
"folder": magnet_folder_name,
|
||||
"relpath": relpath,
|
||||
"name": file_name,
|
||||
}
|
||||
@@ -627,6 +632,29 @@ def adjust_output_dir_for_alldebrid(
|
||||
return output_dir
|
||||
|
||||
|
||||
def _resolve_alldebrid_folder_name(
|
||||
metadata: Any,
|
||||
*,
|
||||
fallback_metadata: Any = None,
|
||||
magnet_id: Optional[int] = None,
|
||||
) -> str:
|
||||
sources = [
|
||||
source
|
||||
for source in (metadata, fallback_metadata)
|
||||
if isinstance(source, dict)
|
||||
]
|
||||
for key in ("folder", "magnet_name", "filename", "name"):
|
||||
for source in sources:
|
||||
value = str(source.get(key) or "").strip()
|
||||
if value:
|
||||
return value
|
||||
for source in sources:
|
||||
value = str(source.get("hash") or "").strip()
|
||||
if value:
|
||||
return value
|
||||
return f"magnet-{magnet_id}" if magnet_id is not None else "download"
|
||||
|
||||
|
||||
class AllDebrid(TablePluginMixin, Provider):
|
||||
"""AllDebrid account provider with magnet folder/file browsing and downloads.
|
||||
|
||||
@@ -1278,13 +1306,27 @@ class AllDebrid(TablePluginMixin, Provider):
|
||||
log(f"AllDebrid magnet {magnet_id} has no downloadable files", file=sys.stderr)
|
||||
return 0
|
||||
|
||||
magnet_metadata: Dict[str, Any] = {}
|
||||
try:
|
||||
for magnet in client.magnet_list() or []:
|
||||
if not isinstance(magnet, dict):
|
||||
continue
|
||||
try:
|
||||
listed_id = int(magnet.get("id") or 0)
|
||||
except (TypeError, ValueError):
|
||||
continue
|
||||
if listed_id == magnet_id:
|
||||
magnet_metadata = magnet
|
||||
break
|
||||
except Exception:
|
||||
magnet_metadata = {}
|
||||
|
||||
magnet_path_metadata: Dict[str, Any] = {}
|
||||
magnet_folder_name = str(
|
||||
magnet_files.get("filename")
|
||||
or magnet_files.get("name")
|
||||
or magnet_files.get("hash")
|
||||
or f"magnet-{magnet_id}"
|
||||
).strip()
|
||||
magnet_folder_name = _resolve_alldebrid_folder_name(
|
||||
magnet_metadata,
|
||||
fallback_metadata=magnet_files,
|
||||
magnet_id=magnet_id,
|
||||
)
|
||||
if magnet_folder_name:
|
||||
magnet_path_metadata["folder"] = magnet_folder_name
|
||||
|
||||
@@ -1340,6 +1382,7 @@ class AllDebrid(TablePluginMixin, Provider):
|
||||
downloaded_path = path_from_result(result_obj)
|
||||
metadata = {
|
||||
"magnet_id": magnet_id,
|
||||
"folder": magnet_folder_name,
|
||||
"relpath": relpath,
|
||||
"name": file_name,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user