-rw-r--r-- | kmicromail/libmailwrapper/imapwrapper.cpp | 127 |
1 files changed, 72 insertions, 55 deletions
diff --git a/kmicromail/libmailwrapper/imapwrapper.cpp b/kmicromail/libmailwrapper/imapwrapper.cpp index b0dd1b8..a6688ed 100644 --- a/kmicromail/libmailwrapper/imapwrapper.cpp +++ b/kmicromail/libmailwrapper/imapwrapper.cpp @@ -56,24 +56,25 @@ void IMAPwrapper::imap_progress( size_t current, size_t maximum ) last = current; } void IMAPwrapper::progress( QString m ) { static QString mProgrMess; if ( m != QString::null ) { mProgrMess = m; - mCurrent = 0; + mCurrent = 1; return; } QString mess; //qDebug("progress "); if ( mMax ) mess = mProgrMess +tr(" message %1 of %2").arg( mCurrent++).arg(mMax); else mess = mProgrMess +tr(" message %1").arg( mCurrent++); Global::statusMessage(mess); + qDebug("Progress %s %s", mess.latin1(), m.latin1()); qApp->processEvents(); } bool IMAPwrapper::start_tls(bool force_tls) { int err; bool try_tls; mailimap_capability_data * cap_data = 0; @@ -228,77 +229,93 @@ void IMAPwrapper::logout() err = mailimap_close( m_imap ); mailimap_free( m_imap ); m_imap = 0; m_Lastmbox = ""; } void IMAPwrapper::listMessages(const QString&mailbox,QValueList<Opie::Core::OSmartPointer<RecMail> > &target , int maxSizeInKb) { - int err = MAILIMAP_NO_ERROR; - clist *result = 0; - clistcell *current; - mailimap_fetch_type *fetchType = 0; - mailimap_set *set = 0; - - login(); - if (!m_imap) { - return; - } - /* select mailbox READONLY for operations */ - err = selectMbox(mailbox); - if ( err != MAILIMAP_NO_ERROR ) { - return; - } - int last = m_imap->imap_selection_info->sel_exists; + int tryAgain = 1; + while ( tryAgain >= 0 ) { + int err = MAILIMAP_NO_ERROR; + clist *result = 0; + clistcell *current; + mailimap_fetch_type *fetchType = 0; + mailimap_set *set = 0; - if (last == 0) { - Global::statusMessage(tr("Mailbox has no mails")); - return; - } else { - } - - Global::statusMessage(tr("Fetching header list")); - qApp->processEvents(); - /* the range has to start at 1!!! not with 0!!!! */ - set = mailimap_set_new_interval( 1, last ); - fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); - mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope()); - mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags()); - mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate()); - mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size()); - - err = mailimap_fetch( m_imap, set, fetchType, &result ); - mailimap_set_free( set ); - mailimap_fetch_type_free( fetchType ); + login(); + if (!m_imap) { + return; + } + /* select mailbox READONLY for operations */ + err = selectMbox(mailbox); + if ( err != MAILIMAP_NO_ERROR ) { + return; + } - QString date,subject,from; + int last = m_imap->imap_selection_info->sel_exists; - if ( err == MAILIMAP_NO_ERROR ) { - mailimap_msg_att * msg_att; - int i = 0; - for (current = clist_begin(result); current != 0; current=clist_next(current)) { - ++i; - msg_att = (mailimap_msg_att*)current->data; - RecMail*m = parse_list_result(msg_att); - if (m) { - if ( maxSizeInKb == 0 || m->Msgsize()<=maxSizeInKb*1024 ) { - m->setNumber(i); - m->setMbox(mailbox); - m->setWrapper(this); - target.append(m); + if (last == 0) { + Global::statusMessage(tr("Mailbox has no mails")); + return; + } else { + } + progress( tr("Fetch ")); + mMax = last; + //qDebug("last %d ", last); + Global::statusMessage(tr("Fetching header list")); + qApp->processEvents(); + /* the range has to start at 1!!! not with 0!!!! */ + //LR the access to web.de imap server is no working with value 1 + qDebug("interval %d - %d ", tryAgain, last-1+tryAgain ); + set = mailimap_set_new_interval( tryAgain, last ); + fetchType = mailimap_fetch_type_new_fetch_att_list_empty(); + mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_envelope()); + mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_flags()); + mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_internaldate()); + mailimap_fetch_type_new_fetch_att_list_add(fetchType,mailimap_fetch_att_new_rfc822_size()); + + err = mailimap_fetch( m_imap, set, fetchType, &result ); + mailimap_set_free( set ); + mailimap_fetch_type_free( fetchType ); + + QString date,subject,from; + + if ( err == MAILIMAP_NO_ERROR ) { + tryAgain = -1; + mailimap_msg_att * msg_att; + int i = 0; + for (current = clist_begin(result); current != 0; current=clist_next(current)) { + ++i; + //qDebug("iii %d ",i); + msg_att = (mailimap_msg_att*)current->data; + RecMail*m = parse_list_result(msg_att); + if (m) { + if ( maxSizeInKb == 0 || m->Msgsize()<=maxSizeInKb*1024 ) { + m->setNumber(i); + m->setMbox(mailbox); + m->setWrapper(this); + target.append(m); + } } } + Global::statusMessage(tr("Mailbox has %1 mails").arg(target.count())); + } else { + --tryAgain; + --tryAgain; + if ( tryAgain < 0 ) + Global::statusMessage(tr("Error fetching headers: %1").arg(m_imap->imap_response)); + else + qDebug("try again... "); } - Global::statusMessage(tr("Mailbox has %1 mails").arg(target.count())); - } else { - Global::statusMessage(tr("Error fetching headers: %1").arg(m_imap->imap_response)); + + if (result) mailimap_fetch_list_free(result); } - if (result) mailimap_fetch_list_free(result); } QValueList<Opie::Core::OSmartPointer<Folder> >* IMAPwrapper::listFolders() { const char *path, *mask; int err = MAILIMAP_NO_ERROR; clist *result = 0; clistcell *current = 0; @@ -947,17 +964,17 @@ void IMAPwrapper::deleteMailList(const QValueList<RecMailP>&target) return; } int iii = 0; int count = target.count(); // qDebug("imap remove count %d ", count); mMax = count; - //progress( tr("Delete")); + progress( tr("Delete")); QProgressBar wid ( count ); wid.setCaption( tr("Deleting ...")); wid.show(); while (iii < count ) { Global::statusMessage(tr("Delete message %1 of %2").arg(iii).arg(count)); wid.setProgress( iii ); wid.raise(); |