From 9e1fb9c5ca0933338dbfc6aadf00c9d9cbc87985 Mon Sep 17 00:00:00 2001 From: yggverse Date: Thu, 13 Feb 2025 09:04:06 +0200 Subject: [PATCH] init local browser driver --- src/app/browser/window/tab/item/client.rs | 1 + .../browser/window/tab/item/client/driver.rs | 4 +++ .../window/tab/item/client/driver/file.rs | 28 +++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 src/app/browser/window/tab/item/client/driver/file.rs diff --git a/src/app/browser/window/tab/item/client.rs b/src/app/browser/window/tab/item/client.rs index e7571033..81f4fa55 100644 --- a/src/app/browser/window/tab/item/client.rs +++ b/src/app/browser/window/tab/item/client.rs @@ -65,6 +65,7 @@ impl Client { match result { // route by scheme Ok(uri) => match uri.scheme().as_str() { + "file" => driver.file.handle(uri, feature, cancellable), "gemini" | "titan" => driver.gemini.handle(uri, feature, cancellable), scheme => { // no scheme match driver, complete with failure message diff --git a/src/app/browser/window/tab/item/client/driver.rs b/src/app/browser/window/tab/item/client/driver.rs index 9df84ff7..8d1337c2 100644 --- a/src/app/browser/window/tab/item/client/driver.rs +++ b/src/app/browser/window/tab/item/client/driver.rs @@ -1,11 +1,14 @@ +mod file; mod gemini; use super::{Feature, Page}; +use file::File; use gemini::Gemini; use std::rc::Rc; /// Different protocols implementation pub struct Driver { + pub file: File, pub gemini: Gemini, } @@ -15,6 +18,7 @@ impl Driver { /// Build new `Self` pub fn build(page: &Rc) -> Self { Driver { + file: File::init(page), gemini: Gemini::init(page), } } diff --git a/src/app/browser/window/tab/item/client/driver/file.rs b/src/app/browser/window/tab/item/client/driver/file.rs new file mode 100644 index 00000000..fb421033 --- /dev/null +++ b/src/app/browser/window/tab/item/client/driver/file.rs @@ -0,0 +1,28 @@ +use super::{Feature, Page}; +use gtk::{gio::Cancellable, glib::Uri}; +use std::rc::Rc; + +/// Local files client driver +pub struct File { + // page: Rc, +} + +impl File { + // Constructors + + /// Create new `Self` + pub fn init(_page: &Rc) -> Self { + Self { /*page: page.clone()*/ } // @TODO + } + + pub fn handle(&self, uri: Uri, _feature: Rc, cancellable: Cancellable) { + use gtk::{gio::File, prelude::FileExtManual}; + + File::for_uri(&uri.to_string()).load_contents_async(Some(&cancellable), |result| { + match result { + Ok(_) => todo!(), + Err(_) => todo!(), + } + }); + } +}