enum playlist_result playlist_open_into_queue(const char *uri, unsigned start_index, unsigned end_index, struct playlist *dest, struct player_control *pc, bool secure) { GMutex *mutex = g_mutex_new(); GCond *cond = g_cond_new(); struct input_stream *is; struct playlist_provider *playlist = playlist_open_any(uri, mutex, cond, &is); if (playlist == NULL) { g_cond_free(cond); g_mutex_free(mutex); return PLAYLIST_RESULT_NO_SUCH_LIST; } enum playlist_result result = playlist_load_into_queue(uri, playlist, start_index, end_index, dest, pc, secure); playlist_plugin_close(playlist); if (is != NULL) input_stream_close(is); g_cond_free(cond); g_mutex_free(mutex); return result; }
enum playlist_result playlist_open_into_queue(const char *uri, struct playlist *dest) { if (uri_has_scheme(uri)) return playlist_open_remote_into_queue(uri, dest); struct playlist_provider *playlist = playlist_mapper_open(uri); if (playlist != NULL) { enum playlist_result result = playlist_load_into_queue(uri, playlist, dest); playlist_plugin_close(playlist); return result; } return PLAYLIST_RESULT_NO_SUCH_LIST; }
enum playlist_result playlist_open_into_queue(const char *uri, struct playlist *dest, struct player_control *pc, bool secure) { struct input_stream *is; struct playlist_provider *playlist = playlist_open_any(uri, &is); if (playlist == NULL) return PLAYLIST_RESULT_NO_SUCH_LIST; enum playlist_result result = playlist_load_into_queue(uri, playlist, dest, pc, secure); playlist_plugin_close(playlist); if (is != NULL) input_stream_close(is); return result; }
static enum playlist_result playlist_open_remote_into_queue(const char *uri, struct playlist *dest) { GError *error = NULL; struct playlist_provider *playlist; struct input_stream *is = NULL; enum playlist_result result; assert(uri_has_scheme(uri)); playlist = playlist_list_open_uri(uri); if (playlist == NULL) { is = input_stream_open(uri, &error); if (is == NULL) { if (error != NULL) { g_warning("Failed to open %s: %s", uri, error->message); g_error_free(error); } return PLAYLIST_RESULT_NO_SUCH_LIST; } playlist = playlist_list_open_stream(is, uri); if (playlist == NULL) { input_stream_close(is); return PLAYLIST_RESULT_NO_SUCH_LIST; } } result = playlist_load_into_queue(uri, playlist, dest); playlist_plugin_close(playlist); if (is != NULL) input_stream_close(is); return result; }