AIOStreams compatibility
This release resolves all known incompatibilities with AIOStreams, making nzbdav-rs a fully working NzbDAV backend for Stremio streaming. Set nzbdavUrl = http://your-host:8080/dav in AIOStreams — WebDAV and the SABnzbd API both resolve from that single URL.
What was broken (and is now fixed)
History item UUID mismatch — streaming never completed
move_to_history() was generating a fresh UUID for each history entry instead of reusing the queue item's UUID. AIOStreams polls mode=history&nzo_ids=<id> using the UUID returned by addurl — the mismatch meant polling never matched, so every stream request timed out.
Fix: history entries now inherit the queue item's UUID.
WebDAV PROPFIND hrefs missing the /dav mount prefix — video redirected to 404
nzbdav-rs mounts WebDAV under /dav via Axum's .nest(), which strips the prefix before the handler runs. PROPFIND responses were returning hrefs like /content/Movies/Film/film.mkv without the /dav prefix. AIOStreams's webdav-client computed these as /../content/… (a relative traversal), which resolved to the frontend fallback and returned HTML instead of video.
Fix: the PROPFIND handler reads OriginalUri from the Axum request extensions to recover the full path including the mount prefix, then applies it to all child hrefs.
nzbname parameter ignored — every play request re-added the NZB
AIOStreams sends nzbname=<FolderName> on every addurl call. This is the folder name it will look for in the WebDAV tree to check whether content already exists. nzbdav-rs was ignoring it and deriving the job name from the URL basename, so the WebDAV folder never matched AIOStreams's expected name and every play re-added the NZB.
Fix: nzbname is now used as the job/folder name when present.
SABnzbd API not reachable at /dav/api — AIOStreams config was impossible
AIOStreams derives both the WebDAV URL ({nzbdavUrl}/) and the API URL ({nzbdavUrl}/api) from a single field. With WebDAV at /dav and the API at /api, no single URL value could satisfy both paths.
Fix: the SABnzbd API is now also mounted at /dav/api.
nzo_ids history filter not implemented — O(N) history scan on every poll
AIOStreams passes nzo_ids=<id> to narrow history results to one item. The parameter was silently ignored, causing nzbdav-rs to return the full history table on every poll.
Fix: nzo_ids is now handled — handle_history fetches only the requested IDs directly.
AIOStreams configuration
| Field | Value |
|---|---|
| URL | http://your-host:8080/dav
|
| Public URL | http://your-public-host:8080/dav
|
| API Key | your NZBDAV_API_KEY
|
| Username | your NZBDAV_WEBDAV_USER
|
| Password | your NZBDAV_WEBDAV_PASS
|
Binaries
nzbdav-app-x86_64-linux-musl— Linux x86_64 (static musl, no dependencies)nzbdav-app-aarch64-linux-musl— Linux ARM64 (static musl, no dependencies)nzbdav-app-aarch64-apple-darwin— macOS Apple Silicon (unsigned — runxattr -dr com.apple.quarantine nzbdav-app-aarch64-apple-darwinif blocked by Gatekeeper; uploaded separately)
Docker Images
ghcr.io/ausagentsmith-org/nzbdav-rs:v0.5.2docker.io/ausagentsmith/nzbdav-rs:v0.5.2