[empathy: 5/26] empathy-idle: use EmpathyConnectivity instead of messing with NM itself



commit 21eba5b7a86ad221efd3738d415cd56eb0ee98b8
Author: Jonny Lamb <jonny lamb collabora co uk>
Date:   Tue Aug 18 18:24:48 2009 +0100

    empathy-idle: use EmpathyConnectivity instead of messing with NM itself
    
    Signed-off-by: Jonny Lamb <jonny lamb collabora co uk>

 libempathy/empathy-idle.c |  172 +++++++++++++--------------------------------
 libempathy/empathy-idle.h |    3 -
 2 files changed, 49 insertions(+), 126 deletions(-)
---
diff --git a/libempathy/empathy-idle.c b/libempathy/empathy-idle.c
index 5d2fa2b..7757b7b 100644
--- a/libempathy/empathy-idle.c
+++ b/libempathy/empathy-idle.c
@@ -25,9 +25,6 @@
 
 #include <glib/gi18n-lib.h>
 #include <dbus/dbus-glib.h>
-#ifdef HAVE_NM
-#include <nm-client.h>
-#endif
 
 #include <telepathy-glib/dbus.h>
 #include <telepathy-glib/util.h>
@@ -35,6 +32,7 @@
 
 #include "empathy-idle.h"
 #include "empathy-utils.h"
+#include "empathy-connectivity.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_OTHER
 #include "empathy-debug.h"
@@ -46,22 +44,18 @@
 typedef struct {
 	MissionControl *mc;
 	DBusGProxy     *gs_proxy;
-#ifdef HAVE_NM
-	NMClient       *nm_client;
-#endif
+	EmpathyConnectivity *connectivity;
 
 	TpConnectionPresenceType      state;
 	gchar          *status;
 	TpConnectionPresenceType      flash_state;
 	gboolean        auto_away;
-	gboolean        use_nm;
 
 	TpConnectionPresenceType      away_saved_state;
-	TpConnectionPresenceType      nm_saved_state;
-	gchar          *nm_saved_status;
+	TpConnectionPresenceType      saved_state;
+	gchar          *saved_status;
 
 	gboolean        is_idle;
-	gboolean        nm_connected;
 	guint           ext_away_timeout;
 } EmpathyIdlePriv;
 
@@ -78,8 +72,7 @@ enum {
 	PROP_STATE,
 	PROP_STATUS,
 	PROP_FLASH_STATE,
-	PROP_AUTO_AWAY,
-	PROP_USE_NM
+	PROP_AUTO_AWAY
 };
 
 G_DEFINE_TYPE (EmpathyIdle, empathy_idle, G_TYPE_OBJECT);
@@ -172,7 +165,7 @@ idle_session_status_changed_cb (DBusGProxy    *gs_proxy,
 		is_idle ? "yes" : "no");
 
 	if (!priv->auto_away ||
-	    (priv->nm_saved_state == TP_CONNECTION_PRESENCE_TYPE_UNSET &&
+	    (priv->saved_state == TP_CONNECTION_PRESENCE_TYPE_UNSET &&
 	     (priv->state <= TP_CONNECTION_PRESENCE_TYPE_OFFLINE ||
 	      priv->state == TP_CONNECTION_PRESENCE_TYPE_HIDDEN))) {
 		/* We don't want to go auto away OR we explicitely asked to be
@@ -187,11 +180,11 @@ idle_session_status_changed_cb (DBusGProxy    *gs_proxy,
 
 		idle_ext_away_start (idle);
 
-		if (priv->nm_saved_state != TP_CONNECTION_PRESENCE_TYPE_UNSET) {
+		if (priv->saved_state != TP_CONNECTION_PRESENCE_TYPE_UNSET) {
 		    	/* We are disconnected, when coming back from away
 		    	 * we want to restore the presence before the
 		    	 * disconnection. */
-			priv->away_saved_state = priv->nm_saved_state;
+			priv->away_saved_state = priv->saved_state;
 		} else {
 			priv->away_saved_state = priv->state;
 		}
@@ -231,56 +224,38 @@ idle_session_status_changed_cb (DBusGProxy    *gs_proxy,
 	priv->is_idle = is_idle;
 }
 
-#ifdef HAVE_NM
 static void
-idle_nm_state_change_cb (NMClient         *client,
-			 const GParamSpec *pspec,
-			 EmpathyIdle      *idle)
+idle_state_change_cb (EmpathyConnectivity *connectivity,
+		      gboolean old_online,
+		      gboolean new_online,
+		      EmpathyIdle *idle)
 {
 	EmpathyIdlePriv *priv;
-	gboolean         old_nm_connected;
-	gboolean         new_nm_connected;
-	NMState          state;
 
 	priv = GET_PRIV (idle);
 
-	if (!priv->use_nm) {
-		return;
-	}
-
-	state = nm_client_get_state (priv->nm_client);
-	old_nm_connected = priv->nm_connected;
-	new_nm_connected = !(state == NM_STATE_CONNECTING ||
-			     state == NM_STATE_DISCONNECTED);
-	priv->nm_connected = TRUE; /* To be sure _set_state will work */
-
-	DEBUG ("New network state %d", state);
-
-	if (old_nm_connected && !new_nm_connected) {
-		/* We are no more connected */
+	if (old_online && !new_online) {
+		/* We are no longer connected */
 		DEBUG ("Disconnected: Save state %d (%s)",
 				priv->state, priv->status);
-		priv->nm_saved_state = priv->state;
-		g_free (priv->nm_saved_status);
-		priv->nm_saved_status = g_strdup (priv->status);
+		priv->saved_state = priv->state;
+		g_free (priv->saved_status);
+		priv->saved_status = g_strdup (priv->status);
 		empathy_idle_set_state (idle, TP_CONNECTION_PRESENCE_TYPE_OFFLINE);
 	}
-	else if (!old_nm_connected && new_nm_connected
-			&& priv->nm_saved_state != TP_CONNECTION_PRESENCE_TYPE_UNSET) {
+	else if (!old_online && new_online
+			&& priv->saved_state != TP_CONNECTION_PRESENCE_TYPE_UNSET) {
 		/* We are now connected */
 		DEBUG ("Reconnected: Restore state %d (%s)",
-				priv->nm_saved_state, priv->nm_saved_status);
+				priv->saved_state, priv->saved_status);
 		empathy_idle_set_presence (idle,
-				priv->nm_saved_state,
-				priv->nm_saved_status);
-		priv->nm_saved_state = TP_CONNECTION_PRESENCE_TYPE_UNSET;
-		g_free (priv->nm_saved_status);
-		priv->nm_saved_status = NULL;
+				priv->saved_state,
+				priv->saved_status);
+		priv->saved_state = TP_CONNECTION_PRESENCE_TYPE_UNSET;
+		g_free (priv->saved_status);
+		priv->saved_status = NULL;
 	}
-
-	priv->nm_connected = new_nm_connected;
 }
-#endif
 
 static void
 idle_finalize (GObject *object)
@@ -296,11 +271,7 @@ idle_finalize (GObject *object)
 		g_object_unref (priv->gs_proxy);
 	}
 
-#ifdef HAVE_NM
-	if (priv->nm_client) {
-		g_object_unref (priv->nm_client);
-	}
-#endif
+	g_object_unref (priv->connectivity);
 
 	idle_ext_away_stop (EMPATHY_IDLE (object));
 }
@@ -350,9 +321,6 @@ idle_get_property (GObject    *object,
 	case PROP_AUTO_AWAY:
 		g_value_set_boolean (value, empathy_idle_get_auto_away (idle));
 		break;
-	case PROP_USE_NM:
-		g_value_set_boolean (value, empathy_idle_get_use_nm (idle));
-		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
 		break;
@@ -384,9 +352,6 @@ idle_set_property (GObject      *object,
 	case PROP_AUTO_AWAY:
 		empathy_idle_set_auto_away (idle, g_value_get_boolean (value));
 		break;
-	case PROP_USE_NM:
-		empathy_idle_set_use_nm (idle, g_value_get_boolean (value));
-		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
 		break;
@@ -435,14 +400,6 @@ empathy_idle_class_init (EmpathyIdleClass *klass)
 								FALSE,
 								G_PARAM_READWRITE));
 
-	 g_object_class_install_property (object_class,
-					  PROP_USE_NM,
-					  g_param_spec_boolean ("use-nm",
-								"Use Network Manager",
-								"Set presence according to Network Manager",
-								TRUE,
-								G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
-
 	g_type_class_add_private (object_class, sizeof (EmpathyIdlePriv));
 }
 
@@ -473,6 +430,22 @@ empathy_idle_get_actual_presence (EmpathyIdle *idle, GError **error)
 }
 
 static void
+idle_use_conn_cb (GObject *object,
+		  GParamSpec *pspec,
+		  EmpathyIdle *idle)
+{
+	EmpathyIdlePriv *priv = GET_PRIV (idle);
+
+	if (!empathy_connectivity_get_use_conn (priv->connectivity)) {
+		if (priv->saved_state != TP_CONNECTION_PRESENCE_TYPE_UNSET) {
+			empathy_idle_set_state (idle, priv->saved_state);
+		}
+
+		priv->saved_state = TP_CONNECTION_PRESENCE_TYPE_UNSET;
+	}
+}
+
+static void
 empathy_idle_init (EmpathyIdle *idle)
 {
 	GError          *error = NULL;
@@ -522,16 +495,11 @@ empathy_idle_init (EmpathyIdle *idle)
 		DEBUG ("Failed to get gs proxy");
 	}
 
-#ifdef HAVE_NM
-	priv->nm_client = nm_client_new ();
-	if (priv->nm_client) {
-		g_signal_connect (priv->nm_client, "notify::" NM_CLIENT_STATE,
-				  G_CALLBACK (idle_nm_state_change_cb),
-				  idle);
-	} else {
-		DEBUG ("Failed to get nm proxy");
-	}
-#endif
+	priv->connectivity = empathy_connectivity_dup_singleton ();
+	g_signal_connect (priv->connectivity, "state-change",
+	    G_CALLBACK (idle_state_change_cb), idle);
+	g_signal_connect (priv->connectivity, "notify::use-conn",
+	    G_CALLBACK (idle_use_conn_cb), idle);
 }
 
 EmpathyIdle *
@@ -664,10 +632,9 @@ empathy_idle_set_presence (EmpathyIdle *idle,
 		status = NULL;
 	}
 
-	if (!priv->nm_connected) {
-		DEBUG ("NM not connected");
+	if (!empathy_connectivity_is_online (priv->connectivity)) {
+		DEBUG ("Empathy is not online");
 
-		priv->nm_saved_state = state;
 		if (tp_strdiff (priv->status, status)) {
 			g_free (priv->status);
 			priv->status = NULL;
@@ -676,8 +643,6 @@ empathy_idle_set_presence (EmpathyIdle *idle,
 			}
 			g_object_notify (G_OBJECT (idle), "status");
 		}
-
-		return;
 	}
 
 	empathy_idle_do_set_presence (idle, state, status);
@@ -702,42 +667,3 @@ empathy_idle_set_auto_away (EmpathyIdle *idle,
 	g_object_notify (G_OBJECT (idle), "auto-away");
 }
 
-gboolean
-empathy_idle_get_use_nm (EmpathyIdle *idle)
-{
-	EmpathyIdlePriv *priv = GET_PRIV (idle);
-
-	return priv->use_nm;
-}
-
-void
-empathy_idle_set_use_nm (EmpathyIdle *idle,
-			 gboolean     use_nm)
-{
-	EmpathyIdlePriv *priv = GET_PRIV (idle);
-
-#ifdef HAVE_NM
-	if (!priv->nm_client || use_nm == priv->use_nm) {
-		return;
-	}
-#endif
-
-	priv->use_nm = use_nm;
-
-#ifdef HAVE_NM
-	if (use_nm) {
-		idle_nm_state_change_cb (priv->nm_client, NULL, idle);
-#else
-	if (0) {
-#endif
-	} else {
-		priv->nm_connected = TRUE;
-		if (priv->nm_saved_state != TP_CONNECTION_PRESENCE_TYPE_UNSET) {
-			empathy_idle_set_state (idle, priv->nm_saved_state);
-		}
-		priv->nm_saved_state = TP_CONNECTION_PRESENCE_TYPE_UNSET;
-	}
-
-	g_object_notify (G_OBJECT (idle), "use-nm");
-}
-
diff --git a/libempathy/empathy-idle.h b/libempathy/empathy-idle.h
index 0f7f23d..d0b426e 100644
--- a/libempathy/empathy-idle.h
+++ b/libempathy/empathy-idle.h
@@ -64,9 +64,6 @@ void         empathy_idle_set_presence        (EmpathyIdle *idle,
 gboolean     empathy_idle_get_auto_away       (EmpathyIdle *idle);
 void         empathy_idle_set_auto_away       (EmpathyIdle *idle,
 					       gboolean     auto_away);
-gboolean     empathy_idle_get_use_nm          (EmpathyIdle *idle);
-void         empathy_idle_set_use_nm          (EmpathyIdle *idle,
-					       gboolean     use_nm);
 
 G_END_DECLS
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]