1. 23 Apr, 2017 1 commit
    • Daniel Vrátil's avatar
      Generate Protocol from an XML specification (ABI break) · 5535d6e5
      Daniel Vrátil authored
      Instead of maintaining 12k lines of hand-written protocol code, we
      specify the protocol in an XML and use a custom-written generator
      that generates the code for us.
      
      It's not only much easier to modify the protocol - we only need to
      change a single thing in the XML instead of touching several places
      of the implementation - but it's also much safer, as there's less
      risk of accidentally introducing a bug in the code.
      
      The major difference between the original hand-written code and the
      generated code is that we no longer use QSharedDataPointer and virtual
      methods in the Private classes, but instead all members are directly
      in the command clas with most getters and setters inlined. This means
      that copying commands is quite costly, so we pass them around as
      QSharedPointers or const references. This should give us a tiny little
      bit more performance.
      5535d6e5
  2. 02 Jan, 2017 1 commit
  3. 15 Aug, 2016 2 commits
    • Daniel Vrátil's avatar
      Create a per-type ChangeNotification Protocol command · 040ce64b
      Daniel Vrátil authored
      Different entity types have different data, so sharing a single
      structure to describe changes in all entities is limiting. Having
      a single structure made sense when we only had Items and Collections
      which share most of the attributes and it was also easier to expose
      this via DBus.
      
      Now we are no longer limited by DBus so we can afford having a
      different Protocol command for each notification type. This will be
      most important when we introduce SubscriberChangeNotification, as
      subscriber changes would otherwise be hard to map onto the legacy
      ChangeNotification and is also the first step towards Notification
      Payloads.
      040ce64b
    • Daniel Vrátil's avatar
      Implement notification subscription management via Protocol · f257797f
      Daniel Vrátil authored
      NotificationManager now lives in separete thread. It creates
      NotificationSubscriber object for each new connection on NotificationServer.
      Each connection does not have its own thread as in case of Connection,
      because the communication there is minimal and we don't mind if the
      NotificationManager thread gets blocked for a short moment.
      
      Each Subscriber keeps state of the subscription. When a notification is
      delivered to NotificationManager, it will pass them to all subscribers
      which will then decide whether they accept the notification and eventually
      send it to subscribed client.
      
      Currently this breaks notification and subscriber debugging because we
      completely removed the DBus introspection. The plan is to introduce a
      subscription change notification (a type of Protocol::ChangeNotification)
      that clients like AkonadiConsole could subscribe to to get information about
      new or removed subscribers and their subscription state.
      f257797f
  4. 30 Mar, 2016 1 commit
  5. 18 Jan, 2016 1 commit
  6. 11 Jul, 2015 1 commit
  7. 29 Jun, 2015 1 commit
    • Daniel Vrátil's avatar
      Receive notifications via the new Notification Bus instead of DBus · 007c11d2
      Daniel Vrátil authored
      Monitor, once subscribing to the NotificationManager starts a new Session using the
      identifier received from NotificationManager. The Session is started in the special
      NotificationBus mode, so the server will use it to deliver notifications for the given
      subscriber through it.
      
      This laos ports all code from NotificationMessageV* to Protocol::ChangeNotification.
      007c11d2
  8. 02 Jan, 2015 1 commit
  9. 29 Jul, 2014 1 commit
  10. 28 Jul, 2014 1 commit
  11. 17 Jul, 2014 1 commit
  12. 24 Jun, 2014 1 commit
  13. 19 Feb, 2014 1 commit
  14. 07 Aug, 2013 1 commit
  15. 05 May, 2013 1 commit
  16. 12 Mar, 2013 1 commit
  17. 25 Aug, 2012 1 commit
  18. 18 May, 2011 2 commits
  19. 15 May, 2011 2 commits
  20. 22 Apr, 2011 1 commit