void xmms_xform_browse_add_symlink_args (xmms_xform_t *xform, const gchar *basename, const gchar *url, gint nargs, gchar **args) { GString *s; gchar *eurl; gchar bname[32]; gint i; if (!basename) { g_snprintf (bname, sizeof (bname), "%d", xform->browse_index++); basename = bname; } xmms_xform_browse_add_entry (xform, basename, 0); eurl = xmms_medialib_url_encode (url); s = g_string_new (eurl); for (i = 0; i < nargs; i++) { g_string_append_c (s, i == 0 ? '?' : '&'); g_string_append (s, args[i]); } xmms_xform_browse_add_entry_property_str (xform, "realpath", s->str); g_free (eurl); g_string_free (s, TRUE); }
void xmms_xform_browse_add_entry (xmms_xform_t *xform, const gchar *filename, guint32 flags) { const gchar *url; gchar *efile, *eurl, *t; gint l, isdir; g_return_if_fail (filename); t = strchr (filename, '/'); g_return_if_fail (!t); /* filenames can't contain '/', can they? */ url = xmms_xform_get_url (xform); g_return_if_fail (url); xform->browse_dict = xmmsv_new_dict (); eurl = xmms_medialib_url_encode (url); efile = xmms_medialib_url_encode (filename); /* can't use g_build_filename as we need to preserve slashes stuff like file:/// */ l = strlen (url); if (l && url[l - 1] == '/') { t = g_strdup_printf ("%s%s", eurl, efile); } else { t = g_strdup_printf ("%s/%s", eurl, efile); } isdir = !!(flags & XMMS_XFORM_BROWSE_FLAG_DIR); xmms_xform_browse_add_entry_property_str (xform, "path", t); xmms_xform_browse_add_entry_property_int (xform, "isdir", isdir); if (xform->browse_list == NULL) { xform->browse_list = xmmsv_new_list (); } xmmsv_list_append (xform->browse_list, xform->browse_dict); xmmsv_unref (xform->browse_dict); g_free (t); g_free (efile); g_free (eurl); }
/** * 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; }
/** * Changes the URL of an entry in the medialib. * * @param medialib Medialib pointer * @param entry entry to modify * @param url URL to change to * @param error In case of error this will be filled. */ static void xmms_medialib_client_move_entry (xmms_medialib_t *medialib, xmms_medialib_entry_t entry, const gchar *url, xmms_error_t *error) { xmms_medialib_session_t *session; gchar *encoded; encoded = xmms_medialib_url_encode (url); do { session = xmms_medialib_session_begin (medialib); if (xmms_medialib_check_id (session, entry)) { xmms_medialib_entry_property_set_str_source (session, entry, XMMS_MEDIALIB_ENTRY_PROPERTY_URL, encoded, "server"); } else { xmms_error_set (error, XMMS_ERROR_NOENT, "No such entry"); } } while (!xmms_medialib_session_commit (session)); g_free (encoded); }