diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch) | |
tree | 67208f7c145782a7e90b123b982ca78d88cc2c87 /korganizer/komailclient.cpp | |
download | tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.tar.gz tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'korganizer/komailclient.cpp')
-rw-r--r-- | korganizer/komailclient.cpp | 301 |
1 files changed, 301 insertions, 0 deletions
diff --git a/korganizer/komailclient.cpp b/korganizer/komailclient.cpp new file mode 100644 index 000000000..c9e021979 --- /dev/null +++ b/korganizer/komailclient.cpp @@ -0,0 +1,301 @@ +/* + This file is part of KOrganizer. + Copyright (c) 1998 Barry D Benowitz + Copyright (c) 2001 Cornelius Schumacher <schumacher@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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + As a special exception, permission is given to link this program + with any edition of Qt, and distribute the resulting executable, + without including the source code for Qt in the source distribution. +*/ + +#include <unistd.h> +#include <stdio.h> + +#include <klocale.h> +#include <kstandarddirs.h> +#include <kdebug.h> +#include <kmessagebox.h> +#include <kurl.h> +#include <kapplication.h> +#include <dcopclient.h> +#include <kprocess.h> + +#include <libkcal/event.h> +#include <libkcal/todo.h> +#include <libkcal/incidenceformatter.h> + +#include "version.h" +#include "koprefs.h" + +#include "komailclient.h" + +KOMailClient::KOMailClient() +{ +} + +KOMailClient::~KOMailClient() +{ +} + +bool KOMailClient::mailAttendees(IncidenceBase *incidence,const QString &attachment) +{ + Attendee::List attendees = incidence->attendees(); + if (attendees.count() == 0) return false; + + const QString from = incidence->organizer().fullName(); + const QString organizerEmail = incidence->organizer().email(); + QStringList toList; + for(uint i=0; i<attendees.count();++i) { + const QString email = (*attendees.at(i))->email(); + // In case we (as one of our identities) are the organizer we are sending this + // mail. We could also have added ourselves as an attendee, in which case we + // don't want to send ourselves a notification mail. + if( organizerEmail != email ) + toList << email; + } + if( toList.count() == 0 ) + // Not really to be called a groupware meeting, eh + return false; + QString to = toList.join( ", " ); + + QString subject; + if(incidence->type()!="FreeBusy") { + Incidence *inc = static_cast<Incidence *>(incidence); + subject = inc->summary(); + } else { + subject = "Free Busy Object"; + } + + QString body = IncidenceFormatter::mailBodyString(incidence); + + bool bcc = KOPrefs::instance()->mBcc; + + return send(from,to,subject,body,bcc,attachment); +} + +bool KOMailClient::mailOrganizer(IncidenceBase *incidence,const QString &attachment, const QString &sub) +{ + QString to = incidence->organizer().fullName(); + + QString from = KOPrefs::instance()->email(); + + QString subject = sub; + if(incidence->type()!="FreeBusy") { + Incidence *inc = static_cast<Incidence *>(incidence); + if ( subject.isEmpty() ) + subject = inc->summary(); + } else { + subject = "Free Busy Message"; + } + + QString body = IncidenceFormatter::mailBodyString(incidence); + + bool bcc = KOPrefs::instance()->mBcc; + + return send(from,to,subject,body,bcc,attachment); +} + +bool KOMailClient::mailTo(IncidenceBase *incidence,const QString &recipients, + const QString &attachment) +{ + QString from = KOPrefs::instance()->email(); + QString subject; + if(incidence->type()!="FreeBusy") { + Incidence *inc = static_cast<Incidence *>(incidence); + subject = inc->summary(); + } else { + subject = "Free Busy Message"; + } + QString body = IncidenceFormatter::mailBodyString(incidence); + bool bcc = KOPrefs::instance()->mBcc; + kdDebug () << "KOMailClient::mailTo " << recipients << endl; + return send(from,recipients,subject,body,bcc,attachment); +} + +bool KOMailClient::send(const QString &from,const QString &to, + const QString &subject,const QString &body,bool bcc, + const QString &attachment) +{ + kdDebug(5850) << "KOMailClient::sendMail():\nFrom: " << from << "\nTo: " << to + << "\nSubject: " << subject << "\nBody: \n" << body + << "\nAttachment:\n" << attachment << endl; + + if (KOPrefs::instance()->mMailClient == KOPrefs::MailClientSendmail) { + bool needHeaders = true; + + QString command = KStandardDirs::findExe(QString::fromLatin1("sendmail"), + QString::fromLatin1("/sbin:/usr/sbin:/usr/lib")); + if (!command.isNull()) command += QString::fromLatin1(" -oi -t"); + else { + command = KStandardDirs::findExe(QString::fromLatin1("mail")); + if (command.isNull()) return false; // give up + + command.append(QString::fromLatin1(" -s ")); + command.append(KProcess::quote(subject)); + + if (bcc) { + command.append(QString::fromLatin1(" -b ")); + command.append(KProcess::quote(from)); + } + + command.append(" "); + command.append(KProcess::quote(to)); + + needHeaders = false; + } + + FILE * fd = popen(command.local8Bit(),"w"); + if (!fd) + { + kdError() << "Unable to open a pipe to " << command << endl; + return false; + } + + QString textComplete; + if (needHeaders) + { + textComplete += QString::fromLatin1("From: ") + from + '\n'; + textComplete += QString::fromLatin1("To: ") + to + '\n'; + if (bcc) textComplete += QString::fromLatin1("Bcc: ") + from + '\n'; + textComplete += QString::fromLatin1("Subject: ") + subject + '\n'; + textComplete += QString::fromLatin1("X-Mailer: KOrganizer") + korgVersion + '\n'; + } + textComplete += '\n'; // end of headers + textComplete += body; + textComplete += '\n'; + textComplete += attachment; + + fwrite(textComplete.local8Bit(),textComplete.length(),1,fd); + + pclose(fd); + } else { + if (!kapp->dcopClient()->isApplicationRegistered("kmail")) { + if (KApplication::startServiceByDesktopName("kmail")) { + KMessageBox::error(0,i18n("No running instance of KMail found.")); + return false; + } + } + + if (attachment.isEmpty()) { + if (!kMailOpenComposer(to,"",bcc ? from : "",subject,body,0,KURL())) return false; + } else { + QString meth; + int idx = attachment.find("METHOD"); + if (idx>=0) { + idx = attachment.find(':',idx)+1; + const int newline = attachment.find('\n',idx); + meth = attachment.mid(idx, newline - idx - 1); + meth = meth.lower().stripWhiteSpace(); + } else { + meth = "publish"; + } + if (!kMailOpenComposer(to,"",bcc ? from : "",subject,body,0,"cal.ics","7bit", + attachment.utf8(),"text","calendar","method",meth, + "attachment","utf-8")) return false; + } + } + return true; +} + +int KOMailClient::kMailOpenComposer(const QString& arg0,const QString& arg1, + const QString& arg2,const QString& arg3,const QString& arg4,int arg5, + const KURL& arg6) +{ + //kdDebug(5850) << "KOMailClient::kMailOpenComposer( " + // << arg0 << " , " << arg1 << arg2 << " , " << arg3 + // << arg4 << " , " << arg5 << " , " << arg6 << " )" << endl; + int result = 0; + + QByteArray data, replyData; + QCString replyType; + QDataStream arg( data, IO_WriteOnly ); + arg << arg0; + arg << arg1; + arg << arg2; + arg << arg3; + arg << arg4; + arg << arg5; + arg << arg6; +#if KDE_IS_VERSION( 3, 2, 90 ) + kapp->updateRemoteUserTimestamp( "kmail" ); +#endif + if (kapp->dcopClient()->call("kmail","KMailIface","openComposer(QString,QString,QString,QString,QString,int,KURL)", data, replyType, replyData ) ) { + if ( replyType == "int" ) { + QDataStream _reply_stream( replyData, IO_ReadOnly ); + _reply_stream >> result; + } else { + kdDebug(5850) << "kMailOpenComposer() call failed." << endl; + } + } else { + kdDebug(5850) << "kMailOpenComposer() call failed." << endl; + } + return result; +} + +int KOMailClient::kMailOpenComposer( const QString& arg0, const QString& arg1, + const QString& arg2, const QString& arg3, + const QString& arg4, int arg5, const QString& arg6, + const QCString& arg7, const QCString& arg8, + const QCString& arg9, const QCString& arg10, + const QCString& arg11, const QString& arg12, + const QCString& arg13, const QCString& arg14 ) +{ + //kdDebug(5850) << "KOMailClient::kMailOpenComposer( " + // << arg0 << " , " << arg1 << arg2 << " , " << arg3 + // << arg4 << " , " << arg5 << " , " << arg6 + // << arg7 << " , " << arg8 << " , " << arg9 + // << arg10<< " , " << arg11<< " , " << arg12 + // << arg13<< " , " << arg14<< " )" << endl; + + int result = 0; + + QByteArray data, replyData; + QCString replyType; + QDataStream arg( data, IO_WriteOnly ); + arg << arg0; + arg << arg1; + arg << arg2; + arg << arg3; + arg << arg4; + arg << arg5; + arg << arg6; + arg << arg7; + arg << arg8; + arg << arg9; + arg << arg10; + arg << arg11; + arg << arg12; + arg << arg13; + arg << arg14; +#if KDE_IS_VERSION( 3, 2, 90 ) + kapp->updateRemoteUserTimestamp("kmail"); +#endif + if ( kapp->dcopClient()->call("kmail","KMailIface", + "openComposer(QString,QString,QString,QString,QString,int,QString,QCString,QCString,QCString,QCString,QCString,QString,QCString,QCString)", data, replyType, replyData ) ) { + if ( replyType == "int" ) { + QDataStream _reply_stream( replyData, IO_ReadOnly ); + _reply_stream >> result; + } else { + kdDebug(5850) << "kMailOpenComposer() call failed." << endl; + } + } else { + kdDebug(5850) << "kMailOpenComposer() call failed." << endl; + } + return result; +} + + |