On Mi, 2011-06-15 at 12:39 +0100, Salvatore Iovene wrote:
There is a NotificationManagerFactory object that creates a
NotificationManager that uses the right backend (MLite, libnotify, or a
dummy no-op backend) and syncevo-dbus-server.cpp is now agnostic to
what's happening behind the scene.
This architecture might seem overly complicated, but it would be really
easy to expand in the future, should the need arise.
Makes sense to me. Note that your changes conflict with the
re-architecting of the syncevo-dbus-server that Chris Kühl is working
on. Your changes will be merged first, I just wanted to warn Chris...
Note: oldest patch at the bottom, read from bottom to top.
$ git log --pretty=oneline
9a849f6588052ef093aaed038bddc23a10bf952b..HEAD
b16777e603daa259d67332a2f0f401927527d296 syncevo-dbus-server: use a "factory"
to create the appropriate NotificationManager.
+ /* Detect what kind of manager we need: if /usr/bin/sync-ui
+ * exists, we shall use the MLite backend; otherwise, if
+ * libnotify is enabled, we shall use the libnotify backend;
+ * if everything fails, then we'll use the no-op backend.
+ */
+ std::ifstream path(SYNC_UI_PATH);
+ if(path) {
+ mgr = new NotificationManager<NotificationBackendMLite>();
Isn't the logic reversed here? If the binary exists, then we are
probably on a Netbook/Desktop, and thus should use libnotify. libnotify
also should be the default when it is the only enabled backend.
The access() system call is a faster way of checking for a file.
+ /** Creates the appropriate NotificationManager for the current
+ * platform.
+ * Note: NotificationManagerFactory does not take ownership of
+ * the returned pointer: the user must delete it when done.
+ */
+ static NotificationManagerBase* createManager();
I'd prefer to not have plain pointers passed around like this, in
particular in combination with explicit delete's. SyncEvolution uses the
"Resource Acquisition Is Initialization" idiom, so if you get a plain
pointer, it should be immediately stored in a smart pointer.
In this case I would change the createManager() to return a
boost::shared_ptr<NotificationManagerBase>. That way a caller can't get
it wrong and the code which creates the instance can also be converted
to using a shared pointer.
b7bcad6c01c9364a39b5b5730b02fc66dcf0d207 syncevo-dbus-server: update
MNotification parameters to correct ones.
Seems like a candidate for squashing.
507e5a308b288faf400bf0f09bfd4143d7fbad43 syncevo-dbus-server: use
#defines for the dbus parameters.
fe2e6d17335aa8884f0252784c8148202737b503 syncevo-dbus-server: initial implementation of
mlite backend.
94abeee4f52c278ef3cdadf2e8e1964d8169c5dc syncevo-dbus-server: added inclusion for Noop
notification backend.
Same here: did the previous patches compile without this? If not, then I
suggest squashing into the one that introduced the header dependency.
011c750c6c91c735fd2f0bfa52d141f884af92bc syncevo-dbus-server:
semi-working stub for mlite notifications.
- const std::string& viewParams = 0);
+ const std::string& viewParams = std::string());
This cleanup belongs into the previous patch, doesn't it? Not terribly
important, just saying.
9978e870f532cb0787959c32fa4ae8a9e1ffcc17 syncevo-dbus-server:
notifications system made more generic.
+ /** Publishes the notification. */
+ void publish(const std::string& summary, const std::string&
body,
+ const std::string& viewParams = 0);
It would be useful to document the meaning of the various strings. In
the classes which implement them I'd avoid duplicating the
documentation. Such cut-and-paste docs tend to get out-of-sync over
time.
--
Best Regards, Patrick Ohly
The content of this message is my personal opinion only and although
I am an employee of Intel, the statements I make here in no way
represent Intel's position on the issue, nor am I authorized to speak
on behalf of Intel on this matter.