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