[california/wip/725785-create-recurring] Fixes that should've been in last night
- From: Jim Nelson <jnelson src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [california/wip/725785-create-recurring] Fixes that should've been in last night
- Date: Fri, 13 Jun 2014 00:20:46 +0000 (UTC)
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]