void PlayerEOF(Player *p) {
MainWindow *win = GetMainWindow();
- if(win->playlist.repeatTrack) {
+ if(win->playlist.playback == PLAYBACK_REPEAT) {
char *cmd = "{ \"command\": [\"set_property\", \"playback-time\", 0] }\n";
write(p->ipc, cmd, strlen(cmd));
cmd = "{ \"command\": [\"set_property\", \"pause\", false] }\n";
size_t len = cxListSize(tracks);
int current = win->playlist.current_track;
- if(win->playlist.repeatTrack) {
- if(force) {
- current++;
+ switch(win->playlist.playback) {
+ default: {
+ current = 0;
+ break;
+ }
+ case PLAYBACK_REPEAT: {
+ if(force) {
+ current++;
+ }
+ break;
+ }
+ case PLAYBACK_REPEAT_LIST: {
+ return;
+ }
+ case PLAYBACK_RANDOM: {
+ current = random() % len;
+ break;
+ }
+ case PLAYBACK_AUTOPLAY: {
+ char *next_file = util_find_next_file(win->file);
+ cxListAdd(win->playlist.tracks, next_file);
+ current = len;
+ break;
}
- } else if(win->playlist.random) {
- current = random() % len;
- } else if(win->playlist.autoplayFolder) {
- char *next_file = util_find_next_file(win->file);
- cxListAdd(win->playlist.tracks, next_file);
- current = len;
- } else if(current+1 < len) {
- current++;
- } else if(!win->playlist.repeatList) {
- return;
- } else {
- current = 0;
}
PlayListPlayTrack(win, current);
}
void PlayListSetMode(MainWindow *win, PlaybackMode mode) {
- switch(mode) {
- default: break;
- case PLAYBACK_REPEAT: {
- win->playlist.repeatTrack = TRUE;
- win->playlist.repeatList = FALSE;
- win->playlist.random = FALSE;
- win->playlist.autoplayFolder = FALSE;
- break;
- }
- case PLAYBACK_REPEAT_LIST: {
- win->playlist.repeatTrack = TRUE;
- win->playlist.repeatList = TRUE;
- win->playlist.random = FALSE;
- win->playlist.autoplayFolder = FALSE;
- break;
- }
- case PLAYBACK_RANDOM: {
- win->playlist.repeatTrack = TRUE;
- win->playlist.repeatList = FALSE;
- win->playlist.random = TRUE;
- win->playlist.autoplayFolder = FALSE;
- break;
- }
- case PLAYBACK_AUTOPLAY: {
- win->playlist.repeatTrack = FALSE;
- win->playlist.repeatList = FALSE;
- win->playlist.random = FALSE;
- win->playlist.autoplayFolder = TRUE;
- break;
- }
- }
- XtVaSetValues(win->playRepeatTrackButton, XmNset, win->playlist.repeatTrack, NULL);
- XtVaSetValues(win->playRepeatListButton, XmNset, win->playlist.repeatList, NULL);
- XtVaSetValues(win->playAutoPlayButton, XmNset, win->playlist.random, NULL);
- XtVaSetValues(win->playRandom, XmNset, win->playlist.autoplayFolder, NULL);
+ win->playlist.playback = mode;
+ XtVaSetValues(win->playRepeatTrackButton, XmNset, mode == PLAYBACK_REPEAT, NULL);
+ XtVaSetValues(win->playRepeatListButton, XmNset, mode == PLAYBACK_REPEAT_LIST, NULL);
+ XtVaSetValues(win->playAutoPlayButton, XmNset, mode == PLAYBACK_RANDOM, NULL);
+ XtVaSetValues(win->playRandom, XmNset, mode == PLAYBACK_AUTOPLAY, NULL);
}
#ifdef __cplusplus
extern "C" {
#endif
-
-typedef enum PlaybackMode {
- PLAYBACK_STOP = 0,
- PLAYBACK_REPEAT,
- PLAYBACK_REPEAT_LIST,
- PLAYBACK_RANDOM,
- PLAYBACK_AUTOPLAY
-} PlaybackMode;
void PlayListInit(MainWindow *win);
static void PlayRepeatCB(Widget w, void *udata, void *cdata) {
MainWindow *win = udata;
- win->playlist.repeatTrack = XmToggleButtonGadgetGetState(w);
- win->playlist.repeatList = 0;
- win->playlist.autoplayFolder = 0;
- win->playlist.random = 0;
+ win->playlist.playback = XmToggleButtonGadgetGetState(w) ? PLAYBACK_REPEAT : PLAYBACK_STOP;
XtVaSetValues(win->playRepeatListButton, XmNset, 0, NULL);
XtVaSetValues(win->playAutoPlayButton, XmNset, 0, NULL);
XtVaSetValues(win->playRandom, XmNset, 0, NULL);
static void PlayRepeatListCB(Widget w, void *udata, void *cdata) {
MainWindow *win = udata;
- win->playlist.repeatList = XmToggleButtonGadgetGetState(w);
- win->playlist.repeatTrack = 0;
- win->playlist.autoplayFolder = 0;
- win->playlist.random = 0;
+ win->playlist.playback = XmToggleButtonGadgetGetState(w) ? PLAYBACK_REPEAT_LIST : PLAYBACK_STOP;
XtVaSetValues(win->playRepeatTrackButton, XmNset, 0, NULL);
XtVaSetValues(win->playAutoPlayButton, XmNset, 0, NULL);
XtVaSetValues(win->playRandom, XmNset, 0, NULL);
static void PlayAutoPlayCB(Widget w, void *udata, void *cdata) {
MainWindow *win = udata;
- win->playlist.autoplayFolder = XmToggleButtonGadgetGetState(w);
- win->playlist.repeatTrack = 0;
- win->playlist.repeatList = 0;
- win->playlist.random = 0;
+ win->playlist.playback = XmToggleButtonGadgetGetState(w) ? PLAYBACK_AUTOPLAY : PLAYBACK_STOP;
XtVaSetValues(win->playRepeatTrackButton, XmNset, 0, NULL);
XtVaSetValues(win->playRepeatListButton, XmNset, 0, NULL);
XtVaSetValues(win->playRandom, XmNset, 0, NULL);
static void PlayRandomCB(Widget w, void *udata, void *cdata) {
MainWindow *win = udata;
- win->playlist.random = XmToggleButtonGadgetGetState(w);
- win->playlist.repeatTrack = 0;
- win->playlist.repeatList = 0;
- win->playlist.autoplayFolder = 0;
+ win->playlist.playback = XmToggleButtonGadgetGetState(w) ? PLAYBACK_RANDOM : PLAYBACK_STOP;
XtVaSetValues(win->playRepeatTrackButton, XmNset, 0, NULL);
XtVaSetValues(win->playRepeatListButton, XmNset, 0, NULL);
XtVaSetValues(win->playAutoPlayButton, XmNset, 0, NULL);
#ifdef __cplusplus
extern "C" {
#endif
+
+typedef enum PlaybackMode {
+ PLAYBACK_STOP = 0,
+ PLAYBACK_REPEAT,
+ PLAYBACK_REPEAT_LIST,
+ PLAYBACK_RANDOM,
+ PLAYBACK_AUTOPLAY
+} PlaybackMode;
typedef struct Player {
char *tmp;
typedef struct {
CxList *tracks;
int current_track;
-
- Boolean repeatTrack;
- Boolean repeatList;
- Boolean autoplayFolder;
- Boolean random;
+ PlaybackMode playback;
} PlayList;
typedef struct MainWindow {