Headerbar: Do not allow insertion of invalid urls.

This commit is contained in:
Jordan Petridis
2018-01-27 14:11:02 +02:00
parent d14973cf0d
commit 18e55e23ee
7 changed files with 35 additions and 11 deletions
+1
View File
@@ -19,6 +19,7 @@ loggerv = "0.7.0"
open = "1.2.1"
rayon = "0.9.0"
send-cell = "0.1.2"
url = "1.6.0"
[dependencies.gtk]
features = ["v3_22"]
+1 -1
View File
@@ -129,7 +129,7 @@ Tobias Bernard
</packing>
</child>
<child>
<object class="GtkLabel" id="already_subscribed_label">
<object class="GtkLabel" id="result_label">
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">You are already subscribed to that feed!</property>
+26 -3
View File
@@ -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: &gtk::Entry, sender: Sender<Action>) {
error!("Error: {:?}", source.unwrap_err());
}
}
fn on_url_change(entry: &gtk::Entry, result: &gtk::Label, add_button: &gtk::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);
}
}
}
+1
View File
@@ -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::*;