From 05d47b2603adfab0e16f7395e34b7aa56ce6d8de Mon Sep 17 00:00:00 2001 From: alwin Date: Thu, 08 Jan 2004 02:52:13 +0000 Subject: move/copy mails to another folder resides inside wrappers so we can use special funs of libetpan and/or mailserver itself (eg. imap) libetpan 0.32 requires for that feature a patch! (see libetpanstuff/) accounts marked as "offline" get a new icon TODO: - when creating a new folder while copy/move on imap-server, get the real resulting foldername when using prefix - implement usage of copy/move inside one mbox using special etpan funs --- (limited to 'noncore/net/mail/libmailwrapper') diff --git a/noncore/net/mail/libmailwrapper/abstractmail.cpp b/noncore/net/mail/libmailwrapper/abstractmail.cpp index 3dd2fce..4b4c728 100644 --- a/noncore/net/mail/libmailwrapper/abstractmail.cpp +++ b/noncore/net/mail/libmailwrapper/abstractmail.cpp @@ -104,3 +104,22 @@ QString AbstractMail::defaultLocalfolder() void AbstractMail::deleteMails(const QString &,QList &) { } + +void AbstractMail::mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) +{ + QList t; + listMessages(fromFolder->getName(),t); + encodedString*st = 0; + while (t.count()>0) { + RecMail*r = t.at(0); + st = fetchRawBody(*r); + if (st) { + targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder); + delete st; + } + t.removeFirst(); + } + if (moveit) { + deleteAllMail(fromFolder); + } +} diff --git a/noncore/net/mail/libmailwrapper/abstractmail.h b/noncore/net/mail/libmailwrapper/abstractmail.h index 15d83cb..8debaae 100644 --- a/noncore/net/mail/libmailwrapper/abstractmail.h +++ b/noncore/net/mail/libmailwrapper/abstractmail.h @@ -35,6 +35,8 @@ public: virtual int deleteMbox(const Folder*)=0; virtual void storeMessage(const char*msg,size_t length, const QString&folder)=0; + virtual void mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); + virtual void cleanMimeCache(){}; /* mail box methods */ /* parameter is the box to create. diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.cpp b/noncore/net/mail/libmailwrapper/imapwrapper.cpp index bb74de9..23c678b 100644 --- a/noncore/net/mail/libmailwrapper/imapwrapper.cpp +++ b/noncore/net/mail/libmailwrapper/imapwrapper.cpp @@ -1009,6 +1009,7 @@ const QString&IMAPwrapper::getType()const const QString&IMAPwrapper::getName()const { + qDebug("Get name: %s",account->getAccountName().latin1()); return account->getAccountName(); } @@ -1018,3 +1019,33 @@ encodedString* IMAPwrapper::fetchRawBody(const RecMail&mail) QValueList path; return fetchRawPart(mail,path,false); } + +void IMAPwrapper::mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) +{ + qDebug("mvcp mail imap"); + if (targetWrapper != this) { + AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit); + qDebug("Using generic"); + return; + } + qDebug("Using internal"); + mailimap_set *set = 0; + + int err = mailimap_select( m_imap, fromFolder->getName().latin1()); + if ( err != MAILIMAP_NO_ERROR ) { + Global::statusMessage(tr("error selecting mailbox: %1").arg(m_imap->imap_response)); + return; + } + + int last = m_imap->imap_selection_info->sel_exists; + set = mailimap_set_new_interval( 1, last ); + err = mailimap_copy(m_imap,set,targetFolder.latin1()); + if ( err != MAILIMAP_NO_ERROR ) { + Global::statusMessage(tr("error copy mails: %1").arg(m_imap->imap_response)); + return; + } + mailimap_set_free( set ); + if (moveit) { + deleteAllMail(fromFolder); + } +} diff --git a/noncore/net/mail/libmailwrapper/imapwrapper.h b/noncore/net/mail/libmailwrapper/imapwrapper.h index b2bd7e9..07c6210 100644 --- a/noncore/net/mail/libmailwrapper/imapwrapper.h +++ b/noncore/net/mail/libmailwrapper/imapwrapper.h @@ -31,6 +31,7 @@ public: virtual void answeredMail(const RecMail&mail); virtual int deleteAllMail(const Folder*folder); virtual void storeMessage(const char*msg,size_t length, const QString&folder); + virtual void mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); virtual RecBody fetchBody(const RecMail&mail); virtual QString fetchTextPart(const RecMail&mail,const RecPart&part); -- cgit v0.9.0.2