diff --git a/fscomm/mod_qsettings/mod_qsettings.cpp b/fscomm/mod_qsettings/mod_qsettings.cpp index 84d577f2b8..73d22df62f 100644 --- a/fscomm/mod_qsettings/mod_qsettings.cpp +++ b/fscomm/mod_qsettings/mod_qsettings.cpp @@ -91,7 +91,7 @@ void XMLBinding::parseGroup(QXmlStreamWriter *streamWriter, QString group) return; } - if (group == "params") + if (group == "params" || group == "customParams") { _settings->beginGroup(group); foreach(QString param, _settings->childKeys()) diff --git a/fscomm/preferences/accountdialog.cpp b/fscomm/preferences/accountdialog.cpp index 3acb284d7e..ab05393093 100644 --- a/fscomm/preferences/accountdialog.cpp +++ b/fscomm/preferences/accountdialog.cpp @@ -4,7 +4,7 @@ #include "ui_accountdialog.h" #include "fshost.h" -AccountDialog::AccountDialog(int accId, QWidget *parent) : +AccountDialog::AccountDialog(QString accId, QWidget *parent) : QDialog(parent), _accId(accId), ui(new Ui::AccountDialog) @@ -61,7 +61,7 @@ void AccountDialog::writeConfig() { _settings->beginGroup("FreeSWITCH/conf/sofia.conf/profiles/profile/gateways"); - _settings->beginGroup(QString::number(_accId)); + _settings->beginGroup(_accId); _settings->beginGroup("gateway/attrs"); _settings->setValue("name", ui->sofiaGwNameEdit->text()); @@ -77,6 +77,9 @@ void AccountDialog::writeConfig() _settings->setValue("register", ui->sofiaGwRegisterCombo->currentText()); _settings->setValue("register-transport", ui->sofiaGwRegisterTransportCombo->currentText()); _settings->setValue("retry-seconds", ui->sofiaGwRetrySecondsSpin->value()); + _settings->endGroup(); + + _settings->beginGroup("gateway/customParams"); for (int i = 0; i< ui->sofiaExtraParamTable->rowCount(); i++) { _settings->setValue(ui->sofiaExtraParamTable->item(i, 0)->text(), @@ -97,6 +100,27 @@ void AccountDialog::writeConfig() emit gwAdded(); } +void AccountDialog::clear() +{ + ui->sofiaExtraParamTable->clearContents(); + ui->sofiaExtraParamTable->setRowCount(0); + + ui->sofiaGwNameEdit->clear(); + ui->sofiaGwUsernameEdit->clear(); + ui->sofiaGwRealmEdit->clear(); + ui->sofiaGwPasswordEdit->clear(); + ui->sofiaGwExtensionEdit->clear(); + ui->sofiaGwExpireSecondsSpin->setValue(60); + ui->sofiaGwRegisterCombo->setCurrentIndex(0); + ui->sofiaGwRegisterTransportCombo->setCurrentIndex(0); + ui->sofiaGwRetrySecondsSpin->setValue(30); +} + +void AccountDialog::setAccId(QString accId) +{ + _accId = accId; +} + void AccountDialog::changeEvent(QEvent *e) { QDialog::changeEvent(e); diff --git a/fscomm/preferences/accountdialog.h b/fscomm/preferences/accountdialog.h index 21ca7cffe0..413f0c0a99 100644 --- a/fscomm/preferences/accountdialog.h +++ b/fscomm/preferences/accountdialog.h @@ -12,8 +12,10 @@ class QSettings; class AccountDialog : public QDialog { Q_OBJECT public: - AccountDialog(int accId, QWidget *parent = 0); + AccountDialog(QString accId, QWidget *parent = 0); ~AccountDialog(); + void clear(); + void setAccId(QString); signals: void gwAdded(); @@ -27,7 +29,7 @@ protected: void changeEvent(QEvent *e); private: - int _accId; + QString _accId; Ui::AccountDialog *ui; QSettings *_settings; }; diff --git a/fscomm/preferences/accountdialog.ui b/fscomm/preferences/accountdialog.ui index bf29856d94..1db7978308 100644 --- a/fscomm/preferences/accountdialog.ui +++ b/fscomm/preferences/accountdialog.ui @@ -20,7 +20,7 @@ - 1 + 0 diff --git a/fscomm/preferences/prefaccounts.cpp b/fscomm/preferences/prefaccounts.cpp index 0f7da804ff..f14f8b51eb 100644 --- a/fscomm/preferences/prefaccounts.cpp +++ b/fscomm/preferences/prefaccounts.cpp @@ -1,6 +1,7 @@ #include #include "prefaccounts.h" #include "accountdialog.h" +#include "fshost.h" PrefAccounts::PrefAccounts(Ui::PrefDialog *ui) : _ui(ui) @@ -8,21 +9,70 @@ PrefAccounts::PrefAccounts(Ui::PrefDialog *ui) : _settings = new QSettings(); _accDlg = NULL; connect(_ui->sofiaGwAddBtn, SIGNAL(clicked()), this, SLOT(addAccountBtnClicked())); + connect(_ui->sofiaGwRemBtn, SIGNAL(clicked()), this, SLOT(remAccountBtnClicked())); } void PrefAccounts::addAccountBtnClicked() { if (!_accDlg) { - _accDlg = new AccountDialog(_ui->accountsTable->rowCount()); + QString uuid; + if (g_FSHost.sendCmd("create_uuid", "", &uuid) != SWITCH_STATUS_SUCCESS) + { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not create UUID for account. Reason: %s\n", uuid.toAscii().constData()); + return; + } + _accDlg = new AccountDialog(uuid); connect(_accDlg, SIGNAL(gwAdded()), this, SLOT(readConfig())); } + else + { + QString uuid; + if (g_FSHost.sendCmd("create_uuid", "", &uuid) != SWITCH_STATUS_SUCCESS) + { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not create UUID for account. Reason: %s\n", uuid.toAscii().constData()); + return; + } + _accDlg->setAccId(uuid); + _accDlg->clear(); + } _accDlg->show(); _accDlg->raise(); _accDlg->activateWindow(); } +void PrefAccounts::remAccountBtnClicked() +{ + QList sel = _ui->accountsTable->selectedRanges(); + int offset =0; + + foreach(QTableWidgetSelectionRange range, sel) + { + for(int row = range.topRow(); row<=range.bottomRow(); row++) + { + QTableWidgetItem *item = _ui->accountsTable->item(row-offset,0); + + _settings->beginGroup("FreeSWITCH/conf/sofia.conf/profiles/profile/gateways"); + _settings->remove(item->data(Qt::UserRole).toString()); + _settings->endGroup(); + _ui->accountsTable->removeRow(row-offset); + offset++; + } + } + + if (offset > 0) + { + QString res; + if (g_FSHost.sendCmd("sofia", "profile softphone rescan", &res) != SWITCH_STATUS_SUCCESS) + { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not rescan the softphone profile.\n"); + return; + } + readConfig(); + } +} + void PrefAccounts::writeConfig() { return; @@ -41,9 +91,11 @@ void PrefAccounts::readConfig() _settings->beginGroup(accId); _settings->beginGroup("gateway/attrs"); QTableWidgetItem *item0 = new QTableWidgetItem(_settings->value("name").toString()); + item0->setData(Qt::UserRole, accId); _settings->endGroup(); _settings->beginGroup("gateway/params"); QTableWidgetItem *item1 = new QTableWidgetItem(_settings->value("username").toString()); + item1->setData(Qt::UserRole, accId); _settings->endGroup(); _settings->endGroup(); _ui->accountsTable->setRowCount(_ui->accountsTable->rowCount()+1); diff --git a/fscomm/preferences/prefaccounts.h b/fscomm/preferences/prefaccounts.h index 2fbd6aa4ef..08ec5c18da 100644 --- a/fscomm/preferences/prefaccounts.h +++ b/fscomm/preferences/prefaccounts.h @@ -18,6 +18,8 @@ public slots: private slots: void addAccountBtnClicked(); + void editAccountBtnClicked(); + void remAccountBtnClicked(); private: Ui::PrefDialog *_ui; diff --git a/fscomm/preferences/prefdialog.ui b/fscomm/preferences/prefdialog.ui index e3aec50a93..1ed428f5ef 100644 --- a/fscomm/preferences/prefdialog.ui +++ b/fscomm/preferences/prefdialog.ui @@ -96,7 +96,7 @@ - 1 + 0 @@ -168,6 +168,9 @@ + + false + Edit