cloudreve_api/api/v3/
aria2.rs

1//! Aria2-related API endpoints for Cloudreve API v3
2
3use crate::api::v3::models::*;
4use crate::api::v3::ApiV3Client;
5use crate::Error;
6
7impl ApiV3Client {
8    /// Create offline download
9    pub async fn create_download(&self, request: &Aria2CreateRequest<'_>) -> Result<(), Error> {
10        let response: ApiResponse<()> = self.post("/aria2/url", request).await?;
11        if response.code == 0 {
12            Ok(())
13        } else {
14            Err(Error::Api {
15                code: response.code,
16                message: response.msg,
17            })
18        }
19    }
20
21    /// List downloading tasks
22    pub async fn list_downloading(&self) -> Result<Vec<Aria2Task>, Error> {
23        let response: ApiResponse<Vec<Aria2Task>> = self.get("/aria2/downloading").await?;
24        match response.data {
25            Some(tasks) => Ok(tasks),
26            None => Err(Error::Api {
27                code: response.code,
28                message: response.msg,
29            }),
30        }
31    }
32
33    /// List finished tasks
34    pub async fn list_finished(&self) -> Result<Vec<Aria2Task>, Error> {
35        let response: ApiResponse<Vec<Aria2Task>> = self.get("/aria2/finished").await?;
36        match response.data {
37            Some(tasks) => Ok(tasks),
38            None => Err(Error::Api {
39                code: response.code,
40                message: response.msg,
41            }),
42        }
43    }
44
45    /// Delete task
46    pub async fn delete_task(&self, gid: &str) -> Result<(), Error> {
47        let response: ApiResponse<()> = self.delete(&format!("/aria2/task/{}", gid)).await?;
48        if response.code == 0 {
49            Ok(())
50        } else {
51            Err(Error::Api {
52                code: response.code,
53                message: response.msg,
54            })
55        }
56    }
57}