Ejemplo n.º 1
0
enum playlist_result
playlist_load_into_queue(const char *uri, struct playlist_provider *source,
			 struct playlist *dest, struct player_control *pc,
			 bool secure)
{
	enum playlist_result result;
	struct song *song;
	char *base_uri = uri != NULL ? g_path_get_dirname(uri) : NULL;

	while ((song = playlist_plugin_read(source)) != NULL) {
		song = playlist_check_translate_song(song, base_uri, secure);
		if (song == NULL)
			continue;

		result = playlist_append_song(dest, pc, song, NULL);
		if (result != PLAYLIST_RESULT_SUCCESS) {
			if (!song_in_database(song))
				song_free(song);
			g_free(base_uri);
			return result;
		}
	}

	g_free(base_uri);

	return PLAYLIST_RESULT_SUCCESS;
}
Ejemplo n.º 2
0
enum playlist_result
playlist_load_into_queue(const char *uri, struct playlist_provider *source,
                         unsigned start_index, unsigned end_index,
                         struct playlist *dest, struct player_control *pc,
                         bool secure)
{
    enum playlist_result result;
    struct song *song;
    char *base_uri = uri != NULL ? g_path_get_dirname(uri) : NULL;

    for (unsigned i = 0;
    i < end_index && (song = playlist_plugin_read(source)) != NULL;
    ++i) {
        if (i < start_index) {
            /* skip songs before the start index */
            song_free(song);
            continue;
        }

        song = playlist_check_translate_song(song, base_uri, secure);
        if (song == NULL)
            continue;

#ifdef ENABLE_DESPOTIFY
// Not the right place to do this...
        if (strcmp(g_uri_parse_scheme(song->uri), "spt") == 0) {
            g_debug("Despotify update info : %s\n", song->uri);
            struct song *song_new;
            song_new = despotify_update_song(song);
            if (song_new != NULL) {
                song = song_new;
            }
        }
#endif

        result = playlist_append_song(dest, pc, song, NULL);
        song_free(song);
        if (result != PLAYLIST_RESULT_SUCCESS) {
            g_free(base_uri);
            return result;
        }
    }

    g_free(base_uri);

    return PLAYLIST_RESULT_SUCCESS;
}