From 85306917a21060ab3ab85bf565e488b3587c361e Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 31 Dec 2020 11:46:54 +0100 Subject: [PATCH] media-session: try to load config from state dir first First try to load conf from the user config directory and then from the global config dir. Allows users to copy and modify a custom config file. --- src/daemon/media-session.d/alsa-monitor.conf | 1 + src/daemon/media-session.d/media-session.conf | 1 + src/examples/media-session/media-session.c | 14 +++++++++----- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/daemon/media-session.d/alsa-monitor.conf b/src/daemon/media-session.d/alsa-monitor.conf index 41fe39c82..7c84b5083 100644 --- a/src/daemon/media-session.d/alsa-monitor.conf +++ b/src/daemon/media-session.d/alsa-monitor.conf @@ -1,3 +1,4 @@ +# alsa-monitor config file { properties = { } diff --git a/src/daemon/media-session.d/media-session.conf b/src/daemon/media-session.d/media-session.conf index fe2dc9268..94ad4220d 100644 --- a/src/daemon/media-session.d/media-session.conf +++ b/src/daemon/media-session.d/media-session.conf @@ -1,3 +1,4 @@ +# media-session config file { properties = { } diff --git a/src/examples/media-session/media-session.c b/src/examples/media-session/media-session.c index 858000b3a..b4aba0670 100644 --- a/src/examples/media-session/media-session.c +++ b/src/examples/media-session/media-session.c @@ -1785,6 +1785,9 @@ int sm_media_session_load_conf(struct sm_media_session *sess, const char *name, struct stat sbuf; char *data; + if ((count = sm_media_session_load_state(sess, name, NULL, conf)) >= 0) + return count; + if ((dir = getenv("PIPEWIRE_CONFIG_DIR")) == NULL) dir = PIPEWIRE_CONFIG_DIR; if (dir == NULL) @@ -1872,18 +1875,19 @@ static int state_dir(struct sm_media_session *sess) int sm_media_session_load_state(struct sm_media_session *sess, const char *name, const char *prefix, struct pw_properties *props) { + struct impl *impl = SPA_CONTAINER_OF(sess, struct impl, this); int count, sfd, fd; struct stat sbuf; void *data; - pw_log_info(NAME" %p: loading state '%s'", sess, name); if ((sfd = state_dir(sess)) < 0) return sfd; - if ((fd = openat(sfd, name, O_CLOEXEC | O_RDONLY)) < 0) { - pw_log_debug("can't open file %s: %m", name); + if ((fd = openat(sfd, name, O_CLOEXEC | O_RDONLY)) < 0) { + pw_log_debug("can't open file %s%s: %m", impl->state_dir, name); return -errno; } + pw_log_info(NAME" %p: loading state '%s%s'", sess, impl->state_dir, name); if (fstat(fd, &sbuf) < 0) goto error_close; if ((data = mmap(NULL, sbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0)) == MAP_FAILED) @@ -2272,6 +2276,8 @@ int main(int argc, char *argv[]) pw_init(&argc, &argv); + impl.state_dir_fd = -1; + if ((impl.conf = pw_properties_new(NULL, NULL)) == NULL) return -1; sm_media_session_load_conf(&impl.this, SESSION_CONF, impl.conf); @@ -2306,8 +2312,6 @@ int main(int argc, char *argv[]) } } - impl.state_dir_fd = -1; - spa_dict_for_each(item, &impl.this.props->dict) pw_log_info(" '%s' = '%s'", item->key, item->value);