diff --git a/src/thumbnail.rs b/src/thumbnail.rs index 95c7a90..7d0f88c 100644 --- a/src/thumbnail.rs +++ b/src/thumbnail.rs @@ -18,33 +18,29 @@ pub fn parse_file_path(requested_path: &str) -> (String, u32, String) { if requested_path.ends_with("/webp") { path = path.replace("/webp", ""); } - let mut path_parts: Vec<&str> = path.split('/').collect(); + + let path_parts: Vec<&str> = path.split('/').collect(); let mut extension = String::new(); let mut width = 0; let mut base_filename = String::new(); - if path_parts.is_empty() { - return (path.to_string(), width, extension); - } - - // пытаемся извлечь формат из имени файла - if let Some(filename_part) = path_parts.pop() { - if let Some((base, ext_part)) = filename_part.rsplit_once('.') { - extension = ext_part.to_string(); - base_filename = base.to_string(); // Устанавливаем base_filename без расширения + // Получаем последнюю часть пути (имя файла) + if let Some(last_part) = path_parts.last() { + // Разделяем имя файла и расширение + if let Some((name, ext)) = last_part.rsplit_once('.') { + extension = ext.to_string(); + base_filename = name.to_string(); } else { - base_filename = filename_part.to_string(); + base_filename = last_part.to_string(); } } - // Если base_filename ещё не установлено, извлекаем его - if base_filename.is_empty() { - if let Some(filename_part) = path_parts.pop() { - if let Some((base, ext_part)) = filename_part.rsplit_once('.') { - extension = ext_part.to_string(); - base_filename = base.to_string(); - } else { - base_filename = filename_part.to_string(); + // Проверяем наличие ширины в пути + for part in path_parts.iter() { + if part.ends_with('x') { + if let Ok(w) = part.trim_end_matches('x').parse::() { + width = w; + break; } } } @@ -68,6 +64,21 @@ pub fn parse_file_path(requested_path: &str) -> (String, u32, String) { } } } + + // Если ширина не найдена в пути, проверяем имя файла + if width == 0 { + if let Some((name, width_str)) = base_filename.rsplit_once('_') { + if let Ok(w) = width_str.parse::() { + width = w; + base_filename = name.to_string(); + } + } + } + + // Очищаем base_filename от возможных префиксов пути + if let Some(uuid) = base_filename.split('/').last() { + base_filename = uuid.to_string(); + } (base_filename, width, extension) }