1use baidu_netdisk_sdk::BaiduNetDiskClient;
2use log::info;
3use std::io::{self, BufRead};
4
5#[tokio::main]
6async fn main() -> Result<(), Box<dyn std::error::Error>> {
7 env_logger::init();
9
10 println!("=== Baidu NetDisk File Management Test ===\n");
11
12 let client = BaiduNetDiskClient::builder().build()?;
14 info!("Client created successfully");
15
16 client.load_token_from_env()?;
18 info!("Token loaded successfully");
19
20 println!("=== Test 0: List Root Directory ===");
22 println!("Listing contents of root directory: /");
23 wait_for_enter();
24
25 match client.file().list_directory("/").await {
26 Ok(files) => {
27 println!("✓ Successfully listed root directory!");
28 println!(" Found {} items:", files.len());
29 for file in files {
30 let type_str = if file.isdir == Some(1) { "DIR" } else { "FILE" };
31 let size_str = if let Some(s) = file.size {
32 format!("{} bytes", s)
33 } else {
34 "N/A".to_string()
35 };
36 println!(" [{}] {} ({})", type_str, file.name, size_str);
37 }
38 }
39 Err(e) => {
40 println!("! Failed to list root directory: {}", e);
41 println!(" Please check your token and permissions.");
42 return Ok(());
43 }
44 }
45
46 let test_folder = "/upload";
48 let test_file = "/upload/subscribe.json";
49 let test_folder_new = "/upload_new";
50 let test_file_new = "/upload_new/subscribe.json";
51 let test_file_renamed = "/upload_new/subscribe_renamed.json";
52
53 println!("\n=== Test 1: Check /upload folder ===");
55 println!("Checking folder: {}", test_folder);
56 wait_for_enter();
57
58 match client.file().get_file_info(test_folder).await {
59 Ok(info) => {
60 println!("✓ Folder /upload exists!");
61 println!(" fs_id: {:?}", info.fs_id);
62 println!(" path: {}", info.path);
63 println!(" isdir: {:?}", info.isdir);
64 println!(" ctime: {:?}", info.ctime);
65 println!(" mtime: {:?}", info.mtime);
66 }
67 Err(e) => {
68 println!(
69 "! Folder /upload does not exist or cannot be accessed: {}",
70 e
71 );
72 println!(" Please create the folder manually or check your permissions.");
73 return Ok(());
74 }
75 }
76
77 println!("\n=== Test 2: List /upload Directory ===");
79 println!("Listing contents of: {}", test_folder);
80 wait_for_enter();
81
82 let upload_files = match client.file().list_directory(test_folder).await {
83 Ok(files) => {
84 println!("✓ Directory listed successfully!");
85 println!(" Found {} items:", files.len());
86 for file in &files {
87 let type_str = if file.isdir == Some(1) { "DIR" } else { "FILE" };
88 let size_str = if let Some(s) = file.size {
89 format!("{} bytes", s)
90 } else {
91 "N/A".to_string()
92 };
93 println!(" [{}] {} ({})", type_str, file.name, size_str);
94 }
95 Some(files)
96 }
97 Err(e) => {
98 println!("! Failed to list directory: {}", e);
99 None
100 }
101 };
102
103 println!("\n=== Test 3: Check subscribe.json file ===");
105 println!("Checking file: {}", test_file);
106 wait_for_enter();
107
108 match client.file().get_file_info(test_file).await {
109 Ok(info) => {
110 println!("✓ File {} exists!", test_file);
111 println!(" fs_id: {:?}", info.fs_id);
112 println!(" path: {}", info.path);
113 println!(" name: {}", info.name);
114 println!(" size: {:?} bytes", info.size);
115 println!(" isdir: {:?}", info.isdir);
116 println!(" md5: {:?}", info.md5);
117 println!(" ctime: {:?}", info.ctime);
118 println!(" mtime: {:?}", info.mtime);
119 }
120 Err(e) => {
121 println!(
122 "! File {} does not exist or cannot be accessed: {}",
123 test_file, e
124 );
125 if let Some(files) = upload_files {
127 println!(" Available files in /upload:");
128 for file in files {
129 let type_str = if file.isdir == Some(1) { "DIR" } else { "FILE" };
130 println!(" [{}] {}", type_str, file.name);
131 }
132 }
133 return Ok(());
134 }
135 }
136
137 println!("\n=== Test 4: Create Folder ===");
139 println!("Creating folder: {}", test_folder_new);
140 wait_for_enter();
141
142 match client.file().create_folder(test_folder_new).await {
143 Ok(folder) => {
144 println!("✓ Folder created successfully!");
145 println!(" fs_id: {:?}", folder.fs_id);
146 println!(" path: {}", folder.path);
147 println!(" ctime: {:?}", folder.ctime);
148 }
149 Err(e) => {
150 println!("! Failed to create folder: {}", e);
151 return Ok(());
152 }
153 }
154
155 println!("\n=== Test 5: Copy File ===");
157 println!("Copying file: {} -> {}", test_file, test_folder_new);
158 wait_for_enter();
159
160 match client.file().copy_file(test_file, test_folder_new).await {
161 Ok(_) => println!("✓ File copied successfully!"),
162 Err(e) => {
163 println!("! File copy failed: {}", e);
164 return Ok(());
165 }
166 }
167
168 println!("\n=== Test 6: Verify Copied File ===");
170 println!("Listing directory: {}", test_folder_new);
171 wait_for_enter();
172
173 let copied_files = match client.file().list_directory(test_folder_new).await {
174 Ok(files) => {
175 println!("✓ Directory listed!");
176 println!(" Found {} items:", files.len());
177 for file in &files {
178 let type_str = if file.isdir == Some(1) { "DIR" } else { "FILE" };
179 let size_str = if let Some(s) = file.size {
180 format!("{} bytes", s)
181 } else {
182 "N/A".to_string()
183 };
184 println!(" [{}] {} ({})", type_str, file.name, size_str);
185 }
186 Some(files)
187 }
188 Err(e) => {
189 println!("! Failed to list directory: {}", e);
190 None
191 }
192 };
193
194 println!("\nChecking copied file: {}", test_file_new);
195 wait_for_enter();
196
197 match client.file().get_file_info(test_file_new).await {
198 Ok(info) => {
199 println!("✓ Copied file verified!");
200 println!(" name: {}", info.name);
201 println!(" size: {:?} bytes", info.size);
202 }
203 Err(e) => {
204 println!("! Failed to verify copied file: {}", e);
205 if let Some(files) = copied_files {
207 println!(" Available files:");
208 for file in files {
209 println!(" {}", file.name);
210 }
211 }
212 return Ok(());
213 }
214 }
215
216 println!("\n=== Test 7: Rename File ===");
218 println!("Renaming file: {} -> {}", test_file_new, test_file_renamed);
219 wait_for_enter();
220
221 match client
222 .file()
223 .rename(test_file_new, "subscribe_renamed.json")
224 .await
225 {
226 Ok(_) => println!("✓ File renamed successfully!"),
227 Err(e) => {
228 println!("! File rename failed: {}", e);
229 return Ok(());
230 }
231 }
232
233 println!("\n=== Test 8: Move File ===");
235 println!("Moving file: {} -> {}", test_file_renamed, test_folder);
236 wait_for_enter();
237
238 match client
239 .file()
240 .move_file(test_file_renamed, test_folder)
241 .await
242 {
243 Ok(_) => println!("✓ File moved successfully!"),
244 Err(e) => {
245 println!("! File move failed: {}", e);
246 return Ok(());
247 }
248 }
249
250 println!("\n=== Test 9: Verify Moved File ===");
252 let moved_file_path = "/upload/subscribe_renamed.json";
253 println!("Checking moved file: {}", moved_file_path);
254 wait_for_enter();
255
256 match client.file().get_file_info(moved_file_path).await {
257 Ok(info) => {
258 println!("✓ Moved file verified!");
259 println!(" name: {}", info.name);
260 println!(" path: {}", info.path);
261 }
262 Err(e) => {
263 println!("! Failed to verify moved file: {}", e);
264 return Ok(());
265 }
266 }
267
268 println!("\n=== Test 10: Delete File ===");
270 println!("Deleting file: {}", moved_file_path);
271 wait_for_enter();
272
273 match client.file().delete(moved_file_path).await {
274 Ok(_) => println!("✓ File deleted successfully!"),
275 Err(e) => {
276 println!("! File deletion failed: {}", e);
277 return Ok(());
278 }
279 }
280
281 println!("\n=== Test 11: Cleanup ===");
283 println!("Deleting empty folder: {}", test_folder_new);
284 wait_for_enter();
285
286 match client.file().delete(test_folder_new).await {
287 Ok(_) => println!("✓ Test folder deleted successfully!"),
288 Err(e) => {
289 println!("! Failed to delete test folder: {}", e);
290 return Ok(());
291 }
292 }
293
294 println!("\n=== Final Verification ===");
296 println!("Listing final contents of: {}", test_folder);
297 wait_for_enter();
298
299 match client.file().list_directory(test_folder).await {
300 Ok(files) => {
301 println!("✓ Final directory listing:");
302 println!(" Found {} items:", files.len());
303 for file in files {
304 let type_str = if file.isdir == Some(1) { "DIR" } else { "FILE" };
305 println!(" [{}] {}", type_str, file.name);
306 }
307 }
308 Err(e) => {
309 println!("! Failed to list directory: {}", e);
310 return Ok(());
311 }
312 }
313
314 println!("\n=== All file management tests completed successfully! ===");
315
316 Ok(())
317}
318
319fn wait_for_enter() {
321 println!("Press Enter to continue...");
322 let stdin = io::stdin();
323 let mut lines = stdin.lock().lines();
324 let _ = lines.next();
325}