aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c50
1 files changed, 33 insertions, 17 deletions
diff --git a/src/main.c b/src/main.c
index 580f4bf8b..a33650ae0 100644
--- a/src/main.c
+++ b/src/main.c
@@ -180,9 +180,34 @@ static void killFromPidFile(void)
#endif
}
+static gboolean
+timer_save_state_file(G_GNUC_UNUSED gpointer data)
+{
+ g_debug("Saving state file");
+ write_state_file();
+ return true;
+}
+
+void
+main_notify_triggered(void)
+{
+ unsigned flags;
+
+ syncPlayerAndPlaylist();
+ client_manager_expire();
+ reap_update_task();
+
+ /* send "idle" notificaions to all subscribed
+ clients */
+ flags = idle_get();
+ if (flags != 0)
+ client_manager_idle_add(flags);
+}
+
int main(int argc, char *argv[])
{
Options options;
+ GMainLoop *main_loop;
clock_t start;
GTimer *save_state_timer;
@@ -216,6 +241,8 @@ int main(int argc, char *argv[])
changeToUser();
+ main_loop = g_main_loop_new(NULL, FALSE);
+
path_global_init();
mapper_init();
initPermissions();
@@ -258,26 +285,15 @@ int main(int argc, char *argv[])
save_state_timer = g_timer_new();
- while (COMMAND_RETURN_KILL != client_manager_io() &&
- COMMAND_RETURN_KILL != handlePendingSignals()) {
- unsigned flags;
+ g_timeout_add(5 * 60 * 1000, timer_save_state_file, NULL);
- syncPlayerAndPlaylist();
- client_manager_expire();
- reap_update_task();
+ /* run the main loop */
- /* send "idle" notificaions to all subscribed
- clients */
- flags = idle_get();
- if (flags != 0)
- client_manager_idle_add(flags);
+ g_main_loop_run(main_loop);
- if (g_timer_elapsed(save_state_timer, NULL) >= 5 * 60) {
- g_debug("Saving state file");
- write_state_file();
- g_timer_start(save_state_timer);
- }
- }
+ /* cleanup */
+
+ g_main_loop_unref(main_loop);
g_timer_destroy(save_state_timer);