static gboolean xmms_main_client_list_foreach (xmms_plugin_t *plugin, gpointer data) { xmmsv_t *dict; GList **list = data; dict = xmmsv_build_dict ( XMMSV_DICT_ENTRY_STR ("name", xmms_plugin_name_get (plugin)), XMMSV_DICT_ENTRY_STR ("shortname", xmms_plugin_shortname_get (plugin)), XMMSV_DICT_ENTRY_STR ("version", xmms_plugin_version_get (plugin)), XMMSV_DICT_ENTRY_STR ("description", xmms_plugin_description_get (plugin)), XMMSV_DICT_ENTRY_INT ("type", xmms_plugin_type_get (plugin)), XMMSV_DICT_END); *list = g_list_prepend (*list, dict); return TRUE; }
/** * This returns the main stats for the server */ static xmmsv_t * xmms_main_client_stats (xmms_object_t *object, xmms_error_t *error) { xmms_main_t *mainobj = (xmms_main_t *) object; gint uptime = time (NULL) - mainobj->starttime; return xmmsv_build_dict (XMMSV_DICT_ENTRY_STR ("version", XMMS_VERSION), XMMSV_DICT_ENTRY_INT ("uptime", uptime), XMMSV_DICT_END); }
/** * Returns a random entry from a collection * * @param coll The collection to find a random entry in * @return A random entry from the collection, 0 if the collection is empty */ xmms_medialib_entry_t xmms_medialib_query_random_id (xmms_medialib_session_t *session, xmmsv_t *coll) { xmms_medialib_entry_t ret; xmmsv_t *spec, *res; xmms_error_t err; spec = xmmsv_build_list (XMMSV_LIST_ENTRY_STR ("id"), XMMSV_LIST_END); spec = xmmsv_build_dict (XMMSV_DICT_ENTRY_STR ("type", "metadata"), XMMSV_DICT_ENTRY_STR ("aggregate", "random"), XMMSV_DICT_ENTRY ("get", spec), XMMSV_DICT_END); res = xmms_medialib_query (session, coll, spec, &err); xmmsv_get_int (res, &ret); xmmsv_unref (spec); xmmsv_unref (res); return ret; }
xmmsv_t * xmms_playlist_current_pos_msg_new (xmms_playlist_t *playlist, guint32 pos, const gchar *plname) { gchar *cannonical_name; xmmsv_t *dict; cannonical_name = xmms_playlist_canonical_name (playlist, plname); dict = xmmsv_build_dict (XMMSV_DICT_ENTRY_INT ("position", pos), XMMSV_DICT_ENTRY_STR ("name", cannonical_name), XMMSV_DICT_END); g_free (cannonical_name); return dict; }
xmmsv_t * xmms_playlist_changed_msg_new (xmms_playlist_t *playlist, xmms_playlist_changed_actions_t type, xmms_medialib_entry_t id, const gchar *plname) { gchar *cannonical_name; xmmsv_t *dict; cannonical_name = xmms_playlist_canonical_name (playlist, plname); dict = xmmsv_build_dict (XMMSV_DICT_ENTRY_INT ("type", type), XMMSV_DICT_ENTRY_STR ("name", cannonical_name), XMMSV_DICT_END); g_free (cannonical_name); if (id) { xmmsv_dict_set_int (dict, "id", id); } return dict; }
int main (int argc, char **argv) { xmmsc_result_t *res; xmmsv_t *configval; xmmsv_t *val; const char *errmsg; gchar *path = getenv ("XMMS_PATH"); connection = xmmsc_init ("xmms2-vistest"); if (!connection || !xmmsc_connect (connection, path)){ printf ("Couldn't connect to xmms2d: %s\n", xmmsc_get_last_error (connection)); exit (EXIT_FAILURE); } res = xmmsc_visualization_version (connection); xmmsc_result_wait (res); val = xmmsc_result_get_value (res); if (xmmsv_get_error (val, &errmsg)) { puts (errmsg); exit (EXIT_FAILURE); } else { int32_t version; xmmsv_get_int (val, &version); /* insert the version you need here or instead of complaining, reduce your feature set to fit the version */ if (version < 1) { printf ("The server only supports formats up to version %d (needed is %d)!", version, 1); exit (EXIT_FAILURE); } } xmmsc_result_unref (res); res = xmmsc_visualization_init (connection); xmmsc_result_wait (res); val = xmmsc_result_get_value (res); if (xmmsv_get_error (val, &errmsg)) { puts (errmsg); exit (EXIT_FAILURE); } vis = xmmsc_visualization_init_handle (res); configval = xmmsv_build_dict (XMMSV_DICT_ENTRY_STR ("type", "peak"), XMMSV_DICT_ENTRY_STR ("stereo", "1"), XMMSV_DICT_END); res = xmmsc_visualization_properties_set (connection, vis, configval); xmmsc_result_wait (res); val = xmmsc_result_get_value (res); if (xmmsv_get_error (val, &errmsg)) { puts (errmsg); exit (EXIT_FAILURE); } xmmsc_result_unref (res); xmmsv_unref (configval); while (!xmmsc_visualization_started (connection, vis)) { res = xmmsc_visualization_start (connection, vis); if (xmmsc_visualization_errored (connection, vis)) { printf ("Couldn't start visualization transfer: %s\n", xmmsc_get_last_error (connection)); exit (EXIT_FAILURE); } if (res) { xmmsc_result_wait (res); xmmsc_visualization_start_handle (connection, res); xmmsc_result_unref (res); } } /* using GTK mainloop */ mainloop = g_main_loop_new (NULL, FALSE); xmmsc_mainloop_gmain_init (connection); g_timeout_add_full (G_PRIORITY_DEFAULT, 20, draw_gtk, NULL, shutdown_gtk); g_main_loop_run (mainloop); /* not using GTK mainloop */ while (xmmsc_visualization_chunk_get (connection, vis, data, 0, 1000) != -1) { draw (); } putchar ('\n'); xmmsc_visualization_shutdown (connection, vis); if (connection) { xmmsc_unref (connection); } return 0; }