From 2a1f4a89ac029e420f44974bc0186e237f239435 Mon Sep 17 00:00:00 2001 From: yggverse Date: Thu, 13 Feb 2025 19:30:50 +0200 Subject: [PATCH] handle directory route errors, use referenced `Page` argument, remove extra `Rc` ns dependencies --- .../window/tab/item/client/driver/file.rs | 95 +++++++++---------- .../tab/item/client/driver/file/image.rs | 4 +- .../tab/item/client/driver/file/status.rs | 5 +- .../tab/item/client/driver/file/text.rs | 4 +- 4 files changed, 47 insertions(+), 61 deletions(-) diff --git a/src/app/browser/window/tab/item/client/driver/file.rs b/src/app/browser/window/tab/item/client/driver/file.rs index 62c0b043..f119c70a 100644 --- a/src/app/browser/window/tab/item/client/driver/file.rs +++ b/src/app/browser/window/tab/item/client/driver/file.rs @@ -31,6 +31,7 @@ impl File { let url = uri.to_string(); let file = File::for_uri(&url); + let page = self.page.clone(); match file.query_file_type(FileQueryInfoFlags::NONE, Some(&cancellable)) { FileType::Directory => file.enumerate_children_async( @@ -38,7 +39,7 @@ impl File { FileQueryInfoFlags::NONE, Priority::DEFAULT, Some(&cancellable), - |result| match result { + move |result| match result { Ok(file_enumerator) => { for entry in file_enumerator { match entry { @@ -52,11 +53,11 @@ impl File { FileType::Mountable => todo!(), _ => todo!(), }, - Err(_) => todo!(), + Err(e) => Status::Failure(e.to_string()).handle(&page), } } } - Err(_) => todo!(), + Err(e) => Status::Failure(e.to_string()).handle(&page), }, ), _ => file.clone().query_info_async( @@ -64,57 +65,49 @@ impl File { FileQueryInfoFlags::NONE, Priority::DEFAULT, Some(&cancellable.clone()), - { - let page = self.page.clone(); - move |result| match result { - Ok(file_info) => match file_info.content_type() { - Some(content_type) => match content_type.as_str() { - "text/plain" => { - if matches!(*feature, Feature::Source) { - load_contents_async(file, cancellable, move |result| { - match result { - Ok(data) => Text::Source(uri, data).handle(page), - Err(message) => { - Status::Failure(message).handle(page) - } - } - }) - } else if url.ends_with(".txt") { - load_contents_async(file, cancellable, move |result| { - match result { - Ok(data) => Text::Plain(uri, data).handle(page), - Err(message) => { - Status::Failure(message).handle(page) - } - } - }); - } else { - load_contents_async(file, cancellable, move |result| { - match result { - Ok(data) => Text::Gemini(uri, data).handle(page), - Err(message) => { - Status::Failure(message).handle(page) - } - } - }) - } + move |result| match result { + Ok(file_info) => match file_info.content_type() { + Some(content_type) => match content_type.as_str() { + "text/plain" => { + if matches!(*feature, Feature::Source) { + load_contents_async(file, cancellable, move |result| { + match result { + Ok(data) => Text::Source(uri, data).handle(&page), + Err(message) => Status::Failure(message).handle(&page), + } + }) + } else if url.ends_with(".txt") { + load_contents_async(file, cancellable, move |result| { + match result { + Ok(data) => Text::Plain(uri, data).handle(&page), + Err(message) => Status::Failure(message).handle(&page), + } + }); + } else { + load_contents_async(file, cancellable, move |result| { + match result { + Ok(data) => Text::Gemini(uri, data).handle(&page), + Err(message) => Status::Failure(message).handle(&page), + } + }) } - "image/png" | "image/gif" | "image/jpeg" | "image/webp" => { - match gtk::gdk::Texture::from_file(&file) { - Ok(texture) => Image::Bitmap(uri, texture).handle(page), - Err(e) => Status::Failure(e.to_string()).handle(page), - } + } + "image/png" | "image/gif" | "image/jpeg" | "image/webp" => { + match gtk::gdk::Texture::from_file(&file) { + Ok(texture) => Image::Bitmap(uri, texture).handle(&page), + Err(e) => Status::Failure(e.to_string()).handle(&page), } - mime => Status::Failure(format!( - "Content type `{mime}` yet not supported" - )) - .handle(page), - }, - None => Status::Failure("Undetectable content type".to_string()) - .handle(page), + } + mime => { + Status::Failure(format!("Content type `{mime}` yet not supported")) + .handle(&page) + } }, - Err(e) => Status::Failure(e.to_string()).handle(page), - } + None => { + Status::Failure("Undetectable content type".to_string()).handle(&page) + } + }, + Err(e) => Status::Failure(e.to_string()).handle(&page), }, ), } diff --git a/src/app/browser/window/tab/item/client/driver/file/image.rs b/src/app/browser/window/tab/item/client/driver/file/image.rs index 562b36bb..e05a11e8 100644 --- a/src/app/browser/window/tab/item/client/driver/file/image.rs +++ b/src/app/browser/window/tab/item/client/driver/file/image.rs @@ -1,6 +1,4 @@ -use super::Page; use gtk::{gdk::Texture, glib::Uri}; -use std::rc::Rc; pub enum Image { Bitmap(Uri, Texture), @@ -8,7 +6,7 @@ pub enum Image { } impl Image { - pub fn handle(&self, page: Rc) { + pub fn handle(&self, page: &super::Page) { let uri = match self { Self::Bitmap(uri, texture) => { page.content.to_image(texture); diff --git a/src/app/browser/window/tab/item/client/driver/file/status.rs b/src/app/browser/window/tab/item/client/driver/file/status.rs index aabb894a..706b381b 100644 --- a/src/app/browser/window/tab/item/client/driver/file/status.rs +++ b/src/app/browser/window/tab/item/client/driver/file/status.rs @@ -1,12 +1,9 @@ -use super::Page; -use std::rc::Rc; - pub enum Status { Failure(String), } impl Status { - pub fn handle(&self, page: Rc) { + pub fn handle(&self, page: &super::Page) { let (message, widget) = match self { Self::Failure(message) => (message, page.content.to_status_failure()), }; diff --git a/src/app/browser/window/tab/item/client/driver/file/text.rs b/src/app/browser/window/tab/item/client/driver/file/text.rs index 18b9145d..407ec8fb 100644 --- a/src/app/browser/window/tab/item/client/driver/file/text.rs +++ b/src/app/browser/window/tab/item/client/driver/file/text.rs @@ -1,6 +1,4 @@ -use super::Page; use gtk::glib::Uri; -use std::rc::Rc; pub enum Text { Gemini(Uri, String), @@ -9,7 +7,7 @@ pub enum Text { } impl Text { - pub fn handle(&self, page: Rc) { + pub fn handle(&self, page: &super::Page) { let (uri, widget) = match self { Self::Gemini(uri, data) => (uri, page.content.to_text_gemini(uri, data)), Self::Plain(uri, data) => (uri, page.content.to_text_plain(data)),