1use crate::*;
2use cyfs_base::*;
3
4use cyfs_bdt::{NdnTaskControlState, NdnTaskState};
5use cyfs_core::TransContext;
6use serde::{Deserialize, Serialize};
7use std::path::PathBuf;
8use std::str::FromStr;
9
10#[derive(Clone, Debug, Serialize, Deserialize)]
11pub struct TransTaskOnAirState {
12 pub download_percent: u32,
13 pub download_speed: u32,
14 pub upload_speed: u32,
15}
16
17#[derive(Clone, Debug, Serialize, Deserialize)]
18pub enum TransTaskState {
19 Pending,
20 Downloading(TransTaskOnAirState),
21 Paused,
22 Canceled,
23 Finished(u32),
24 Err(BuckyErrorCode),
25}
26
27#[derive(Clone, Debug, Serialize, Deserialize)]
28pub enum TransTaskStatus {
29 Stopped,
30 Running,
31 Finished,
32 Failed,
33}
34
35pub struct TransTaskInfo {
36 pub task_id: String,
37 pub context: Option<String>,
38 pub object_id: ObjectId,
39 pub local_path: PathBuf,
40 pub device_list: Vec<DeviceId>,
41}
42#[derive(Clone, Debug)]
75pub enum TransTaskControlAction {
76 Start,
77 Stop,
78 Delete,
79}
80
81impl ToString for TransTaskControlAction {
82 fn to_string(&self) -> String {
83 (match *self {
84 Self::Start => "Start",
85 Self::Stop => "Stop",
86 Self::Delete => "Delete",
87 })
88 .to_owned()
89 }
90}
91
92impl FromStr for TransTaskControlAction {
93 type Err = BuckyError;
94
95 fn from_str(value: &str) -> Result<Self, Self::Err> {
96 let ret = match value {
97 "Start" => Self::Start,
98 "Stop" => Self::Stop,
99 "Delete" => Self::Delete,
100 v @ _ => {
101 let msg = format!("unknown TransTaskControlAction: {}", v);
102 error!("{}", msg);
103
104 return Err(BuckyError::new(BuckyErrorCode::InvalidData, msg));
105 }
106 };
107
108 Ok(ret)
109 }
110}
111
112pub struct TransGetContextOutputRequest {
113 pub common: NDNOutputRequestCommon,
114
115 pub context_id: Option<ObjectId>,
117
118 pub context_path: Option<String>,
120}
121
122pub struct TransGetContextOutputResponse {
123 pub context: TransContext,
124}
125
126pub struct TransPutContextOutputRequest {
127 pub common: NDNOutputRequestCommon,
128
129 pub context: TransContext,
130 pub access: Option<AccessString>,
131}
132
133#[derive(Debug)]
134pub struct TransCreateTaskOutputRequest {
135 pub common: NDNOutputRequestCommon,
136 pub object_id: ObjectId,
137 pub local_path: PathBuf,
139 pub device_list: Vec<DeviceId>,
140
141 pub group: Option<String>,
142 pub context: Option<String>,
143
144 pub auto_start: bool,
146}
147
148#[derive(Debug, Serialize, Deserialize)]
149pub struct TransCreateTaskOutputResponse {
150 pub task_id: String,
151}
152
153pub struct TransTaskOutputRequest {
154 pub common: NDNOutputRequestCommon,
155 pub task_id: String,
156}
157
158#[derive(Debug)]
160pub struct TransControlTaskOutputRequest {
161 pub common: NDNOutputRequestCommon,
163 pub task_id: String,
164 pub action: TransTaskControlAction,
165}
166
167#[derive(Debug)]
169pub struct TransGetTaskStateOutputRequest {
170 pub common: NDNOutputRequestCommon,
172 pub task_id: String,
173}
174
175#[derive(Clone, Debug, Serialize, Deserialize)]
176pub struct TransGetTaskStateOutputResponse {
177 pub state: TransTaskState,
178 pub group: Option<String>,
179}
180
181#[derive(Debug)]
183pub struct TransQueryTasksOutputRequest {
184 pub common: NDNOutputRequestCommon,
185 pub task_status: Option<TransTaskStatus>,
186 pub range: Option<(u64, u32)>,
187}
188
189pub struct TransQueryTasksOutputResponse {
190 pub task_list: Vec<TransTaskInfo>,
191}
192
193#[derive(Debug)]
195pub struct TransPublishFileOutputRequest {
196 pub common: NDNOutputRequestCommon,
198 pub owner: ObjectId,
200
201 pub local_path: PathBuf,
203 pub chunk_size: u32,
205
206 pub chunk_method: TransPublishChunkMethod,
207
208 pub access: Option<AccessString>,
209
210 pub file_id: Option<ObjectId>,
212
213 pub dirs: Option<Vec<FileDirRef>>,
215}
216
217#[derive(Debug, Serialize, Deserialize)]
218pub struct TransPublishFileOutputResponse {
219 pub file_id: ObjectId,
220}
221
222#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
223pub enum TransTaskGroupType {
224 Download,
225 Upload
226}
227
228
229impl ToString for TransTaskGroupType {
230 fn to_string(&self) -> String {
231 match self {
232 Self::Download => "download".to_owned(),
233 Self::Upload => "upload".to_owned()
234 }
235
236 }
237}
238
239impl FromStr for TransTaskGroupType {
240 type Err = BuckyError;
241
242 fn from_str(value: &str) -> Result<Self, Self::Err> {
243 let ret = match value {
244 "download" => Self::Download,
245 "upload" => Self::Upload,
246 v @ _ => {
247 let msg = format!("unknown trans group type: {}", v);
248 error!("{}", msg);
249
250 return Err(BuckyError::new(BuckyErrorCode::InvalidParam, msg));
251 }
252 };
253
254 Ok(ret)
255 }
256}
257
258#[derive(Debug, Serialize, Deserialize)]
260pub struct TransGetTaskGroupStateOutputRequest {
261 pub common: NDNOutputRequestCommon,
262 pub group_type: TransTaskGroupType,
263 pub group: String,
264 pub speed_when: Option<u64>,
265}
266
267#[derive(Debug, Serialize, Deserialize)]
268pub struct TransGetTaskGroupStateOutputResponse {
269 pub state: NdnTaskState,
270 pub control_state: NdnTaskControlState,
271 pub speed: Option<u32>,
272 pub cur_speed: u32,
273 pub history_speed: u32,
274 pub transfered: u64
275}
276
277#[derive(Clone, Debug, Serialize, Deserialize)]
279pub enum TransTaskGroupControlAction {
280 Resume,
281 Cancel,
282 Pause,
283 Close,
284 CloseRecursively
285}
286
287#[derive(Debug, Serialize, Deserialize)]
288pub struct TransControlTaskGroupOutputRequest {
289 pub common: NDNOutputRequestCommon,
290 pub group_type: TransTaskGroupType,
291 pub group: String,
292 pub action: TransTaskGroupControlAction,
293}
294
295#[derive(Debug, Serialize, Deserialize)]
296pub struct TransControlTaskGroupOutputResponse {
297 pub control_state: NdnTaskControlState,
298}