|
1 | 1 | use crate::file_cache::{CacheItem, FileCache}; |
2 | 2 | use anyhow::anyhow; |
3 | | -use bytes::Bytes; |
4 | 3 | use dashmap::DashMap; |
5 | 4 | use lazy_static::lazy_static; |
6 | 5 | use md5::{Digest, Md5}; |
@@ -76,7 +75,7 @@ impl DomainStorage { |
76 | 75 | let path_buf = path_prefix_buf |
77 | 76 | .join(domain_dir_name) |
78 | 77 | .join(max_version.to_string()); |
79 | | - let data = cache.cache_dir(&domain_dir_name,&path_buf)?; |
| 78 | + let data = cache.cache_dir(&domain_dir_name, &path_buf)?; |
80 | 79 | cache.update(domain_dir_name.to_string(), data); |
81 | 80 | domain_version.insert(domain_dir_name.to_owned(), (path_buf, max_version)); |
82 | 81 | } |
@@ -186,50 +185,63 @@ impl DomainStorage { |
186 | 185 | } |
187 | 186 | } |
188 | 187 |
|
189 | | - pub fn get_domain_serving_version(&self, domain:&str) -> Option<u32> { |
190 | | - self.meta.get(domain).map(|x|x.1) |
| 188 | + pub fn get_domain_serving_version(&self, domain: &str) -> Option<u32> { |
| 189 | + self.meta.get(domain).map(|x| x.1) |
191 | 190 | } |
192 | 191 |
|
193 | 192 | pub fn get_domain_info_by_domain(&self, domain: &str) -> Option<DomainInfo> { |
194 | | - let versions:Vec<u32> = WalkDir::new(&self.prefix.join(domain)).max_depth(1).into_iter().filter_map(|version_entity|{ |
195 | | - let version_entity =version_entity.ok()?; |
196 | | - let version = version_entity.file_name().to_str()?.parse::<u32>().ok()?; |
197 | | - Some(version) |
198 | | - }).collect(); |
| 193 | + let versions: Vec<u32> = WalkDir::new(&self.prefix.join(domain)) |
| 194 | + .max_depth(1) |
| 195 | + .into_iter() |
| 196 | + .filter_map(|version_entity| { |
| 197 | + let version_entity = version_entity.ok()?; |
| 198 | + let version = version_entity.file_name().to_str()?.parse::<u32>().ok()?; |
| 199 | + Some(version) |
| 200 | + }) |
| 201 | + .collect(); |
199 | 202 | if versions.is_empty() { |
200 | 203 | None |
201 | 204 | } else { |
202 | 205 | let domain = domain.to_string(); |
203 | | - let current_version = self.meta.get(&domain).map(|x|x.1); |
| 206 | + let current_version = self.meta.get(&domain).map(|x| x.1); |
204 | 207 | Some(DomainInfo { |
205 | 208 | domain, |
206 | 209 | current_version, |
207 | | - versions |
| 210 | + versions, |
208 | 211 | }) |
209 | 212 | } |
210 | 213 | } |
211 | 214 |
|
212 | 215 | pub fn get_domain_info(&self) -> Vec<DomainInfo> { |
213 | | - let ret:Vec<DomainInfo> = walkdir::WalkDir::new(&self.prefix).max_depth(1).into_iter().filter_map(|dir_entity|{ |
214 | | - let dir_entity = dir_entity.ok()?; |
215 | | - let domain_dir_name = dir_entity.file_name().to_str()?; |
216 | | - if dir_entity.metadata().ok()?.is_dir() && URI_REGEX.is_match(domain_dir_name) { |
217 | | - let domain = domain_dir_name.to_string(); |
218 | | - let current_version = self.meta.get(&domain).map(|x|x.1); |
219 | | - let versions = walkdir::WalkDir::new(dir_entity.path()).max_depth(1).into_iter().filter_map(|version_entity|{ |
220 | | - let version_entity =version_entity.ok()?; |
221 | | - let version = version_entity.file_name().to_str()?.parse::<u32>().ok()?; |
222 | | - Some(version) |
223 | | - }).collect(); |
224 | | - Some(DomainInfo { |
225 | | - domain, |
226 | | - current_version, |
227 | | - versions |
228 | | - }) |
229 | | - } else { |
230 | | - None |
231 | | - } |
232 | | - }).collect(); |
| 216 | + let ret: Vec<DomainInfo> = walkdir::WalkDir::new(&self.prefix) |
| 217 | + .max_depth(1) |
| 218 | + .into_iter() |
| 219 | + .filter_map(|dir_entity| { |
| 220 | + let dir_entity = dir_entity.ok()?; |
| 221 | + let domain_dir_name = dir_entity.file_name().to_str()?; |
| 222 | + if dir_entity.metadata().ok()?.is_dir() && URI_REGEX.is_match(domain_dir_name) { |
| 223 | + let domain = domain_dir_name.to_string(); |
| 224 | + let current_version = self.meta.get(&domain).map(|x| x.1); |
| 225 | + let versions = walkdir::WalkDir::new(dir_entity.path()) |
| 226 | + .max_depth(1) |
| 227 | + .into_iter() |
| 228 | + .filter_map(|version_entity| { |
| 229 | + let version_entity = version_entity.ok()?; |
| 230 | + let version = |
| 231 | + version_entity.file_name().to_str()?.parse::<u32>().ok()?; |
| 232 | + Some(version) |
| 233 | + }) |
| 234 | + .collect(); |
| 235 | + Some(DomainInfo { |
| 236 | + domain, |
| 237 | + current_version, |
| 238 | + versions, |
| 239 | + }) |
| 240 | + } else { |
| 241 | + None |
| 242 | + } |
| 243 | + }) |
| 244 | + .collect(); |
233 | 245 | ret |
234 | 246 | } |
235 | 247 | fn check_is_in_upload_process(&self, domain: &str, version: &u32) -> bool { |
@@ -290,7 +302,7 @@ impl DomainStorage { |
290 | 302 | domain: String, |
291 | 303 | version: u32, |
292 | 304 | path: String, |
293 | | - data: Bytes, |
| 305 | + data: Vec<u8>, |
294 | 306 | ) -> anyhow::Result<()> { |
295 | 307 | if self.check_is_in_upload_process(&domain, &version) { |
296 | 308 | let file_path = sanitize_path(self.get_version_path(&domain, version), &path) |
@@ -379,21 +391,25 @@ impl DomainStorage { |
379 | 391 | Ok(()) |
380 | 392 | } |
381 | 393 |
|
382 | | - pub fn remove_domain_version(&self, domain:&str, version:Option<u32>) ->anyhow::Result<bool> { |
| 394 | + pub fn remove_domain_version( |
| 395 | + &self, |
| 396 | + domain: &str, |
| 397 | + version: Option<u32>, |
| 398 | + ) -> anyhow::Result<bool> { |
383 | 399 | let mut path = self.prefix.join(domain); |
384 | 400 | if let Some(version) = version { |
385 | 401 | path = path.join(version.to_string()); |
386 | 402 | if path.exists() { |
387 | 403 | fs::remove_dir_all(path)?; |
388 | 404 | return Ok(true); |
389 | 405 | } |
390 | | - }else { |
| 406 | + } else { |
391 | 407 | if path.exists() { |
392 | 408 | fs::remove_dir_all(path)?; |
393 | 409 | return Ok(true); |
394 | 410 | } |
395 | 411 | } |
396 | | - return Ok(false) |
| 412 | + return Ok(false); |
397 | 413 | } |
398 | 414 | } |
399 | 415 |
|
|
0 commit comments