From a17b46aaed7ad824486880ebb22d1282f06fb5a9 Mon Sep 17 00:00:00 2001 From: Emmanuel Lepage <emmanuel.lepage@savoirfairelinux.com> Date: Tue, 5 Jun 2012 17:11:01 -0400 Subject: [PATCH] [ #12008 ] Add ConfigurationManager::getRingtoneList() --- .../dbus/configurationmanager-introspec.xml | 9 +++++++ daemon/src/dbus/configurationmanager.cpp | 24 +++++++++++++++++++ daemon/src/dbus/configurationmanager.h | 2 ++ daemon/src/fileutils.cpp | 7 ++++++ daemon/src/fileutils.h | 1 + 5 files changed, 43 insertions(+) diff --git a/daemon/src/dbus/configurationmanager-introspec.xml b/daemon/src/dbus/configurationmanager-introspec.xml index a3de1b2053..5a891dca25 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 126d3fadb8..dbc9753f1e 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 e1262836c6..d99c6fd3b3 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 ca03a4a266..35bea50e82 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 c513daed12..ece20c45b5 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(); } -- GitLab