Source Code (Use browser search to find items of interest.)
Class Index
empath'EmpathMailSender (./kdepim/empath/lib/EmpathMailSender.h:57)
class EmpathMailSender : public QObject
{
Q_OBJECT
public:
enum OutgoingServerType { Sendmail, Qmail, SMTP };
enum SendPolicy { SendNow, SendLater };
EmpathMailSender();
virtual ~EmpathMailSender();
/**
* Queue up a message for sending.
*/
void queue(RMM::RMessage);
/**
* Send one message.
*
* @returns false if the message could not be delivered.
*
* Message will be returned to user on failure. FIXME: How ?
*/
void send(RMM::RMessage);
/**
* Kick off a send using all queued messages.
*/
void sendQueued();
/**
* Save your config now !
* Called by Empath when settings have changed.
*/
virtual void saveConfig();
/**
* Load your config now !
* Called by Empath on startup.
*/
virtual void loadConfig();
void sendCompleted(const QString &, bool);
void update();
protected slots:
void s_writtenNowSend(EmpathWriteJob);
void s_writtenNowQueue(EmpathWriteJob);
void s_movedToSent(EmpathMoveJob);
private:
void _startNextSend();
void _emergencyBackup(RMM::RMessage);
QQueue<QString> sendQueue_;
EmpathMailSenderImpl * impl_;
};
#endif
// vim:ts=4:sw=4:tw=78
empath'EmpathMailSender::EmpathMailSender() (./kdepim/empath/lib/EmpathMailSender.cpp:49)
EmpathMailSender::EmpathMailSender()
: QObject(),
impl_(0L)
{
sendQueue_.setAutoDelete(true);
update();
}
empath'EmpathMailSender::~EmpathMailSender() (./kdepim/empath/lib/EmpathMailSender.cpp:57)
EmpathMailSender::~EmpathMailSender()
{
// Empty.
}
void
empath'EmpathMailSender::send() (./kdepim/empath/lib/EmpathMailSender.cpp:63)
EmpathMailSender::send(RMM::RMessage message)
{
empath->write(
message,
empath->outbox(),
this,
SLOT(s_writtenNowSend(EmpathWriteJob)));
}
void
empath'EmpathMailSender::queue() (./kdepim/empath/lib/EmpathMailSender.cpp:73)
EmpathMailSender::queue(RMM::RMessage message)
{
empath->write(
message,
empath->outbox(),
this,
SLOT(s_writtenNowQueue(EmpathWriteJob)));
}
void
empath'EmpathMailSender::s_writtenNowSend() (./kdepim/empath/lib/EmpathMailSender.cpp:83)
EmpathMailSender::s_writtenNowSend(EmpathWriteJob job)
{
if (job.success())
impl_->sendOne(job.message(), job.messageID());
else {
// Warn user that message could not be written to queue
// folder.
empathDebug("Couldn't queue message - folder won't accept !");
QMessageBox::critical(0, "Empath",
i18n("Couldn't queue message ! Writing backup"),
i18n("OK"));
_emergencyBackup(job.message());
}
}
void
empath'EmpathMailSender::s_writtenNowQueue() (./kdepim/empath/lib/EmpathMailSender.cpp:102)
EmpathMailSender::s_writtenNowQueue(EmpathWriteJob job)
{
if (job.success())
impl_->sendOne(job.message(), job.messageID());
else {
// Warn user that message could not be written to queue
// folder.
empathDebug("Couldn't queue message - folder won't accept !");
QMessageBox::critical(0, "Empath",
i18n("Couldn't queue message ! Writing backup"),
i18n("OK"));
_emergencyBackup(job.message());
}
}
void
empath'EmpathMailSender::sendQueued() (./kdepim/empath/lib/EmpathMailSender.cpp:121)
EmpathMailSender::sendQueued()
{
#if 0
EmpathFolder * queueFolder(empath->folder(empath->outbox()));
while (queueFolder->index().count() != 0) {
sendQueue_.enqueue(new queueFolder->index().at(0));
_startNextSend();
}
#endif
}
void
empath'EmpathMailSender::_startNextSend() (./kdepim/empath/lib/EmpathMailSender.cpp:134)
EmpathMailSender::_startNextSend()
{
if (sendQueue_.isEmpty())
return;
EmpathURL url(empath->outbox());
url.setMessageID(*(sendQueue_.head()));
empath->retrieve(url, this, SLOT(s_retrievedNowSend(EmpathRetrieveJob)));
}
void
empath'EmpathMailSender::sendCompleted() (./kdepim/empath/lib/EmpathMailSender.cpp:147)
EmpathMailSender::sendCompleted(const QString & id, bool)
{
EmpathURL url(empath->outbox());
url.setMessageID(id);
empath->move(url, empath->sent(), this, SLOT(s_movedToSent(EmpathMoveJob)));
sendQueue_.dequeue();
}
void
empath'EmpathMailSender::s_movedToSent() (./kdepim/empath/lib/EmpathMailSender.cpp:158)
EmpathMailSender::s_movedToSent(EmpathMoveJob job)
{
if (!job.success()) {
empathDebug("Couldn't move message from queue to sent");
// TODO Something !
}
}
void
empath'EmpathMailSender::_emergencyBackup() (./kdepim/empath/lib/EmpathMailSender.cpp:167)
EmpathMailSender::_emergencyBackup(RMM::RMessage message)
{
empathDebug("Writing to emergency backup");
QString tempName("/tmp/" + empath->generateUnique());
QFile f(tempName);
if (!f.open(IO_WriteOnly)) {
empathDebug("Couldn't open the temporary file " + tempName);
empathDebug("EMERGENCY BACKUP COULD NOT BE WRITTEN !");
empathDebug("PLEASE CONTACT PROGRAM MAINTAINER !");
QMessageBox::critical(0, "Empath",
i18n("Couldn't write the backup file ! Message has been LOST !"),
i18n("OK"));
return;
}
QCString text(message.asString());
f.writeBlock(text.data(), text.length());
f.flush();
f.close();
if (f.status() != IO_Ok) {
empathDebug("Couldn't successfully write the temporary file " +
tempName);
empathDebug("EMERGENCY BACKUP COULD NOT BE VERIFIED !");
empathDebug("PLEASE CONTACT PROGRAM MAINTAINER !");
QMessageBox::critical(0, "Empath",
i18n("Couldn't write the backup file ! Message may have been LOST !"),
i18n("OK"));
return;
}
QMessageBox::information(0, "Empath",
i18n("Message backup written to") + " " + tempName,
i18n("OK"));
}
void
empath'EmpathMailSender::update() (./kdepim/empath/lib/EmpathMailSender.cpp:220)
EmpathMailSender::update()
{
delete impl_;
impl_ = 0L;
KConfig * c = KGlobal::config();
c->setGroup("General");
OutgoingServerType st =
(OutgoingServerType)
(c->readUnsignedNumEntry("OutgoingServerType"));
switch (st) {
case Qmail:
impl_ = new EmpathMailSenderQmail;
break;
case SMTP:
impl_ = new EmpathMailSenderSMTP;
break;
case Sendmail:
default:
impl_ = new EmpathMailSenderSendmail;
break;
}
impl_->loadConfig();
}
void
empath'EmpathMailSender::saveConfig() (./kdepim/empath/lib/EmpathMailSender.cpp:253)
EmpathMailSender::saveConfig()
{ impl_->saveConfig(); }
void
empath'EmpathMailSender::loadConfig() (./kdepim/empath/lib/EmpathMailSender.cpp:257)
EmpathMailSender::loadConfig()
{ impl_->loadConfig(); }
// vim:ts=4:sw=4:tw=78