From c48bd27c4b7201c212284f30c07d70c9ad47650f Mon Sep 17 00:00:00 2001 From: "Zeeshan Ali (Khattak)" Date: Thu, 4 Mar 2010 17:01:05 +0200 Subject: [PATCH] core: Configuration from Environment Now you can tweak rygel through environment variables too. \o/ --- src/rygel/Makefile.am | 2 + src/rygel/rygel-environment-config.vala | 181 ++++++++++++++++++++++++++++++++ src/rygel/rygel-meta-config.vala | 1 + 3 files changed, 184 insertions(+) create mode 100644 src/rygel/rygel-environment-config.vala diff --git a/src/rygel/Makefile.am b/src/rygel/Makefile.am index 0dfb9b4..f2fc3cd 100644 --- a/src/rygel/Makefile.am +++ b/src/rygel/Makefile.am @@ -43,6 +43,7 @@ VAPI_SOURCE_FILES = rygel-configuration.vala \ rygel-user-config.vala \ rygel-meta-config.vala \ rygel-cmdline-config.vala \ + rygel-environment-config.vala \ rygel-content-directory.vala \ rygel-connection-manager.vala \ rygel-source-connection-manager.vala \ @@ -128,6 +129,7 @@ librygel_configuration_a_SOURCES = rygel-configuration.c \ rygel-user-config.c \ rygel-meta-config.c \ rygel-cmdline-config.c \ + rygel-environment-config.c \ cstuff.c MAINTAINERCLEANFILES = Makefile.in $(BUILT_SOURCES) diff --git a/src/rygel/rygel-environment-config.vala b/src/rygel/rygel-environment-config.vala new file mode 100644 index 0000000..80de37e --- /dev/null +++ b/src/rygel/rygel-environment-config.vala @@ -0,0 +1,181 @@ +/* + * Copyright (C) 2008-2010 Nokia Corporation. + * Copyright (C) 2008 Zeeshan Ali (Khattak) . + * + * Author: Zeeshan Ali (Khattak) + * + * + * This file is part of Rygel. + * + * Rygel 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, or + * (at your option) any later version. + * + * Rygel is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +using CStuff; +using Gee; + +/** + * Manages configuration from Environment. + */ +public class Rygel.EnvironmentConfig : GLib.Object, Configuration { + private static string RYGEL_PREFIX = "RYGEL"; + private static string TITLE_KEY = RYGEL_PREFIX + "_TITLE"; + private static string ENABLED_KEY = "ENABLED"; + private static string INTERFACE_ENV = RYGEL_PREFIX + "_IFACE"; + private static string PORT_ENV = RYGEL_PREFIX + "_PORT"; + private static string TRANSCODING_ENV = RYGEL_PREFIX + "_TRANSCODING"; + private static string MP3_TRANSCODING_ENV = RYGEL_PREFIX + "_MP3_TRANS"; + private static string LPCM_TRANSCODING_ENV = RYGEL_PREFIX + "_LPCM_TRANS"; + private static string MP2TS_TRANSCODING_ENV = RYGEL_PREFIX + "_MP2TS_TRANS"; + private static string WMV_TRANSCODING_ENV = RYGEL_PREFIX + "_WMV_TRANS"; + private static string LOG_LEVEL_ENV = RYGEL_PREFIX + "_LOG"; + + // Our singleton + private static EnvironmentConfig config; + + public static EnvironmentConfig get_default () { + if (config == null) { + config = new EnvironmentConfig (); + } + + return config; + } + + // This config doesn't make sense in this context. + public bool get_upnp_enabled () throws GLib.Error { + return true; + } + + public string get_interface () throws GLib.Error { + return this.get_string_variable (INTERFACE_ENV); + } + + public int get_port () throws GLib.Error { + return this.get_int_variable (PORT_ENV, 0, int16.MAX); + } + + public bool get_transcoding () throws GLib.Error { + return this.get_bool_variable (TRANSCODING_ENV); + } + + public bool get_mp3_transcoder () throws GLib.Error { + return this.get_bool_variable (MP3_TRANSCODING_ENV); + } + + public bool get_mp2ts_transcoder () throws GLib.Error { + return this.get_bool_variable (MP2TS_TRANSCODING_ENV); + } + + public bool get_wmv_transcoder () throws GLib.Error { + return this.get_bool_variable (WMV_TRANSCODING_ENV); + } + + public bool get_lpcm_transcoder () throws GLib.Error { + return this.get_bool_variable (LPCM_TRANSCODING_ENV); + } + + public LogLevel get_log_level () throws GLib.Error { + return (LogLevel) this.get_int_variable (LOG_LEVEL_ENV, + LogLevel.CRITICAL, + LogLevel.DEBUG); + } + + public bool get_enabled (string section) throws GLib.Error { + return get_bool (section, ENABLED_KEY); + } + + public string get_title (string section) throws GLib.Error { + return this.get_string (RYGEL_PREFIX + "_" + section, TITLE_KEY); + } + + public string get_string (string section, + string key) throws GLib.Error { + return this.get_string_variable (RYGEL_PREFIX + "_" + + section.up () + "_" + + key); + } + + public Gee.ArrayList get_string_list (string section, + string key) + throws GLib.Error { + var str = this.get_string (section, key); + var value = new ArrayList (); + foreach (var token in str.split (",", -1)) { + value.add (token); + } + + return value; + } + + public int get_int (string section, + string key, + int min, + int max) + throws GLib.Error { + return this.get_int_variable (RYGEL_PREFIX + "_" + + section.up () + "_" + key, + min, + max); + } + + public Gee.ArrayList get_int_list (string section, + string key) + throws GLib.Error { + var str = this.get_string (section, key); + var value = new ArrayList (); + foreach (var token in str.split (",", -1)) { + value.add (token.to_int ()); + } + + return value; + } + + public bool get_bool (string section, + string key) + throws GLib.Error { + return this.get_bool_variable (RYGEL_PREFIX + "_" + + section.up () + "_" + + key); + } + + private string get_string_variable (string variable) throws GLib.Error { + var str = Environment.get_variable (variable); + if (str == null) { + throw new ConfigurationError.NO_VALUE_SET ("No value available"); + } + + return str; + } + + private int get_int_variable (string variable, + int min, + int max) throws GLib.Error { + var val = Environment.get_variable (variable); + if (val == null) { + throw new ConfigurationError.NO_VALUE_SET ("No value available"); + } + + return val.to_int ().clamp (min, max); + } + + private bool get_bool_variable (string variable) throws GLib.Error { + var enabled = Environment.get_variable (variable); + if (enabled == null) { + throw new ConfigurationError.NO_VALUE_SET ("No value available"); + } + + return enabled.to_bool (); + } +} + diff --git a/src/rygel/rygel-meta-config.vala b/src/rygel/rygel-meta-config.vala index ebaaf3c..748c303 100644 --- a/src/rygel/rygel-meta-config.vala +++ b/src/rygel/rygel-meta-config.vala @@ -50,6 +50,7 @@ public class Rygel.MetaConfig : GLib.Object, Configuration { this.configs = new ArrayList (); this.configs.add (CmdlineConfig.get_default ()); + this.configs.add (EnvironmentConfig.get_default ()); try { var user_config = UserConfig.get_default (); this.configs.add (user_config); -- 2.7.4