cloudreve_api/api/v4/
workflow.rs1use crate::Error;
4use crate::api::v4::ApiV4Client;
5use crate::api::v4::models::*;
6
7impl ApiV4Client {
8 pub async fn create_download(
9 &self,
10 request: &CreateDownloadRequest<'_>,
11 ) -> Result<Vec<Task>, Error> {
12 let response: ApiResponse<Vec<Task>> = self.post("/workflow/download", request).await?;
13 if response.code != 0 {
14 return Err(Error::Api {
15 code: response.code,
16 message: response.msg,
17 });
18 }
19 response
20 .data
21 .ok_or_else(|| Error::InvalidResponse("Missing data in API response".to_string()))
22 }
23
24 pub async fn select_download_files(
25 &self,
26 task_id: &str,
27 request: &SelectDownloadFilesRequest<'_>,
28 ) -> Result<Vec<Task>, Error> {
29 let response: ApiResponse<Vec<Task>> = self
30 .patch(&format!("/workflow/download/{}", task_id), request)
31 .await?;
32 if response.code != 0 {
33 return Err(Error::Api {
34 code: response.code,
35 message: response.msg,
36 });
37 }
38 response
39 .data
40 .ok_or_else(|| Error::InvalidResponse("Missing data in API response".to_string()))
41 }
42
43 pub async fn cancel_download_task(&self, task_id: &str) -> Result<(), Error> {
44 #[derive(Debug, serde::Deserialize)]
46 struct EmptyResponse;
47 let response: ApiResponse<EmptyResponse> = self
48 .delete(&format!("/workflow/download/{}", task_id))
49 .await?;
50 if response.code != 0 {
51 return Err(Error::Api {
52 code: response.code,
53 message: response.msg,
54 });
55 }
56 Ok(())
57 }
58
59 pub async fn list_workflow_tasks(
60 &self,
61 page_size: i32,
62 category: &str,
63 ) -> Result<TaskListResponse, Error> {
64 let url = format!("/workflow?page_size={}&category={}", page_size, category);
65 let response: ApiResponse<TaskListResponse> = self.get(&url).await?;
66 if response.code != 0 {
67 return Err(Error::Api {
68 code: response.code,
69 message: response.msg,
70 });
71 }
72 response
73 .data
74 .ok_or_else(|| Error::InvalidResponse("Missing data in API response".to_string()))
75 }
76
77 pub async fn get_task_progress(&self, task_id: &str) -> Result<Progress, Error> {
78 let response: ApiResponse<Progress> =
79 self.get(&format!("/workflow/progress/{}", task_id)).await?;
80 if response.code != 0 {
81 return Err(Error::Api {
82 code: response.code,
83 message: response.msg,
84 });
85 }
86 response
87 .data
88 .ok_or_else(|| Error::InvalidResponse("Missing data in API response".to_string()))
89 }
90
91 pub async fn create_archive(
92 &self,
93 request: &CreateArchiveRequest<'_>,
94 ) -> Result<TaskResponse, Error> {
95 let response: ApiResponse<TaskResponse> = self.post("/workflow/archive", request).await?;
96 if response.code != 0 {
97 return Err(Error::Api {
98 code: response.code,
99 message: response.msg,
100 });
101 }
102 response
103 .data
104 .ok_or_else(|| Error::InvalidResponse("Missing data in API response".to_string()))
105 }
106
107 pub async fn extract_archive(
108 &self,
109 request: &ExtractArchiveRequest<'_>,
110 ) -> Result<TaskResponse, Error> {
111 let response: ApiResponse<TaskResponse> = self.post("/workflow/extract", request).await?;
112 if response.code != 0 {
113 return Err(Error::Api {
114 code: response.code,
115 message: response.msg,
116 });
117 }
118 response
119 .data
120 .ok_or_else(|| Error::InvalidResponse("Missing data in API response".to_string()))
121 }
122
123 pub async fn relocate(&self, request: &RelocateRequest<'_>) -> Result<TaskResponse, Error> {
124 let response: ApiResponse<TaskResponse> = self.post("/workflow/relocate", request).await?;
125 if response.code != 0 {
126 return Err(Error::Api {
127 code: response.code,
128 message: response.msg,
129 });
130 }
131 response
132 .data
133 .ok_or_else(|| Error::InvalidResponse("Missing data in API response".to_string()))
134 }
135
136 pub async fn import(&self, request: &ImportRequest<'_>) -> Result<TaskResponse, Error> {
137 let response: ApiResponse<TaskResponse> = self.post("/workflow/import", request).await?;
138 if response.code != 0 {
139 return Err(Error::Api {
140 code: response.code,
141 message: response.msg,
142 });
143 }
144 response
145 .data
146 .ok_or_else(|| Error::InvalidResponse("Missing data in API response".to_string()))
147 }
148}