From 89ecd2c89e8b40ad458cdb30c4089ae70cad6701 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Wed, 13 May 2020 16:47:13 +0200
Subject: [PATCH] Restart detection

---
 src/main/server.c | 6 +++++-
 src/net/listen.c  | 9 +++++++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/main/server.c b/src/main/server.c
index e13c0d1c..1e611eb0 100644
--- a/src/main/server.c
+++ b/src/main/server.c
@@ -7,6 +7,7 @@
 #include <lektor/reg.h>
 #include <lektor/database.h>
 #include <mthread/mthread.h>
+#include <lektor/commands.h>
 
 #include <assert.h>
 #include <signal.h>
@@ -67,6 +68,8 @@ main(int argc, char *argv[])
 normal_launch:
     LOG_INFO_SCT("GENERAL", "Lektor launched by user %s (shell: %s, home: %s)",
                  pw->pw_name, pw->pw_shell, pw->pw_dir);
+    if (env_get(LKT_ENV_RESTART))
+        LOG_INFO_SCT("GENERAL", "%s", "Lektord has been restarted");
     reg_set(server_reg);
     mthread_init();
     pthread_create(&th, NULL, mthread_main, NULL);
@@ -114,11 +117,12 @@ normal_launch:
     srv.kara_prefix = kara_dir;
 
     database_config_queue_default(srv.db);
-    if (autoclear)
+    if (!env_get(LKT_ENV_RESTART) && autoclear)
         database_queue_clear(srv.db);
 
     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);
+
     lkt_listen(&srv);
     return EXIT_FAILURE;
 }
diff --git a/src/net/listen.c b/src/net/listen.c
index 37d1cbe3..21c74840 100644
--- a/src/net/listen.c
+++ b/src/net/listen.c
@@ -727,6 +727,15 @@ lkt_listen(struct lkt_state *srv)
     srv->fds[0].events = POLLIN;
     srv->fds_len = 1;
 
+    /* Get ENV */
+    /* Not working -> race condition with player module */
+    // char *env_current = env_get(LKT_ENV_CURRENT);
+    // if (env_current && !STR_MATCH(env_current, "NULL")) {
+    //     LOG_INFO_SCT("INIT", "Restart playback from %s", env_current);
+    //     command_play(srv->db, &srv->win, &env_current, &srv->mpd_idle_events);
+    // }
+
+    /* Listen */
     for (;;) {
         if (handle_network_events(srv) < 0)
             break;
-- 
GitLab