[Bug 283954] Only resources can modify remote revisions

Dan Vrátil dvratil at redhat.com
Wed Oct 3 03:09:31 BST 2012


https://bugs.kde.org/show_bug.cgi?id=283954

--- Comment #15 from Dan Vrátil <dvratil at redhat.com> ---
The issue is reproducible on any resource that uses remote revisions. You don't
even need to modify the event, it's enough when the resource fetches changes
from remote server, which lead to update of remote revision of the modified
event.

I spent some time tonight trying to find out what's wrong, this is what I got
to:

The problem is that CalendarSupport::Calendar caches Akonadi::Items but is not
notified about update of their remote revisions. When a resource changes remote
revision of an item in Akonadi, the change is not propagated to
CalendarSupport::Calendar (and thus to it's cache). When user tries to modify
such an out-of-sync event, IncidenceEditorNg creates an Akonadi::ModifyJob for
Akonadi::Item which has an old remote revision and  Akonadi evaluates it as an
attempt to change the remote revision and refuses to continue.

This is reproducible for example with the Google Calendar resource. The Akonadi
resource in itemChanged() handler sends update to server, waits for reply and
then calls

  Akonadi::Item item = reply->request()->property( "Item"
).value<Akonadi::Item>()
  item.setRemoteRevision( event->getRemoteRevision() );
  changeCommitted( item );

which effectively changes remote revision of the item and submits it to Akonadi
(by confirming that the update was successful).

However! When Akonadi::EntityTreeModel::dataChanged(QModelIndex
leftTop,QModelIndex rightBottom) is emitted (atm I don't know whether it's
emitted before changeComitted() is called from the resource or after), the
Akonadi::Item obtained from the leftTop index has the _OLD_ remote revision.

So, the root cause is probably that remote revision of the Akonadi::Item in the
model is not updated when it changes in Akonadi, or that the change does not
cause the model to emit dataChanged() and so clients are not notified about it.

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the Kdepim-bugs mailing list