Diffstat (limited to 'noncore/unsupported/mail2/libmail/imapbase.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/unsupported/mail2/libmail/imapbase.cpp | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/noncore/unsupported/mail2/libmail/imapbase.cpp b/noncore/unsupported/mail2/libmail/imapbase.cpp index 9a2ba47..4753f43 100644 --- a/noncore/unsupported/mail2/libmail/imapbase.cpp +++ b/noncore/unsupported/mail2/libmail/imapbase.cpp @@ -1,110 +1,132 @@ #include <qsocket.h> #include <qtimer.h> #include "imapbase.h" IMAPBase::IMAPBase(const Account &account) : QObject(), _account(account) { _connected = false; _writingAllowed = false; _socket = new QSocket(this); connect(_socket, SIGNAL(readyRead()), SLOT(slotDataAvailiable())); connect(_socket, SIGNAL(hostFound()), SLOT(slotHostFound())); connect(_socket, SIGNAL(connected()), SLOT(slotConnected())); connect(_socket, SIGNAL(connectionClosed()), SLOT(slotDisconnected())); connect(_socket, SIGNAL(error(int)), SLOT(slotError(int))); QTimer *commandTimer = new QTimer(this); commandTimer->start(200); connect(commandTimer, SIGNAL(timeout()), SLOT(writeCommands())); } void IMAPBase::sendCommand(const QString &command) { if (!_connected) makeConnect(); _commandQueue.append(command); } void IMAPBase::disconnect() { _connected = false; delete _socket; emit disconnected(); } void IMAPBase::makeConnect() { emit lookingUpHost(); if (_socket == NULL) _socket = new QSocket(this); Q_UINT16 port = _account.imapPort().toUInt(); _socket->connectToHost(_account.imapServer(), port); } void IMAPBase::writeCommands() { if (!_connected) return; if (_commandQueue.isEmpty()) return; if (!_writingAllowed) return; QStringList::Iterator it; for (it = _commandQueue.begin(); it != _commandQueue.end(); it++) { if (!(*it).isEmpty() && _writingAllowed) { #ifndef QT_NO_DEBUG - qDebug("IMAP > " + (*it).stripWhiteSpace()); + qDebug("IMAP > " + (*it).stripWhiteSpace().local8Bit ()); #endif _socket->writeBlock((*it).latin1(), (*it).length()); _writingAllowed = false; + if (( *it ). find ( QRegExp ( "^[a-z][0-9]+ " )) == 0 ) + _lasttag = (*it).left(2); + + connect(_socket, SIGNAL(readyRead()), SLOT(slotDataAvailiable())); _commandQueue.remove(it); break; } } } void IMAPBase::slotError(int err) { if (err == QSocket::ErrConnectionRefused) { emit error(IMAPErrConnectionRefused); } else if (err == QSocket::ErrHostNotFound) { emit error(IMAPErrHostNotFound); } else if (err == QSocket::ErrSocketRead) { emit error(IMAPErrSocketRead); } else { emit error(IMAPErrUnknownError); } } void IMAPBase::slotHostFound() { emit hostFound(); } void IMAPBase::slotConnected() { _connected = true; emit connected(); } void IMAPBase::slotDisconnected() { _connected = false; emit disconnected(); } +#include <unistd.h> + void IMAPBase::slotDataAvailiable() { + static bool firstline = true; + while (_socket->canReadLine()) { - _data += _socket->readLine(); - if (_socket->atEnd()) { -#ifndef QT_NO_DEBUG - qDebug("IMAP < " + _data.stripWhiteSpace()); -#endif + QString tmp = _socket-> readLine ( ); + + _data += tmp; + qDebug ( "New Line [%d]: '%s'\n", _connected ? 1 : 0, tmp.latin1( )); + + if ( firstline || tmp. left(2) == _lasttag ) { + firstline = false; + +// if ( _socket-> atEnd ( )) + qDebug ( "at end -> emitting\n" ); + + QObject::disconnect(_socket, SIGNAL(readyRead()), this, SLOT(slotDataAvailiable())); emit dataReceived(_data); + _data = QString::null; _writingAllowed = true; - _data = QString(0); } } } +void IMAPBase::tryRead ( QString &data ) +{ + qDebug ( "Trying to read...\n" ); + + while ( _socket-> canReadLine ( )) + data += _socket-> readLine ( ); +} |