bool spl_remove_index(const char *utf8path, unsigned pos, GError **error_r) { char *uri; GPtrArray *list = spl_load(utf8path, error_r); if (list == NULL) return false; if (pos >= list->len) { spl_free(list); g_set_error_literal(error_r, playlist_quark(), PLAYLIST_RESULT_BAD_RANGE, "Bad range"); return false; } uri = spl_remove_index_internal(list, pos); g_free(uri); bool result = spl_save(list, utf8path, error_r); spl_free(list); idle_add(IDLE_STORED_PLAYLIST); return result; }
bool spl_move_index(const char *utf8path, unsigned src, unsigned dest, GError **error_r) { char *uri; if (src == dest) /* this doesn't check whether the playlist exists, but what the hell.. */ return true; GPtrArray *list = spl_load(utf8path, error_r); if (list == NULL) return false; if (src >= list->len || dest >= list->len) { spl_free(list); g_set_error_literal(error_r, playlist_quark(), PLAYLIST_RESULT_BAD_RANGE, "Bad range"); return false; } uri = spl_remove_index_internal(list, src); spl_insert_index_internal(list, dest, uri); bool result = spl_save(list, utf8path, error_r); spl_free(list); idle_add(IDLE_STORED_PLAYLIST); return result; }
enum playlist_result spl_move_index(const char *utf8path, unsigned src, unsigned dest) { GPtrArray *list; char *uri; enum playlist_result result; if (src == dest) /* this doesn't check whether the playlist exists, but what the hell.. */ return PLAYLIST_RESULT_SUCCESS; if (!(list = spl_load(utf8path))) return PLAYLIST_RESULT_NO_SUCH_LIST; if (src >= list->len || dest >= list->len) { spl_free(list); return PLAYLIST_RESULT_BAD_RANGE; } uri = spl_remove_index_internal(list, src); spl_insert_index_internal(list, dest, uri); result = spl_save(list, utf8path); spl_free(list); idle_add(IDLE_STORED_PLAYLIST); return result; }
enum playlist_result playlist_load_spl(struct playlist *playlist, const char *name_utf8) { GPtrArray *list; list = spl_load(name_utf8); if (list == NULL) return PLAYLIST_RESULT_NO_SUCH_LIST; for (unsigned i = 0; i < list->len; ++i) { const char *temp = g_ptr_array_index(list, i); if ((playlist_append_uri(playlist, temp, NULL)) != PLAYLIST_RESULT_SUCCESS) { /* for windows compatibility, convert slashes */ char *temp2 = g_strdup(temp); char *p = temp2; while (*p) { if (*p == '\\') *p = '/'; p++; } if ((playlist_append_uri(playlist, temp, NULL)) != PLAYLIST_RESULT_SUCCESS) { g_warning("can't add file \"%s\"", temp2); } g_free(temp2); } } spl_free(list); return PLAYLIST_RESULT_SUCCESS; }
enum playlist_result spl_remove_index(const char *utf8path, unsigned pos) { GPtrArray *list; char *uri; enum playlist_result result; if (!(list = spl_load(utf8path))) return PLAYLIST_RESULT_NO_SUCH_LIST; if (pos >= list->len) { spl_free(list); return PLAYLIST_RESULT_BAD_RANGE; } uri = spl_remove_index_internal(list, pos); g_free(uri); result = spl_save(list, utf8path); spl_free(list); idle_add(IDLE_STORED_PLAYLIST); return result; }