diff --git a/daemon/src/dbus/configurationmanager-introspec.xml b/daemon/src/dbus/configurationmanager-introspec.xml index a3de1b205306e61f2023c81ee2d42365d0f62485..5a891dca252843d942c46c5e729f649b6e039bc7 100644 --- a/daemon/src/dbus/configurationmanager-introspec.xml +++ b/daemon/src/dbus/configurationmanager-introspec.xml @@ -334,6 +334,15 @@ </arg> </method> + <method name="getRingtoneList" tp:name-for-bindings="getRingtoneList"> + <tp:added version="1.1.1"/> + <tp:docstring> + Get a map [Path,Filename] of available ringtone. Note, set the ringtone with the complete path + </tp:docstring> + <arg type="a{ss}" name="state" direction="out"> + </arg> + </method> + <method name="setEchoCancelState" tp:name-for-bindings="setEchoCancelState"> <arg type="s" name="state" direction="in"> </arg> diff --git a/daemon/src/dbus/configurationmanager.cpp b/daemon/src/dbus/configurationmanager.cpp index 126d3fadb82c294574b91ba6635cb135f594e9d2..dbc9753f1eaf2ae5361417ae1d1086af54ee3e0b 100644 --- a/daemon/src/dbus/configurationmanager.cpp +++ b/daemon/src/dbus/configurationmanager.cpp @@ -41,6 +41,7 @@ #include "sip/siptransport.h" #include "account.h" #include "logger.h" +#include "fileutils.h" #include "sip/sipaccount.h" namespace { @@ -283,6 +284,29 @@ std::string ConfigurationManager::getEchoCancelState() return Manager::instance().getEchoCancelState() ? "enabled" : "disabled"; } +std::map<std::string, std::string> ConfigurationManager::getRingtoneList() +{ + std::map<std::string, std::string> ringToneList; + std::string r_path = fileutils::get_data_dir(); + struct dirent **namelist; + int n = scandir(r_path.c_str(), &namelist, 0, alphasort); + while(n--) { + if (strcmp(namelist[n]->d_name,".") && strcmp(namelist[n]->d_name,"..")) { + std::string file(namelist[n]->d_name); + + if (file.find(".wav") != std::string::npos) + file.replace(file.find(".wav"),4,""); + else + file.replace(file.size()-3,3,""); + if (file[0] <= 0x7A && file[0] >= 0x61) file[0] = file[0]-32; + ringToneList[r_path+namelist[n]->d_name] = file; + } + free(namelist[n]); + } + free(namelist); + return ringToneList; +} + void ConfigurationManager::setEchoCancelState(const std::string& state) { Manager::instance().setEchoCancelState(state); diff --git a/daemon/src/dbus/configurationmanager.h b/daemon/src/dbus/configurationmanager.h index e1262836c64543dbc95e686cf00a2f6e742b4560..d99c6fd3b31ae7370ed2208bf2824e13abd9548f 100644 --- a/daemon/src/dbus/configurationmanager.h +++ b/daemon/src/dbus/configurationmanager.h @@ -95,6 +95,8 @@ class ConfigurationManager void setEchoCancelDelay(const int32_t& length); int getEchoCancelDelay(); + std::map<std::string, std::string> getRingtoneList(); + std::string getAudioManager(); void setAudioManager(const std::string& api); diff --git a/daemon/src/fileutils.cpp b/daemon/src/fileutils.cpp index ca03a4a2668a0fb9c602ec599c264e7e73be547c..35bea50e82bcbdd7fa46d36d13587d7522e3978c 100644 --- a/daemon/src/fileutils.cpp +++ b/daemon/src/fileutils.cpp @@ -69,6 +69,13 @@ const char *get_program_dir() return program_dir; } +//TODO it is faking this, implement proper system +const char *get_data_dir() +{ + std::string path = std::string(get_program_dir()) + "/../../share/sflphone/ringtones/"; + return path.c_str(); +} + bool create_pidfile() { const char * const xdg_env = XDG_CACHE_HOME; diff --git a/daemon/src/fileutils.h b/daemon/src/fileutils.h index c513daed12d902efc88f53e81fa67ad865fe7c63..ece20c45b5b420e6b72d966a5e7c35dfe7560d8e 100644 --- a/daemon/src/fileutils.h +++ b/daemon/src/fileutils.h @@ -45,6 +45,7 @@ namespace fileutils { bool check_dir(const char *path); void set_program_dir(char *program_path); const char *get_program_dir(); + const char *get_data_dir(); bool create_pidfile(); }