1) image naming format
2) panic message shown at end
4) some messages changed
This commit is contained in:
Piyush मिश्रः 2022-03-28 23:20:13 +05:30
parent 8a194a254f
commit e241ac7ff5
7 changed files with 85 additions and 33 deletions

View File

@ -18,6 +18,7 @@ use crate::{
config::{self, ConfigFile}, config::{self, ConfigFile},
dialog, globals, dialog, globals,
utils::{self, ImageType}, utils::{self, ImageType},
result_ext::ResultExt
}; };
use fltk::{ use fltk::{
app, app,

View File

@ -15,6 +15,7 @@
//! Window to change Crop properties of image //! Window to change Crop properties of image
use crate::{ use crate::{
globals, globals,
result_ext::ResultExt,
utils::{self, Coord, ImageContainer, ImageInfo, ImageProperties}, utils::{self, Coord, ImageContainer, ImageInfo, ImageProperties},
}; };
use fltk::{ use fltk::{

View File

@ -12,7 +12,7 @@
along with Post Maker. If not, see <https://www.gnu.org/licenses/> along with Post Maker. If not, see <https://www.gnu.org/licenses/>
*/ */
use crate::config; use crate::{config, result_ext::ResultExt};
use lazy_static::lazy_static; use lazy_static::lazy_static;
use rusttype::Font; use rusttype::Font;
use std::{ffi::OsString, io::Read, sync::RwLock}; use std::{ffi::OsString, io::Read, sync::RwLock};

View File

@ -1,13 +1,13 @@
#[macro_export] #[macro_export]
macro_rules! rw_read { macro_rules! rw_read {
($var:expr) => { ($var:expr) => {
$var.read().expect("Program got panic!") $var.read().expect_log("Program got panic!")
}; };
} }
#[macro_export] #[macro_export]
macro_rules! rw_write { macro_rules! rw_write {
($var:expr) => { ($var:expr) => {
$var.write().expect("Program got panic!") $var.write().expect_log("Program got panic!")
}; };
} }

View File

@ -34,11 +34,11 @@ mod utils;
use fltk::{ use fltk::{
app::{channel, App}, app::{channel, App},
// dialog,
prelude::*, prelude::*,
}; };
use fltk_theme::WidgetTheme; use fltk_theme::WidgetTheme;
use main_window::MainWindow; use main_window::MainWindow;
use result_ext::ResultExt;
use simplelog::*; use simplelog::*;
use std::sync::{Arc, RwLock}; use std::sync::{Arc, RwLock};
@ -48,6 +48,7 @@ pub(crate) enum AppMessage {
RedrawMainWindowImage(Option<Vec<u8>>), RedrawMainWindowImage(Option<Vec<u8>>),
Message(String), Message(String),
Alert(String), Alert(String),
ProgramPanicMessage(String),
// Only for Main windows // Only for Main windows
DeleteImage, DeleteImage,
@ -91,6 +92,10 @@ fn main() {
dialog::message_default(&msg); dialog::message_default(&msg);
} }
AppMessage::Alert(msg) => dialog::alert_default(&msg), AppMessage::Alert(msg) => dialog::alert_default(&msg),
AppMessage::ProgramPanicMessage(msg) => {
dialog::message_default(&msg);
std::process::exit(1);
}
AppMessage::DeleteImage => { AppMessage::DeleteImage => {
let ch = dialog::choice_default("Image is too small", "Delete", "Keep"); let ch = dialog::choice_default("Image is too small", "Delete", "Keep");
if ch == 0 { if ch == 0 {

View File

@ -14,9 +14,9 @@ impl<T, E: Debug> ResultExt<T, E> for Result<T, E> {
match self { match self {
Ok(v) => v, Ok(v) => v,
Err(e) => { Err(e) => {
utils::show_alert(msg);
error!("{}\n{:?}\n{}", msg, e, Location::caller()); error!("{}\n{:?}\n{}", msg, e, Location::caller());
std::process::exit(1); utils::show_program_panic(msg);
panic!("[panic]");
} }
} }
} }
@ -24,16 +24,16 @@ impl<T, E: Debug> ResultExt<T, E> for Result<T, E> {
#[track_caller] #[track_caller]
fn error_log(&self, msg: &str) { fn error_log(&self, msg: &str) {
if let Err(e) = self { if let Err(e) = self {
utils::show_alert(msg);
error!("{}\n{:?}\n{}", msg, e, Location::caller()); error!("{}\n{:?}\n{}", msg, e, Location::caller());
utils::show_alert(msg);
} }
} }
#[track_caller] #[track_caller]
fn warn_log(&self, msg: &str) { fn warn_log(&self, msg: &str) {
if let Err(e) = self { if let Err(e) = self {
utils::show_alert(msg);
warn!("{}\n{:?}", msg, e); warn!("{}\n{:?}", msg, e);
utils::show_alert(msg);
} }
} }
} }

View File

@ -513,7 +513,7 @@ impl ImageProperties {
fn load_image(image_info: &ImageInfo) -> DynamicImage { fn load_image(image_info: &ImageInfo) -> DynamicImage {
let img = match image_info.image_type { let img = match image_info.image_type {
ImageType::Webp => { 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![]; let mut buf = vec![];
f.read_to_end(&mut buf).expect_log("Failed to read image!"); f.read_to_end(&mut buf).expect_log("Failed to read image!");
let a = webp::Decoder::new(&buf) let a = webp::Decoder::new(&buf)
@ -523,14 +523,14 @@ fn load_image(image_info: &ImageInfo) -> DynamicImage {
a.to_image() a.to_image()
} }
ImageType::Jpeg => { 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![]; let mut buf = vec![];
f.read_to_end(&mut buf).expect_log("Failed to read image!"); f.read_to_end(&mut buf).expect_log("Failed to read image!");
let d = mozjpeg::Decompress::with_markers(mozjpeg::ALL_MARKERS) let d = mozjpeg::Decompress::with_markers(mozjpeg::ALL_MARKERS)
.from_mem(&buf) .from_mem(&buf)
.expect_log("Failed to decompress image!"); .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 pixels = image.read_scanlines_flat().unwrap();
let image = let image =
ImageBuffer::from_raw(image.width() as u32, image.height() as u32, pixels).unwrap(); 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 => { ImageType::Png => {
let dec = image::codecs::png::PngDecoder::new( 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!"); .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 => { ImageType::None => {
Result::<(), _>::Err("Failed to open image!").expect_log(""); Result::<(), _>::Err("Failed to load image!").expect_log("Unknown format!");
std::process::exit(1); std::process::exit(1);
} }
}; };
@ -680,11 +680,33 @@ pub(crate) fn measure_line(
/// path of properties files /// path of properties files
pub(crate) fn get_properties_path(image_info: &ImageInfo) -> PathBuf { pub(crate) fn get_properties_path(image_info: &ImageInfo) -> PathBuf {
let img = &image_info.path; 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)); let image_name: String = image_info
default_path.set_extension("prop"); .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::<Vec<char>>()
.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() { if default_path.exists() {
return default_path; 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 { pub(crate) fn get_export_image_path(image_info: &ImageInfo) -> PathBuf {
let config = rw_read!(globals::CONFIG); let config = rw_read!(globals::CONFIG);
let export_format = &config.image_format; 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::<Vec<char>>()
.into_iter()
.rev();
let image_name = format!(
"{}.{}",
String::from_iter(image_name),
export_format.as_extension()
);
let export = image_info
.path .path
.parent() .parent()
.unwrap() .unwrap()
.join("export") .join("export")
.join(format!( .join(&image_name);
"{}-{}",
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());
export export
} }
@ -806,3 +844,10 @@ pub(crate) fn show_alert(msg: &str) {
a.send(crate::AppMessage::Alert(msg.to_owned())); 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()));
}
}