You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
5.8 KiB
193 lines
5.8 KiB
/* *************************************************************************
|
|
* copyright: (C) 2003 Richard Lärkäng <nouseforaname@home.se> *
|
|
* copyright: (C) 2003 Gav Wood <gav@kde.org> *
|
|
*************************************************************************
|
|
*/
|
|
|
|
/* *************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
*************************************************************************
|
|
*/
|
|
|
|
#include <tqcombobox.h>
|
|
#include <tqlayout.h>
|
|
|
|
#include <klocale.h>
|
|
#include <kurlrequester.h>
|
|
#include <kmessagebox.h>
|
|
#include <kprocess.h>
|
|
#include <kdebug.h>
|
|
#include <kconfigbase.h>
|
|
|
|
#include "kopeteaccount.h"
|
|
#include "kopeteuiglobal.h"
|
|
|
|
#include "smsclient.h"
|
|
#include "smsclientprefs.h"
|
|
#include "smsprotocol.h"
|
|
|
|
SMSClient::SMSClient(Kopete::Account* account)
|
|
: SMSService(account)
|
|
{
|
|
prefWidget = 0L;
|
|
}
|
|
|
|
SMSClient::~SMSClient()
|
|
{
|
|
}
|
|
|
|
void SMSClient::setWidgetContainer(TQWidget* parent, TQGridLayout* layout)
|
|
{
|
|
kdWarning( 14160 ) << k_funcinfo << "ml: " << layout << ", " << "mp: " << parent << endl;
|
|
m_parent = parent;
|
|
m_layout = layout;
|
|
TQWidget *configWidget = configureWidget(parent);
|
|
layout->addMultiCellWidget(configWidget, 0, 1, 0, 1);
|
|
configWidget->show();
|
|
}
|
|
|
|
void SMSClient::send(const Kopete::Message& msg)
|
|
{
|
|
kdWarning( 14160 ) << k_funcinfo << "m_account = " << m_account << " (should be non-zero!!)" << endl;
|
|
if (!m_account) return;
|
|
|
|
m_msg = msg;
|
|
|
|
KConfigGroup* c = m_account->configGroup();
|
|
TQString provider = c->readEntry(TQString("%1:%2").arg("SMSClient").arg("ProviderName"), TQString());
|
|
|
|
if (provider.isNull())
|
|
{
|
|
KMessageBox::error(Kopete::UI::Global::mainWidget(), i18n("No provider configured"), i18n("Could Not Send Message"));
|
|
return;
|
|
}
|
|
|
|
TQString programName = c->readEntry(TQString("%1:%2").arg("SMSClient").arg("ProgramName"). TQString());
|
|
if (programName.isNull())
|
|
programName = "/usr/bin/sms_client";
|
|
|
|
KProcess* p = new KProcess;
|
|
|
|
TQString message = msg.plainBody();
|
|
TQString nr = msg.to().first()->contactId();
|
|
|
|
*p << programName;
|
|
*p << provider + ":" + nr;
|
|
*p << message;
|
|
|
|
TQObject::connect(p, TQT_SIGNAL(processExited(KProcess *)), this, TQT_SLOT(slotSendFinished(KProcess*)));
|
|
TQObject::connect(p, TQT_SIGNAL(receivedStdout(KProcess*, char*, int)), this, TQT_SLOT(slotReceivedOutput(KProcess*, char*, int)));
|
|
TQObject::connect(p, TQT_SIGNAL(receivedStderr(KProcess*, char*, int)), this, TQT_SLOT(slotReceivedOutput(KProcess*, char*, int)));
|
|
|
|
p->start(KProcess::Block, KProcess::AllOutput);
|
|
}
|
|
|
|
TQWidget* SMSClient::configureWidget(TQWidget* parent)
|
|
{
|
|
kdWarning( 14160 ) << k_funcinfo << "m_account = " << m_account << " (should be ok if zero!!)" << endl;
|
|
|
|
if (prefWidget == 0L)
|
|
prefWidget = new SMSClientPrefsUI(parent);
|
|
|
|
prefWidget->configDir->setMode(KFile::Directory);
|
|
TQString configDir;
|
|
if (m_account)
|
|
configDir = m_account->configGroup()->readEntry(TQString("%1:%2").arg("SMSClient").arg("ConfigDir"), TQString());
|
|
if (configDir.isNull())
|
|
configDir = "/etc/sms";
|
|
prefWidget->configDir->setURL(configDir);
|
|
|
|
TQString programName;
|
|
if (m_account)
|
|
programName = m_account->configGroup()->readEntry(TQString("%1:%2").arg("SMSClient").arg("ProgramName"),
|
|
TQString());
|
|
if (programName.isNull())
|
|
programName = "/usr/bin/sms_client";
|
|
prefWidget->program->setURL(programName);
|
|
|
|
prefWidget->provider->insertStringList(providers());
|
|
|
|
if (m_account)
|
|
{
|
|
TQString pName = m_account->configGroup()->readEntry(TQString("%1:%2").arg("SMSClient").arg("ProviderName"));
|
|
for (int i=0; i < prefWidget->provider->count(); i++)
|
|
{
|
|
if (prefWidget->provider->text(i) == pName)
|
|
{
|
|
prefWidget->provider->setCurrentItem(i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return prefWidget;
|
|
}
|
|
|
|
void SMSClient::savePreferences()
|
|
{
|
|
kdWarning( 14160 ) << k_funcinfo << "m_account = " << m_account << " (should be work if zero!!)" << endl;
|
|
|
|
if (prefWidget != 0L && m_account != 0L)
|
|
{
|
|
KConfigGroup* c = m_account->configGroup();
|
|
|
|
c->writeEntry(TQString("%1:%2").arg("SMSClient").arg("ProgramName"), prefWidget->program->url());
|
|
c->writeEntry(TQString("%1:%2").arg("SMSClient").arg("ConfigDir"), prefWidget->configDir->url());
|
|
c->writeEntry(TQString("%1:%2").arg("SMSClient").arg("ProviderName"), prefWidget->provider->currentText());
|
|
}
|
|
}
|
|
|
|
TQStringList SMSClient::providers()
|
|
{
|
|
TQStringList p;
|
|
|
|
TQDir d;
|
|
d.setPath(TQString("%1/services/").arg(prefWidget->configDir->url()));
|
|
p += d.entryList("*", TQDir::Files);
|
|
|
|
return p;
|
|
}
|
|
|
|
void SMSClient::slotReceivedOutput(KProcess*, char *buffer, int buflen)
|
|
{
|
|
TQStringList lines = TQStringList::split("\n", TQString::fromLocal8Bit(buffer, buflen));
|
|
for (TQStringList::Iterator it = lines.begin(); it != lines.end(); ++it)
|
|
output.append(*it);
|
|
}
|
|
|
|
void SMSClient::slotSendFinished(KProcess* p)
|
|
{
|
|
if (p->exitStatus() == 0)
|
|
emit messageSent(m_msg);
|
|
else
|
|
emit messageNotSent(m_msg, output.join("\n"));
|
|
}
|
|
|
|
int SMSClient::maxSize()
|
|
{
|
|
return 160;
|
|
}
|
|
|
|
const TQString& SMSClient::description()
|
|
{
|
|
TQString url = "http://www.smsclient.org";
|
|
m_description = i18n("<qt>SMSClient is a program for sending SMS with the modem. The program can be found on <a href=\"%1\">%1</a></qt>").arg(url).arg(url);
|
|
return m_description;
|
|
}
|
|
|
|
#include "smsclient.moc"
|
|
/*
|
|
* Local variables:
|
|
* c-indentation-style: k&r
|
|
* c-basic-offset: 8
|
|
* indent-tabs-mode: t
|
|
* End:
|
|
*/
|
|
// vim: set noet ts=4 sts=4 sw=4:
|
|
|