#include #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 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 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()); }*/ }