Updated recurring alarm values are not reflected in the indicator until phone reboot
Bug #1283859 reported by
Nekhelesh Ramananthan
This bug affects 3 people
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Indicator Date and Time |
Invalid
|
Undecided
|
Unassigned | ||
Ubuntu Clock App |
Fix Released
|
Undecided
|
Renato Araujo Oliveira Filho | ||
Ubuntu UI Toolkit |
Invalid
|
Undecided
|
Unassigned | ||
qtorganizer5-eds (Ubuntu) |
Fix Released
|
Undecided
|
Renato Araujo Oliveira Filho |
Bug Description
Mako 205
Steps to reproduce:
1. Create a recurring alarm and save it
2. Select the saved alarm to go to edit mode
3. Change the time, day of the alarm or status of the alarm.
4. Hit save
What happens:
The alarm is correctly updated in the clock app. The indicator however still shows the old alarm time
What should happen:
The alarm is correctly updated *both* in the clock app and the indicator.
If you however reboot the phone, the indicator then shows the updated recurring alarm time.
Related branches
lp:~renatofilho/qtorganizer5-eds/fix-1283859
- Bill Filler (community): Approve
- PS Jenkins bot: Approve (continuous-integration)
-
Diff: 362 lines (+168/-26)7 files modified.bzrignore (+1/-0)
qorganizer/qorganizer-eds-engine.cpp (+24/-4)
qorganizer/qorganizer-eds-engine.h (+1/-1)
qorganizer/qorganizer-eds-fetchrequestdata.cpp (+8/-2)
qorganizer/qorganizer-eds-saverequestdata.cpp (+15/-0)
qorganizer/qorganizer-eds-saverequestdata.h (+1/-0)
tests/unittest/recurrence-test.cpp (+118/-19)
affects: | qtorganizer5-eds → qtorganizer5-eds (Ubuntu) |
description: | updated |
Changed in ubuntu-clock-app: | |
milestone: | 1.8 → 2.0 |
Changed in qtorganizer5-eds (Ubuntu): | |
status: | Confirmed → In Progress |
assignee: | nobody → Renato Araujo Oliveira Filho (renatofilho) |
Changed in ubuntu-clock-app: | |
status: | Confirmed → Invalid |
Changed in ubuntu-ui-toolkit: | |
status: | New → Invalid |
Changed in ubuntu-clock-app: | |
milestone: | 2.0 → alarm-blockers |
importance: | High → Undecided |
Changed in ubuntu-clock-app: | |
status: | Invalid → Fix Released |
Changed in ubuntu-clock-app: | |
milestone: | alarm-blockers → rtm |
Changed in ubuntu-clock-app: | |
assignee: | nobody → Renato Araujo Oliveira Filho (renatofilho) |
To post a comment you must log in.
Okay, after a bit of digging I think what we need to do is remove the "event. setDueDateTime( alarm.date) ;" line from ubuntu-ui-toolkit's AlarmsAdapter: :organizerEvent FromAlarmData( ).
Here's an abbreviated example of a vtodo written to tasks.ics by ubuntu-clock-app --> ubuntu-ui-toolkit --> qtorganizer5-eds:
BEGIN: VCALENDAR^ M GREGORIAN^ M -//Ximian/ /NONSGML Evolution Calendar//EN^M -DATA-REVISION: 2014-02- 25T04:39: 19.361663Z( 2)^M 20140225T043915 Z-3142- 32011-1543- 9@ubuntu- phablet^ M 20140225T043915 Z^M 20140224T060000 ^M 20140224T060000 ^M X-EVOLUTION- ENDDATE= 19700101T000000 Z:FREQ= DAILY;COUNT= -1^M 20140225T043915 Z^M
CALSCALE:
PRODID:
VERSION:2.0^M
X-EVOLUTION
BEGIN:VTODO^M
UID:
DTSTAMP:
DTSTART:
DUE:
RRULE;
SUMMARY:Alarm^M
CREATED:
END:VTODO^M
END:VCALENDAR^M
indicator-datetime tries to find calendar events within a certain time window by using e_cal_client_ generate_ instances( ), which doesn't find the above VTODO when searching in the date range [2014-02-24 22:52:33. ..2014- 03-24 22:52:33]
e_cal_util_ get_component_ occur_times( ) (in evolution- data-server- 3.10.1/ calendar/ libecale- cal-util. c) has a special rule for VTODO items, looking for the ending range by taking the higher value of "completed" or "due":
> if (kind == ICAL_VTODO_ COMPONENT) { _get_completed (comp, &tt); _get_due (comp, &dt_due);
> ....
> e_cal_component
> ....
> e_cal_component
> ....
> max_time = MAX (completed_time, due_time);
Since "completed" isn't set, EDS returns "due" as the end.
"due" comes from qtorganizer5-eds's qorganizer/ qorganizer- eds-engine. cpp's QOrganizerEDSEn gine::parseDueD ate()'s call to e_cal_component _free_datetime( ).
That call appears to come from ubuntu-ui-toolkit's modules/ Components/ plugin/ adapters/ alarmsadapter_ organizer. cpp's AlarmsAdapter: :organizerEvent FromAlarmData( ) function calling "event. setDueDateTime( alarm.date) ;"
If you remove the single line "DUE" from the above VTODO, e_cal_client_ generate_ instances( ) is able to find it using the same date range mentioned above.