Skip to main content

cloudreve_sdk_api/models/
workflow.rs

1use crate::models::common::PaginationResults;
2use serde::{Deserialize, Serialize};
3
4/// Task status
5#[derive(Debug, Clone, Serialize, Deserialize)]
6#[serde(rename_all = "lowercase")]
7pub enum TaskStatus {
8    Queued,
9    Processing,
10    Suspending,
11    Error,
12    Canceled,
13    Completed,
14}
15
16/// Task type
17#[derive(Debug, Clone, Serialize, Deserialize)]
18#[serde(rename_all = "snake_case")]
19pub enum TaskType {
20    CreateArchive,
21    ExtractArchive,
22    Relocate,
23    RemoteDownload,
24    #[serde(rename = "media_meta")]
25    MediaMetadata,
26    EntityRecycleRoutine,
27    ExplicitEntityRecycle,
28    UploadSentinelCheck,
29    Import,
30}
31
32/// Task response
33#[derive(Debug, Clone, Serialize, Deserialize, Default)]
34pub struct TaskResponse {
35    pub created_at: String,
36    pub updated_at: String,
37    pub id: String,
38    pub status: String,
39    #[serde(rename = "type")]
40    pub task_type: String,
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub node: Option<NodeSummary>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub summary: Option<TaskSummary>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub error: Option<String>,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub error_history: Option<Vec<String>>,
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub duration: Option<i64>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub resume_time: Option<i64>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub retry_count: Option<i32>,
55}
56
57/// Task summary
58#[derive(Debug, Clone, Serialize, Deserialize, Default)]
59pub struct TaskSummary {
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub phase: Option<String>,
62    pub props: TaskProps,
63}
64
65/// Task properties
66#[derive(Debug, Clone, Serialize, Deserialize, Default)]
67pub struct TaskProps {
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub src: Option<String>,
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub src_str: Option<String>,
72    #[serde(skip_serializing_if = "Option::is_none")]
73    pub dst: Option<String>,
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub src_multiple: Option<Vec<String>>,
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub dst_policy_id: Option<String>,
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub failed: Option<i32>,
80    #[serde(skip_serializing_if = "Option::is_none")]
81    pub download: Option<DownloadTaskStatus>,
82}
83
84/// Download task state
85#[derive(Debug, Clone, Serialize, Deserialize, Default)]
86#[serde(rename_all = "lowercase")]
87pub enum DownloadTaskState {
88    #[default]
89    Seeding,
90    Downloading,
91    Error,
92    Completed,
93    Unknown,
94}
95
96/// Download task status
97#[derive(Debug, Clone, Serialize, Deserialize, Default)]
98pub struct DownloadTaskStatus {
99    pub name: String,
100    pub state: DownloadTaskState,
101    pub total: i64,
102    pub downloaded: i64,
103    pub download_speed: i64,
104    pub upload_speed: i64,
105    pub uploaded: i64,
106    #[serde(skip_serializing_if = "Option::is_none")]
107    pub files: Option<Vec<DownloadTaskFile>>,
108    #[serde(skip_serializing_if = "Option::is_none")]
109    pub hash: Option<String>,
110    #[serde(skip_serializing_if = "Option::is_none")]
111    pub pieces: Option<String>,
112    #[serde(skip_serializing_if = "Option::is_none")]
113    pub num_pieces: Option<i32>,
114}
115
116/// Download task file
117#[derive(Debug, Clone, Serialize, Deserialize, Default)]
118pub struct DownloadTaskFile {
119    pub index: i32,
120    pub name: String,
121    pub size: i64,
122    pub progress: f64,
123    pub selected: bool,
124}
125
126/// Node summary
127#[derive(Debug, Clone, Serialize, Deserialize)]
128pub struct NodeSummary {
129    pub id: String,
130    pub name: String,
131    #[serde(rename = "type")]
132    pub node_type: NodeTypes,
133    pub capabilities: String,
134}
135
136/// Node types
137#[derive(Debug, Clone, Serialize, Deserialize)]
138#[serde(rename_all = "lowercase")]
139pub enum NodeTypes {
140    Master,
141    Slave,
142}
143
144/// Archive workflow service
145#[derive(Debug, Clone, Serialize, Deserialize)]
146pub struct ArchiveWorkflowService {
147    pub src: Vec<String>,
148    pub dst: String,
149    #[serde(skip_serializing_if = "Option::is_none")]
150    pub preferred_node_id: Option<String>,
151    #[serde(skip_serializing_if = "Option::is_none")]
152    pub encoding: Option<String>,
153    #[serde(skip_serializing_if = "Option::is_none")]
154    pub password: Option<String>,
155    #[serde(skip_serializing_if = "Option::is_none")]
156    pub file_mask: Option<Vec<String>>,
157}
158
159/// Relocate workflow service
160#[derive(Debug, Clone, Serialize, Deserialize)]
161pub struct RelocateWorkflowService {
162    pub src: Vec<String>,
163    pub dst_policy_id: String,
164}
165
166/// Download workflow service
167#[derive(Debug, Clone, Serialize, Deserialize)]
168pub struct DownloadWorkflowService {
169    #[serde(skip_serializing_if = "Option::is_none")]
170    pub src: Option<Vec<String>>,
171    #[serde(skip_serializing_if = "Option::is_none")]
172    pub src_file: Option<String>,
173    pub dst: String,
174    #[serde(skip_serializing_if = "Option::is_none")]
175    pub preferred_node_id: Option<String>,
176}
177
178/// Import workflow service
179#[derive(Debug, Clone, Serialize, Deserialize)]
180pub struct ImportWorkflowService {
181    pub src: String,
182    pub dst: String,
183    #[serde(skip_serializing_if = "Option::is_none")]
184    pub extract_media_meta: Option<bool>,
185    pub user_id: String,
186    #[serde(skip_serializing_if = "Option::is_none")]
187    pub recursive: Option<bool>,
188    pub policy_id: i32,
189}
190
191/// List task service
192#[derive(Debug, Clone, Serialize, Deserialize)]
193pub struct ListTaskService {
194    pub page_size: i32,
195    pub category: ListTaskCategory,
196    #[serde(skip_serializing_if = "Option::is_none")]
197    pub next_page_token: Option<String>,
198}
199
200/// List task category
201#[derive(Debug, Clone, Serialize, Deserialize)]
202#[serde(rename_all = "lowercase")]
203pub enum ListTaskCategory {
204    General,
205    Downloading,
206    Downloaded,
207}
208
209/// Task list response
210#[derive(Debug, Clone, Serialize, Deserialize, Default)]
211pub struct TaskListResponse {
212    pub tasks: Vec<TaskResponse>,
213    pub pagination: PaginationResults,
214}
215
216/// Set download files service
217#[derive(Debug, Clone, Serialize, Deserialize)]
218pub struct SetDownloadFilesService {
219    pub files: Vec<SetFileToDownloadArgs>,
220}
221
222/// Set file to download args
223#[derive(Debug, Clone, Serialize, Deserialize)]
224pub struct SetFileToDownloadArgs {
225    pub index: i32,
226    pub download: bool,
227}
228
229/// Node capability constants
230pub mod node_capability {
231    pub const NONE: i32 = 0;
232    pub const CREATE_ARCHIVE: i32 = 1;
233    pub const EXTRACT_ARCHIVE: i32 = 2;
234    pub const REMOTE_DOWNLOAD: i32 = 3;
235}