diff --git a/inc/common/queue.h b/inc/common/queue.h index 11820a63adc8fa42375ce60b54d7a210e95c0a84..0779f98eaa4db683325b41fe3ed635ca5e59e81e 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 3527e199813af4434de05c104ebb17b06f29b8e7..33c81c6464c3eee60d9edc1db8fbf818a209ebfe 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 0f97929dee0bc6018bf30e5a08a0a5688a0cfaed..4faaf76596f45a0c7b588530bec46fc7f7551df4 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 c872e1f43f88ef9e4e22b3ca97e58f37b616cd5e..af034c55401f8657836668db37c4a8f1700ce6f5 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;