#synology #download #api #task #client #peer #download-station

syno-download-station

Rust client library for the Synology Download Station API

1 unstable release

Uses new Rust 2024

new 0.1.0 Apr 13, 2025

#485 in Web programming

Download history 83/week @ 2025-04-08

83 downloads per month

MIT license

39KB
767 lines

Synology Download Station API Client

test & release MIT License

A Rust client library for interacting with the Synology Download Station API. Manage your downloads programmatically with a strongly-typed interface.

Features

  • Authentication with Synology API
  • List and filter download tasks
  • Get detailed task information (status, progress, files, peers)
  • Create downloads from URLs/magnet links
  • Create downloads from torrent files
  • Control tasks (pause, resume, complete) Clear completed downloads
  • Human-readable file sizes, progress calculation and ETA

Installation

cargo add syno-download-station

Example Usage

use anyhow::Result;
use syno_download_station::client::SynoDS;

#[tokio::main]
async fn main() -> Result<()> {
    // Create a new client
    let mut synods = SynoDS::new(
        "https://your-synology-nas.local:5001".to_string(),
        "username".to_string(),
        "password".to_string(),
    )?;
    
    // Authenticate
    synods.authorize().await?;
    
    // List all tasks
    let tasks = synods.get_tasks().await?;
    for task in tasks.task {
        println!(
            "Task: {}, Status: {:?}, Progress: {}%, {}",
            task.title,
            task.status,
            task.calculate_progress(),
            task.calculate_speed()
        );
        
        // Get more detailed information if needed
        if let Some(additional) = &task.additional {
            if let Some(detail) = &additional.detail {
                println!("  Created: {}", detail.created_time);
                println!("  Destination: {}", detail.destination);
            }
        }
    }
    
    // Create a new download task from URL
    synods.create_task(
        "https://example.com/large-file.zip",
        "downloads"
    ).await?;
    
    // Other operations
    synods.pause("task-id").await?;
    synods.resume("task-id").await?;
    synods.complete("task-id").await?;
    synods.clear_completed().await?;
    
    Ok(())
}

CLI Example

An example CLI application is included in the examples directory. To run it:

SYNOLOGY_HOST="https://your-synology-nas.local:1234" \
SYNOLOGY_USERNAME="your-username" \
SYNOLOGY_PASSWORD="your-password" \
cargo run --example cli

License

This project is licensed under the MIT License — see the LICENSE.md file for details

Dependencies

~6–18MB
~232K SLoC