123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- #include <QtGui>
- #include "prefaccounts.h"
- #include "accountdialog.h"
- PrefAccounts::PrefAccounts(Ui::PrefDialog *ui) :
- _ui(ui)
- {
- _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)
- {
- _accDlg = new AccountDialog();
- connect(_accDlg, SIGNAL(gwAdded(QString)), this, SLOT(readConfig()));
- }
- else
- {
- /* Needs to be set to empty because we are not editing */
- _accDlg->setName(QString());
- _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];
- /* Get the selected item */
- QString gwName = _ui->accountsTable->item(range.topRow(),0)->text();
- if (!_accDlg)
- {
- /* TODO: We need a way to read this sucker... Might as well just already pass the profile name */
- _accDlg = new AccountDialog();
- connect(_accDlg, SIGNAL(gwAdded(QString)), this, SLOT(readConfig()));
- }
- /* TODO: Should pass the profile name someday */
- _accDlg->setName(gwName);
- _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);
- ISettings settings(this);
- QDomElement cfg = settings.getConfigNode("sofia.conf");
- QDomNodeList gws = cfg.elementsByTagName("gateway");
- for (int i = 0; i < gws.count(); i++) {
- QDomElement gw = gws.at(i).toElement();
- if ( gw.attributeNode("name").value() == item->text()) {
- cfg.elementsByTagName("gateways").at(0).removeChild(gw);
- break;
- }
- }
- settings.setConfigNode(cfg, "sofia.conf");
- /* Mark the account to be deleted */
- _toDelete.append(item->text());
- _ui->accountsTable->removeRow(row-offset);
- offset++;
- }
- }
- if (offset)
- readConfig();
- }
- void PrefAccounts::writeConfig()
- {
- return;
- }
- void PrefAccounts::postWriteConfig() {
- 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");
- }
- foreach (QString gw, _toDelete) {
- if (g_FSHost->sendCmd("sofia", QString("profile softphone killgw %1").arg(gw).toAscii().constData(), &res) != SWITCH_STATUS_SUCCESS)
- {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not remove gateway from profile [%s].\n", gw.toAscii().constData());
- }
- }
- }
- void PrefAccounts::readConfig()
- {
- _ui->accountsTable->clearContents();
- _ui->accountsTable->setRowCount(0);
- ISettings settings(this);
- QDomElement cfg = settings.getConfigNode("sofia.conf");
- if ( cfg.elementsByTagName("gateways").count() == 0 ) {
- QDomElement profile = cfg.elementsByTagName("profile").at(0).toElement();
- QDomDocument d = profile.toDocument();
- QDomElement gws = d.createElement("gateways");
- profile.insertBefore(gws, QDomNode()); /* To make it look nicer */
- settings.setConfigNode(cfg, "sofia.conf");
- return;
- }
- QDomNodeList l = cfg.elementsByTagName("gateway");
- for (int i = 0; i < l.count(); i++) {
- QDomElement gw = l.at(i).toElement();
- QTableWidgetItem *item0 = new QTableWidgetItem(gw.attribute("name"));
- QTableWidgetItem *item1 = NULL;
- /* Iterate until we find what we need */
- QDomNodeList params = gw.elementsByTagName("param");
- for(int j = 0; i < params.count(); j++) {
- QDomElement e = params.at(j).toElement();
- QString var = e.attributeNode("name").value();
- if (var == "username" ) {
- item1 = new QTableWidgetItem(e.attributeNode("value").value());
- break; /* We found, so stop looping */
- }
- }
- _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);
- /*
- TODO: We have to figure out what to do with the default account stuff!
- 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());
- }*/
- }
|