cloudreve_api/api/v4/
workflow.rs1use 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}