Example #1
0
/**
 * ppg_session_connection_connected:
 * @connection: (in): A #PkConnection.
 * @result: (in): A #GAsyncResult.
 * @user_data: (closure): User data for callback.
 *
 * Callback upon the connection connecting to the agent.
 *
 * Returns: None.
 * Side effects: None.
 */
static void
ppg_session_channel_stopped (GObject *object,
                             GAsyncResult *result,
                             gpointer user_data)
{
	PpgSession *session = user_data;
	PpgSessionPrivate *priv;
	GError *error = NULL;

	g_return_if_fail(PPG_IS_SESSION(session));

	priv = session->priv;

	if (!pk_connection_channel_stop_finish(priv->conn, result, &error)) {
		ppg_session_report_error(session, G_STRFUNC, error);
		g_error_free(error);
		return;

		/*
		 * FIXME: We need to make sure we handle this gracefully and stop
		 *        updating the UI. This goes for the rest of the states.
		 */
	}

	priv->state = PPG_SESSION_STOPPED;
	g_timer_stop(priv->timer);

	ppg_session_stop_position_notifier(session);

	g_signal_emit(session, signals[STOPPED], 0);
}
Example #2
0
/**
 * ppg_memory_instrument_unload:
 * @instrument: (in): A #PpgMemoryInstrument.
 * @session: (in): A #PpgSession.
 * @error: (out): A location for a #GError or %NULL.
 *
 * Unloads the instrument and destroys remote resources.
 *
 * Returns: TRUE if successful; otherwise FALSE.
 * Side effects: Agent resources are destroyed.
 */
static gboolean
ppg_memory_instrument_unload (PpgInstrument  *instrument,
                              PpgSession     *session,
                              GError        **error)
{
	PpgMemoryInstrumentPrivate *priv;
	PkConnection *conn;
	gboolean ret = FALSE;
	gboolean removed;

	g_return_val_if_fail(PPG_IS_MEMORY_INSTRUMENT(instrument), FALSE);
	g_return_val_if_fail(PPG_IS_SESSION(session), FALSE);

	priv = PPG_MEMORY_INSTRUMENT(instrument)->priv;

	g_object_get(session,
	             "connection", &conn,
	             NULL);

	RPC_OR_FAILURE(manager_remove_subscription,
	               (conn, priv->sub, &removed, error));
	RPC_OR_FAILURE(manager_remove_source,
	               (conn, priv->source, error));

  failure:
  	priv->sub = 0;
  	priv->source = 0;
  	g_object_unref(conn);
  	return ret;
}
Example #3
0
/**
 * ppg_session_channel_unmuted:
 * @connection: (in): A #PkConnection.
 * @result: (in): A #GAsyncResult.
 * @user_data: (closure): User data for callback.
 *
 * Callback upon the channel unmuting.
 *
 * Returns: None.
 * Side effects: None.
 */
static void
ppg_session_channel_unmuted (GObject *object,
                             GAsyncResult *result,
                             gpointer user_data)
{
	PpgSession *session = user_data;
	PpgSessionPrivate *priv;
	GError *error = NULL;

	g_return_if_fail(PPG_IS_SESSION(session));

	priv = session->priv;

	if (!pk_connection_channel_unmute_finish(priv->conn, result, &error)) {
		ppg_session_report_error(session, G_STRFUNC, error);
		g_error_free(error);
		return;
	}

	/*
	 * XXX: What do we do here for timer? Add adjust variable?
	 */
	priv->state = PPG_SESSION_STARTED;
	g_timer_start(priv->timer);

	ppg_session_start_position_notifier(session);

	g_signal_emit(session, signals[UNPAUSED], 0);
}
Example #4
0
static void
ppg_instrument_set_session (PpgInstrument *instrument,
                            PpgSession    *session)
{
	PpgInstrumentClass *klass;
	PpgInstrumentPrivate *priv;
	GError *error = NULL;

	g_return_if_fail(PPG_IS_INSTRUMENT(instrument));
	g_return_if_fail(PPG_IS_SESSION(session));

	priv = instrument->priv;
	klass = PPG_INSTRUMENT_GET_CLASS(instrument);

	priv->session = session;
	g_object_add_weak_pointer(G_OBJECT(priv->session), (gpointer *)&priv->session);

	if (klass->load) {
		if (!klass->load(instrument, session, &error)) {
			priv->failed = TRUE;
			g_critical("Failed to load instrument %s: %s",
			           g_type_name(G_TYPE_FROM_INSTANCE(instrument)),
			           error->message);
			/*
			 * XXX: Should we store the error?
			 */
			g_error_free(error);
			return;
		}
	}
}
Example #5
0
/**
 * ppg_session_channel_started:
 * @connection: (in): A #PkConnection.
 * @result: (in): A #GAsyncResult.
 * @user_data: (closure): User data for callback.
 *
 * Callback upon the channel starting.
 *
 * Returns: None.
 * Side effects: None.
 */
static void
ppg_session_channel_started (GObject *object,
                             GAsyncResult *result,
                             gpointer user_data)
{
	PpgSession *session = user_data;
	PpgSessionPrivate *priv;
	GError *error = NULL;

	g_return_if_fail(PPG_IS_SESSION(session));

	priv = session->priv;

	if (!pk_connection_channel_start_finish(priv->conn, result, &error)) {
		ppg_session_report_error(session, G_STRFUNC, error);
		g_error_free(error);
		return;
	}

	priv->state = PPG_SESSION_STARTED;
	priv->timer = g_timer_new();

	ppg_session_start_position_notifier(session);

	g_message("Channel %d started.", priv->channel);

	g_signal_emit(session, signals[STARTED], 0);
}
Example #6
0
/**
 * ppg_session_channel_muted:
 * @connection: (in): A #PkConnection.
 * @result: (in): A #GAsyncResult.
 * @user_data: (closure): User data for callback.
 *
 * Callback upon the channel muting.
 *
 * Returns: None.
 * Side effects: None.
 */
static void
ppg_session_channel_muted (GObject *object,
                           GAsyncResult *result,
                           gpointer user_data)
{
	PpgSession *session = user_data;
	PpgSessionPrivate *priv;
	GError *error = NULL;

	g_return_if_fail(PPG_IS_SESSION(session));

	priv = session->priv;

	if (!pk_connection_channel_mute_finish(priv->conn, result, &error)) {
		ppg_session_report_error(session, G_STRFUNC, error);
		g_error_free(error);
		return;
	}

	/*
	 * XXX: How do we deal with timer skew?
	 */
	priv->state = PPG_SESSION_PAUSED;
	g_timer_stop(priv->timer);

	ppg_session_stop_position_notifier(session);

	g_signal_emit(session, signals[PAUSED], 0);
}
static void
ppg_configure_instrument_dialog_set_session (PpgConfigureInstrumentDialog *dialog,
                                             PpgSession *session)
{
	PpgConfigureInstrumentDialogPrivate *priv;

	g_return_if_fail(PPG_IS_CONFIGURE_INSTRUMENT_DIALOG(dialog));
	g_return_if_fail(PPG_IS_SESSION(session));

	priv = dialog->priv;
	priv->session = session;
}
Example #8
0
static void
ppg_session_set_env (PpgSession  *session,
                      gchar      **env)
{
	PpgSessionPrivate *priv;

	g_return_if_fail(PPG_IS_SESSION(session));

	priv = session->priv;

	g_strfreev(priv->env);
	priv->env = g_strdupv(env);
	g_object_notify(G_OBJECT(session), "env");
}
Example #9
0
static void
ppg_session_set_target (PpgSession  *session,
                        const gchar *target)
{
	PpgSessionPrivate *priv;

	g_return_if_fail(PPG_IS_SESSION(session));

	priv = session->priv;

	g_free(priv->target);
	priv->target = g_strdup(target);
	g_object_notify(G_OBJECT(session), "target");
}
Example #10
0
static void
ppg_session_set_args (PpgSession  *session,
                      gchar      **args)
{
	PpgSessionPrivate *priv;

	g_return_if_fail(PPG_IS_SESSION(session));

	priv = session->priv;

	g_strfreev(priv->args);
	priv->args = g_strdupv(args);
	g_object_notify(G_OBJECT(session), "args");
}
Example #11
0
/**
 * ppg_session_unpause:
 * @session: (in): A #PpgSession.
 *
 * Unpauses the session.
 *
 * Returns: None.
 * Side effects: None.
 */
void
ppg_session_unpause (PpgSession *session)
{
	PpgSessionPrivate *priv;

	g_return_if_fail(PPG_IS_SESSION(session));
	g_return_if_fail(session->priv->conn != NULL);
	g_return_if_fail(session->priv->channel >= 0);

	priv = session->priv;

	pk_connection_channel_unmute_async(priv->conn, priv->channel, NULL,
	                                   ppg_session_channel_unmuted,
	                                   session);
}
Example #12
0
gdouble
ppg_session_get_position (PpgSession *session)
{
	PpgSessionPrivate *priv;

	g_return_val_if_fail(PPG_IS_SESSION(session), 0.0);

	priv = session->priv;

	if (priv->timer) {
		return ppg_session_get_position_fast(session);
	}

	return 0.0;
}
Example #13
0
/**
 * ppg_session_started:
 * @session: (in): A #PpgSession.
 *
 * Starts the session by starting the channel on the agent.
 *
 * Returns: None.
 * Side effects: None.
 */
void
ppg_session_start (PpgSession *session)
{
	PpgSessionPrivate *priv;

	g_return_if_fail(PPG_IS_SESSION(session));
	g_return_if_fail(session->priv->conn != NULL);
	g_return_if_fail(session->priv->channel >= 0);

	priv = session->priv;

	g_message("Starting channel %d", priv->channel);
	pk_connection_channel_start_async(priv->conn, priv->channel, NULL,
	                                  ppg_session_channel_started,
	                                  session);
}
Example #14
0
/**
 * ppg_session_set_uri:
 * @session: (in): A #PpgSession.
 *
 * Sets the URI for the session. The session will attempt to connect
 * to the target immediately.
 *
 * Returns: None.
 * Side effects: The connection is set and an attempt to connect is made.
 */
static void
ppg_session_set_uri (PpgSession  *session,
                     const gchar *uri)
{
	PpgSessionPrivate *priv;

	g_return_if_fail(PPG_IS_SESSION(session));
	g_return_if_fail(session->priv->conn == NULL);
	g_return_if_fail(uri != NULL);

	priv = session->priv;

	if (!(priv->conn = pk_connection_new_from_uri(uri))) {
		g_critical("Invalid URI specified: %s", uri);
		return;
	}

	pk_connection_connect_async(priv->conn, NULL,
	                            ppg_session_connection_connected,
	                            session);
}
Example #15
0
/**
 * ppg_session_channel_added:
 * @connection: (in): A #PkConnection.
 * @result: (in): A #GAsyncResult.
 * @user_data: (closure): User data for callback.
 *
 * Callback upon the channel being created.
 *
 * Returns: None.
 * Side effects: None.
 */
static void
ppg_session_channel_added (GObject      *connection,
                           GAsyncResult *result,
                           gpointer      user_data)
{
	PpgSession *session = user_data;
	PpgSessionPrivate *priv;
	GError *error = NULL;

	g_return_if_fail(PPG_IS_SESSION(session));

	priv = session->priv;

	if (!pk_connection_manager_add_channel_finish(priv->conn, result,
	                                              &priv->channel, &error)) {
		ppg_session_report_error(session, G_STRFUNC, error);
		g_error_free(error);
		return;
	}

	g_signal_emit(session, signals[READY], 0);
}
Example #16
0
PpgSessionState
ppg_session_get_state (PpgSession *session)
{
	g_return_val_if_fail(PPG_IS_SESSION(session), 0);
	return session->priv->state;
}
Example #17
0
static const gchar *
ppg_session_get_target (PpgSession *session)
{
	g_return_val_if_fail(PPG_IS_SESSION(session), NULL);
	return session->priv->target;
}