From e241ac7ff575257024f50d6f8247bde8eef7d5d6 Mon Sep 17 00:00:00 2001 From: Piyush Mishra Date: Mon, 28 Mar 2022 23:20:13 +0530 Subject: [PATCH] Fixes: 1) image naming format 2) panic message shown at end 4) some messages changed --- src/config_window.rs | 1 + src/crop_window.rs | 1 + src/globals.rs | 2 +- src/macros.rs | 4 +- src/main.rs | 7 +++- src/result_ext.rs | 8 ++-- src/utils.rs | 95 ++++++++++++++++++++++++++++++++------------ 7 files changed, 85 insertions(+), 33 deletions(-) diff --git a/src/config_window.rs b/src/config_window.rs index f2fae42..cdc4130 100644 --- a/src/config_window.rs +++ b/src/config_window.rs @@ -18,6 +18,7 @@ use crate::{ config::{self, ConfigFile}, dialog, globals, utils::{self, ImageType}, + result_ext::ResultExt }; use fltk::{ app, diff --git a/src/crop_window.rs b/src/crop_window.rs index a2e380f..bd6a4d2 100644 --- a/src/crop_window.rs +++ b/src/crop_window.rs @@ -15,6 +15,7 @@ //! Window to change Crop properties of image use crate::{ globals, + result_ext::ResultExt, utils::{self, Coord, ImageContainer, ImageInfo, ImageProperties}, }; use fltk::{ diff --git a/src/globals.rs b/src/globals.rs index 39701a1..657c113 100644 --- a/src/globals.rs +++ b/src/globals.rs @@ -12,7 +12,7 @@ along with Post Maker. If not, see */ -use crate::config; +use crate::{config, result_ext::ResultExt}; use lazy_static::lazy_static; use rusttype::Font; use std::{ffi::OsString, io::Read, sync::RwLock}; diff --git a/src/macros.rs b/src/macros.rs index 8be3875..3dd30ad 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -1,13 +1,13 @@ #[macro_export] macro_rules! rw_read { ($var:expr) => { - $var.read().expect("Program got panic!") + $var.read().expect_log("Program got panic!") }; } #[macro_export] macro_rules! rw_write { ($var:expr) => { - $var.write().expect("Program got panic!") + $var.write().expect_log("Program got panic!") }; } diff --git a/src/main.rs b/src/main.rs index 354bf66..8f21f61 100644 --- a/src/main.rs +++ b/src/main.rs @@ -34,11 +34,11 @@ mod utils; use fltk::{ app::{channel, App}, - // dialog, prelude::*, }; use fltk_theme::WidgetTheme; use main_window::MainWindow; +use result_ext::ResultExt; use simplelog::*; use std::sync::{Arc, RwLock}; @@ -48,6 +48,7 @@ pub(crate) enum AppMessage { RedrawMainWindowImage(Option>), Message(String), Alert(String), + ProgramPanicMessage(String), // Only for Main windows DeleteImage, @@ -91,6 +92,10 @@ fn main() { dialog::message_default(&msg); } AppMessage::Alert(msg) => dialog::alert_default(&msg), + AppMessage::ProgramPanicMessage(msg) => { + dialog::message_default(&msg); + std::process::exit(1); + } AppMessage::DeleteImage => { let ch = dialog::choice_default("Image is too small", "Delete", "Keep"); if ch == 0 { diff --git a/src/result_ext.rs b/src/result_ext.rs index 120a07d..77be7ad 100644 --- a/src/result_ext.rs +++ b/src/result_ext.rs @@ -14,9 +14,9 @@ impl ResultExt for Result { match self { Ok(v) => v, Err(e) => { - utils::show_alert(msg); error!("{}\n{:?}\n{}", msg, e, Location::caller()); - std::process::exit(1); + utils::show_program_panic(msg); + panic!("[panic]"); } } } @@ -24,16 +24,16 @@ impl ResultExt for Result { #[track_caller] fn error_log(&self, msg: &str) { if let Err(e) = self { - utils::show_alert(msg); error!("{}\n{:?}\n{}", msg, e, Location::caller()); + utils::show_alert(msg); } } #[track_caller] fn warn_log(&self, msg: &str) { if let Err(e) = self { - utils::show_alert(msg); warn!("{}\n{:?}", msg, e); + utils::show_alert(msg); } } } diff --git a/src/utils.rs b/src/utils.rs index 6efdf85..df476da 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -513,7 +513,7 @@ impl ImageProperties { fn load_image(image_info: &ImageInfo) -> DynamicImage { let img = match image_info.image_type { ImageType::Webp => { - let mut f = File::open(&image_info.path).expect_log("Failed to open image!"); + let mut f = File::open(&image_info.path).expect_log("Failed to load image!"); let mut buf = vec![]; f.read_to_end(&mut buf).expect_log("Failed to read image!"); let a = webp::Decoder::new(&buf) @@ -523,14 +523,14 @@ fn load_image(image_info: &ImageInfo) -> DynamicImage { a.to_image() } ImageType::Jpeg => { - let mut f = File::open(&image_info.path).expect_log("Failed to open image!"); + let mut f = File::open(&image_info.path).expect_log("Failed to load image!"); let mut buf = vec![]; f.read_to_end(&mut buf).expect_log("Failed to read image!"); let d = mozjpeg::Decompress::with_markers(mozjpeg::ALL_MARKERS) .from_mem(&buf) .expect_log("Failed to decompress image!"); - let mut image = d.rgb().expect_log("Failed to covert to rgb image!"); + let mut image = d.rgb().expect_log("Failed to convert to rgb image!"); let pixels = image.read_scanlines_flat().unwrap(); let image = ImageBuffer::from_raw(image.width() as u32, image.height() as u32, pixels).unwrap(); @@ -538,13 +538,13 @@ fn load_image(image_info: &ImageInfo) -> DynamicImage { } ImageType::Png => { let dec = image::codecs::png::PngDecoder::new( - File::open(&image_info.path).expect_log("Failed to open image!"), + File::open(&image_info.path).expect_log("Failed to load image!"), ) .expect_log("Failed to decode image!"); - DynamicImage::from_decoder(dec).expect_log("Failed to open image!") + DynamicImage::from_decoder(dec).expect_log("Failed to decode image!") } ImageType::None => { - Result::<(), _>::Err("Failed to open image!").expect_log(""); + Result::<(), _>::Err("Failed to load image!").expect_log("Unknown format!"); std::process::exit(1); } }; @@ -680,11 +680,33 @@ pub(crate) fn measure_line( /// path of properties files pub(crate) fn get_properties_path(image_info: &ImageInfo) -> PathBuf { let img = &image_info.path; - let stem = String::from(img.file_stem().unwrap_or_default().to_string_lossy()); - let extension = String::from(img.extension().unwrap_or_default().to_string_lossy()); - let mut default_path = img.with_file_name(format!("{}-{}", stem, extension)); - default_path.set_extension("prop"); + let image_name: String = image_info + .path + .file_name() + .unwrap_or_default() + .to_string_lossy() + .into_owned(); + + let mut occurance = 0; + let image_name = image_name + .chars() + .into_iter() + .rev() + .map(|c| { + if occurance == 0 && c == '.' { + occurance = 1; + '-' + } else { + c + } + }) + .collect::>() + .into_iter() + .rev(); + let image_name = format!("{}.prop", String::from_iter(image_name)); + + let default_path = img.with_file_name(&image_name); if default_path.exists() { return default_path; @@ -706,25 +728,41 @@ pub(crate) fn get_properties_path(image_info: &ImageInfo) -> PathBuf { pub(crate) fn get_export_image_path(image_info: &ImageInfo) -> PathBuf { let config = rw_read!(globals::CONFIG); let export_format = &config.image_format; - let mut export = image_info + let image_name = image_info + .path + .file_name() + .unwrap_or_default() + .to_string_lossy(); + + let mut occurance = 0; + let image_name = image_name + .chars() + .into_iter() + .rev() + .map(|c| { + if occurance == 0 && c == '.' { + occurance = 1; + '-' + } else { + c + } + }) + .collect::>() + .into_iter() + .rev(); + let image_name = format!( + "{}.{}", + String::from_iter(image_name), + export_format.as_extension() + ); + + let export = image_info .path .parent() .unwrap() .join("export") - .join(format!( - "{}-{}", - image_info - .path - .file_stem() - .unwrap_or_default() - .to_string_lossy(), - image_info - .path - .extension() - .unwrap_or_default() - .to_string_lossy() - )); - export.set_extension(export_format.as_extension()); + .join(&image_name); + export } @@ -806,3 +844,10 @@ pub(crate) fn show_alert(msg: &str) { a.send(crate::AppMessage::Alert(msg.to_owned())); } } + +pub(crate) fn show_program_panic(msg: &str) { + let a = rw_read!(globals::MAIN_SENDER); + if let Some(a) = &*a { + a.send(crate::AppMessage::ProgramPanicMessage(msg.to_owned())); + } +}