cloudreve_api/api/v4/
workflow.rs

1//! Workflow-related API endpoints for Cloudreve v4 API
2
3use crate::api::v4::models::*;
4use crate::api::v4::ApiV4Client;
5use crate::Error;
6
7impl ApiV4Client {
8    pub async fn create_remote_download(
9        &self,
10        request: &CreateRemoteDownloadRequest<'_>,
11    ) -> Result<Task, Error> {
12        let response: ApiResponse<Task> = self.post("/workflow/remote-download", request).await?;
13        Ok(response.data.unwrap())
14    }
15
16    pub async fn create_download(
17        &self,
18        request: &CreateDownloadRequest<'_>,
19    ) -> Result<Task, Error> {
20        let response: ApiResponse<Task> = self.post("/workflow/download", request).await?;
21        Ok(response.data.unwrap())
22    }
23
24    pub async fn select_download_files(
25        &self,
26        task_id: &str,
27        request: &SelectDownloadFilesRequest<'_>,
28    ) -> Result<Task, Error> {
29        let response: ApiResponse<Task> = self
30            .patch(&format!("/workflow/download/{}", task_id), request)
31            .await?;
32        Ok(response.data.unwrap())
33    }
34
35    pub async fn cancel_download_task(&self, task_id: &str) -> Result<Task, Error> {
36        let response: ApiResponse<Task> = self
37            .delete(&format!("/workflow/download/{}", task_id))
38            .await?;
39        Ok(response.data.unwrap())
40    }
41
42    pub async fn list_workflow_tasks(&self) -> Result<TaskListResponse, Error> {
43        let response: ApiResponse<TaskListResponse> = self.get("/workflow").await?;
44        Ok(response.data.unwrap())
45    }
46
47    pub async fn get_task_progress(&self, task_id: &str) -> Result<Progress, Error> {
48        let response: ApiResponse<Progress> =
49            self.get(&format!("/workflow/progress/{}", task_id)).await?;
50        Ok(response.data.unwrap())
51    }
52
53    pub async fn cancel_task(&self, task_id: &str) -> Result<Task, Error> {
54        let response: ApiResponse<Task> =
55            self.delete(&format!("/workflow/tasks/{}", task_id)).await?;
56        Ok(response.data.unwrap())
57    }
58
59    pub async fn list_tasks(&self, request: &ListTasksRequest<'_>) -> Result<Vec<Task>, Error> {
60        let mut url = "/workflow/tasks".to_string();
61        if let Some(page) = request.page {
62            url.push_str(&format!("?page={}", page));
63        }
64        if let Some(per_page) = request.per_page {
65            url.push_str(&format!("&per_page={}", per_page));
66        }
67        if let Some(status) = request.status {
68            url.push_str(&format!("&status={}", status));
69        }
70        if let Some(type_) = request.type_ {
71            url.push_str(&format!("&type={}", type_));
72        }
73
74        let response: ApiResponse<Vec<Task>> = self.get(&url).await?;
75        Ok(response.data.unwrap())
76    }
77
78    pub async fn create_archive(&self, request: &CreateArchiveRequest<'_>) -> Result<Task, Error> {
79        let response: ApiResponse<Task> = self.post("/workflow/archive", request).await?;
80        Ok(response.data.unwrap())
81    }
82
83    pub async fn extract_archive(
84        &self,
85        request: &ExtractArchiveRequest<'_>,
86    ) -> Result<Task, Error> {
87        let response: ApiResponse<Task> = self.post("/workflow/extract", request).await?;
88        Ok(response.data.unwrap())
89    }
90
91    pub async fn relocate(&self, request: &RelocateRequest<'_>) -> Result<Task, Error> {
92        let response: ApiResponse<Task> = self.post("/workflow/relocate", request).await?;
93        Ok(response.data.unwrap())
94    }
95
96    pub async fn import(&self, request: &ImportRequest<'_>) -> Result<Task, Error> {
97        let response: ApiResponse<Task> = self.post("/workflow/import", request).await?;
98        Ok(response.data.unwrap())
99    }
100}