/** * 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); }
/** * Format a client-to-client message. * * Messages are dictionaries of the form:\n * "sender" : id of the sender client\n * "destination" : id of the destination client\n * "id" : 0 if the message doesn't expect reply, else a message id\n * "payload" : the contents of the message * * @param sender the id of the sender client * @param dest the id of the destination client * @param id the id of the message * @param payload the contents of the message * * @return the formatted message * * @note Increases the refcount of payload. */ xmmsv_t * xmmsv_c2c_message_format (int sender, int dest, int id, xmmsv_t *payload) { xmmsv_ref (payload); return xmmsv_build_dict (XMMSV_DICT_ENTRY_INT ("sender", sender), XMMSV_DICT_ENTRY_INT ("destination", dest), XMMSV_DICT_ENTRY_INT ("id", id), XMMSV_DICT_ENTRY ("payload", payload), XMMSV_DICT_END); }
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; }
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; }
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; }
/** * 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; }
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; }