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