forked from Mirrors/freeswitch
035e603634
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16478 d0543943-73ff-0310-b7d9-9358b9ac24b2
169 lines
5.7 KiB
C++
169 lines
5.7 KiB
C++
#include <QtGui>
|
|
#include "prefaccounts.h"
|
|
#include "accountdialog.h"
|
|
#include "fshost.h"
|
|
|
|
PrefAccounts::PrefAccounts(Ui::PrefDialog *ui) :
|
|
_ui(ui)
|
|
{
|
|
_settings = new QSettings();
|
|
_accDlg = NULL;
|
|
connect(_ui->sofiaGwAddBtn, SIGNAL(clicked()), this, SLOT(addAccountBtnClicked()));
|
|
connect(_ui->sofiaGwRemBtn, SIGNAL(clicked()), this, SLOT(remAccountBtnClicked()));
|
|
connect(_ui->sofiaGwEditBtn, SIGNAL(clicked()), this, SLOT(editAccountBtnClicked()));
|
|
|
|
_ui->accountsTable->horizontalHeader()->setStretchLastSection(true);
|
|
}
|
|
|
|
void PrefAccounts::addAccountBtnClicked()
|
|
{
|
|
if (!_accDlg)
|
|
{
|
|
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(QString)), 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::editAccountBtnClicked()
|
|
{
|
|
QList<QTableWidgetSelectionRange> selList = _ui->accountsTable->selectedRanges();
|
|
|
|
if (selList.isEmpty())
|
|
return;
|
|
QTableWidgetSelectionRange range = selList[0];
|
|
|
|
QString uuid = _ui->accountsTable->item(range.topRow(),0)->data(Qt::UserRole).toString();
|
|
|
|
if (!_accDlg)
|
|
{
|
|
_accDlg = new AccountDialog(uuid);
|
|
connect(_accDlg, SIGNAL(gwAdded(QString)), this, SLOT(readConfig()));
|
|
}
|
|
else
|
|
{
|
|
_accDlg->setAccId(uuid);
|
|
}
|
|
|
|
_accDlg->readConfig();
|
|
|
|
_accDlg->show();
|
|
_accDlg->raise();
|
|
_accDlg->activateWindow();
|
|
}
|
|
|
|
void PrefAccounts::remAccountBtnClicked()
|
|
{
|
|
QList<QTableWidgetSelectionRange> 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();
|
|
/* Fire event to remove account */
|
|
switch_event_t *event;
|
|
if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, FSCOMM_EVENT_ACC_REMOVED) == SWITCH_STATUS_SUCCESS) {
|
|
QSharedPointer<Account> acc = g_FSHost.getAccountByUUID(item->data(Qt::UserRole).toString());
|
|
if (!acc.isNull())
|
|
{
|
|
QString res;
|
|
QString arg = QString("profile softphone killgw %1").arg(acc.data()->getName());
|
|
|
|
if (g_FSHost.sendCmd("sofia", arg.toAscii().data() , &res) != SWITCH_STATUS_SUCCESS)
|
|
{
|
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not killgw %s from profile softphone.\n",
|
|
acc.data()->getName().toAscii().data());
|
|
}
|
|
}
|
|
}
|
|
_ui->accountsTable->removeRow(row-offset);
|
|
offset++;
|
|
}
|
|
}
|
|
|
|
if (offset > 0)
|
|
readConfig(false);
|
|
}
|
|
|
|
void PrefAccounts::writeConfig()
|
|
{
|
|
return;
|
|
}
|
|
|
|
void PrefAccounts::readConfig(bool reload)
|
|
{
|
|
|
|
_ui->accountsTable->clearContents();
|
|
_ui->accountsTable->setRowCount(0);
|
|
|
|
_settings->beginGroup("FreeSWITCH/conf/sofia.conf/profiles/profile/gateways");
|
|
|
|
foreach(QString accId, _settings->childGroups())
|
|
{
|
|
_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);
|
|
_ui->accountsTable->setItem(_ui->accountsTable->rowCount()-1, 0, item0);
|
|
_ui->accountsTable->setItem(_ui->accountsTable->rowCount()-1, 1, item1);
|
|
}
|
|
_ui->accountsTable->resizeRowsToContents();
|
|
_ui->accountsTable->resizeColumnsToContents();
|
|
_ui->accountsTable->horizontalHeader()->setStretchLastSection(true);
|
|
|
|
_settings->endGroup();
|
|
|
|
if (reload)
|
|
{
|
|
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;
|
|
}
|
|
}
|
|
|
|
if (_ui->accountsTable->rowCount() == 1)
|
|
{
|
|
QString default_gateway = _settings->value(QString("/FreeSWITCH/conf/sofia.conf/profiles/profile/gateways/%1/gateway/attrs/name").arg(_ui->accountsTable->item(0,0)->data(Qt::UserRole).toString())).toString();
|
|
_settings->beginGroup("FreeSWITCH/conf/globals");
|
|
_settings->setValue("default_gateway", default_gateway);
|
|
_settings->endGroup();
|
|
switch_core_set_variable("default_gateway", default_gateway.toAscii().data());
|
|
}
|
|
|
|
}
|