]> code.delx.au - pulseaudio/blobdiff - src/modules/module-default-device-restore.c
bluetooth: Use a helper function for setting device_info_valid
[pulseaudio] / src / modules / module-default-device-restore.c
index 2168ac71298254194df11fd0138aef436137c1b2..fb18750f7c7039de6710e58c313fd88c752f9535 100644 (file)
@@ -5,7 +5,7 @@
 
   PulseAudio is free software; you can redistribute it and/or modify
   it under the terms of the GNU Lesser General Public License as published
 
   PulseAudio is free software; you can redistribute it and/or modify
   it under the terms of the GNU Lesser General Public License as published
-  by the Free Software Foundation; either version 2 of the License,
+  by the Free Software Foundation; either version 2.1 of the License,
   or (at your option) any later version.
 
   PulseAudio is distributed in the hope that it will be useful, but
   or (at your option) any later version.
 
   PulseAudio is distributed in the hope that it will be useful, but
@@ -26,7 +26,9 @@
 #include <errno.h>
 #include <stdio.h>
 
 #include <errno.h>
 #include <stdio.h>
 
+#include <pulse/rtclock.h>
 #include <pulse/timeval.h>
 #include <pulse/timeval.h>
+#include <pulse/xmalloc.h>
 
 #include <pulsecore/core-util.h>
 #include <pulsecore/module.h>
 
 #include <pulsecore/core-util.h>
 #include <pulsecore/module.h>
 PA_MODULE_AUTHOR("Lennart Poettering");
 PA_MODULE_DESCRIPTION("Automatically restore the default sink and source");
 PA_MODULE_VERSION(PACKAGE_VERSION);
 PA_MODULE_AUTHOR("Lennart Poettering");
 PA_MODULE_DESCRIPTION("Automatically restore the default sink and source");
 PA_MODULE_VERSION(PACKAGE_VERSION);
-PA_MODULE_LOAD_ONCE(TRUE);
+PA_MODULE_LOAD_ONCE(true);
 
 
-#define DEFAULT_SINK_FILE "default-sink"
-#define DEFAULT_SOURCE_FILE "default-source"
-#define DEFAULT_SAVE_INTERVAL 5
+#define SAVE_INTERVAL (5 * PA_USEC_PER_SEC)
 
 struct userdata {
     pa_core *core;
     pa_subscription *subscription;
     pa_time_event *time_event;
     char *sink_filename, *source_filename;
 
 struct userdata {
     pa_core *core;
     pa_subscription *subscription;
     pa_time_event *time_event;
     char *sink_filename, *source_filename;
-    pa_bool_t modified;
+    bool modified;
 };
 
 static void load(struct userdata *u) {
 };
 
 static void load(struct userdata *u) {
@@ -58,42 +58,44 @@ static void load(struct userdata *u) {
 
     /* We never overwrite manually configured settings */
 
 
     /* We never overwrite manually configured settings */
 
-    if (u->core->default_sink_name)
+    if (u->core->default_sink)
         pa_log_info("Manually configured default sink, not overwriting.");
         pa_log_info("Manually configured default sink, not overwriting.");
-    else if ((f = fopen(u->sink_filename, "r"))) {
+    else if ((f = pa_fopen_cloexec(u->sink_filename, "r"))) {
         char ln[256] = "";
         char ln[256] = "";
+        pa_sink *s;
 
 
-        fgets(ln, sizeof(ln)-1, f);
-        pa_strip_nl(ln);
+        if (fgets(ln, sizeof(ln)-1, f))
+            pa_strip_nl(ln);
         fclose(f);
 
         if (!ln[0])
             pa_log_info("No previous default sink setting, ignoring.");
         fclose(f);
 
         if (!ln[0])
             pa_log_info("No previous default sink setting, ignoring.");
-        else if (pa_namereg_get(u->core, ln, PA_NAMEREG_SINK, TRUE)) {
-            pa_namereg_set_default(u->core, ln, PA_NAMEREG_SINK);
+        else if ((s = pa_namereg_get(u->core, ln, PA_NAMEREG_SINK))) {
+            pa_namereg_set_default_sink(u->core, s);
             pa_log_info("Restored default sink '%s'.", ln);
         } else
             pa_log_info("Restored default sink '%s'.", ln);
         } else
-            pa_log_info("Saved default sink '%s' not existant, not restoring default sink setting.", ln);
+            pa_log_info("Saved default sink '%s' not existent, not restoring default sink setting.", ln);
 
     } else if (errno != ENOENT)
         pa_log("Failed to load default sink: %s", pa_cstrerror(errno));
 
 
     } else if (errno != ENOENT)
         pa_log("Failed to load default sink: %s", pa_cstrerror(errno));
 
-    if (u->core->default_source_name)
+    if (u->core->default_source)
         pa_log_info("Manually configured default source, not overwriting.");
         pa_log_info("Manually configured default source, not overwriting.");
-    else if ((f = fopen(u->source_filename, "r"))) {
+    else if ((f = pa_fopen_cloexec(u->source_filename, "r"))) {
         char ln[256] = "";
         char ln[256] = "";
+        pa_source *s;
 
 
-        fgets(ln, sizeof(ln)-1, f);
-        pa_strip_nl(ln);
+        if (fgets(ln, sizeof(ln)-1, f))
+            pa_strip_nl(ln);
         fclose(f);
 
         if (!ln[0])
             pa_log_info("No previous default source setting, ignoring.");
         fclose(f);
 
         if (!ln[0])
             pa_log_info("No previous default source setting, ignoring.");
-        else if (pa_namereg_get(u->core, ln, PA_NAMEREG_SOURCE, TRUE)) {
-            pa_namereg_set_default(u->core, ln, PA_NAMEREG_SOURCE);
+        else if ((s = pa_namereg_get(u->core, ln, PA_NAMEREG_SOURCE))) {
+            pa_namereg_set_default_source(u->core, s);
             pa_log_info("Restored default source '%s'.", ln);
         } else
             pa_log_info("Restored default source '%s'.", ln);
         } else
-            pa_log_info("Saved default source '%s' not existant, not restoring default source setting.", ln);
+            pa_log_info("Saved default source '%s' not existent, not restoring default source setting.", ln);
 
     } else if (errno != ENOENT)
             pa_log("Failed to load default sink: %s", pa_cstrerror(errno));
 
     } else if (errno != ENOENT)
             pa_log("Failed to load default sink: %s", pa_cstrerror(errno));
@@ -106,27 +108,27 @@ static void save(struct userdata *u) {
         return;
 
     if (u->sink_filename) {
         return;
 
     if (u->sink_filename) {
-        if ((f = fopen(u->sink_filename, "w"))) {
-            const char *n = pa_namereg_get_default_sink_name(u->core);
-            fprintf(f, "%s\n", pa_strempty(n));
+        if ((f = pa_fopen_cloexec(u->sink_filename, "w"))) {
+            pa_sink *s = pa_namereg_get_default_sink(u->core);
+            fprintf(f, "%s\n", s ? s->name : "");
             fclose(f);
         } else
             pa_log("Failed to save default sink: %s", pa_cstrerror(errno));
     }
 
     if (u->source_filename) {
             fclose(f);
         } else
             pa_log("Failed to save default sink: %s", pa_cstrerror(errno));
     }
 
     if (u->source_filename) {
-        if ((f = fopen(u->source_filename, "w"))) {
-            const char *n = pa_namereg_get_default_source_name(u->core);
-            fprintf(f, "%s\n", pa_strempty(n));
+        if ((f = pa_fopen_cloexec(u->source_filename, "w"))) {
+            pa_source *s = pa_namereg_get_default_source(u->core);
+            fprintf(f, "%s\n", s ? s->name : "");
             fclose(f);
         } else
             pa_log("Failed to save default source: %s", pa_cstrerror(errno));
     }
 
             fclose(f);
         } else
             pa_log("Failed to save default source: %s", pa_cstrerror(errno));
     }
 
-    u->modified = FALSE;
+    u->modified = false;
 }
 
 }
 
-static void time_cb(pa_mainloop_api *a, pa_time_event *e, const struct timeval *tv, void *userdata) {
+static void time_cb(pa_mainloop_api *a, pa_time_event *e, const struct timeval *t, void *userdata) {
     struct userdata *u = userdata;
 
     pa_assert(u);
     struct userdata *u = userdata;
 
     pa_assert(u);
@@ -143,14 +145,10 @@ static void subscribe_cb(pa_core *c, pa_subscription_event_type_t t, uint32_t id
 
     pa_assert(u);
 
 
     pa_assert(u);
 
-    u->modified = TRUE;
+    u->modified = true;
 
 
-    if (!u->time_event) {
-        struct timeval tv;
-        pa_gettimeofday(&tv);
-        pa_timeval_add(&tv, DEFAULT_SAVE_INTERVAL*PA_USEC_PER_SEC);
-        u->time_event = u->core->mainloop->time_new(u->core->mainloop, &tv, time_cb, u);
-    }
+    if (!u->time_event)
+        u->time_event = pa_core_rttime_new(u->core, pa_rtclock_now() + SAVE_INTERVAL, time_cb, u);
 }
 
 int pa__init(pa_module *m) {
 }
 
 int pa__init(pa_module *m) {
@@ -158,13 +156,13 @@ int pa__init(pa_module *m) {
 
     pa_assert(m);
 
 
     pa_assert(m);
 
-    u = pa_xnew0(struct userdata, 1);
+    m->userdata = u = pa_xnew0(struct userdata, 1);
     u->core = m->core;
 
     u->core = m->core;
 
-    if (!(u->sink_filename = pa_state_path(DEFAULT_SINK_FILE)))
+    if (!(u->sink_filename = pa_state_path("default-sink", true)))
         goto fail;
 
         goto fail;
 
-    if (!(u->source_filename = pa_state_path(DEFAULT_SOURCE_FILE)))
+    if (!(u->source_filename = pa_state_path("default-source", true)))
         goto fail;
 
     load(u);
         goto fail;
 
     load(u);