[california] Add midnight, noon to details parser, fix date overflow w/ quick add
- From: Jim Nelson <jnelson src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [california] Add midnight, noon to details parser, fix date overflow w/ quick add
- Date: Mon, 28 Apr 2014 23:57:08 +0000 (UTC)
commit bfc398561d04a2a3395261a422fd30840d71553b
Author: Jim Nelson <jim yorba org>
Date: Mon Apr 28 16:55:51 2014 -0700
Add midnight, noon to details parser, fix date overflow w/ quick add
If quick-adding an event that crosses midnight, ensure the end date
is adjusted to account for it.
src/calendar/calendar-wall-time.vala | 11 +++++++++
src/calendar/calendar.vala | 6 +++++
src/component/component-details-parser.vala | 4 +++
src/tests/tests-quick-add.vala | 30 +++++++++++++++++++++++++++
4 files changed, 51 insertions(+), 0 deletions(-)
---
diff --git a/src/calendar/calendar-wall-time.vala b/src/calendar/calendar-wall-time.vala
index 6ff682c..495fafb 100644
--- a/src/calendar/calendar-wall-time.vala
+++ b/src/calendar/calendar-wall-time.vala
@@ -149,6 +149,17 @@ public class WallTime : BaseObject, Gee.Comparable<WallTime>, Gee.Hashable<WallT
if (String.is_empty(token))
return null;
+ // look for words that mean specific times
+ if (token == MIDNIGHT.casefold()) {
+ strictly_parsed = true;
+
+ return new WallTime(0, 0, 0);
+ } else if (token == NOON.casefold()) {
+ strictly_parsed = true;
+
+ return new WallTime(12, 0, 0);
+ }
+
// look for meridiem tacked on to end
bool pm = false;
bool meridiem_unknown = false;
diff --git a/src/calendar/calendar.vala b/src/calendar/calendar.vala
index 112066e..b4edb9d 100644
--- a/src/calendar/calendar.vala
+++ b/src/calendar/calendar.vala
@@ -39,6 +39,9 @@ private static unowned string FMT_12HOUR_MIN_SEC_MERIDIEM;
private static unowned string FMT_24HOUR_MIN;
private static unowned string FMT_24HOUR_MIN_SEC;
+private unowned string MIDNIGHT;
+private unowned string NOON;
+
private string[] UNIT_DAYS;
private string[] UNIT_HOURS;
private string[] UNIT_MINS;
@@ -154,6 +157,9 @@ public void init() throws Error {
if (language_env != null)
Environment.set_variable("LANGUAGE", language_env, true);
+ MIDNIGHT = _("midnight");
+ NOON = _("noon");
+
// This init() throws an IOError, so perform before others to prevent unnecessary unwinding
System.preinit();
diff --git a/src/component/component-details-parser.vala b/src/component/component-details-parser.vala
index 2811fb5..c396141 100644
--- a/src/component/component-details-parser.vala
+++ b/src/component/component-details-parser.vala
@@ -193,6 +193,10 @@ public class DetailsParser : BaseObject {
assert(start_date != null);
assert(end_date != null);
+ // look for midnight crossings
+ if (start_time.compare_to(end_time) > 0)
+ end_date = end_date.next();
+
event.set_event_exact_time_span(new Calendar.ExactTimeSpan(
new Calendar.ExactTime(Calendar.System.timezone, start_date, start_time),
new Calendar.ExactTime(Calendar.System.timezone, end_date, end_time)
diff --git a/src/tests/tests-quick-add.vala b/src/tests/tests-quick-add.vala
index c65302a..57ff4c2 100644
--- a/src/tests/tests-quick-add.vala
+++ b/src/tests/tests-quick-add.vala
@@ -18,6 +18,8 @@ private class QuickAdd : UnitTest.Harness {
add_case("with-delay-and-duration", with_delay_and_duration);
add_case("indeterminate-time", indeterminate_time);
add_case("dialog-example", dialog_example);
+ add_case("noon", noon);
+ add_case("midnight", midnight);
}
protected override void setup() throws Error {
@@ -137,6 +139,34 @@ private class QuickAdd : UnitTest.Harness {
&& parser.event.exact_time_span.start_exact_time.equal_to(time)
&& parser.event.exact_time_span.end_exact_time.equal_to(time.adjust_time(1,
Calendar.TimeUnit.HOUR));
}
+
+ private bool noon() throws Error {
+ Component.DetailsParser parser = new Component.DetailsParser(
+ "Lunch noon to 1:30pm", null);
+
+ Calendar.ExactTime start = new Calendar.ExactTime(Calendar.Timezone.local, Calendar.System.today,
+ new Calendar.WallTime(12, 0, 0));
+ Calendar.ExactTime end = new Calendar.ExactTime(Calendar.Timezone.local, Calendar.System.today,
+ new Calendar.WallTime(13, 30, 0));
+
+ return parser.event.summary == "Lunch"
+ && parser.event.exact_time_span.start_exact_time.equal_to(start)
+ && parser.event.exact_time_span.end_exact_time.equal_to(end);
+ }
+
+ private bool midnight() throws Error {
+ Component.DetailsParser parser = new Component.DetailsParser(
+ "Dinner 11pm to midnight", null);
+
+ Calendar.ExactTime start = new Calendar.ExactTime(Calendar.Timezone.local, Calendar.System.today,
+ new Calendar.WallTime(23, 0, 0));
+ Calendar.ExactTime end = new Calendar.ExactTime(Calendar.Timezone.local,
Calendar.System.today.adjust(1, Calendar.DateUnit.DAY),
+ new Calendar.WallTime(0, 0, 0));
+
+ return parser.event.summary == "Dinner"
+ && parser.event.exact_time_span.start_exact_time.equal_to(start)
+ && parser.event.exact_time_span.end_exact_time.equal_to(end);
+ }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]