/** 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); }
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; }
/** 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); }
void cli_context_cache_refresh (cli_context_t *ctx) { cli_cache_refresh (ctx->cache); }