fix(katana): index out of range

Also handle some error instead of unwrapping it
This commit is contained in:
tretrauit 2024-01-11 22:09:18 +07:00
parent cde01d45d7
commit 4341695c74

View File

@ -184,11 +184,13 @@ fn regexify_text(text: &String) -> String {
} else if ['t'].contains(&c) { } else if ['t'].contains(&c) {
ascii_text.push_str("[ti]"); ascii_text.push_str("[ti]");
} else if ['.'].contains(&c) { } else if ['.'].contains(&c) {
if prev_chars.len() > 3 {
let prev_char = prev_chars[prev_chars.len() - 1]; let prev_char = prev_chars[prev_chars.len() - 1];
let prev_prev_char = prev_chars[prev_chars.len() - 2]; let prev_prev_char = prev_chars[prev_chars.len() - 2];
if prev_char.is_numeric() && prev_prev_char.is_whitespace() { if prev_char.is_numeric() && prev_prev_char.is_whitespace() {
continue; continue;
} }
}
} else if ['R'].contains(&c) { } else if ['R'].contains(&c) {
ascii_text.push_str("[Rk]"); ascii_text.push_str("[Rk]");
} else if c.is_ascii_alphanumeric() { } else if c.is_ascii_alphanumeric() {
@ -255,7 +257,10 @@ fn image_with_white_padding(im: DynamicImage) -> DynamicImage {
new_im new_im
} }
pub async fn analyze_card_libtesseract(card: image::DynamicImage, count: u32) -> DroppedCard { pub async fn analyze_card_libtesseract(
card: image::DynamicImage,
count: u32,
) -> Result<DroppedCard, String> {
trace!("Spawning threads for analyzing card..."); trace!("Spawning threads for analyzing card...");
// Read the name and the series // Read the name and the series
let card_clone = card.clone(); let card_clone = card.clone();
@ -314,9 +319,19 @@ pub async fn analyze_card_libtesseract(card: image::DynamicImage, count: u32) ->
fix_tesseract_string(&mut series_str); fix_tesseract_string(&mut series_str);
series_str series_str
}); });
let name = name_thread.await.unwrap(); let name = match name_thread.await {
Ok(name) => name,
Err(why) => {
return Err(format!("Failed to read name: {:?}", why));
}
};
trace!("Name: {}", name); trace!("Name: {}", name);
let series = series_thread.await.unwrap(); let series = match series_thread.await {
Ok(series) => series,
Err(why) => {
return Err(format!("Failed to read series: {:?}", why));
}
};
trace!("Series: {}", series); trace!("Series: {}", series);
// TODO: Read the print number // TODO: Read the print number
let mut character = Character { let mut character = Character {
@ -342,14 +357,17 @@ pub async fn analyze_card_libtesseract(card: image::DynamicImage, count: u32) ->
None => {} None => {}
}, },
} }
DroppedCard { Ok(DroppedCard {
character, character,
print: 0, print: 0,
edition: 0, edition: 0,
} })
} }
pub async fn analyze_card_subprocess(card: image::DynamicImage, count: u32) -> DroppedCard { pub async fn analyze_card_subprocess(
card: image::DynamicImage,
count: u32,
) -> Result<DroppedCard, String> {
trace!("Spawning threads for analyzing card..."); trace!("Spawning threads for analyzing card...");
// Read the name and the series // Read the name and the series
let card_clone = card.clone(); let card_clone = card.clone();
@ -386,10 +404,19 @@ pub async fn analyze_card_subprocess(card: image::DynamicImage, count: u32) -> D
fix_tesseract_string(&mut series_str); fix_tesseract_string(&mut series_str);
series_str series_str
}); });
let name = name_thread.await.unwrap(); let name = match name_thread.await {
Ok(name) => name,
Err(why) => {
return Err(format!("Failed to read name: {:?}", why));
}
};
trace!("Name: {}", name); trace!("Name: {}", name);
let series = series_thread.await.unwrap(); let series = match series_thread.await {
trace!("Series: {}", series); Ok(series) => series,
Err(why) => {
return Err(format!("Failed to read series: {:?}", why));
}
};
// TODO: Read the print number // TODO: Read the print number
let mut character = Character { let mut character = Character {
wishlist: None, wishlist: None,
@ -414,14 +441,14 @@ pub async fn analyze_card_subprocess(card: image::DynamicImage, count: u32) -> D
None => {} None => {}
}, },
} }
DroppedCard { Ok(DroppedCard {
character, character,
print: 0, print: 0,
edition: 0, edition: 0,
} })
} }
async fn execute_analyze_drop(image: DynamicImage, count: u32) -> DroppedCard { async fn execute_analyze_drop(image: DynamicImage, count: u32) -> Result<DroppedCard, String> {
let config = CONFIG.get().unwrap(); let config = CONFIG.get().unwrap();
match config.tesseract.backend.as_str() { match config.tesseract.backend.as_str() {
"libtesseract" => analyze_card_libtesseract(image, count).await, "libtesseract" => analyze_card_libtesseract(image, count).await,