static void rb_static_playlist_source_add_uri_list (RBStaticPlaylistSource *source, GList *list) { GList *i, *uri_list = NULL; RBPlaylistSource *psource = RB_PLAYLIST_SOURCE (source); RhythmDBEntry *entry; g_return_if_fail (list != NULL); for (i = list; i != NULL; i = g_list_next (i)) { char *uri = (char *) i->data; uri_list = g_list_prepend (uri_list, rb_canonicalise_uri (uri)); } uri_list = g_list_reverse (uri_list); if (uri_list == NULL) return; for (i = uri_list; i != NULL; i = i->next) { char *uri = i->data; if (uri != NULL) { entry = rhythmdb_entry_lookup_by_location (rb_playlist_source_get_db (psource), uri); if (entry == NULL) rhythmdb_add_uri (rb_playlist_source_get_db (psource), uri); rb_static_playlist_source_add_location (source, uri, -1); } g_free (uri); } g_list_free (uri_list); }
static void rb_static_playlist_source_non_entry_dropped (GtkTreeModel *model, const char *uri, int position, RBStaticPlaylistSource *source) { g_assert (g_utf8_strlen (uri, -1) > 0); rhythmdb_add_uri (rb_playlist_source_get_db (RB_PLAYLIST_SOURCE (source)), uri); rb_static_playlist_source_add_location (source, uri, position); }
/** * rb_static_playlist_source_add_locations: * @source: an #RBStaticPlaylistSource * @locations: (element-type utf8) (transfer none): URI strings to add * * Adds the locations specified in @locations to the playlist. * See @rb_static_playlist_source_add_location for details. */ void rb_static_playlist_source_add_locations (RBStaticPlaylistSource *source, GList *locations) { GList *l; for (l = locations; l; l = l->next) { const gchar *uri = (const gchar *)l->data; rb_static_playlist_source_add_location (source, uri, -1); } }
/** * rb_static_playlist_source_load_from_xml: * @source: an #RBStaticPlaylistSource * @node: XML node to load from * * Loads the playlist contents from the specified XML document node. */ void rb_static_playlist_source_load_from_xml (RBStaticPlaylistSource *source, xmlNodePtr node) { xmlNodePtr child; for (child = node->children; child; child = child->next) { xmlChar *location; if (xmlNodeIsText (child)) continue; if (xmlStrcmp (child->name, RB_PLAYLIST_LOCATION)) continue; location = xmlNodeGetContent (child); rb_static_playlist_source_add_location (source, (char *) location, -1); xmlFree (location); } }
static void handle_playlist_entry_cb (TotemPlParser *playlist, const char *uri, GHashTable *metadata, RBGenericPlayerPlaylistSource *source) { char *local_uri; char *name; char *canon_uri; RBGenericPlayerPlaylistSourcePrivate *priv = GET_PRIVATE (source); local_uri = rb_generic_player_source_uri_from_playlist_uri (priv->player_source, uri); if (local_uri == NULL) return; canon_uri = rb_canonicalise_uri (local_uri); g_object_get (source, "name", &name, NULL); rb_debug ("adding '%s' as '%s' to playlist '%s' (%s)", uri, canon_uri, name, priv->playlist_path); rb_static_playlist_source_add_location (RB_STATIC_PLAYLIST_SOURCE (source), canon_uri, -1); g_free (canon_uri); g_free (local_uri); g_free (name); }