[resources] Add a unified Google Groupware Resource
Summary: This is an attempt to unify existing Calendar&Tasks and Contacts resources into a single Groupware resource. At some point, hopefully, GMail support could be also added here (see task {T646} and {T9422}). Various "subresources" (Calendar, Tasks and Contacts) are implemented as subclasses of `GenericHandler`, which is a basic `Akonadi::ResourceBase` interface. The resource decides which `Handler` it should call by looking at mimetypes. `Handlers` are `friends` of `GoogleResource`, so they can call its callbacks (like `itemsRetrieved()`) as needed. This was done primarily to separate logic of different subresources; this might be not the best solution, I'm open to suggestions. This patch also reworks the settings dialog & relevant code. The dialog is now using `.ui` file. The "account picker" is gone, as it's no longer needed; instead, a single "Configure..." button is added which invokes the auth process. It also implements "last sync token" API ({T647}) for calendar incremental updates. Without this API, event moving between calendars were not handled properly (i.e. event was not removed from the "source" calendar). Work to be done: # KAccounts integration. Need to be able to `disable` various `subresources` on demand, and determine auth `scopes` based on that. # GMail integration. Need to somehow adopt `ImapResourceBase` / `ResourceState` scheme, and merge it with current `Handlers` scheme. # Add `Akonadi::Tag` support for Contacts. Tags seem to be more appropriate than having bunch of virtual collections, but this might require some changes inside KAddressBook. Test Plan: Here's a comprehensive list of what was tested and what issues were discovered. # Adding event locally # Changing event locally # Removing event locally # Moving events between calendars locally # **Adding calendar locally** - new calendar is added as a virtual collection, cannot add events there afterwards; probably a KOrganizer issue - color of newly added calendar is not known, google just don't return it to us # Removing calendar locally # Changing calendar locally # Adding event remotely # Changing event remotely # Removing event remotely # Moving events between calendars remotely # Adding calendar remotely # Removing calendar remotely # Adding task&subtask remotely # Changing task locally # Removing task locally # Removing a task with subtasks locally (subtasks go to the upper level) # **Adding/removing tasklist locally** - wasn't tested, but should work. KOrganizer just don't know how to add a tasklist, it adds a calendar by default (probably it sees no difference between them...) # Changing tasklist locally # Adding task&subtask remotely # Changing task remotely # Removing task remotely # Adding tasklist remotely (it is not subscribed automatically, however, so user have to go to account settings and enable it) # Changing tasklist remotely # Removing tasklist remotely # Adding contact (including photo) locally, both inside "My Contacts" and "Other Contacts" groups # Moving contact between "My Contacts" and "Other Contacts" groups # Chaging contact (including photo) locally # Removing contat locally # Adding contact to contact group locally - {D28432} required, otherwise "Link Item" gets silently ignored # **Removing contact from contact group locally** - wasn't tested, since I've found to UI to "Unlink Item" :( # Adding contact (including photo) remotely # Changing contact (including photo) remotely # Removing contact remotely # Adding contact to contact group remotely # **Removing contact from contact group remotely** - doesn't work: need an easy way to fetch all collections we're linked to (so we know which UnlinkJobs we should start) Reviewers: dvratil, mlaurent Reviewed By: dvratil Subscribers: mlaurent, kde-pim Tags: #kde_pim Differential Revision: https://phabricator.kde.org/D28560
parent
fae81064
Please register or sign in to comment