summaryrefslogtreecommitdiff
path: root/setup.c
diff options
context:
space:
mode:
Diffstat (limited to 'setup.c')
-rw-r--r--setup.c135
1 files changed, 135 insertions, 0 deletions
diff --git a/setup.c b/setup.c
new file mode 100644
index 0000000..c69dbc4
--- /dev/null
+++ b/setup.c
@@ -0,0 +1,135 @@
+/*
+ * sndctl - a plugin for the Video Disk Recorder
+ * file: setup.c
+ * description: management of setup configuration
+ *
+ * author: Thomas Hildebrandt <toxym@web.de>
+ *
+ * inspired by and reengineered from 'avolctl'
+ * thanks to Martin Prochnow <nordlichtl@martins-kabuff.de>
+ */
+
+#include "defaults.h"
+#include "setup.h"
+#include "soundset.h"
+
+/*********************************************************
+ * member functions for class cSetupSndctl
+ *********************************************************/
+
+/*
+ * constructor
+ */
+cSetupSndctl::cSetupSndctl(){
+ dsyslog( "sndctl (cSetupSndctl::cSetupSndctl): cSetupSndctl created" );
+
+ // create all possible setup items with default values
+ items[SNDCTL_SETUP_MENUNAME] = tr( SNDCTL_DEFAULT_MENUNAME );
+ items[SNDCTL_SETUP_HIDEMAINMENUENTRY] = SNDCTL_DEFAULT_HIDEMAINMENUENTRY;
+ items[SNDCTL_SETUP_DEFAULT_SSET] = SNDCTL_DEFAULT_DEFAULT_SSET;
+ items[SNDCTL_SETUP_INIT_VOLUME] = SNDCTL_DEFAULT_INIT_VOLUME;
+ items[SNDCTL_SETUP_DD_AUTO_SWITCH] = SNDCTL_DEFAULT_DD_AUTO_SWITCH;
+ items[SNDCTL_SETUP_DD_AUTO_SSET] = SNDCTL_DEFAULT_DD_AUTO_SSET;
+ items[SNDCTL_SETUP_SOUNDFLASH] = SNDCTL_DEFAULT_SOUNDFLASH;
+ items[SNDCTL_SETUP_SOUNDFLASH_DELTA] = SNDCTL_DEFAULT_SOUNDFLASH_DELTA;
+ items[SNDCTL_SETUP_SOUNDFLASH_VOL] = SNDCTL_DEFAULT_SOUNDFLASH_VOL;
+ items[SNDCTL_SETUP_SOUNDFLASH_TIME] = SNDCTL_DEFAULT_SOUNDFLASH_TIME;
+ items[SNDCTL_SETUP_MUTE_ON_END] = SNDCTL_DEFAULT_MUTE_ON_END;
+}
+
+/*
+ * returns a setup value
+ */
+string cSetupSndctl::Get( string Name ){
+ if( items.find( Name ) != items.end())
+ return items[Name];
+
+ // default return value is NULL
+ return NULL;
+}
+
+/*
+ * returns a setup value as bool
+ */
+bool cSetupSndctl::GetBool( string Name ){
+ return ( Get( Name ) == "yes" ) ? true : false;
+}
+
+/*
+ * returns a setup value as integer
+ */
+int cSetupSndctl::GetInt( string Name ){
+ return atoi( Get( Name ).c_str());
+}
+
+/*
+ * set a setup value
+ */
+bool cSetupSndctl::Set( string Name, string Value, cSoundMan *Soundman ){
+ bool result;
+ cSoundSet *sset;
+ unsigned int div;
+
+ dsyslog( "sndctl (cSetupSndctl::Set): Receiving parameter '%s' with value '%s'.", Name.c_str(), Value.c_str() );
+
+ // save this parameter
+ parameters.push_back( Name );
+
+ // lets assume the worst case ;-)
+ result = false;
+
+ // first check for a general option
+ if( result = (items.find( Name ) != items.end())){
+ // save this item
+ items[Name] = Value;
+
+ // take special care for SNDCTL_DEFAULT_DD_AUTO_SSET
+ if( Name == SNDCTL_SETUP_DEFAULT_SSET &&
+ items[SNDCTL_SETUP_DD_AUTO_SSET].empty())
+ items[SNDCTL_SETUP_DD_AUTO_SSET] = Value;
+ }
+
+ // assuming this value belongs to a soundset
+ // we need a '_' in 'Name' to deal with this
+ else if(( div = Name.find_first_of( '_' )) != string::npos ){
+ // get sound set for this ID (it's up to the first '_')
+ sset = Soundman->GetSoundSet( Name.substr( 0, div ));
+
+ // set value
+ result = sset->Set( Name.substr( div + 1 ), Value );
+ }
+
+ // nothing of all, that's bad
+ return result;
+}
+
+/*
+ * store all setup values
+ */
+bool cSetupSndctl::Store( cPluginSndctl *Plugin ){
+ vector<string>::iterator it;
+
+ // first, remove all parameters
+ for( it = parameters.begin(); it != parameters.end(); it++ ){
+ dsyslog( "sndctl (cSetupSndctl::Store): Removing: %s", (*it).c_str());
+ Plugin->Store( *it, string() );
+ }
+
+ // store all general settings
+ Plugin->Store( string( SNDCTL_SETUP_MENUNAME ), Get( SNDCTL_SETUP_MENUNAME ));
+ Plugin->Store( string( SNDCTL_SETUP_HIDEMAINMENUENTRY ), Get( SNDCTL_SETUP_HIDEMAINMENUENTRY ));
+ Plugin->Store( string( SNDCTL_SETUP_DEFAULT_SSET ), Get( SNDCTL_SETUP_DEFAULT_SSET ));
+ Plugin->Store( string( SNDCTL_SETUP_INIT_VOLUME ), Get( SNDCTL_SETUP_INIT_VOLUME ));
+ Plugin->Store( string( SNDCTL_SETUP_DD_AUTO_SWITCH ), Get( SNDCTL_SETUP_DD_AUTO_SWITCH ));
+ Plugin->Store( string( SNDCTL_SETUP_DD_AUTO_SSET ), Get( SNDCTL_SETUP_DD_AUTO_SSET ));
+ Plugin->Store( string( SNDCTL_SETUP_SOUNDFLASH ), Get( SNDCTL_SETUP_SOUNDFLASH ));
+ Plugin->Store( string( SNDCTL_SETUP_SOUNDFLASH_DELTA ), Get( SNDCTL_SETUP_SOUNDFLASH_DELTA ));
+ Plugin->Store( string( SNDCTL_SETUP_SOUNDFLASH_VOL ), Get( SNDCTL_SETUP_SOUNDFLASH_VOL ));
+ Plugin->Store( string( SNDCTL_SETUP_SOUNDFLASH_TIME ), Get( SNDCTL_SETUP_SOUNDFLASH_TIME ));
+ Plugin->Store( string( SNDCTL_SETUP_MUTE_ON_END ), Get( SNDCTL_SETUP_MUTE_ON_END ));
+
+ // store all settings from all soundsets
+ Plugin->GetSoundManager()->Store( Plugin );
+
+ return true;
+}