#include <pthread.h>
#include "json.h"
+#include "utils.h"
#include "settings.h"
extern char **environ;
Player *player = data;
int status = 0;
waitpid(player->process, &status, 0);
+
+ printf("waitpid: %d\n", status);
player->isactive = FALSE;
player->status = status;
// create player arg list
char *args[32];
- args[0] = player_bin;
- args[1] = "-wid";
- args[2] = wid_arg;
- args[3] = "--no-terminal";
- args[4] = log_arg;
- args[5] = ipc_arg;
- args[6] = win->file;
- args[7] = NULL;
+ int ac = 0;
+ args[ac++] = player_bin;
+ args[ac++] = "-wid";
+ args[ac++] = wid_arg;
+ //args[ac++] = "--no-terminal";
+ args[ac++] = "--player-operation-mode=pseudo-gui";
+ args[ac++] = log_arg;
+ args[ac++] = ipc_arg;
+ args[ac++] = win->file;
+ args[ac++] = NULL;
posix_spawn_file_actions_t actions;
posix_spawn_file_actions_init(&actions);
return 0;
}
-static int connect_to_ipc(Player *player) {
+static int connect_to_ipc(Player *player) {
// connect to IPC socket
int fd_ipc = socket(AF_UNIX, SOCK_STREAM, 0);
if(fd_ipc < 0) {
PlayerDestroy(player);
return NULL;
}
- close(player->log);
+ //close(player->log);
if(connect_to_ipc(player)) {
PlayerDestroy(player);
fds[0].fd = p->ipc;
fds[0].events = POLLIN;
fds[0].revents = 0;
+ fds[1].fd = p->log;
+ fds[1].events = POLLIN;
+ fds[1].revents = 0;
JSONParser *js = json_parser_new();
-
+
char buf[PLAYER_IN_BUFSIZE];
while(p->isactive && poll(fds, 2, PLAYER_POLL_TIMEOUT)) {
if(fds[0].revents == POLLIN) {
break;
}
}
+ if(fds[1].revents == POLLIN) {
+ // just read to clean the log pipe
+ read(fds[1].fd, buf, PLAYER_IN_BUFSIZE);
+ }
- char *cmd = "{ \"command\": [\"get_property\", \"playback-time\"], request_id=\"" REQ_ID_PLAYBACK_TIME "\" }\n";
+ //char *cmd = "{ \"command\": [\"get_property\", \"playback-time\"], request_id=\"" REQ_ID_PLAYBACK_TIME "\" }\n";
//write(p->ipc, cmd, strlen(cmd));
}
}
}
+static Boolean open_next_file(XtPointer data) {
+ char *file = data;
+ MainWindow *win = GetMainWindow();
+ if(win->file) {
+ free(file);
+ }
+ win->file = file;
+ PlayerOpenFile(win);
+ return 0;
+}
+
void PlayerEOF(Player *p) {
- char *cmd = "{ \"command\": [\"set_property\", \"playback-time\", 0] }\n";
- write(p->ipc, cmd, strlen(cmd));
+ MainWindow *win = GetMainWindow();
+ if(win->repeatTrack) {
+ char *cmd = "{ \"command\": [\"set_property\", \"playback-time\", 0] }\n";
+ write(p->ipc, cmd, strlen(cmd));
+ } else if(win->autoplayFolder) {
+ char *next_file = util_find_next_file(win->file);
+ if(next_file) {
+ AppExecProc(open_next_file, next_file);
+ }
+ }
}
void PlayerHandleInput(MainWindow *win, Player *p, XmDrawingAreaCallbackStruct *cb) {