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.
289 lines
8.0 KiB
289 lines
8.0 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 <tqvaluelist.h>
|
|
#include <tqlabel.h>
|
|
#include <tqfile.h>
|
|
|
|
#include <kconfigbase.h>
|
|
#include <kprocess.h>
|
|
#include <klineedit.h>
|
|
#include <kmessagebox.h>
|
|
#include <kdebug.h>
|
|
#include <klocale.h>
|
|
|
|
#include "kopeteaccount.h"
|
|
#include "kopeteuiglobal.h"
|
|
|
|
#include "smssendprovider.h"
|
|
#include "smsprotocol.h"
|
|
#include "smscontact.h"
|
|
|
|
SMSSendProvider::SMSSendProvider(const TQString& providerName, const TQString& prefixValue, Kopete::Account* account, TQObject* parent, const char *name)
|
|
: TQObject( parent, name ), m_account(account)
|
|
{
|
|
kdWarning( 14160 ) << k_funcinfo << "this = " << this << ", m_account = " << m_account << " (should be ok if zero!!)" << endl;
|
|
|
|
provider = providerName;
|
|
prefix = prefixValue;
|
|
m_maxSize = 160;
|
|
|
|
messagePos = -1;
|
|
telPos = -1;
|
|
|
|
TQString file = prefix + "/share/smssend/" + provider + ".sms";
|
|
TQFile f(file);
|
|
if (f.open(IO_ReadOnly))
|
|
{
|
|
TQTextStream t(&f);
|
|
TQString group = TQString("SMSSend-%1").tqarg(provider);
|
|
bool exactNumberMatch = false;
|
|
TQStringList numberWords;
|
|
numberWords.append("Tel");
|
|
numberWords.append("Number");
|
|
numberWords.append("number");
|
|
numberWords.append("TelNum");
|
|
numberWords.append("Recipient");
|
|
numberWords.append("Tel1");
|
|
numberWords.append("To");
|
|
numberWords.append("nummer");
|
|
numberWords.append("telefone");
|
|
numberWords.append("ToPhone");
|
|
|
|
while( !t.eof())
|
|
{
|
|
TQString s = t.readLine();
|
|
if( s[0] == '%')
|
|
{
|
|
TQStringList args = TQStringList::split(':',s);
|
|
TQStringList options = TQStringList::split(' ', args[0]);
|
|
|
|
names.append(options[0].replace(0,1,""));
|
|
|
|
bool hidden = false;
|
|
for(unsigned i = 1; i < options.count(); i++)
|
|
if(options[i] == "Hidden")
|
|
{ hidden = true;
|
|
break;
|
|
}
|
|
isHiddens.append(hidden);
|
|
|
|
// Strip trailing whitespace in the end
|
|
// and '%' in the beginning
|
|
args[0] = args[0].simplifyWhiteSpace().mid(1);
|
|
|
|
descriptions.append(args[1]);
|
|
if (m_account)
|
|
values.append(m_account->configGroup()->readEntry(TQString("%1:%2").tqarg(group).tqarg(names[names.count()-1]),
|
|
TQString()));
|
|
else
|
|
values.append("");
|
|
|
|
if( args[0].contains("Message") || args[0].contains("message")
|
|
|| args[0].contains("message") || args[0].contains("nachricht")
|
|
|| args[0].contains("Msg") || args[0].contains("Mensagem") )
|
|
{
|
|
for( unsigned i = 0; i < options.count(); i++)
|
|
{
|
|
if (options[i].contains("Size="))
|
|
{
|
|
TQString option = options[i];
|
|
option.replace(0,5,"");
|
|
m_maxSize = option.toInt();
|
|
}
|
|
}
|
|
messagePos = names.count()-1;
|
|
}
|
|
else if (!exactNumberMatch)
|
|
{
|
|
for (TQStringList::Iterator it=numberWords.begin(); it != numberWords.end(); ++it)
|
|
{
|
|
if (args[0].contains(*it))
|
|
{
|
|
telPos = names.count() - 1;
|
|
if (args[0] == *it)
|
|
{
|
|
// kdDebug(14160) << "Exact match for " << args[0] << endl;
|
|
exactNumberMatch = true;
|
|
}
|
|
// kdDebug(14160) << "args[0] (" << args[0] << ") contains " << *it << endl;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
f.close();
|
|
|
|
if ( messagePos == -1 || telPos == -1 )
|
|
{
|
|
canSend = false;
|
|
return;
|
|
}
|
|
|
|
canSend = true;
|
|
}
|
|
|
|
SMSSendProvider::~SMSSendProvider()
|
|
{
|
|
kdWarning( 14160 ) << k_funcinfo << "this = " << this << endl;
|
|
}
|
|
|
|
void SMSSendProvider::setAccount(Kopete::Account *account)
|
|
{
|
|
m_account = account;
|
|
}
|
|
|
|
const TQString& SMSSendProvider::name(int i)
|
|
{
|
|
if ( telPos == i || messagePos == i)
|
|
return TQString();
|
|
else
|
|
return names[i];
|
|
}
|
|
|
|
const TQString& SMSSendProvider::value(int i)
|
|
{
|
|
return values[i];
|
|
}
|
|
|
|
const TQString& SMSSendProvider::description(int i)
|
|
{
|
|
return descriptions[i];
|
|
}
|
|
|
|
const bool SMSSendProvider::isHidden(int i)
|
|
{
|
|
return isHiddens[i];
|
|
}
|
|
|
|
void SMSSendProvider::save(TQPtrList<KLineEdit>& args)
|
|
{
|
|
kdDebug( 14160 ) << k_funcinfo << "m_account = " << m_account << " (should be non-zero!!)" << endl;
|
|
if (!m_account) return; // prevent crash in worst case
|
|
|
|
TQString group = TQString("SMSSend-%1").tqarg(provider);
|
|
int namesI=0;
|
|
|
|
for (unsigned i=0; i < args.count(); i++)
|
|
{
|
|
if (telPos == namesI || messagePos == namesI)
|
|
{
|
|
// kdDebug(14160) << k_funcinfo << "Skipping pos " << namesI << endl;
|
|
namesI++;
|
|
if (telPos == namesI || messagePos == namesI)
|
|
{
|
|
// kdDebug(14160) << k_funcinfo << "Skipping pos " << namesI << endl;
|
|
namesI++;
|
|
}
|
|
}
|
|
|
|
// kdDebug(14160) << k_funcinfo << "saving " << args.at(i) << " to " << names[namesI] << endl;
|
|
if (!args.at(i)->text().isEmpty())
|
|
{ values[namesI] = args.at(i)->text();
|
|
m_account->configGroup()->writeEntry(TQString("%1:%2").tqarg(group).tqarg(names[namesI]), values[namesI]);
|
|
}
|
|
namesI++;
|
|
}
|
|
}
|
|
|
|
int SMSSendProvider::count()
|
|
{
|
|
return names.count();
|
|
}
|
|
|
|
void SMSSendProvider::send(const Kopete::Message& msg)
|
|
{
|
|
if ( canSend == false )
|
|
{
|
|
if ( messagePos == -1 )
|
|
{
|
|
canSend = false;
|
|
KMessageBox::error(Kopete::UI::Global::mainWidget(), i18n("Could not determine which argument which should contain the message."),
|
|
i18n("Could Not Send Message"));
|
|
return;
|
|
}
|
|
if ( telPos == -1 )
|
|
{
|
|
canSend = false;
|
|
|
|
KMessageBox::error(Kopete::UI::Global::mainWidget(), i18n("Could not determine which argument which should contain the number."),
|
|
i18n("Could Not Send Message"));
|
|
return;
|
|
}
|
|
}
|
|
|
|
m_msg = msg;
|
|
|
|
TQString message = msg.plainBody();
|
|
TQString nr = dynamic_cast<SMSContact *>(msg.to().first())->qualifiedNumber();
|
|
|
|
if (canSend = false)
|
|
return;
|
|
|
|
values[messagePos] = message;
|
|
values[telPos] = nr;
|
|
|
|
KProcess* p = new KProcess;
|
|
|
|
kdWarning( 14160 ) << "Executing " << TQString("%1/bin/smssend").tqarg(prefix) << " \"" << provider << "\" " << values.join("\" \"") << "\"" << endl;
|
|
|
|
*p << TQString("%1/bin/smssend").tqarg(prefix) << provider << values;
|
|
|
|
output = "";
|
|
connect( p, TQT_SIGNAL(processExited(KProcess *)), this, TQT_SLOT(slotSendFinished(KProcess *)));
|
|
connect( p, TQT_SIGNAL(receivedStdout(KProcess *, char *, int)), this, TQT_SLOT(slotReceivedOutput(KProcess *, char *, int)));
|
|
// connect( p, TQT_SIGNAL(receivedStderr(KProcess *, char *, int)), this, TQT_SLOT(slotReceivedOutput(KProcess *, char *, int)));
|
|
|
|
p->start(KProcess::NotifyOnExit, KProcess::AllOutput);
|
|
}
|
|
|
|
void SMSSendProvider::slotSendFinished(KProcess *p)
|
|
{
|
|
kdWarning( 14160 ) << k_funcinfo << "this = " << this << ", es = " << p->exitStatus() << ", p = " << p << " (should be non-zero!!)" << endl;
|
|
if (p->exitStatus() == 0)
|
|
emit messageSent(m_msg);
|
|
else
|
|
emit messageNotSent(m_msg, TQString().setLatin1(output));
|
|
|
|
p->deleteLater();
|
|
}
|
|
|
|
void SMSSendProvider::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)
|
|
for(int i = 0; i < buflen; i++)
|
|
output += buffer[i];
|
|
kdWarning( 14160 ) << k_funcinfo << " output now = " << output << endl;
|
|
}
|
|
|
|
int SMSSendProvider::maxSize()
|
|
{
|
|
return m_maxSize;
|
|
}
|
|
|
|
#include "smssendprovider.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:
|
|
|