Headerbar: Do not allow insertion of invalid urls.
This commit is contained in:
@@ -2,6 +2,7 @@ use gtk;
|
||||
use gtk::prelude::*;
|
||||
|
||||
use hammond_data::Source;
|
||||
use url::Url;
|
||||
|
||||
use std::sync::Arc;
|
||||
use std::sync::mpsc::Sender;
|
||||
@@ -63,11 +64,12 @@ impl Header {
|
||||
let add_popover: gtk::Popover = builder.get_object("add_popover").unwrap();
|
||||
let new_url: gtk::Entry = builder.get_object("new_url").unwrap();
|
||||
let add_button: gtk::Button = builder.get_object("add_button").unwrap();
|
||||
let result_label: gtk::Label = builder.get_object("result_label").unwrap();
|
||||
self.switch.set_stack(&content.get_stack());
|
||||
|
||||
new_url.connect_changed(move |url| {
|
||||
println!("{:?}", url.get_text());
|
||||
});
|
||||
new_url.connect_changed(clone!(add_button => move |url| {
|
||||
on_url_change(url, &result_label, &add_button);
|
||||
}));
|
||||
|
||||
add_button.connect_clicked(clone!(add_popover, new_url, sender => move |_| {
|
||||
on_add_bttn_clicked(&new_url, sender.clone());
|
||||
@@ -139,3 +141,24 @@ fn on_add_bttn_clicked(entry: >k::Entry, sender: Sender<Action>) {
|
||||
error!("Error: {:?}", source.unwrap_err());
|
||||
}
|
||||
}
|
||||
|
||||
fn on_url_change(entry: >k::Entry, result: >k::Label, add_button: >k::Button) {
|
||||
let uri = entry.get_text().unwrap();
|
||||
debug!("Url: {}", uri);
|
||||
|
||||
let url = Url::parse(&uri);
|
||||
match url {
|
||||
// TODO: Check if the url exists
|
||||
Ok(_u) => {
|
||||
add_button.set_sensitive(true);
|
||||
result.hide();
|
||||
}
|
||||
// TODO: refactor to avoid duplication
|
||||
Err(err) => {
|
||||
add_button.set_sensitive(false);
|
||||
result.set_label("Invalid url.");
|
||||
result.show();
|
||||
error!("Error: {}", err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ extern crate log;
|
||||
extern crate loggerv;
|
||||
extern crate open;
|
||||
extern crate send_cell;
|
||||
extern crate url;
|
||||
// extern crate rayon;
|
||||
|
||||
// use rayon::prelude::*;
|
||||
|
||||
Reference in New Issue
Block a user