gmyth-dbus/src/gmyth-dbus-server.c
branchtrunk
changeset 881 c5a9d9583e64
parent 879 16c33370755e
child 891 0cc42675b88d
     1.1 --- a/gmyth-dbus/src/gmyth-dbus-server.c	Tue Oct 30 14:08:04 2007 +0000
     1.2 +++ b/gmyth-dbus/src/gmyth-dbus-server.c	Mon Nov 19 17:57:40 2007 +0000
     1.3 @@ -37,7 +37,7 @@
     1.4  
     1.5  enum
     1.6  {
     1.7 -    DISCONNECTED,
     1.8 +    SHUTDOWN,
     1.9      LAST_SIGNAL
    1.10  };
    1.11  
    1.12 @@ -65,15 +65,19 @@
    1.13      gboolean         connected;
    1.14      GMythEPG         *myth_epg;
    1.15      GMythScheduler   *myth_scheduler;
    1.16 +
    1.17 +    guint            shutdown_cb_id;
    1.18  };
    1.19  
    1.20  #define GMYTH_DBUS_SERVER_GET_PRIVATE(o) \
    1.21      (G_TYPE_INSTANCE_GET_PRIVATE ((o), GMYTH_DBUS_SERVER_TYPE, GMythDbusServerPrivate))
    1.22  
    1.23 -static void gmyth_dbus_server_class_init (GMythDbusServerClass *klass);
    1.24 -static void gmyth_dbus_server_init       (GMythDbusServer *self);
    1.25 -static void gmyth_dbus_server_dispose    (GObject *object);
    1.26 -static void gmyth_dbus_server_finalize   (GObject *object);
    1.27 +static void gmyth_dbus_server_class_init        (GMythDbusServerClass *klass);
    1.28 +static void gmyth_dbus_server_init              (GMythDbusServer *self);
    1.29 +static void gmyth_dbus_server_dispose           (GObject *object);
    1.30 +static void gmyth_dbus_server_finalize          (GObject *object);
    1.31 +static void gmyth_dbus_server_cancel_shutdown   (GMythDbusServer *self);
    1.32 +static gboolean gmyth_dbus_server_shutdown_cb   (GMythDbusServer *self);
    1.33  
    1.34  /* Dbus */
    1.35  static gboolean gmyth_dbus_server_connect           (GObject *obj,
    1.36 @@ -173,8 +177,8 @@
    1.37      object_class->dispose = gmyth_dbus_server_dispose;
    1.38      object_class->finalize = gmyth_dbus_server_finalize;
    1.39  
    1.40 -    signals[DISCONNECTED] = 
    1.41 -            g_signal_new ("disconnected",
    1.42 +    signals[SHUTDOWN] = 
    1.43 +            g_signal_new ("shutdown",
    1.44                            G_OBJECT_CLASS_TYPE (object_class),
    1.45                            G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
    1.46                            0,
    1.47 @@ -298,6 +302,8 @@
    1.48          gmyth_dbus_server_internal_disconnect (obj, NULL);
    1.49      }
    1.50  
    1.51 +    gmyth_dbus_server_cancel_shutdown (GMYTH_DBUS_SERVER (obj));
    1.52 +
    1.53      priv->myth_backend = gmyth_backend_info_new_full (host,
    1.54                                                        user,
    1.55                                                        password,
    1.56 @@ -353,7 +359,8 @@
    1.57      if (priv->connected)
    1.58      {
    1.59          gmyth_dbus_server_internal_disconnect (obj, error);
    1.60 -        g_signal_emit (obj, signals[DISCONNECTED], 0);
    1.61 +        priv->shutdown_cb_id = g_timeout_add (60000,
    1.62 +                (GSourceFunc) gmyth_dbus_server_shutdown_cb, obj);
    1.63      }
    1.64  
    1.65      return TRUE;
    1.66 @@ -1238,3 +1245,30 @@
    1.67      return NULL;
    1.68  }
    1.69  
    1.70 +
    1.71 +static void 
    1.72 +gmyth_dbus_server_cancel_shutdown (GMythDbusServer *self)
    1.73 +{
    1.74 +    GMythDbusServerPrivate *priv;
    1.75 +
    1.76 +    priv = GMYTH_DBUS_SERVER_GET_PRIVATE (self);
    1.77 +
    1.78 +    if (priv->shutdown_cb_id)
    1.79 +    {
    1.80 +        g_source_remove (priv->shutdown_cb_id);
    1.81 +        priv->shutdown_cb_id = 0;
    1.82 +    }
    1.83 +}
    1.84 +
    1.85 +static gboolean
    1.86 +gmyth_dbus_server_shutdown_cb (GMythDbusServer *self)
    1.87 +{
    1.88 +    GMythDbusServerPrivate *priv;
    1.89 +
    1.90 +    priv = GMYTH_DBUS_SERVER_GET_PRIVATE (self);
    1.91 +
    1.92 +    priv->shutdown_cb_id = 0;
    1.93 +    g_signal_emit (self, signals[SHUTDOWN], 0);
    1.94 +    return FALSE;
    1.95 +}
    1.96 +