diff --git a/src/cache/img_name.webp b/src/cache/img_name.webp new file mode 100644 index 0000000..bd6fe8e Binary files /dev/null and b/src/cache/img_name.webp differ diff --git a/src/image.rs b/src/image.rs new file mode 100644 index 0000000..a6c1502 --- /dev/null +++ b/src/image.rs @@ -0,0 +1,14 @@ +use image::ImageFormat; +use image::ImageReader; +use log::debug; + +pub fn convert_to_webp(img_name: String) { + debug!("The img_name is: {img_name}"); + let img = ImageReader::open(format!("cache/{img_name}.jpeg")) + .unwrap() + .decode() + .unwrap(); + img + .save_with_format(format!("src/cache/img_name.webp"), ImageFormat::WebP) + .unwrap(); +} diff --git a/src/main.rs b/src/main.rs index 9746e39..b534aaa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,4 @@ use eframe::egui; -use eframe::egui::ImageSource; use log::*; use reqwest::Client; use serde::Deserialize; @@ -11,6 +10,7 @@ use std::time::Duration; use std::{env, fs}; use tokio; use tokio::runtime::Runtime; +pub mod image; #[derive(Debug, Clone)] struct BookData { @@ -153,20 +153,22 @@ impl std::fmt::Display for BookData { ) } } -fn get_thumbnail(url: String) { +fn get_thumbnail(url: String, isbn: String) { let runtime = Runtime::new().unwrap(); let url = if url.is_empty() { - "https://www.rust-lang.org/logos/rust-logo-512x512.png".to_string() + "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Ftse1.mm.bing.net%2Fth%2Fid%2FOIP.pluN_8e5GuVyqRmW8xWs1gHaET%3Fcb%3D12%26pid%3DApi&f=1&ipt=bf48e49e5df83d58cdee7752f4e2095f5b0ad37e5122d447ff774631db3de4a9&ipo=images".to_string() } else { url }; - + debug!("The isbn of the img is: {isbn}"); + let isbn = isbn.trim().to_string(); fs::create_dir_all("cache").unwrap(); - let mut dest = File::create("cache/image.jpeg").unwrap(); + let mut dest = File::create(format!("cache/{isbn}.jpeg")).unwrap(); let image = runtime.block_on(reqwest::get(url)).unwrap(); let bytes = runtime.block_on(image.bytes()).unwrap(); let mut output = Cursor::new(bytes); copy(&mut output, &mut dest).unwrap(); + image::convert_to_webp(isbn); } #[derive(Default)] @@ -175,6 +177,7 @@ struct BarcodeScanner {} impl eframe::App for BarcodeScanner { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) -> () { egui_extras::install_image_loaders(ctx); + egui::CentralPanel::default().show(ctx, |ui| { ui.heading("Barcode Scanner"); ui.group(|ui| { @@ -182,22 +185,17 @@ impl eframe::App for BarcodeScanner { let barcode = get_ean13_data(); ui.label(format!("EAN13: {}", barcode)); let book_metadata = if barcode.starts_with("978") { - get_book_data(barcode) + get_book_data(barcode.clone()) } else { BookData::new() }; - get_thumbnail(book_metadata.thumbnail.clone()); + get_thumbnail(book_metadata.thumbnail.clone(), barcode); ui.label(format!("Title: {}", book_metadata.title)); ui.label(format!("Description: {}", book_metadata.description)); ui.label(format!("Authors: {:?}", book_metadata.authors)); - if !book_metadata.thumbnail.is_empty() { - ui.image(egui::ImageSource::Uri(book_metadata.thumbnail.into())) - } else { - ui.image(egui::ImageSource::Uri(std::borrow::Cow::Borrowed( - "https://www.rust-lang.org/logos/rust-logo-512x512.png", - ))) - } - // } + ui.image(egui::include_image!("cache/img_name.webp")) + .on_hover_text_at_pointer("WebP"); + //} }) }); }