Skip to content
  • Igor Poboiko's avatar
    [resources] Add a unified Google Groupware Resource · 52113e2f
    Igor Poboiko authored
    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
    52113e2f