コード例 #1
0
/** Fill the cache with initial (current) data, setup listeners. */
void
cli_cache_start (cli_infos_t *infos)
{
	xmmsc_result_t *res;

	/* Setup async listeners */
	res = xmmsc_broadcast_playlist_current_pos (infos->conn);
	xmmsc_result_notifier_set (res, &refresh_currpos, infos->cache);
	xmmsc_result_unref (res);

	res = xmmsc_broadcast_playback_current_id (infos->conn);
	xmmsc_result_notifier_set (res, &refresh_currid, infos->cache);
	xmmsc_result_unref (res);

	res = xmmsc_broadcast_playback_status (infos->conn);
	xmmsc_result_notifier_set (res, &refresh_playback_status, infos->cache);
	xmmsc_result_unref (res);

	res = xmmsc_broadcast_playlist_changed (infos->conn);
	xmmsc_result_notifier_set (res, &update_active_playlist, infos);
	xmmsc_result_unref (res);

	res = xmmsc_broadcast_playlist_loaded (infos->conn);
	xmmsc_result_notifier_set (res, &reload_active_playlist, infos);
	xmmsc_result_unref (res);

	res = xmmsc_broadcast_collection_changed (infos->conn);
	xmmsc_result_notifier_set (res, &update_active_playlist_name, infos);
	xmmsc_result_unref (res);

	/* Setup one-time value fetchers, for init */
	cli_cache_refresh (infos);
}
コード例 #2
0
ファイル: main.c プロジェクト: Reilithion/xmms2-reilithion
gboolean
command_runnable (cli_infos_t *infos, command_action_t *action)
{
	gint n = 0;

	/* Require connection, abort on failure */
	if (COMMAND_REQ_CHECK(action, COMMAND_REQ_CONNECTION) && !infos->conn) {
		gboolean autostart;
		autostart = !COMMAND_REQ_CHECK(action, COMMAND_REQ_NO_AUTOSTART);
		if (!cli_infos_connect (infos, autostart) && autostart) {
			return FALSE;
		}
	}

	/* Get the cache ready if needed */
	if (COMMAND_REQ_CHECK(action, COMMAND_REQ_CACHE)) {
		/* If executing an alias have to refresh manually */
		if (infos->status == CLI_ACTION_STATUS_ALIAS) {
			cli_cache_refresh (infos);
		}
		while (!cli_cache_is_fresh (infos->cache)) {
			/* Obviously, there is a problem with updating the cache, abort */
			if (n == MAX_CACHE_REFRESH_LOOP) {
				g_printf (_("Failed to update the cache!"));
				return FALSE;
			}
			loop_select (infos);
			n++;
		}
	}

	return TRUE;
}
コード例 #3
0
ファイル: cli_cache.c プロジェクト: randalboyle/xmms2-devel
/** Fill the cache with initial (current) data, setup listeners. */
void
cli_cache_start (cli_cache_t *cache, xmmsc_connection_t *conn)
{
    xmmsc_result_t *res;

    g_return_if_fail (cache->conn == NULL);

    cache->conn = xmmsc_ref (conn);

    /* Setup async listeners */
    res = xmmsc_broadcast_playlist_current_pos (conn);
    xmmsc_result_notifier_set (res, &refresh_currpos, cache);
    xmmsc_result_unref (res);

    res = xmmsc_broadcast_playback_current_id (conn);
    xmmsc_result_notifier_set (res, &refresh_currid, cache);
    xmmsc_result_unref (res);

    res = xmmsc_broadcast_playback_status (conn);
    xmmsc_result_notifier_set (res, &refresh_playback_status, cache);
    xmmsc_result_unref (res);

    res = xmmsc_broadcast_playlist_changed (conn);
    xmmsc_result_notifier_set (res, &update_active_playlist, cache);
    xmmsc_result_unref (res);

    res = xmmsc_broadcast_playlist_loaded (conn);
    xmmsc_result_notifier_set (res, &reload_active_playlist, cache);
    xmmsc_result_unref (res);

    res = xmmsc_broadcast_collection_changed (conn);
    xmmsc_result_notifier_set (res, &update_active_playlist_name, cache);
    xmmsc_result_unref (res);

    /* Setup one-time value fetchers, for init */
    cli_cache_refresh (cache);
}
コード例 #4
0
ファイル: cli_context.c プロジェクト: randalboyle/xmms2-devel
void
cli_context_cache_refresh (cli_context_t *ctx)
{
	cli_cache_refresh (ctx->cache);
}