diff --git a/Cargo.lock b/Cargo.lock index bbe36b5..0ad6bfc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -915,7 +915,7 @@ dependencies = [ [[package]] name = "glycin" version = "2.0.0-alpha" -source = "git+https://gitlab.gnome.org/sophie-h/glycin#d54af1730281c21982846d6729c22dc21265cb0d" +source = "git+https://gitlab.gnome.org/sophie-h/glycin#dba036d37a7991215222b68f3527b4740f10953b" dependencies = [ "async-fs", "async-io", @@ -946,7 +946,7 @@ dependencies = [ [[package]] name = "glycin-utils" version = "2.0.0-alpha" -source = "git+https://gitlab.gnome.org/sophie-h/glycin#d54af1730281c21982846d6729c22dc21265cb0d" +source = "git+https://gitlab.gnome.org/sophie-h/glycin#dba036d37a7991215222b68f3527b4740f10953b" dependencies = [ "env_logger", "gufo-common", diff --git a/src/decoder.rs b/src/decoder.rs index 96187b2..05b52e0 100644 --- a/src/decoder.rs +++ b/src/decoder.rs @@ -73,6 +73,8 @@ pub enum DecoderError { UnsupportedFormat, /// No glycin-loaders installed NoLoadersConfigured, + /// Memory limit exceeded + OutOfMemory, #[default] None, } @@ -118,6 +120,9 @@ impl UpdateSender { update_sender.send(DecoderUpdate::SpecificError( DecoderError::UnsupportedFormat, )); + } + if err.is_out_of_memory() { + update_sender.send(DecoderUpdate::SpecificError(DecoderError::OutOfMemory)); } else if matches!(err.error(), glycin::Error::NoLoadersConfigured(_)) { update_sender.send(DecoderUpdate::SpecificError( DecoderError::NoLoadersConfigured, diff --git a/src/widgets/image_page.rs b/src/widgets/image_page.rs index e6a478d..90769c8 100644 --- a/src/widgets/image_page.rs +++ b/src/widgets/image_page.rs @@ -261,9 +261,15 @@ impl LpImagePage { } )); - imp.error_page.set_description(Some(&gettext( - "Either the image file is corrupted or it contains unsupported elements.", - ))); + if image.specific_error() == DecoderError::OutOfMemory { + imp.error_page.set_description(Some(&gettext( + "There is not enough free memory available to load this image.", + ))); + } else { + imp.error_page.set_description(Some(&gettext( + "Either the image file is corrupted or it contains unsupported elements.", + ))); + } imp.error_more_info.set_visible(true); imp.stack.set_visible_child(&*imp.error_page);