static void xmms_medialib_client_add_entry (xmms_medialib_t *medialib, const gchar *url, xmms_error_t *error) { xmms_medialib_session_t *session; g_return_if_fail (medialib); g_return_if_fail (url); do { session = xmms_medialib_session_begin (medialib); xmms_medialib_entry_new_encoded (session, url, error); } while (!xmms_medialib_session_commit (session)); }
/** * Convenient function for adding a URL to the playlist, * Creates a #xmms_medialib_entry_t for you and adds it * to the list. * * @param playlist the playlist to add it URL to. * @param plname the name of the playlist to modify. * @param nurl the URL to add * @param err an #xmms_error_t that should be defined upon error. * @return TRUE on success and FALSE otherwise. */ void xmms_playlist_client_add_url (xmms_playlist_t *playlist, const gchar *plname, const gchar *nurl, xmms_error_t *err) { xmms_medialib_entry_t entry = 0; MEDIALIB_SESSION (playlist->medialib, entry = xmms_medialib_entry_new_encoded (session, nurl, err)); if (entry) { xmms_playlist_add_entry (playlist, plname, entry, err); } }
/** * Insert an entry into the playlist at given position. * Creates a #xmms_medialib_entry for you and insert it * in the list. * * @param playlist the playlist to add it URL to. * @param pos the position where the entry is inserted. * @param url the URL to add. * @param err an #xmms_error_t that should be defined upon error. * @return TRUE on success and FALSE otherwise. * */ static void xmms_playlist_client_insert_url (xmms_playlist_t *playlist, const gchar *plname, gint32 pos, const gchar *url, xmms_error_t *err) { xmms_medialib_entry_t entry = 0; MEDIALIB_SESSION (playlist->medialib, entry = xmms_medialib_entry_new_encoded (session, url, err)); if (!entry) { return; } xmms_playlist_client_insert_id (playlist, plname, pos, entry, err); }
/** * Insert an entry into the playlist at given position. * Creates a #xmms_medialib_entry for you and insert it * in the list. * * @param playlist the playlist to add it URL to. * @param pos the position where the entry is inserted. * @param url the URL to add. * @param err an #xmms_error_t that should be defined upon error. * @return TRUE on success and FALSE otherwise. * */ static void xmms_playlist_client_insert_url (xmms_playlist_t *playlist, const gchar *plname, gint32 pos, const gchar *url, xmms_error_t *err) { xmms_medialib_session_t *session; xmms_medialib_entry_t entry = 0; do { session = xmms_medialib_session_begin (playlist->medialib); entry = xmms_medialib_entry_new_encoded (session, url, err); } while (!xmms_medialib_session_commit (session)); if (entry) xmms_playlist_insert_entry (playlist, plname, pos, entry, err); }
/** * Convenient function for adding a URL to the playlist, * Creates a #xmms_medialib_entry_t for you and adds it * to the list. * * @param playlist the playlist to add it URL to. * @param plname the name of the playlist to modify. * @param nurl the URL to add * @param err an #xmms_error_t that should be defined upon error. * @return TRUE on success and FALSE otherwise. */ void xmms_playlist_client_add_url (xmms_playlist_t *playlist, const gchar *plname, const gchar *nurl, xmms_error_t *err) { xmms_medialib_session_t *session; xmms_medialib_entry_t entry = 0; do { session = xmms_medialib_session_begin (playlist->medialib); entry = xmms_medialib_entry_new_encoded (session, nurl, err); } while (!xmms_medialib_session_commit (session)); if (entry) { xmms_playlist_add_entry (playlist, plname, entry, err); } }
/** * Welcome to a function that should be called something else. * Returns a entry for a URL, if the URL is already in the medialib * the current entry will be returned otherwise a new one will be * created and returned. * * @todo rename to something better? * * @param url URL to add/retrieve from the medialib * @param error If an error occurs, it will be stored in there. * * @returns Entry mapped to the URL */ xmms_medialib_entry_t xmms_medialib_entry_new (xmms_medialib_session_t *session, const char *url, xmms_error_t *error) { gchar *enc_url; xmms_medialib_entry_t res; enc_url = xmms_medialib_url_encode (url); if (!enc_url) { return 0; } res = xmms_medialib_entry_new_encoded (session, enc_url, error); g_free (enc_url); return res; }
/** * Recursively scan a directory for media files. * * @return a reverse sorted list of encoded urls */ static gboolean process_dir (xmms_medialib_t *medialib, xmmsv_t *entries, const gchar *directory, xmms_error_t *error) { xmmsv_list_iter_t *it; xmmsv_t *list, *val; list = xmms_xform_browse (directory, error); if (!list) { return FALSE; } xmmsv_get_list_iter (list, &it); while (xmmsv_list_iter_entry (it, &val)) { const gchar *str; gint isdir; xmmsv_dict_entry_get_string (val, "path", &str); xmmsv_dict_entry_get_int (val, "isdir", &isdir); if (isdir == 1) { process_dir (medialib, entries, str, error); } else { xmms_medialib_session_t *session; xmms_medialib_entry_t entry; do { session = xmms_medialib_session_begin (medialib); entry = xmms_medialib_entry_new_encoded (session, str, error); } while (!xmms_medialib_session_commit (session)); if (entry) { xmmsv_coll_idlist_append (entries, entry); } } xmmsv_list_iter_remove (it); } xmmsv_unref (list); return TRUE; }