~ubuntu-branches/ubuntu/wily/evolution-data-server/wily

« back to all changes in this revision

Viewing changes to debian/patches/0001-Bug-752373-Monthly-events-do-not-recur-correctly.patch

  • Committer: Package Import Robot
  • Author(s): Iain Lane
  • Date: 2015-07-20 13:34:59 UTC
  • mfrom: (1.1.126) (1.2.48 sid)
  • Revision ID: package-import@ubuntu.com-20150720133459-g6y46hnu5ewtoz08
Tags: 3.16.4-0ubuntu2
debian/patches/0001-Bug-752373-Monthly-events-do-not-recur-correctly.patch:
Cherry-pick patch from upstream to fix events not recurring correctly.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
From 15f05d0f14864e567a59d1e32beff9e7187d6753 Mon Sep 17 00:00:00 2001
 
2
From: Milan Crha <mcrha@redhat.com>
 
3
Date: Thu, 16 Jul 2015 13:00:57 +0200
 
4
Subject: [PATCH] Bug 752373 - Monthly events do not recur correctly
 
5
 
 
6
---
 
7
 calendar/libecal/e-cal-recur.c | 50 +++++++++++++++++++++++++-----------------
 
8
 1 file changed, 30 insertions(+), 20 deletions(-)
 
9
 
 
10
diff --git a/calendar/libecal/e-cal-recur.c b/calendar/libecal/e-cal-recur.c
 
11
index 645cdf5..b8857d2 100644
 
12
--- a/calendar/libecal/e-cal-recur.c
 
13
+++ b/calendar/libecal/e-cal-recur.c
 
14
@@ -321,7 +321,8 @@ static GArray *     cal_obj_generate_set_default    (RecurData      *recur_data,
 
15
                                                 ECalRecurVTable *vtable,
 
16
                                                 CalObjTime     *occ);
 
17
 
 
18
-static ECalRecurVTable * cal_obj_get_vtable    (icalrecurrencetype_frequency recur_type);
 
19
+static ECalRecurVTable cal_obj_get_vtable      (ECalRecurrence *recur,
 
20
+                                                gboolean *vtable_valid);
 
21
 static void    cal_obj_initialize_recur_data   (RecurData      *recur_data,
 
22
                                                 ECalRecurrence *recur,
 
23
                                                 CalObjTime     *event_start);
 
24
@@ -1526,11 +1527,12 @@ cal_obj_expand_recurrence (CalObjTime *event_start,
 
25
                            CalObjTime *interval_end,
 
26
                            gboolean *finished)
 
27
 {
 
28
-       ECalRecurVTable *vtable;
 
29
+       ECalRecurVTable vtable;
 
30
        CalObjTime *event_end = NULL, event_end_cotime;
 
31
        RecurData recur_data;
 
32
        CalObjTime occ, *cotime;
 
33
        GArray *all_occs, *occs;
 
34
+       gboolean vtable_valid = FALSE;
 
35
        gint len;
 
36
 
 
37
        /* This is the resulting array of CalObjTime elements. */
 
38
@@ -1538,8 +1540,8 @@ cal_obj_expand_recurrence (CalObjTime *event_start,
 
39
 
 
40
        *finished = TRUE;
 
41
 
 
42
-       vtable = cal_obj_get_vtable (recur->freq);
 
43
-       if (!vtable)
 
44
+       vtable = cal_obj_get_vtable (recur, &vtable_valid);
 
45
+       if (!vtable_valid)
 
46
                return all_occs;
 
47
 
 
48
        /* Calculate some useful data such as some fast lookup tables. */
 
49
@@ -1565,7 +1567,7 @@ cal_obj_expand_recurrence (CalObjTime *event_start,
 
50
 
 
51
        /* Get the first period based on the frequency and the interval that
 
52
         * intersects the interval between start and end. */
 
53
-       if ((*vtable->find_start_position) (event_start, event_end,
 
54
+       if ((*vtable.find_start_position) (event_start, event_end,
 
55
                                            &recur_data,
 
56
                                            interval_start, interval_end,
 
57
                                            &occ))
 
58
@@ -1579,17 +1581,17 @@ cal_obj_expand_recurrence (CalObjTime *event_start,
 
59
                case ICAL_YEARLY_RECURRENCE:
 
60
                        occs = cal_obj_generate_set_yearly (
 
61
                                &recur_data,
 
62
-                               vtable, &occ);
 
63
+                               &vtable, &occ);
 
64
                        break;
 
65
                case ICAL_MONTHLY_RECURRENCE:
 
66
                        occs = cal_obj_generate_set_monthly (
 
67
                                &recur_data,
 
68
-                               vtable, &occ);
 
69
+                               &vtable, &occ);
 
70
                        break;
 
71
                default:
 
72
                        occs = cal_obj_generate_set_default (
 
73
                                &recur_data,
 
74
-                               vtable, &occ);
 
75
+                               &vtable, &occ);
 
76
                        break;
 
77
                }
 
78
 
 
79
@@ -1620,7 +1622,7 @@ cal_obj_expand_recurrence (CalObjTime *event_start,
 
80
                g_array_free (occs, TRUE);
 
81
 
 
82
                /* Skip to the next period, or exit the loop if finished. */
 
83
-               if ((*vtable->find_next_position) (&occ, event_end,
 
84
+               if ((*vtable.find_next_position) (&occ, event_end,
 
85
                                                   &recur_data, interval_end))
 
86
                        break;
 
87
        }
 
88
@@ -1842,35 +1844,43 @@ cal_obj_generate_set_default (RecurData *recur_data,
 
89
 }
 
90
 
 
91
 /* Returns the function table corresponding to the recurrence frequency. */
 
92
-static ECalRecurVTable * cal_obj_get_vtable (icalrecurrencetype_frequency recur_type)
 
93
+static ECalRecurVTable
 
94
+cal_obj_get_vtable (ECalRecurrence *recur,
 
95
+                   gboolean *vtable_valid)
 
96
 {
 
97
-       ECalRecurVTable * vtable;
 
98
+       ECalRecurVTable vtable;
 
99
 
 
100
-       switch (recur_type) {
 
101
+       *vtable_valid = TRUE;
 
102
+
 
103
+       switch (recur->freq) {
 
104
        case ICAL_YEARLY_RECURRENCE:
 
105
-               vtable = &cal_obj_yearly_vtable;
 
106
+               vtable = cal_obj_yearly_vtable;
 
107
                break;
 
108
        case ICAL_MONTHLY_RECURRENCE:
 
109
-               vtable = &cal_obj_monthly_vtable;
 
110
+               vtable = cal_obj_monthly_vtable;
 
111
+               if (recur->bymonthday && recur->byday)
 
112
+                       vtable.bymonthday_filter = cal_obj_bymonthday_filter;
 
113
+               else
 
114
+                       vtable.bymonthday_filter = cal_obj_bymonthday_expand;
 
115
                break;
 
116
        case ICAL_WEEKLY_RECURRENCE:
 
117
-               vtable = &cal_obj_weekly_vtable;
 
118
+               vtable = cal_obj_weekly_vtable;
 
119
                break;
 
120
        case ICAL_DAILY_RECURRENCE:
 
121
-               vtable = &cal_obj_daily_vtable;
 
122
+               vtable = cal_obj_daily_vtable;
 
123
                break;
 
124
        case ICAL_HOURLY_RECURRENCE:
 
125
-               vtable = &cal_obj_hourly_vtable;
 
126
+               vtable = cal_obj_hourly_vtable;
 
127
                break;
 
128
        case ICAL_MINUTELY_RECURRENCE:
 
129
-               vtable = &cal_obj_minutely_vtable;
 
130
+               vtable = cal_obj_minutely_vtable;
 
131
                break;
 
132
        case ICAL_SECONDLY_RECURRENCE:
 
133
-               vtable = &cal_obj_secondly_vtable;
 
134
+               vtable = cal_obj_secondly_vtable;
 
135
                break;
 
136
        default:
 
137
                g_warning ("Unknown recurrence frequency");
 
138
-               vtable = NULL;
 
139
+               *vtable_valid = FALSE;
 
140
        }
 
141
 
 
142
        return vtable;
 
143
-- 
 
144
2.1.4
 
145