r3460 - in trunk/src/target/OM-2007.2/applications/openmoko-messages2: . src

chris at sita.openmoko.org chris at sita.openmoko.org
Tue Nov 20 18:55:19 CET 2007


Author: chris
Date: 2007-11-20 18:55:15 +0100 (Tue, 20 Nov 2007)
New Revision: 3460

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/configure.ac
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/Makefile.am
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h
Log:
        * configure.ac:
        * src/Makefile.am:
        * src/sms-main.c: (main):
        * src/sms-notes.c: (get_selected_contact), (page_shown),
        (new_toggled_cb), (send_clicked_cb), (sms_notes_page_new):
        * src/sms.h:
        Hook up send button, don't show all messages when a contact has no
        phone numbers, don't focus in text view when toggling off send


Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog	2007-11-20 17:53:18 UTC (rev 3459)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog	2007-11-20 17:55:15 UTC (rev 3460)
@@ -1,3 +1,14 @@
+2007-11-20  Chris Lord  <chris at openedhand.com>
+
+	* configure.ac:
+	* src/Makefile.am:
+	* src/sms-main.c: (main):
+	* src/sms-notes.c: (get_selected_contact), (page_shown),
+	(new_toggled_cb), (send_clicked_cb), (sms_notes_page_new):
+	* src/sms.h:
+	Hook up send button, don't show all messages when a contact has no 
+	phone numbers, don't focus in text view when toggling off send
+
 2007-11-14  Chris Lord  <chris at openedhand.com>
 
 	* src/sms-main.c: (main):

Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/configure.ac
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/configure.ac	2007-11-20 17:53:18 UTC (rev 3459)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/configure.ac	2007-11-20 17:55:15 UTC (rev 3460)
@@ -25,6 +25,7 @@
 PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.6.0)
 PKG_CHECK_MODULES(MOKOUI, libmokoui2 >= 0.3)
 PKG_CHECK_MODULES(JANA, libjana libjana-ecal libjana-gtk)
+PKG_CHECK_MODULES(DBUS, dbus-glib-1)
 
 AC_OUTPUT([
 Makefile

Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/Makefile.am	2007-11-20 17:53:18 UTC (rev 3459)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/Makefile.am	2007-11-20 17:55:15 UTC (rev 3460)
@@ -1,7 +1,7 @@
 
 INCLUDES = -I$(top_srcdir)/libhito
-AM_CPPFLAGS = -DPKGDATADIR=\"$(pkgdatadir)\" $(GTK_CFLAGS) $(JANA_CFLAGS) $(MOKOUI_CFLAGS) $(EBOOK_CFLAGS) -Wall
-AM_LDFLAGS = $(GTK_LIBS) $(JANA_LIBS) $(MOKOUI_LIBS) $(EBOOK_LIBS)
+AM_CPPFLAGS = -DPKGDATADIR=\"$(pkgdatadir)\" $(GTK_CFLAGS) $(JANA_CFLAGS) $(MOKOUI_CFLAGS) $(EBOOK_CFLAGS) $(DBUS_CFLAGS) -Wall
+AM_LDFLAGS = $(GTK_LIBS) $(JANA_LIBS) $(MOKOUI_LIBS) $(EBOOK_LIBS) $(DBUS_LIBS)
 
 bin_PROGRAMS=openmoko-messages
 

Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c	2007-11-20 17:53:18 UTC (rev 3459)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c	2007-11-20 17:55:15 UTC (rev 3460)
@@ -42,9 +42,23 @@
 main (int argc, char **argv)
 {
 	SmsData data;
+	DBusGConnection *connection;
 	GtkWidget *vbox, *toolbar;
+	GError *error = NULL;
 	
 	gtk_init (&argc, &argv);
+	
+	/* Get SMS dbus proxy */
+	connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+	if (!connection) {
+		g_warning ("Failed to get dbus connection: %s", error->message);
+		g_error_free (error);
+		data.sms_proxy = NULL;
+	} else {
+		data.sms_proxy = dbus_g_proxy_new_for_name (connection,
+			"org.openmoko.Dialer", "/org/openmoko/Dialer/SMS",
+			"org.openmoko.Dialer");
+	}
 
 	data.window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 	gtk_window_set_title (GTK_WINDOW (data.window), "Messages");

Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c	2007-11-20 17:53:18 UTC (rev 3459)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c	2007-11-20 17:55:15 UTC (rev 3460)
@@ -28,41 +28,56 @@
 static gboolean hidden = TRUE;
 static gboolean open = FALSE;
 
-static void
-page_shown (SmsData *data)
+static EContact *
+get_selected_contact (SmsData *data)
 {
 	GtkTreeSelection *selection;
 	GtkTreeModel *model;
 	GtkTreeIter iter;
+	EContact *contact = NULL;
+	
+	selection = gtk_tree_view_get_selection (
+		GTK_TREE_VIEW (data->contacts_treeview));
+	
+	if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+		return NULL;
+	gtk_tree_model_get (model, &iter, COLUMN_CONTACT, &contact, -1);
+	
+	return contact;
+}
+
+static void
+page_shown (SmsData *data)
+{
+	JanaStoreView *store_view;
 	gint i;
 
+	gboolean found_match = FALSE;
 	EContact *contact = NULL;
 	
 	if (!open) return;
 	
-	selection = gtk_tree_view_get_selection (
-		GTK_TREE_VIEW (data->contacts_treeview));
+	if (!(contact = get_selected_contact (data))) return;
 	
-	if (!gtk_tree_selection_get_selected (selection, &model, &iter)) return;
-
-	gtk_tree_model_get (model, &iter, COLUMN_CONTACT, &contact, -1);
-	if (!contact) return;
-	
-	data->notes_view = jana_store_get_view (data->notes);
+	store_view = jana_store_get_view (data->notes);
 	for (i = E_CONTACT_FIRST_PHONE_ID; i <= E_CONTACT_LAST_PHONE_ID; i++) {
 		const gchar *number = e_contact_get_const (
 			contact, (EContactField)i);
 		if (!number) continue;
 		
-		jana_store_view_add_match (data->notes_view,
+		jana_store_view_add_match (store_view,
 			JANA_STORE_VIEW_AUTHOR, number);
-		jana_store_view_add_match (data->notes_view,
+		jana_store_view_add_match (store_view,
 			JANA_STORE_VIEW_RECIPIENT, number);
+		found_match = TRUE;
 	}
-	jana_gtk_note_store_set_view (JANA_GTK_NOTE_STORE (data->note_store),
-		data->notes_view);
-	jana_store_view_start (data->notes_view);
-	g_object_unref (data->notes_view);
+	
+	if (found_match) {
+		jana_gtk_note_store_set_view (JANA_GTK_NOTE_STORE (
+			data->note_store), store_view);
+		jana_store_view_start (store_view);
+	}
+	g_object_unref (store_view);
 
 	g_object_unref (contact);
 }
@@ -115,13 +130,67 @@
 {
 	gboolean active = gtk_toggle_tool_button_get_active (button);
 
-	if (active)
+	g_object_set (data->sms_hbox, "visible", active, NULL);
+	if (active) {
 		gtk_notebook_set_current_page (GTK_NOTEBOOK (
 			data->notebook), SMS_PAGE_NOTES);
-	g_object_set (data->sms_hbox, "visible", active, NULL);
-	gtk_widget_grab_focus (data->sms_textview);
+		gtk_widget_grab_focus (data->sms_textview);
+	}
 }
 
+static void
+send_clicked_cb (GtkButton *button, SmsData *data)
+{
+	GtkTextIter start, end;
+	GtkTextBuffer *buffer;
+	const gchar *number;
+	EContact *contact;
+	gchar *message;
+	
+	/* TODO: Spawn an error dialog or something */
+	if (!(contact = get_selected_contact (data))) return;
+	
+	gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (
+		data->new_button), FALSE);
+
+	/* Try getting mobile and primary number first, before looping through 
+	 * all numbers.
+	 */
+	number = NULL;
+	if (!(number = e_contact_get_const (contact, E_CONTACT_PHONE_MOBILE)) &&
+	    !(number = e_contact_get_const (contact, E_CONTACT_PHONE_PRIMARY))){
+		gint i;
+		for (i = E_CONTACT_FIRST_PHONE_ID;
+		     i <= E_CONTACT_LAST_PHONE_ID; i++) {
+			number = e_contact_get_const (
+				contact, (EContactField)i);
+			if (number) break;
+		}
+	}
+	
+	if (number) {
+		GError *error = NULL;
+		buffer = gtk_text_view_get_buffer (
+			GTK_TEXT_VIEW (data->sms_textview));
+		gtk_text_buffer_get_start_iter (buffer, &start);
+		gtk_text_buffer_get_end_iter (buffer, &end);
+		message = gtk_text_buffer_get_text (
+			buffer, &start, &end, FALSE);
+		
+		g_debug ("Sending message '%s' to %s", message, number);
+		if (!dbus_g_proxy_call (data->sms_proxy, "Send", &error,
+			G_TYPE_STRING, number, G_TYPE_STRING, message,
+			G_TYPE_INVALID, G_TYPE_STRING, NULL, G_TYPE_INVALID)) {
+			g_debug ("Error sending message: %s", error->message);
+			g_error_free (error);
+		}
+		
+		g_free (message);
+	}
+	
+	g_object_unref (contact);
+}
+
 static void sms_notes_data_func (GtkTreeViewColumn *tree_column,
 				 GtkCellRenderer *cell,
 				 GtkTreeModel *model,
@@ -171,7 +240,6 @@
 	data->notes = jana_ecal_store_new (JANA_COMPONENT_NOTE);
 	g_signal_connect (data->notes, "opened",
 		G_CALLBACK (store_opened_cb), data);
-	data->notes_view = NULL;
 	
 	/* Create model and filter */
 	data->note_store = jana_gtk_note_store_new ();
@@ -209,6 +277,9 @@
 		"<small>0\n  /\n     160</small>");
 	
 	button = gtk_button_new_with_label ("Send");
+	g_signal_connect (button, "clicked",
+		G_CALLBACK (send_clicked_cb), data);
+	if (!data->sms_proxy) gtk_widget_set_sensitive (button, FALSE);
 	
 	sms_vbox = gtk_vbox_new (FALSE, 6);
 	gtk_box_pack_start (GTK_BOX (sms_vbox), label, FALSE, TRUE, 0);

Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h	2007-11-20 17:53:18 UTC (rev 3459)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h	2007-11-20 17:55:15 UTC (rev 3460)
@@ -23,6 +23,8 @@
 #include <glib.h>
 #include <gtk/gtk.h>
 #include <libjana-gtk/jana-gtk.h>
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-bindings.h>
 
 typedef struct {
 	JanaStore *notes;
@@ -44,6 +46,8 @@
 	
 	gulong delete_all_handler;
 	gulong delete_handler;
+	
+	DBusGProxy *sms_proxy;
 } SmsData;
 
 typedef enum {





More information about the commitlog mailing list