[california/wip/725785-create-recurring] Fixes that should've been in last night



commit 504e17a79e332ec2605f60d1df9899eaa723d9aa
Author: Jim Nelson <jim yorba org>
Date:   Thu Jun 12 17:18:14 2014 -0700

    Fixes that should've been in last night

 src/component/component-details-parser.vala  |   18 ++++++++++++++----
 src/component/component-recurrence-rule.vala |   20 ++++++++++----------
 2 files changed, 24 insertions(+), 14 deletions(-)
---
diff --git a/src/component/component-details-parser.vala b/src/component/component-details-parser.vala
index 85f7563..a013892 100644
--- a/src/component/component-details-parser.vala
+++ b/src/component/component-details-parser.vala
@@ -352,12 +352,11 @@ public class DetailsParser : BaseObject {
     }
     
     private bool parse_recurring(Token? unit) {
-        // if a start date or recurring rule has already been specified, recurring cannot be made
-        if (unit == null || start_date != null || rrule != null)
+        // if a recurring rule has already been specified, another recurring cannot be made
+        if (unit == null || rrule != null)
             return false;
         
-        // recurring can be specified with the amount acting as a day specifier, i.e. "every Friday"
-        // or a single unit, i.e. "every day" or "every weekday"
+        // a day of the week
         Calendar.DayOfWeek? dow = Calendar.DayOfWeek.parse(unit.casefolded);
         if (dow != null) {
             start_date = Calendar.System.today.upcoming(dow, true);
@@ -366,6 +365,7 @@ public class DetailsParser : BaseObject {
             return true;
         }
         
+        // "day"
         if (unit.casefolded == DAY) {
             start_date = Calendar.System.today;
             rrule = new RecurrenceRule(iCal.icalrecurrencetype_frequency.DAILY_RECURRENCE);
@@ -373,6 +373,7 @@ public class DetailsParser : BaseObject {
             return true;
         }
         
+        // "weekday"
         if (unit.casefolded == WEEKDAY) {
             start_date = Calendar.System.today;
             rrule = new RecurrenceRule(iCal.icalrecurrencetype_frequency.WEEKLY_RECURRENCE);
@@ -385,7 +386,16 @@ public class DetailsParser : BaseObject {
             return true;
         }
         
+        // "weekend"
         if (unit.casefolded == WEEKEND) {
+            start_date = Calendar.System.today;
+            rrule = new RecurrenceRule(iCal.icalrecurrencetype_frequency.WEEKLY_RECURRENCE);
+            // TODO: Set start of week
+            Gee.Map<Calendar.DayOfWeek, int> map = new Gee.HashMap<Calendar.DayOfWeek, int>();
+            foreach (Calendar.DayOfWeek weekend_day in Calendar.DayOfWeek.weekend_days)
+                map.set(weekend_day, 0);
+            rrule.set_by_rule(RecurrenceRule.ByRule.DAY, RecurrenceRule.encode_days(map));
+            
             return true;
         }
         
diff --git a/src/component/component-recurrence-rule.vala b/src/component/component-recurrence-rule.vala
index 52ab290..4648ee9 100644
--- a/src/component/component-recurrence-rule.vala
+++ b/src/component/component-recurrence-rule.vala
@@ -148,16 +148,14 @@ public class RecurrenceRule : BaseObject {
         }
         
         fill_by(rrule.by_second, by_second);
-        /*
-        fill_by(rrule.by_minute, iCal.BY_MINUTE_SIZE, by_minute);
-        fill_by(rrule.by_hour, iCal.BY_HOUR_SIZE, by_hour);
-        fill_by(rrule.by_day, iCal.BY_DAY_SIZE, by_day);
-        fill_by(rrule.by_month_day, iCal.BY_MONTHDAY_SIZE, by_month_day);
-        fill_by(rrule.by_year_day, iCal.BY_YEARDAY_SIZE, by_year_day);
-        fill_by(rrule.by_week_no, iCal.BY_WEEKNO_SIZE, by_week_num);
-        fill_by(rrule.by_month, iCal.BY_MONTH_SIZE, by_month);
-        fill_by(rrule.by_set_pos, iCal.BY_SETPOS_SIZE, by_set_pos);
-        */
+        fill_by(rrule.by_minute, by_minute);
+        fill_by(rrule.by_hour, by_hour);
+        fill_by(rrule.by_day, by_day);
+        fill_by(rrule.by_month_day, by_month_day);
+        fill_by(rrule.by_year_day, by_year_day);
+        fill_by(rrule.by_week_no, by_week_num);
+        fill_by(rrule.by_month, by_month);
+        fill_by(rrule.by_set_pos, by_set_pos);
     }
     
     private void fill_by(short[] ical_by_ar, Gee.SortedSet<int> by_set) {
@@ -260,6 +258,8 @@ public class RecurrenceRule : BaseObject {
      *
      * Pass null or an empty Collection to clear the by-rules values.
      *
+     * Use { link encode_days} when passing values for { link ByRule.DAY}.
+     *
      * @see by_rule_updated
      */
     public void set_by_rule(ByRule by_rule, Gee.Collection<int>? values) {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]