Skip to main content

category_list/
category_list.rs

1use baidu_netdisk_sdk::{
2    BaiduNetDiskClient, BtListOptions, DocumentListOptions, ImageListOptions, VideoListOptions,
3};
4use log::info;
5use tokio::time::{sleep, Duration};
6
7async fn wait_for_rate_limit() {
8    sleep(Duration::from_millis(500)).await;
9}
10
11fn format_size(bytes: u64) -> String {
12    if bytes < 1024 {
13        format!("{} B", bytes)
14    } else if bytes < 1024 * 1024 {
15        format!("{:.2} KB", bytes as f64 / 1024.0)
16    } else if bytes < 1024 * 1024 * 1024 {
17        format!("{:.2} MB", bytes as f64 / (1024.0 * 1024.0))
18    } else {
19        format!("{:.2} GB", bytes as f64 / (1024.0 * 1024.0 * 1024.0))
20    }
21}
22
23#[tokio::main]
24async fn main() -> Result<(), Box<dyn std::error::Error>> {
25    env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init();
26
27    let client = BaiduNetDiskClient::builder().build()?;
28    info!("Client created successfully");
29
30    client.load_token_from_env()?;
31    info!("Token loaded successfully");
32
33    let test_dir = "/apps/product";
34    let num_per_page = 5;
35
36    println!("=== Baidu NetDisk Fixed Category List Test ===");
37    println!("Directory: {}", test_dir);
38    println!("Items per page: {}\n", num_per_page);
39
40    println!("--- Part 1: Document List (doclist) ---");
41    match client
42        .file()
43        .list_documents(test_dir, 1, num_per_page)
44        .await
45    {
46        Ok(files) => {
47            println!("Found {} documents", files.len());
48            for file in &files {
49                let size_str = file
50                    .size
51                    .map(|s| format_size(s))
52                    .unwrap_or_else(|| "N/A".to_string());
53                println!("  - {} ({})", file.name, size_str);
54            }
55        }
56        Err(e) => {
57            println!("Error: {}", e);
58        }
59    }
60    wait_for_rate_limit().await;
61
62    println!("\n--- Part 2: Image List (imagelist) ---");
63    match client.file().list_images(test_dir, 1, num_per_page).await {
64        Ok(files) => {
65            println!("Found {} images", files.len());
66            for file in &files {
67                let size_str = file
68                    .size
69                    .map(|s| format_size(s))
70                    .unwrap_or_else(|| "N/A".to_string());
71                println!("  - {} ({})", file.name, size_str);
72            }
73        }
74        Err(e) => {
75            println!("Error: {}", e);
76        }
77    }
78    wait_for_rate_limit().await;
79
80    println!("\n--- Part 3: Video List (videolist) ---");
81    match client.file().list_videos(test_dir, 1, num_per_page).await {
82        Ok(files) => {
83            println!("Found {} videos", files.len());
84            for file in &files {
85                let size_str = file
86                    .size
87                    .map(|s| format_size(s))
88                    .unwrap_or_else(|| "N/A".to_string());
89                println!("  - {} ({})", file.name, size_str);
90            }
91        }
92        Err(e) => {
93            println!("Error: {}", e);
94        }
95    }
96    wait_for_rate_limit().await;
97
98    println!("\n--- Part 4: BT List (btlist) ---");
99    match client.file().list_torrents(test_dir, 1, num_per_page).await {
100        Ok(files) => {
101            println!("Found {} torrent files", files.len());
102            for file in &files {
103                let size_str = file
104                    .size
105                    .map(|s| format_size(s))
106                    .unwrap_or_else(|| "N/A".to_string());
107                println!("  - {} ({})", file.name, size_str);
108            }
109        }
110        Err(e) => {
111            println!("Error: {}", e);
112        }
113    }
114    wait_for_rate_limit().await;
115
116    println!("\n=== Test with Options (recursion=1) ===");
117    println!("Directory: {}\n", test_dir);
118
119    println!("--- Document List with recursion ---");
120    let options = DocumentListOptions::new(test_dir)
121        .recursion(1)
122        .num(num_per_page);
123    match client.file().list_documents_with_options(options).await {
124        Ok(files) => {
125            println!("Found {} documents", files.len());
126            for file in &files {
127                let size_str = file
128                    .size
129                    .map(|s| format_size(s))
130                    .unwrap_or_else(|| "N/A".to_string());
131                println!("  - {} ({})", file.name, size_str);
132            }
133        }
134        Err(e) => {
135            println!("Error: {}", e);
136        }
137    }
138    wait_for_rate_limit().await;
139
140    println!("\n--- Image List with recursion ---");
141    let options = ImageListOptions::new(test_dir)
142        .recursion(1)
143        .num(num_per_page);
144    match client.file().list_images_with_options(options).await {
145        Ok(files) => {
146            println!("Found {} images", files.len());
147            for file in &files {
148                let size_str = file
149                    .size
150                    .map(|s| format_size(s))
151                    .unwrap_or_else(|| "N/A".to_string());
152                println!("  - {} ({})", file.name, size_str);
153            }
154        }
155        Err(e) => {
156            println!("Error: {}", e);
157        }
158    }
159    wait_for_rate_limit().await;
160
161    println!("\n--- Video List with recursion ---");
162    let options = VideoListOptions::new(test_dir)
163        .recursion(1)
164        .num(num_per_page);
165    match client.file().list_videos_with_options(options).await {
166        Ok(files) => {
167            println!("Found {} videos", files.len());
168            for file in &files {
169                let size_str = file
170                    .size
171                    .map(|s| format_size(s))
172                    .unwrap_or_else(|| "N/A".to_string());
173                println!("  - {} ({})", file.name, size_str);
174            }
175        }
176        Err(e) => {
177            println!("Error: {}", e);
178        }
179    }
180    wait_for_rate_limit().await;
181
182    println!("\n--- BT List with recursion ---");
183    let options = BtListOptions::new(test_dir).recursion(1).num(num_per_page);
184    match client.file().list_torrents_with_options(options).await {
185        Ok(files) => {
186            println!("Found {} torrent files", files.len());
187            for file in &files {
188                let size_str = file
189                    .size
190                    .map(|s| format_size(s))
191                    .unwrap_or_else(|| "N/A".to_string());
192                println!("  - {} ({})", file.name, size_str);
193            }
194        }
195        Err(e) => {
196            println!("Error: {}", e);
197        }
198    }
199
200    println!("\n=== Test Completed ===");
201
202    Ok(())
203}