From b33943fbe2ccab3923c3dc6e5004f6df3312c176 Mon Sep 17 00:00:00 2001 From: Sophie Herold Date: Fri, 26 Jul 2024 22:54:24 +0200 Subject: [PATCH] imagePage: Show specific error for out of memory Part-of: --- Cargo.lock | 4 ++-- src/decoder.rs | 5 +++++ src/widgets/image_page.rs | 12 +++++++++--- 3 files changed, 16 insertions(+), 5 deletions(-) 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);