[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [sflphone-kde] src: [ #50453 ] Add JACK support
From:       Emmanuel Lepage Vallee <emmanuel.lepage () savoirfairelinux ! com>
Date:       2014-06-30 19:42:37
Message-ID: E1X1hTJ-0003Uy-Jh () scm ! kde ! org
[Download RAW message or body]

Git commit 3e9db57b0adf35300571457d8ad4a6465c8e9437 by Emmanuel Lepage Vallee.
Committed on 30/06/2014 at 15:39.
Pushed by lepagevalleeemmanuel into branch 'master'.

[ #50453 ] Add JACK support

M  +21   -11   src/conf/dlgaudio.cpp
M  +0    -1    src/conf/dlggeneral.cpp
M  +73   -9    src/lib/audiosettingsmodel.cpp
M  +29   -16   src/lib/audiosettingsmodel.h
M  +2    -0    src/lib/dbus/configurationmanager-introspec.xml
M  +0    -1    src/sflphone.cpp
M  +0    -2    src/sflphoneview.cpp

http://commits.kde.org/sflphone-kde/3e9db57b0adf35300571457d8ad4a6465c8e9437

diff --git a/src/conf/dlgaudio.cpp b/src/conf/dlgaudio.cpp
index acf7963..4baadc2 100644
--- a/src/conf/dlgaudio.cpp
+++ b/src/conf/dlgaudio.cpp
@@ -26,7 +26,6 @@
 #include <KLineEdit>
 
 //SFLPhone
-#include "lib/dbus/configurationmanager.h"
 #include "klib/kcfg_settings.h"
 #include "conf/configurationdialog.h"
 #include "lib/sflphone_const.h"
@@ -38,11 +37,10 @@ DlgAudio::DlgAudio(KConfigDialog *parent)
 {
    setupUi(this);
 
-   ConfigurationManagerInterface& configurationManager = \
                DBus::ConfigurationManager::instance();
-   m_pAlwaysRecordCK->setChecked(configurationManager.getIsAlwaysRecording());
+   m_pAlwaysRecordCK->setChecked(AudioSettingsModel::instance()->isAlwaysRecording());
  
    KUrlRequester_destinationFolder->setMode(KFile::Directory|KFile::ExistingOnly|KFile::LocalOnly);
                
-   KUrlRequester_destinationFolder->setUrl(KUrl(configurationManager.getRecordPath()));
 +   KUrlRequester_destinationFolder->setUrl(KUrl(AudioSettingsModel::instance()->recordPath()));
  KUrlRequester_destinationFolder->lineEdit()->setReadOnly(true);
 
    m_pSuppressNoise->setChecked(AudioSettingsModel::instance()->isNoiseSuppressEnabled());
 @@ -55,7 +53,7 @@ DlgAudio::DlgAudio(KConfigDialog *parent)
    box_alsaPlugin->setModel    (AudioSettingsModel::instance()->alsaPluginModel  () \
);  loadAlsaSettings();
 
-   m_pManager->setCurrentIndex \
(AudioSettingsModel::instance()->audioManagerModel()->currentManager().row()); +   \
m_pManager->setCurrentIndex \
(AudioSettingsModel::instance()->audioManagerModel()->currentManagerIndex().row());  
    connect( box_alsaPlugin   , SIGNAL(activated(int)) , parent, \
SLOT(updateButtons()));  connect( this             , SIGNAL(updateButtons()), parent, \
SLOT(updateButtons())); @@ -71,6 +69,8 @@ DlgAudio::DlgAudio(KConfigDialog *parent)
    connect( KUrlRequester_destinationFolder , SIGNAL(textChanged(QString))     , \
SLOT(changed()));  connect( m_pManager                      , \
                SIGNAL(currentIndexChanged(int)) , 
             AudioSettingsModel::instance()->audioManagerModel(),SLOT(setCurrentManager(int)));
 +   connect(AudioSettingsModel::instance()->audioManagerModel(),SIGNAL(currentManagerChanged(int)),m_pManager,
 +           SLOT(setCurrentIndex(int)));
    connect( m_pManager                      , SIGNAL(currentIndexChanged(int)) , \
SLOT(loadAlsaSettings()));  }
 
@@ -91,11 +91,8 @@ void DlgAudio::updateSettings()
    if (m_Changed) {
       m_IsLoading = true;
 
-      ConfigurationManagerInterface& configurationManager = \
                DBus::ConfigurationManager::instance();
-      configurationManager.setRecordPath(KUrlRequester_destinationFolder->lineEdit()->text());
                
-//       configurationManager.setAudioPlugin(box_alsaPlugin->currentText());
-
-      configurationManager.setIsAlwaysRecording   ( m_pAlwaysRecordCK->isChecked()   \
); +      AudioSettingsModel::instance()->setRecordPath(KUrlRequester_destinationFolder->lineEdit()->text());
 +      AudioSettingsModel::instance()->setAlwaysRecording(m_pAlwaysRecordCK->isChecked());
  
       AudioSettingsModel::instance()->inputDeviceModel   \
                ()->setCurrentDevice(alsaInputDevice->currentIndex   ());
       AudioSettingsModel::instance()->outputDeviceModel  \
()->setCurrentDevice(alsaOutputDevice->currentIndex  ()); @@ -118,7 +115,20 @@ bool \
DlgAudio::hasChanged()  ///Tag the dialog as needing saving
 void DlgAudio::changed()
 {
-   box_alsaPlugin->setDisabled(m_pManager->currentIndex());
+   switch (AudioSettingsModel::instance()->audioManagerModel()->currentManager()) {
+      case AudioManagerModel::Manager::PULSE:
+         box_alsaPlugin->setDisabled(true);
+         stackedWidget_interfaceSpecificSettings->setVisible(true);
+         break;
+      case AudioManagerModel::Manager::ALSA:
+         box_alsaPlugin->setDisabled(false);
+         stackedWidget_interfaceSpecificSettings->setVisible(true);
+         break;
+      case AudioManagerModel::Manager::JACK:
+         box_alsaPlugin->setDisabled(true);
+         stackedWidget_interfaceSpecificSettings->setVisible(false);
+         break;
+   };
    if (!m_IsLoading) {
       m_Changed = true;
       emit updateButtons();
diff --git a/src/conf/dlggeneral.cpp b/src/conf/dlggeneral.cpp
index f3cba00..c9f8623 100644
--- a/src/conf/dlggeneral.cpp
+++ b/src/conf/dlggeneral.cpp
@@ -30,7 +30,6 @@
 //SFLPhone
 #include "klib/kcfg_settings.h"
 #include "conf/configurationdialog.h"
-#include "lib/dbus/configurationmanager.h"
 #include "lib/historymodel.h"
 
 ///Constructor
diff --git a/src/lib/audiosettingsmodel.cpp b/src/lib/audiosettingsmodel.cpp
index 17d2a1a..dda2733 100644
--- a/src/lib/audiosettingsmodel.cpp
+++ b/src/lib/audiosettingsmodel.cpp
@@ -168,6 +168,34 @@ bool AudioSettingsModel::isCaptureMuted() const
    return DBus::ConfigurationManager::instance().isCaptureMuted();
 }
 
+///Set where the call recordings will be saved
+void AudioSettingsModel::setRecordPath(const QUrl& path)
+{
+   ConfigurationManagerInterface& configurationManager = \
DBus::ConfigurationManager::instance(); +   \
configurationManager.setRecordPath(path.toString()); +}
+
+///Return the path where recordings are going to be saved
+QUrl AudioSettingsModel::recordPath() const
+{
+   ConfigurationManagerInterface& configurationManager = \
DBus::ConfigurationManager::instance(); +   return \
QUrl(configurationManager.getRecordPath()); +}
+
+///are all calls recorded by default
+bool AudioSettingsModel::isAlwaysRecording() const
+{
+   ConfigurationManagerInterface& configurationManager = \
DBus::ConfigurationManager::instance(); +   return \
configurationManager.getIsAlwaysRecording(); +}
+
+///Set if all calls needs to be recorded
+void AudioSettingsModel::setAlwaysRecording(bool record)
+{
+   ConfigurationManagerInterface& configurationManager = \
DBus::ConfigurationManager::instance(); +   configurationManager.setIsAlwaysRecording \
( record ); +}
+
 int AudioSettingsModel::playbackVolume() const
 {
    ConfigurationManagerInterface& configurationManager = \
DBus::ConfigurationManager::instance(); @@ -500,7 +528,24 @@ void \
OutputDeviceModel::reload()  ///Constructor
 AudioManagerModel::AudioManagerModel(QObject* parent) : QAbstractListModel(parent)
 {
-   m_lDeviceList << "ALSA" << "Pulse Audio";
+   ConfigurationManagerInterface& configurationManager = \
DBus::ConfigurationManager::instance(); +   const QStringList managers = \
configurationManager.getSupportedAudioManagers(); +   foreach(const QString& \
m,managers) { +      if (m == ManagerName::PULSEAUDIO) {
+         m_lSupportedManagers << Manager::PULSE;
+         m_lDeviceList << "Pulse Audio";
+      }
+      else if (m == ManagerName::ALSA) {
+         m_lSupportedManagers << Manager::ALSA;
+         m_lDeviceList<< "ALSA";
+      }
+      else if (m == ManagerName::JACK) {
+         m_lSupportedManagers << Manager::JACK;
+         m_lDeviceList<< "Jack";
+      }
+      else
+         qDebug() << "Unsupported audio manager" << m;
+   }
 }
 
 ///Destructor
@@ -549,7 +594,7 @@ bool AudioManagerModel::setData( const QModelIndex& index, const \
                QVariant &value
  * Return the current audio manager
  * @warning Changes to the current index model will invalid Input/Output/Ringtone \
                devices models
  */
-QModelIndex AudioManagerModel::currentManager() const
+QModelIndex AudioManagerModel::currentManagerIndex() const
 {
    ConfigurationManagerInterface& configurationManager = \
DBus::ConfigurationManager::instance();  const QString manager = \
configurationManager.getAudioManager(); @@ -557,32 +602,51 @@ QModelIndex \
AudioManagerModel::currentManager() const  return index((int)Manager::PULSE,0);
       else if (manager == ManagerName::ALSA)
          return index((int)Manager::ALSA,0);
+      else if (manager == ManagerName::JACK)
+         return index((int)Manager::JACK,0);
       return QModelIndex();
 }
 
+AudioManagerModel::Manager AudioManagerModel::currentManager() const
+{
+   return m_lSupportedManagers[currentManagerIndex().row()];
+}
+
 ///Set current audio manager
-void AudioManagerModel::setCurrentManager(const QModelIndex& idx)
+bool AudioManagerModel::setCurrentManager(const QModelIndex& idx)
 {
    if (!idx.isValid())
-      return;
+      return false;
 
+   bool ret = true;
    ConfigurationManagerInterface& configurationManager = \
                DBus::ConfigurationManager::instance();
-   switch (static_cast<Manager>(idx.row())) {
+   switch (m_lSupportedManagers[idx.row()]) {
       case Manager::PULSE:
-         configurationManager.setAudioManager(ManagerName::PULSEAUDIO);
+         ret = configurationManager.setAudioManager(ManagerName::PULSEAUDIO);
          AudioSettingsModel::instance()->reload();
          break;
       case Manager::ALSA:
-         configurationManager.setAudioManager(ManagerName::ALSA);
+         ret = configurationManager.setAudioManager(ManagerName::ALSA);
+         AudioSettingsModel::instance()->reload();
+         break;
+      case Manager::JACK:
+         ret = configurationManager.setAudioManager(ManagerName::JACK);
          AudioSettingsModel::instance()->reload();
          break;
    };
+   if (!ret) {
+      const QModelIndex& newIdx = currentManagerIndex();
+      emit currentManagerChanged(currentManager());
+      emit currentManagerChanged(newIdx);
+      emit currentManagerChanged(newIdx.row());
+   }
+   return ret;
 }
 
 ///QCombobox -> QModelIndex shim
-void AudioManagerModel::setCurrentManager(int idx)
+bool AudioManagerModel::setCurrentManager(int idx)
 {
-   setCurrentManager(index(idx,0));
+   return setCurrentManager(index(idx,0));
 }
 
 /****************************************************************
diff --git a/src/lib/audiosettingsmodel.h b/src/lib/audiosettingsmodel.h
index 91d3b71..72db9da 100644
--- a/src/lib/audiosettingsmodel.h
+++ b/src/lib/audiosettingsmodel.h
@@ -54,15 +54,19 @@ public:
    RingtoneDeviceModel* ringtoneDeviceModel();
    bool                 isRoomToneEnabled  ();
    bool                 isNoiseSuppressEnabled () const;
-   bool                 isPlaybackMuted() const;
-   bool                 isCaptureMuted () const;
-   bool                 areDTMFMuted   () const;
-   int                  playbackVolume () const;
-   int                  captureVolume  () const;
+   bool                 isPlaybackMuted  () const;
+   bool                 isCaptureMuted   () const;
+   bool                 isAlwaysRecording() const;
+   bool                 areDTMFMuted     () const;
+   int                  playbackVolume   () const;
+   int                  captureVolume    () const;
+   QUrl                 recordPath       () const;
 
    //Setters
-   void setEnableRoomTone    ( bool enable  );
-   void setNoiseSuppressState( bool enabled );
+   void setEnableRoomTone    ( bool        enable  );
+   void setNoiseSuppressState( bool        enabled );
+   void setRecordPath        ( const QUrl& path    );
+   void setAlwaysRecording   ( bool        record  );
 
    //Room tone type
    enum class ToneType {
@@ -195,6 +199,12 @@ private:
 class LIB_EXPORT AudioManagerModel   : public QAbstractListModel {
    Q_OBJECT
 public:
+
+   enum class Manager {
+      ALSA =0,
+      PULSE=1,
+      JACK =2,
+   };
    explicit AudioManagerModel(QObject* parent);
    virtual ~AudioManagerModel();
 
@@ -205,27 +215,30 @@ public:
    virtual bool          setData ( const QModelIndex& index, const QVariant &value, \
int role);  
    //Getters
-   QModelIndex currentManager() const;
+   QModelIndex currentManagerIndex() const;
+   Manager     currentManager() const;
 
    //Setters
-   void setCurrentManager(const QModelIndex& index);
+   bool setCurrentManager(const QModelIndex& index);
 
 public Q_SLOTS:
-   void setCurrentManager(int idx);
+   bool setCurrentManager(int idx);
 
+Q_SIGNALS:
+   void currentManagerChanged(Manager);
+   void currentManagerChanged(int);
+   void currentManagerChanged(const QModelIndex&);
 
 private:
-   QStringList m_lDeviceList;
    class ManagerName {
    public:
       constexpr static const char* PULSEAUDIO = "pulseaudio";
-      constexpr static const char* ALSA       = "alsa";
+      constexpr static const char* ALSA       = "alsa"      ;
+      constexpr static const char* JACK       = "jack"      ;
    };
 
-   enum class Manager {
-      ALSA =0,
-      PULSE=1,
-   };
+   QStringList m_lDeviceList;
+   QList<Manager> m_lSupportedManagers;
 };
 
 class LIB_EXPORT RingtoneDeviceModel: public QAbstractListModel {
diff --git a/src/lib/dbus/configurationmanager-introspec.xml \
b/src/lib/dbus/configurationmanager-introspec.xml index 9fdfed6..de46752 100644
--- a/src/lib/dbus/configurationmanager-introspec.xml
+++ b/src/lib/dbus/configurationmanager-introspec.xml
@@ -313,6 +313,8 @@
        <method name="setAudioManager" tp:name-for-bindings="setAudioManager">
            <arg type="s" name="api" direction="in">
            </arg>
+           <arg type="b" name="success" direction="out">
+           </arg>
        </method>
 
        <method name="getSupportedAudioManagers" \
                tp:name-for-bindings="getSupportedAudioManagers">
diff --git a/src/sflphone.cpp b/src/sflphone.cpp
index eb1d597..d423997 100644
--- a/src/sflphone.cpp
+++ b/src/sflphone.cpp
@@ -48,7 +48,6 @@
 //sflphone library
 #include "lib/sflphone_const.h"
 #include "lib/dbus/instancemanager.h"
-#include "lib/dbus/configurationmanager.h"
 #include "lib/contact.h"
 #include "lib/accountlistmodel.h"
 #include "lib/instantmessagingmodel.h"
diff --git a/src/sflphoneview.cpp b/src/sflphoneview.cpp
index fa4ae01..9233a5c 100644
--- a/src/sflphoneview.cpp
+++ b/src/sflphoneview.cpp
@@ -64,8 +64,6 @@
 //sflphone library
 #include "klib/kcfg_settings.h"
 #include "lib/phonenumber.h"
-#include "lib/typedefs.h"
-#include "lib/dbus/configurationmanager.h"
 #include "lib/dbus/callmanager.h"
 #include "lib/dbus/instancemanager.h"
 #include "lib/sflphone_const.h"


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic