diff --git a/src/Cargo.lock b/src/Cargo.lock index e1c9c5b..721c42b 100644 --- a/src/Cargo.lock +++ b/src/Cargo.lock @@ -2075,6 +2075,25 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + [[package]] name = "itoa" version = "1.0.14" @@ -2717,6 +2736,17 @@ version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" +[[package]] +name = "open" +version = "5.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2483562e62ea94312f3576a7aca397306df7990b8d89033e18766744377ef95" +dependencies = [ + "is-wsl", + "libc", + "pathdiff", +] + [[package]] name = "orbclient" version = "0.3.48" @@ -2874,6 +2904,12 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + [[package]] name = "pem-rfc7468" version = "0.7.0" @@ -3256,6 +3292,7 @@ version = "0.1.0" dependencies = [ "data", "iced", + "open", "service", "strum", ] diff --git a/src/Cargo.toml b/src/Cargo.toml index e12dad9..27bd69f 100644 --- a/src/Cargo.toml +++ b/src/Cargo.toml @@ -9,6 +9,7 @@ service = { path = "service" } iced = { version = "0.13.1", features = ["tokio", "lazy"] } strum = { version = "0.27.0", features = ["derive"] } +open = "5.3.2" [workspace] resolver = "2" diff --git a/src/src/main.rs b/src/src/main.rs index 0fe0b6d..b286455 100644 --- a/src/src/main.rs +++ b/src/src/main.rs @@ -34,9 +34,11 @@ struct Repository { >, } +#[derive(Default)] enum Screen { Search, // Statistics, + #[default] Authentication, } @@ -76,8 +78,7 @@ impl Repository { Self { main_id, scale_factor: 1.4, - screen: Screen::Search, - + screen: Screen::default(), authenticated: None, @@ -112,7 +113,7 @@ impl Repository { return task.map(Message::Authentecation); } authentication::Event::Authenticated(authenticated) => { - log!("authenticated as {:#?}", authenticated); + log!("authenticated as {:#?}", *authenticated); self.authenticated = Some(authenticated); self.screen = Screen::Search; } @@ -126,13 +127,21 @@ impl Repository { return task.map(Message::Search); } search::Event::OpenPackage(id) => { - log!("opening package {id}") + log!("opening package {id}"); } search::Event::OpenBase(id) => { - log!("opening package base {id}") + log!("opening package base {id}"); } search::Event::OpenURL(url) => { - log!("opening url {url}") + log!("opening url {url}"); + match open::that(url.as_ref()) { + Ok(()) => { + log!("opened url {url}"); + } + Err(e) => { + log!("can't open url \"{url}\": {e}"); + } + } } } } @@ -155,7 +164,10 @@ impl Repository { fn title(&self, _: window::Id) -> String { // "Repository".into() - self.authentication.title() + match self.screen { + Screen::Search => self.search.title(), + Screen::Authentication => self.authentication.title(), + } } fn subscription(&self) -> Subscription { diff --git a/src/src/search.rs b/src/src/search.rs index bb84c15..3ddaa7f 100644 --- a/src/src/search.rs +++ b/src/src/search.rs @@ -158,7 +158,15 @@ impl Table { entry .url .as_ref() - .map_or("-".into(), |s| url(&"link", Message::URLPressed(s.clone()))), + .map_or("-".into(), |s| + + tip( + url(&"link", Message::URLPressed(s.clone())), + s.clone(), + tip::Position::Bottom, + ), + + ), ); table[4].push(text(entry.description.to_string()).into()); table[5].push(text(entry.updated_at.to_string()).into()); diff --git a/src/src/widget.rs b/src/src/widget.rs index efb94fa..f064317 100644 --- a/src/src/widget.rs +++ b/src/src/widget.rs @@ -36,12 +36,12 @@ pub mod tip { /// Tooltip with some styling applied pub fn tip<'a, Message: 'a>( content: impl Into>, - tip: &'a str, + tip: impl ToString, position: tip::Position, ) -> Element<'a, Message> { tooltip( content, - container(text(tip).size(14)) + container(text(tip.to_string()).size(14)) .padding(5) .style(container::dark), position,