From 515599f2d499056900c4ef85ed990583392e0026 Mon Sep 17 00:00:00 2001 From: Cabbagec Date: Mon, 3 Aug 2026 07:10:55 +0000 Subject: [PATCH] Recognize BitComet padding file names --- pyproject.toml | 2 +- src/archive_clients/bencode.py | 12 +++++++++++- tests/test_resources.py | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d65d527..e07c548 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "archive-clients" -version = "0.1.18" +version = "0.1.19" requires-python = ">=3.11" dependencies = ["protobuf==7.35.1", "websockets==16.0"] diff --git a/src/archive_clients/bencode.py b/src/archive_clients/bencode.py index 5640d5e..619beef 100644 --- a/src/archive_clients/bencode.py +++ b/src/archive_clients/bencode.py @@ -168,7 +168,7 @@ def _v1_files(info: dict[bytes, Any]) -> list[MetaFile]: components = [name] + [_component(part) for part in raw_path] result.append(MetaFile( "/".join(components), _length(item.get(b"length")), - _padding(item), + _padding(item) or _bitcomet_padding_name(components[-1]), )) return result @@ -223,3 +223,13 @@ def _length(value: Any) -> int: def _padding(value: dict[bytes, Any]) -> bool: attributes = value.get(b"attr", b"") return isinstance(attributes, bytes) and b"p" in attributes + + +def _bitcomet_padding_name(component: str) -> bool: + """Recognize BitComet's legacy padding-file convention. + + Such v1 torrents often omit the standard ``attr=p`` flag, but + qBittorrent/libtorrent still hides these synthetic entries from its file + API. The exact reserved prefix is the interoperable marker. + """ + return component.startswith("_____padding_file_") diff --git a/tests/test_resources.py b/tests/test_resources.py index 0618aec..f0fd3f3 100644 --- a/tests/test_resources.py +++ b/tests/test_resources.py @@ -123,7 +123,7 @@ class ResourceTests(unittest.TestCase): b"files": [ {b"length": 3, b"path": [b"first.bin"]}, { - b"attr": b"p", b"length": 5, + b"length": 5, b"path": [b"_____padding_file_5"], }, {b"length": 7, b"path": [b"last.bin"]},