X-Git-Url: https://develop.uap-core.de/gitweb/uwplayer.git/blobdiff_plain/1e4681c09375d0a2aece4ebdcd4a3d5badee5fc6..848befbcc166fff6fdde6a635cf7a31f9f9185e0:/application/playlist.c?ds=sidebyside diff --git a/application/playlist.c b/application/playlist.c index 06172c3..eb9dfc0 100644 --- a/application/playlist.c +++ b/application/playlist.c @@ -22,45 +22,57 @@ #include "playlist.h" +#include + #include "player.h" #include "utils.h" +#include + void PlayListInit(MainWindow *win) { + win->playlist.tracks = cxArrayListCreate(cxDefaultAllocator, NULL, CX_STORE_POINTERS, 64); win->playlist.current_track = -1; } void PlayListAddFile(MainWindow *win, const char *file) { char *f = strdup(file); - win->playlist.tracks = ucx_list_append(win->playlist.tracks, f); + cxListAdd(win->playlist.tracks, f); } void PlayListPlayNext(MainWindow *win, bool force) { - UcxList *tracks = win->playlist.tracks; + CxList *tracks = win->playlist.tracks; if(!tracks) return; - size_t len = ucx_list_size(tracks); + size_t len = tracks->size; int current = win->playlist.current_track; if(win->playlist.repeatTrack) { if(force) { current++; } + } else if(win->playlist.random) { + current = random() % len; } else if(current < len) { current++; } else if(win->playlist.autoplayFolder) { char *next_file = util_find_next_file(win->file); - win->playlist.tracks = ucx_list_append(win->playlist.tracks, next_file); + cxListAdd(win->playlist.tracks, next_file); current = len; } else { current = 0; } - win->playlist.current_track = current; - - UcxList *fileElm = ucx_list_get(tracks, current); - if(!fileElm) { - return; + PlayListPlayTrack(win, current); +} + +void PlayListPlayTrack(MainWindow *win, int i) { + CxList *tracks = win->playlist.tracks; + if(i < tracks->size) { + char *file = cxListAt(tracks, i); + if(file) { + win->playlist.current_track = i; + win->file = file; + PlayerOpenFile(win); + win->playlist.current_track = i; + } } - win->file = fileElm->data; - - PlayerOpenFile(win); }