]> git.0d.be Git - empathy.git/commitdiff
empathy-idle: use EmpathyConnectivity instead of messing with NM itself
authorJonny Lamb <jonny.lamb@collabora.co.uk>
Tue, 18 Aug 2009 17:24:48 +0000 (18:24 +0100)
committerJonny Lamb <jonny.lamb@collabora.co.uk>
Tue, 18 Aug 2009 17:24:48 +0000 (18:24 +0100)
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
libempathy/empathy-idle.c
libempathy/empathy-idle.h

index 5d2fa2bdc9833e1e00e1a2c44ea461fb3dfadda2..7757b7bdf0a117f501ce0b6cb9ecc15d0e512c40 100644 (file)
@@ -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"
 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));
 }
 
@@ -472,6 +429,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)
 {
@@ -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");
-}
-
index 0f7f23deb7afc44ce1cdacbd1627ee683244fce0..d0b426e59a3a2ca06947455e94233453642ed093 100644 (file)
@@ -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