aboutsummaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
authorJoris2022-02-27 09:36:14 +0100
committerJoris2022-02-27 09:36:14 +0100
commitf58c120bcc0a84156e5e253be57c1f958ea8576e (patch)
tree664951a5b791469fea036a0552946f1bfc995116 /src/gui
parent5f1f9065476a46ccced3f1b0e31a90d3a00eccef (diff)
downloadcalendar-f58c120bcc0a84156e5e253be57c1f958ea8576e.tar.gz
calendar-f58c120bcc0a84156e5e253be57c1f958ea8576e.tar.bz2
calendar-f58c120bcc0a84156e5e253be57c1f958ea8576e.zip
Don’t create an event if repetition is not valid
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/form/mod.rs26
-rw-r--r--src/gui/form/repetition.rs23
2 files changed, 25 insertions, 24 deletions
diff --git a/src/gui/form/mod.rs b/src/gui/form/mod.rs
index 4bf6f90..57ccac7 100644
--- a/src/gui/form/mod.rs
+++ b/src/gui/form/mod.rs
@@ -81,19 +81,23 @@ pub async fn show(app: &App, event: Event, is_new: bool) {
let conn = app.conn.clone();
let tx = app.tx.clone();
button.connect_clicked(glib::clone!(@weak dialog, @strong event => move |_| {
- let repetition = repetition::validate(&repetition_model);
- match event::validate(event.id, date.buffer().text(), name.buffer().text(), start.buffer().text(), end.buffer().text(), repetition) {
- Some(new) => {
- match if is_new { db::insert(&conn, &new) } else { db::update(&conn, &new) } {
- Ok(_) => {
- let msg = if is_new { Msg::AddEvent { new } } else { Msg::UpdateEvent { old: event.clone(), new } };
- update::send(tx.clone(), msg);
- dialog.close()
- },
- Err(err) => eprintln!("Error when upserting event: {err}")
+ match repetition::validate(&repetition_model) {
+ Ok(repetition) => {
+ match event::validate(event.id, date.buffer().text(), name.buffer().text(), start.buffer().text(), end.buffer().text(), repetition) {
+ Some(new) => {
+ match if is_new { db::insert(&conn, &new) } else { db::update(&conn, &new) } {
+ Ok(_) => {
+ let msg = if is_new { Msg::AddEvent { new } } else { Msg::UpdateEvent { old: event.clone(), new } };
+ update::send(tx.clone(), msg);
+ dialog.close()
+ },
+ Err(err) => eprintln!("Error when upserting event: {err}")
+ }
+ }
+ None => eprintln!("Event is not valid: {event:?}")
}
},
- None => eprintln!("Event is not valid: {event:?}")
+ Err(message) => eprintln!("{message}")
}
}));
diff --git a/src/gui/form/repetition.rs b/src/gui/form/repetition.rs
index 87c8d84..7236016 100644
--- a/src/gui/form/repetition.rs
+++ b/src/gui/form/repetition.rs
@@ -126,26 +126,23 @@ fn label(text: &str) -> gtk::Label {
.build()
}
-pub fn validate(model: &Model) -> Option<Repetition> {
+pub fn validate(model: &Model) -> Result<Option<Repetition>, String> {
if model.no_radio.is_active() {
- None
+ Ok(None)
} else if model.day_interval_radio.is_active() {
- repetition::validate_day(&model.day_interval_entry.buffer().text())
- .map(|d| Repetition::Daily { period: d })
+ let period = repetition::validate_period(&model.day_interval_entry.buffer().text())?;
+ Ok(Some(Repetition::Daily { period }))
} else if model.monthly_radio.is_active() {
- repetition::validate_day(&model.monthly_entry.buffer().text()).map(|d| {
- Repetition::Monthly {
- day: DayOfMonth::Day { day: d },
- }
- })
+ let day = repetition::validate_day(&model.monthly_entry.buffer().text())?;
+ Ok(Some(Repetition::Monthly { day: DayOfMonth::Day { day } }))
} else if model.first_day_radio.is_active() {
let weekday = WEEKDAYS[model.first_day_dropdown.selected() as usize];
- Some(Repetition::Monthly {
+ Ok(Some(Repetition::Monthly {
day: DayOfMonth::Weekday { weekday },
- })
+ }))
} else if model.yearly_radio.is_active() {
- Some(Repetition::Yearly)
+ Ok(Some(Repetition::Yearly))
} else {
- None
+ Err("Aucune option n’a été sélectionnée".to_string())
}
}