implement basic autoplay
[uwplayer.git] / application / player.c
index 6cdba87..37c1b98 100644 (file)
@@ -39,6 +39,7 @@
 #include <pthread.h>
 
 #include "json.h"
+#include "utils.h"
 #include "settings.h"
 
 extern char **environ;
@@ -419,6 +420,23 @@ static Boolean get_player_window(XtPointer data) {
     return 0;
 }
 
+#define CURSOR_AUTOHIDE_THRESHOLD_SEC  4
+
+static Boolean hide_cursor(XtPointer data) {
+    MainWindow *win = data;
+    WindowHidePlayerCursor(win);
+    return 0;
+}
+
+static void check_hide_cursor(Player *p) {
+    MainWindow *win = GetMainWindow();
+    if(win->cursorhidden) return;
+    
+    if(p->playback_time - win->motion_playback_time > CURSOR_AUTOHIDE_THRESHOLD_SEC) {
+        AppExecProc(hide_cursor, win);
+    }
+}
+
 static void handle_json_rpc_event(Player *p, JSONValue *v, JSONValue *event) {
     if(!json_strcmp(event, "property-change")) {
         JSONValue *name = json_obj_get(&v->value.object, "name");
@@ -427,6 +445,7 @@ static void handle_json_rpc_event(Player *p, JSONValue *v, JSONValue *event) {
             if(data && data->type == JSON_NUMBER) {
                 p->playback_time = data->value.number.value;
                 //printf("playback-time: %f\n", p->playback_time);
+                check_hide_cursor(p);
             }
         } else if(!json_strcmp(name, "eof-reached")) {
             if(data && data->type == JSON_LITERAL && data->value.literal.literal == JSON_TRUE) {
@@ -542,9 +561,28 @@ static void json_print(JSONValue *value, char *name, int indent) {
     }
 }
 
+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) {