hh
This commit is contained in:
@@ -288,14 +288,20 @@ class ZeroTier(Store):
|
||||
url += f"{sep}api_key={self._api_key}"
|
||||
return url
|
||||
|
||||
def download_to_temp(self, file_hash: str, temp_root: Optional[Path] = None, suffix: Optional[str] = None) -> Optional[Path]:
|
||||
def download_to_temp(
|
||||
self,
|
||||
file_hash: str,
|
||||
temp_root: Optional[Path] = None,
|
||||
suffix: Optional[str] = None,
|
||||
progress_callback: Optional[Callable[[int, int], None]] = None,
|
||||
) -> Optional[Path]:
|
||||
"""Download a file from the remote peer to a local temporary file."""
|
||||
import os
|
||||
import httpx
|
||||
import tempfile
|
||||
|
||||
if self._service == "hydrus":
|
||||
return None
|
||||
return None
|
||||
|
||||
url = self.get_file(file_hash)
|
||||
if not url or not isinstance(url, str) or not url.startswith("http"):
|
||||
@@ -314,21 +320,32 @@ class ZeroTier(Store):
|
||||
fd, tmp_path = tempfile.mkstemp(dir=str(temp_root), suffix=suffix)
|
||||
else:
|
||||
fd, tmp_path = tempfile.mkstemp(suffix=suffix)
|
||||
|
||||
os_fd = os.fdopen(fd, 'wb')
|
||||
|
||||
|
||||
os_fd = os.fdopen(fd, "wb")
|
||||
|
||||
headers = {}
|
||||
if self._api_key:
|
||||
headers["X-API-Key"] = self._api_key
|
||||
|
||||
downloaded = 0
|
||||
total = 0
|
||||
with httpx.stream("GET", url, headers=headers, timeout=self._timeout) as r:
|
||||
r.raise_for_status()
|
||||
for chunk in r.iter_bytes():
|
||||
os_fd.write(chunk)
|
||||
|
||||
total = int(r.headers.get("Content-Length", 0))
|
||||
# Use a larger chunk size for ZeroTier/P2P efficiency
|
||||
for chunk in r.iter_bytes(chunk_size=128 * 1024):
|
||||
if chunk:
|
||||
os_fd.write(chunk)
|
||||
downloaded += len(chunk)
|
||||
if progress_callback:
|
||||
try:
|
||||
progress_callback(downloaded, total)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
os_fd.close()
|
||||
return Path(tmp_path)
|
||||
|
||||
|
||||
except Exception as exc:
|
||||
debug(f"ZeroTier download_to_temp failed for {file_hash}: {exc}")
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user