r3689 - in trunk/src/target/OM-2007.2/applications/openmoko-dialer2: . src/phone-kit

chris at sita.openmoko.org chris at sita.openmoko.org
Wed Dec 19 13:29:47 CET 2007


Author: chris
Date: 2007-12-19 13:29:45 +0100 (Wed, 19 Dec 2007)
New Revision: 3689

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/configure.ac
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/Makefile.am
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/dialer-main.c
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer.c
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-notify.c
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-notify.h
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-sms.c
Log:
        * configure.ac:
        Add AC_GNU_SOURCE for basename(), add libnotify

        * src/phone-kit/Makefile.am:
        Add libnotify

        * src/phone-kit/dialer-main.c: (main):
        Initialise libnotify

        * src/phone-kit/moko-dialer.c: (moko_dialer_init):
        Use moko_notify_get_default()

        * src/phone-kit/moko-notify.c: (moko_notify_start),
        (moko_notify_stop), (moko_notify_init), (moko_notify_get_default):
        * src/phone-kit/moko-notify.h:
        Add moko_notify_get_default() to share MokoNotify with other objects

        * src/phone-kit/moko-sms.c: (update_notification), (note_added_cb),
        (note_modified_cb), (note_removed_cb), (sms_store_opened_cb),
        (moko_sms_init):
        Add notifications with libnotify


Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog	2007-12-19 11:00:11 UTC (rev 3688)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog	2007-12-19 12:29:45 UTC (rev 3689)
@@ -1,3 +1,27 @@
+2007-12-19  Chris Lord  <chris at openedhand.com>
+
+	* configure.ac:
+	Add AC_GNU_SOURCE for basename(), add libnotify
+
+	* src/phone-kit/Makefile.am:
+	Add libnotify
+
+	* src/phone-kit/dialer-main.c: (main):
+	Initialise libnotify
+
+	* src/phone-kit/moko-dialer.c: (moko_dialer_init):
+	Use moko_notify_get_default()
+
+	* src/phone-kit/moko-notify.c: (moko_notify_start),
+	(moko_notify_stop), (moko_notify_init), (moko_notify_get_default):
+	* src/phone-kit/moko-notify.h:
+	Add moko_notify_get_default() to share MokoNotify with other objects
+
+	* src/phone-kit/moko-sms.c: (update_notification), (note_added_cb),
+	(note_modified_cb), (note_removed_cb), (sms_store_opened_cb),
+	(moko_sms_init):
+	Add notifications with libnotify
+
 2007-12-04  Thomas Wood  <thomas at openedhand.com>
 
 	* src/phone-kit/moko-network.c: (on_network_registered),

Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/configure.ac
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/configure.ac	2007-12-19 11:00:11 UTC (rev 3688)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/configure.ac	2007-12-19 12:29:45 UTC (rev 3689)
@@ -9,6 +9,7 @@
 AC_PROG_CC
 AC_STDC_HEADERS
 AC_PROG_LIBTOOL
+AC_GNU_SOURCE
 
 # base deps
 PKG_CHECK_MODULES(DIALER, 
@@ -21,6 +22,7 @@
                   libpulse)
 
 PKG_CHECK_MODULES(JANA, libjana libjana-ecal)
+PKG_CHECK_MODULES(NOTIFY, libnotify)
 
 old_cflags=$CFLAGS
 CFLAGS=$DIALER_CFLAGS

Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/Makefile.am	2007-12-19 11:00:11 UTC (rev 3688)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/Makefile.am	2007-12-19 12:29:45 UTC (rev 3689)
@@ -1,5 +1,5 @@
 AM_CPPFLAGS = -DDATADIR=\"$(datadir)\" -DPKGDATADIR=\"$(pkgdatadir)\"
-AM_CFLAGS = -Wall @DIALER_CFLAGS@ @JANA_CFLAGS@
+AM_CFLAGS = -Wall @DIALER_CFLAGS@ @JANA_CFLAGS@ @NOTIFY_CFLAGS@
 
 INCLUDES = -I$(top_srcdir)/src/common
 
@@ -17,7 +17,7 @@
 	moko-pin.c moko-pin.h \
 	moko-mcc-dc.h
 
-phone_kit_LDADD = @DIALER_LIBS@ @JANA_LIBS@ $(top_srcdir)/src/common/libdialer-common.a
+phone_kit_LDADD = @DIALER_LIBS@ @JANA_LIBS@ @NOTIFY_LIBS@ $(top_srcdir)/src/common/libdialer-common.a
 
 
 %-glue.h: %-dbus.xml

Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/dialer-main.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/dialer-main.c	2007-12-19 11:00:11 UTC (rev 3688)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/dialer-main.c	2007-12-19 12:29:45 UTC (rev 3689)
@@ -13,12 +13,18 @@
  *  GNU Lesser Public License for more details.
  */
 
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <gtk/gtk.h>
 #include <dbus/dbus-glib.h>
 #include <dbus/dbus-glib-bindings.h>
 #include <glib-object.h>
+#include <libnotify/notify.h>
 
 #include "moko-network.h"
 #include "moko-dialer.h"
@@ -64,6 +70,7 @@
   DBusGProxy *proxy;
   GError *error = NULL;
   guint32 ret;
+  char *prog;
 
   /* initialise type system */
   g_type_init ();
@@ -110,6 +117,9 @@
 
   /* Initialize Threading & GTK+ */
   gtk_init (&argc, &argv);
+  
+  /* Initialise libnotify */
+  notify_init (basename (argv[0]));
 
   /* Create the PhoneKit objects */
   network = moko_network_get_default ();

Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer.c	2007-12-19 11:00:11 UTC (rev 3688)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer.c	2007-12-19 12:29:45 UTC (rev 3689)
@@ -811,7 +811,7 @@
   priv->contacts = moko_contacts_get_default ();
 
   /* Load the notification object */
-  priv->notify = moko_notify_new ();
+  priv->notify = moko_notify_get_default ();
 
 
   /* Talking: This is the object that handles interaction with the user */

Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-notify.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-notify.c	2007-12-19 11:00:11 UTC (rev 3688)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-notify.c	2007-12-19 12:29:45 UTC (rev 3689)
@@ -42,7 +42,7 @@
 
 struct _MokoNotifyPrivate
 {
-  gboolean    started;
+  int    started;
 
   /* Sound stuff */
   pa_context *pac;
@@ -254,9 +254,9 @@
   g_return_if_fail (MOKO_IS_NOTIFY (notify));
   priv = notify->priv;
 
-  if (priv->started)
+  priv->started ++;
+  if (priv->started != 1)
     return;
-  priv->started = TRUE;
 
   moko_notify_check_brightness ();
   moko_notify_start_vibrate ();
@@ -274,10 +274,12 @@
 
   if (!priv->started)
     return;
-  priv->started = FALSE;
+  priv->started --;
 
-  moko_notify_stop_vibrate ();
-  moko_notify_stop_ringtone (notify);
+  if (!priv->started) {
+    moko_notify_stop_vibrate ();
+    moko_notify_stop_ringtone (notify);
+  }
 }
 
 /* GObject functions */
@@ -313,7 +315,7 @@
 
   priv = notify->priv = MOKO_NOTIFY_GET_PRIVATE (notify);
 
-  priv->started = FALSE;
+  priv->started = 0;
   priv->pac = NULL;
 
   /* Start up pulse audio */
@@ -344,3 +346,13 @@
   return notify;
 }
 
+MokoNotify*
+moko_notify_get_default (void)
+{
+  static MokoNotify *notify = NULL;
+  
+  if (!notify) notify = moko_notify_new ();
+  
+  return notify;
+}
+

Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-notify.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-notify.h	2007-12-19 11:00:11 UTC (rev 3688)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-notify.h	2007-12-19 12:29:45 UTC (rev 3689)
@@ -66,6 +66,9 @@
 MokoNotify*        
 moko_notify_new (void);
 
+MokoNotify*
+moko_notify_get_default (void);
+
 void
 moko_notify_start (MokoNotify *notify);
 

Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-sms.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-sms.c	2007-12-19 11:00:11 UTC (rev 3688)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-sms.c	2007-12-19 12:29:45 UTC (rev 3689)
@@ -26,6 +26,10 @@
 #include <libjana/jana.h>
 #include <libjana-ecal/jana-ecal.h>
 
+#include <libnotify/notification.h>
+
+#include <libmokoui2/moko-stock.h>
+
 #include "moko-sms.h"
 #include "moko-network.h"
 #include "moko-listener.h"
@@ -63,6 +67,9 @@
   JanaStore          *sms_store;
   gboolean           sms_store_open;
   JanaNote           *last_msg;
+  
+  GList              *unread_uids;
+  NotifyNotification *notification;
 };
 
 static void start_handling_sms (MokoSms *sms);
@@ -400,6 +407,100 @@
 }
 
 static void
+update_notification (MokoSms *sms, gboolean show)
+{
+  gchar *body;
+  MokoSmsPrivate *priv = sms->priv;
+  
+  if (!priv->unread_uids) {
+    notify_notification_close (priv->notification, NULL);
+    return;
+  }
+  
+  body = g_strdup_printf ("%d unread message(s)",
+                          g_list_length (priv->unread_uids));
+  g_object_set (G_OBJECT (priv->notification), "body", body, NULL);
+  g_free (body);
+  
+  /* Show notification */
+  if (show) notify_notification_show (priv->notification, NULL);
+}
+
+static void
+note_added_cb (JanaStoreView *store_view, GList *components, MokoSms *sms)
+{
+  MokoSmsPrivate *priv = sms->priv;
+  gboolean update = FALSE;
+  
+  for (; components; components = components->next) {
+    JanaComponent *comp = JANA_COMPONENT (components->data);
+    
+    if (!comp) continue;
+    
+    if (!jana_utils_component_has_category (comp, "Read")) {
+      gchar *uid = jana_component_get_uid (comp);
+      priv->unread_uids = g_list_prepend (priv->unread_uids, uid);
+      update = TRUE;
+    }
+  }
+  
+  /* TODO: Put this in an idle? */
+  if (update) update_notification (sms, TRUE);
+}
+
+static void
+note_modified_cb (JanaStoreView *store_view, GList *components, MokoSms *sms)
+{
+  MokoSmsPrivate *priv = sms->priv;
+  gboolean update = FALSE;
+  
+  for (; components; components = components->next) {
+    gchar *uid;
+    GList *found;
+    JanaComponent *comp = JANA_COMPONENT (components->data);
+    
+    if (!comp) continue;
+    
+    uid = jana_component_get_uid (comp);
+    if ((found = g_list_find_custom (
+         priv->unread_uids, uid, (GCompareFunc)strcmp))) {
+      g_free (uid);
+      if (jana_utils_component_has_category (comp, "Read")) {
+        g_free (found->data);
+        priv->unread_uids = g_list_delete_link (priv->unread_uids, found);
+        update = TRUE;
+      }
+    } else if (!jana_utils_component_has_category (comp, "Read")) {
+      priv->unread_uids = g_list_prepend (priv->unread_uids, uid);
+      update = TRUE;
+    } else {
+      g_free (uid);
+    }
+  }
+  
+  if (update) update_notification (sms, FALSE);
+}
+
+static void
+note_removed_cb (JanaStoreView *store_view, GList *uids, MokoSms *sms)
+{
+  MokoSmsPrivate *priv = sms->priv;
+  gboolean update = FALSE;
+  
+  for (; uids; uids = uids->next) {
+    GList *found = g_list_find_custom (priv->unread_uids, uids->data,
+                                       (GCompareFunc)strcmp);
+    if (found) {
+      g_free (found->data);
+      priv->unread_uids = g_list_delete_link (priv->unread_uids, found);
+      update = TRUE;
+    }
+  }
+  
+  if (update) update_notification (sms, FALSE);
+}
+
+static void
 start_handling_sms (MokoSms *sms)
 {
   MokoSmsPrivate *priv = sms->priv;
@@ -421,9 +522,17 @@
 static void
 sms_store_opened_cb (JanaStore *store, MokoSms *self)
 {
+  JanaStoreView *view;
   MokoSmsPrivate *priv = self->priv;
   priv->sms_store_open = TRUE;
 
+  /* Hook onto added/modified/removed signals for SMS notification */
+  view = jana_store_get_view (store);
+  g_signal_connect (view, "added", G_CALLBACK (note_added_cb), self);
+  g_signal_connect (view, "modified", G_CALLBACK (note_modified_cb), self);
+  g_signal_connect (view, "removed", G_CALLBACK (note_removed_cb), self);
+  jana_store_view_start (view);
+
   if (!priv->handling_sms) start_handling_sms (self);
   if (priv->got_subscriber_number)
     g_signal_emit (self, signals[STATUS_CHANGED], 0, PK_SMS_READY);
@@ -435,6 +544,10 @@
   MokoSmsPrivate *priv;
 
   priv = sms->priv = MOKO_SMS_GET_PRIVATE (sms);
+  priv->notification = notify_notification_new ("New SMS message",
+                                                "",
+                                                MOKO_STOCK_SMS_NEW,
+                                                NULL);
 
   /* Get the SMS note store */
   priv->sms_store = jana_ecal_store_new (JANA_COMPONENT_NOTE);





More information about the commitlog mailing list