From 8d72f9a433aa38ef44d976a75625ead929872793 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Tue, 26 May 2020 14:49:16 +0200
Subject: [PATCH] Take into account events (bug solve ?)

---
 inc/common/queue.h       |  8 ++++++--
 src/main/server.c        |  1 +
 src/module/module_sdl2.c |  8 +++-----
 src/queue.c              | 18 ++++++++++++------
 4 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/inc/common/queue.h b/inc/common/queue.h
index 11820a63..0779f98e 100644
--- a/inc/common/queue.h
+++ b/inc/common/queue.h
@@ -28,8 +28,12 @@ enum lkt_event_type {
     lkt_event_skip_current  = (1 << 9), // NULL
 };
 
-#define lkt_event_play (lkt_event_play_pos | lkt_event_play_file |  \
-                        lkt_event_play_next | lkt_event_play_prev   \
+#define lkt_event_play ( lkt_event_play_pos | lkt_event_play_file |     \
+                         lkt_event_play_next | lkt_event_play_prev |    \
+                         lkt_event_play_toggle | lkt_event_skip_current \
+                       )
+#define lkt_event_prop ( lkt_event_prop_vol | lkt_event_prop_dur |      \
+                         lkt_event_prop_time                            \
                        )
 
 typedef struct {
diff --git a/src/main/server.c b/src/main/server.c
index 3527e199..33c81c64 100644
--- a/src/main/server.c
+++ b/src/main/server.c
@@ -121,6 +121,7 @@ normal_launch:
     if (!env_get(LKT_ENV_RESTART) && autoclear)
         database_queue_clear(srv.db);
 
+    lkt_queue_make_available(&srv.queue, lkt_event_prop);
     RETURN_IF(load_module_by_name(&srv, "player", &srv.win),  "Can't load module player", 3);
     RETURN_IF(load_module_by_name(&srv, "repo",   &srv.repo), "Can't load module repo", 3);
 
diff --git a/src/module/module_sdl2.c b/src/module/module_sdl2.c
index 0f97929d..4faaf765 100644
--- a/src/module/module_sdl2.c
+++ b/src/module/module_sdl2.c
@@ -166,7 +166,8 @@ loop:
 
     case SDL_WINDOWEVENT:
         if (event.window.event == SDL_WINDOWEVENT_EXPOSED) {
-            lkt_set_event_available(win->srv, lkt_event_play);
+            lkt_queue_make_available(&win->srv->queue, lkt_event_play);
+            lkt_queue_make_available(&win->srv->queue, lkt_event_prop);
             redraw = 1;
         }
         break;
@@ -206,10 +207,7 @@ loop:
             lkt_queue_send(sdl2->queue, lkt_event_play_next, NULL);
         else if (STR_MATCH(event.text.text, "<"))
             lkt_queue_send(sdl2->queue, lkt_event_play_prev, NULL);
-        else if (STR_MATCH(event.text.text, "o")) {
-            const char *cmd[] = { "show-progress", NULL };
-            mpv_command_async((mpv_handle *) sdl2->mpv, 0, cmd);
-        } else if (STR_MATCH(event.text.text, "i")) {
+        else if (STR_MATCH(event.text.text, "i")) {
             /*
             struct kara_metadata mdt;
             int id;
diff --git a/src/queue.c b/src/queue.c
index c872e1f4..af034c55 100644
--- a/src/queue.c
+++ b/src/queue.c
@@ -44,8 +44,7 @@ void
 lkt_queue_send(struct queue *queue, enum lkt_event_type _type, void *_attr)
 {
     pthread_mutex_lock(&queue->lock);
-    if (!queue)
-        goto end;
+    GOTO_UNLESS(queue, "Invalid argument", end)
 
     volatile lkt_event *new;
     if (queue->size == queue->last) {
@@ -63,6 +62,9 @@ lkt_queue_send(struct queue *queue, enum lkt_event_type _type, void *_attr)
         .attr = _attr,
     };
     queue->contents[(queue->last)++] = evt;
+
+    if (! (_type & queue->available))
+        LOG_WARN("QUEUE", "The event %d is not available, push it anyway", _type);
 end:
     pthread_mutex_unlock(&queue->lock);
 }
@@ -72,13 +74,17 @@ lkt_queue_handle(struct queue *queue)
 {
     pthread_mutex_lock(&queue->lock);
     lkt_event ret = {0};
-
-    if (!queue || !queue->last ||
-        !(queue->contents[0].type & queue->available))
+    if (!queue || !queue->last)
         goto end;
+    if (! (queue->contents[0].type & queue->available) &&
+        queue->contents[0].type) {
+        LOG_WARN("QUEUE", "Event %d is not available", queue->contents[0].type);
+        goto end;
+    }
 
     ret = queue->contents[0];
-    memmove((void *) queue->contents, (void *) (queue->contents + 1), --(queue->last));
+    memmove((void *) queue->contents, (void *) (queue->contents + 1),
+            --(queue->last));
 end:
     pthread_mutex_unlock(&queue->lock);
     return ret;
-- 
GitLab