1. 24 Jun, 2020 1 commit
  2. 20 Jun, 2020 1 commit
  3. 19 Jun, 2020 1 commit
  4. 18 Jun, 2020 1 commit
  5. 17 Jun, 2020 1 commit
  6. 11 Jun, 2020 1 commit
  7. 07 Jun, 2020 1 commit
  8. 02 Jun, 2020 1 commit
  9. 12 May, 2020 1 commit
  10. 04 May, 2020 1 commit
  11. 29 Apr, 2020 1 commit
  12. 28 Apr, 2020 1 commit
  13. 24 Apr, 2020 1 commit
  14. 23 Apr, 2020 1 commit
  15. 21 Apr, 2020 1 commit
    • 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