author | alwin <alwin> | 2004-01-08 02:52:13 (UTC) |
---|---|---|
committer | alwin <alwin> | 2004-01-08 02:52:13 (UTC) |
commit | 05d47b2603adfab0e16f7395e34b7aa56ce6d8de (patch) (unidiff) | |
tree | 4253654acb70b859fd0d32981132dffd35092b9f | |
parent | dfa1477a28ecd90e08cf09aeecbe816e94bec0b5 (diff) | |
download | opie-05d47b2603adfab0e16f7395e34b7aa56ce6d8de.zip opie-05d47b2603adfab0e16f7395e34b7aa56ce6d8de.tar.gz opie-05d47b2603adfab0e16f7395e34b7aa56ce6d8de.tar.bz2 |
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
-rw-r--r-- | noncore/net/mail/accountview.cpp | 40 | ||||
-rw-r--r-- | noncore/net/mail/accountview.h | 1 | ||||
-rw-r--r-- | noncore/net/mail/defines.h | 3 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/abstractmail.cpp | 19 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/abstractmail.h | 2 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/imapwrapper.cpp | 31 | ||||
-rw-r--r-- | noncore/net/mail/libmailwrapper/imapwrapper.h | 1 |
7 files changed, 83 insertions, 14 deletions
diff --git a/noncore/net/mail/accountview.cpp b/noncore/net/mail/accountview.cpp index eea021f..b7de7b9 100644 --- a/noncore/net/mail/accountview.cpp +++ b/noncore/net/mail/accountview.cpp | |||
@@ -7,6 +7,7 @@ | |||
7 | #include <qmessagebox.h> | 7 | #include <qmessagebox.h> |
8 | #include <qpopupmenu.h> | 8 | #include <qpopupmenu.h> |
9 | 9 | ||
10 | #define SETPIX(x) if (!account->getOffline()) {setPixmap( 0,x);} else {setPixmap( 0, PIXMAP_OFFLINE );} | ||
10 | /** | 11 | /** |
11 | * POP3 Account stuff | 12 | * POP3 Account stuff |
12 | */ | 13 | */ |
@@ -15,7 +16,14 @@ POP3viewItem::POP3viewItem( POP3account *a, AccountView *parent ) | |||
15 | { | 16 | { |
16 | account = a; | 17 | account = a; |
17 | wrapper = AbstractMail::getWrapper( account ); | 18 | wrapper = AbstractMail::getWrapper( account ); |
18 | setPixmap( 0, PIXMAP_POP3FOLDER ); | 19 | SETPIX(PIXMAP_POP3FOLDER); |
20 | #if 0 | ||
21 | if (!account->getOffline()) { | ||
22 | setPixmap( 0, ); | ||
23 | } else { | ||
24 | setPixmap( 0, PIXMAP_OFFLINE ); | ||
25 | } | ||
26 | #endif | ||
19 | setText( 0, account->getAccountName() ); | 27 | setText( 0, account->getAccountName() ); |
20 | setOpen( true ); | 28 | setOpen( true ); |
21 | } | 29 | } |
@@ -32,6 +40,11 @@ AbstractMail *POP3viewItem::getWrapper() | |||
32 | 40 | ||
33 | void POP3viewItem::refresh( QList<RecMail> & ) | 41 | void POP3viewItem::refresh( QList<RecMail> & ) |
34 | { | 42 | { |
43 | refresh(); | ||
44 | } | ||
45 | |||
46 | void POP3viewItem::refresh() | ||
47 | { | ||
35 | if (account->getOffline()) return; | 48 | if (account->getOffline()) return; |
36 | QList<Folder> *folders = wrapper->listFolders(); | 49 | QList<Folder> *folders = wrapper->listFolders(); |
37 | QListViewItem *child = firstChild(); | 50 | QListViewItem *child = firstChild(); |
@@ -89,6 +102,8 @@ void POP3viewItem::setOnOffline() | |||
89 | } | 102 | } |
90 | account->setOffline(!account->getOffline()); | 103 | account->setOffline(!account->getOffline()); |
91 | account->save(); | 104 | account->save(); |
105 | SETPIX(PIXMAP_POP3FOLDER); | ||
106 | refresh(); | ||
92 | } | 107 | } |
93 | 108 | ||
94 | void POP3viewItem::contextMenuSelected(int which) | 109 | void POP3viewItem::contextMenuSelected(int which) |
@@ -178,7 +193,7 @@ IMAPviewItem::IMAPviewItem( IMAPaccount *a, AccountView *parent ) | |||
178 | { | 193 | { |
179 | account = a; | 194 | account = a; |
180 | wrapper = AbstractMail::getWrapper( account ); | 195 | wrapper = AbstractMail::getWrapper( account ); |
181 | setPixmap( 0, PIXMAP_IMAPFOLDER ); | 196 | SETPIX(PIXMAP_IMAPFOLDER); |
182 | setText( 0, account->getAccountName() ); | 197 | setText( 0, account->getAccountName() ); |
183 | setOpen( true ); | 198 | setOpen( true ); |
184 | } | 199 | } |
@@ -337,6 +352,7 @@ void IMAPviewItem::contextMenuSelected(int id) | |||
337 | } | 352 | } |
338 | account->setOffline(!account->getOffline()); | 353 | account->setOffline(!account->getOffline()); |
339 | account->save(); | 354 | account->save(); |
355 | SETPIX(PIXMAP_IMAPFOLDER); | ||
340 | refreshFolders(false); | 356 | refreshFolders(false); |
341 | break; | 357 | break; |
342 | default: | 358 | default: |
@@ -665,7 +681,6 @@ void AccountView::setupFolderselect(Selectstore*sels) | |||
665 | 681 | ||
666 | void AccountView::downloadMails(Folder*fromFolder,AbstractMail*fromWrapper) | 682 | void AccountView::downloadMails(Folder*fromFolder,AbstractMail*fromWrapper) |
667 | { | 683 | { |
668 | unsigned int i = 0; | ||
669 | AbstractMail*targetMail = 0; | 684 | AbstractMail*targetMail = 0; |
670 | QString targetFolder = ""; | 685 | QString targetFolder = ""; |
671 | Selectstore sels; | 686 | Selectstore sels; |
@@ -677,18 +692,15 @@ void AccountView::downloadMails(Folder*fromFolder,AbstractMail*fromWrapper) | |||
677 | targetFolder.isEmpty()) { | 692 | targetFolder.isEmpty()) { |
678 | return; | 693 | return; |
679 | } | 694 | } |
680 | 695 | if (sels.newFolder() && !targetMail->createMbox(targetFolder)) { | |
681 | QList<RecMail> t; | 696 | QMessageBox::critical(0,tr("Error creating new Folder"), |
682 | fromWrapper->listMessages(fromFolder->getName(),t); | 697 | tr("<center>Error while creating<br>new folder - breaking.</center>")); |
683 | encodedString*st = 0; | 698 | return; |
684 | for (i = 0; i < t.count();++i) { | ||
685 | RecMail*r = t.at(i); | ||
686 | st = fromWrapper->fetchRawBody(*r); | ||
687 | if (st) { | ||
688 | targetMail->storeMessage(st->Content(),st->Length(),targetFolder); | ||
689 | delete st; | ||
690 | } | ||
691 | } | 699 | } |
700 | qDebug("Targetfolder: %s",targetFolder.latin1()); | ||
701 | qDebug("Fromfolder: %s",fromFolder->getName().latin1()); | ||
702 | fromWrapper->mvcpAllMails(fromFolder,targetFolder,targetMail,sels.moveMails()); | ||
703 | refreshCurrent(); | ||
692 | } | 704 | } |
693 | 705 | ||
694 | /** | 706 | /** |
diff --git a/noncore/net/mail/accountview.h b/noncore/net/mail/accountview.h index 48f52c7..df916c1 100644 --- a/noncore/net/mail/accountview.h +++ b/noncore/net/mail/accountview.h | |||
@@ -48,6 +48,7 @@ public: | |||
48 | 48 | ||
49 | protected: | 49 | protected: |
50 | POP3account *account; | 50 | POP3account *account; |
51 | virtual void refresh(); | ||
51 | AbstractMail *wrapper; | 52 | AbstractMail *wrapper; |
52 | void disconnect(); | 53 | void disconnect(); |
53 | void setOnOffline(); | 54 | void setOnOffline(); |
diff --git a/noncore/net/mail/defines.h b/noncore/net/mail/defines.h index ebe8e08..d840f09 100644 --- a/noncore/net/mail/defines.h +++ b/noncore/net/mail/defines.h | |||
@@ -16,6 +16,8 @@ | |||
16 | #define PIC_OUTBOXFOLDER "mail/outbox" | 16 | #define PIC_OUTBOXFOLDER "mail/outbox" |
17 | #define PIC_LOCALFOLDER "mail/localfolder" | 17 | #define PIC_LOCALFOLDER "mail/localfolder" |
18 | 18 | ||
19 | #define PIC_OFFLINE "mail/notconnected" | ||
20 | |||
19 | #define ICON_COMPOSEMAIL QIconSet( Resource::loadPixmap( PIC_COMPOSEMAIL ) ) | 21 | #define ICON_COMPOSEMAIL QIconSet( Resource::loadPixmap( PIC_COMPOSEMAIL ) ) |
20 | #define ICON_SENDQUEUED QIconSet( Resource::loadPixmap( PIC_SENDQUEUED ) ) | 22 | #define ICON_SENDQUEUED QIconSet( Resource::loadPixmap( PIC_SENDQUEUED ) ) |
21 | #define ICON_SHOWFOLDERS QIconSet( Resource::loadPixmap( PIC_SHOWFOLDERS ) ) | 23 | #define ICON_SHOWFOLDERS QIconSet( Resource::loadPixmap( PIC_SHOWFOLDERS ) ) |
@@ -30,6 +32,7 @@ | |||
30 | #define PIXMAP_MBOXFOLDER QPixmap( Resource::loadPixmap( PIC_MBOXFOLDER ) ) | 32 | #define PIXMAP_MBOXFOLDER QPixmap( Resource::loadPixmap( PIC_MBOXFOLDER ) ) |
31 | #define PIXMAP_OUTBOXFOLDER QPixmap( Resource::loadPixmap( PIC_OUTBOXFOLDER) ) | 33 | #define PIXMAP_OUTBOXFOLDER QPixmap( Resource::loadPixmap( PIC_OUTBOXFOLDER) ) |
32 | #define PIXMAP_LOCALFOLDER QPixmap( Resource::loadPixmap( PIC_LOCALFOLDER) ) | 34 | #define PIXMAP_LOCALFOLDER QPixmap( Resource::loadPixmap( PIC_LOCALFOLDER) ) |
35 | #define PIXMAP_OFFLINE QPixmap( Resource::loadPixmap( PIC_OFFLINE) ) | ||
33 | 36 | ||
34 | #define IMAP_PORT "143" | 37 | #define IMAP_PORT "143" |
35 | #define IMAP_SSL_PORT "993" | 38 | #define IMAP_SSL_PORT "993" |
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() | |||
104 | void AbstractMail::deleteMails(const QString &,QList<RecMail> &) | 104 | void AbstractMail::deleteMails(const QString &,QList<RecMail> &) |
105 | { | 105 | { |
106 | } | 106 | } |
107 | |||
108 | void AbstractMail::mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) | ||
109 | { | ||
110 | QList<RecMail> t; | ||
111 | listMessages(fromFolder->getName(),t); | ||
112 | encodedString*st = 0; | ||
113 | while (t.count()>0) { | ||
114 | RecMail*r = t.at(0); | ||
115 | st = fetchRawBody(*r); | ||
116 | if (st) { | ||
117 | targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder); | ||
118 | delete st; | ||
119 | } | ||
120 | t.removeFirst(); | ||
121 | } | ||
122 | if (moveit) { | ||
123 | deleteAllMail(fromFolder); | ||
124 | } | ||
125 | } | ||
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: | |||
35 | virtual int deleteMbox(const Folder*)=0; | 35 | virtual int deleteMbox(const Folder*)=0; |
36 | virtual void storeMessage(const char*msg,size_t length, const QString&folder)=0; | 36 | virtual void storeMessage(const char*msg,size_t length, const QString&folder)=0; |
37 | 37 | ||
38 | virtual void mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); | ||
39 | |||
38 | virtual void cleanMimeCache(){}; | 40 | virtual void cleanMimeCache(){}; |
39 | /* mail box methods */ | 41 | /* mail box methods */ |
40 | /* parameter is the box to create. | 42 | /* 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 | |||
1009 | 1009 | ||
1010 | const QString&IMAPwrapper::getName()const | 1010 | const QString&IMAPwrapper::getName()const |
1011 | { | 1011 | { |
1012 | qDebug("Get name: %s",account->getAccountName().latin1()); | ||
1012 | return account->getAccountName(); | 1013 | return account->getAccountName(); |
1013 | } | 1014 | } |
1014 | 1015 | ||
@@ -1018,3 +1019,33 @@ encodedString* IMAPwrapper::fetchRawBody(const RecMail&mail) | |||
1018 | QValueList<int> path; | 1019 | QValueList<int> path; |
1019 | return fetchRawPart(mail,path,false); | 1020 | return fetchRawPart(mail,path,false); |
1020 | } | 1021 | } |
1022 | |||
1023 | void IMAPwrapper::mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) | ||
1024 | { | ||
1025 | qDebug("mvcp mail imap"); | ||
1026 | if (targetWrapper != this) { | ||
1027 | AbstractMail::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit); | ||
1028 | qDebug("Using generic"); | ||
1029 | return; | ||
1030 | } | ||
1031 | qDebug("Using internal"); | ||
1032 | mailimap_set *set = 0; | ||
1033 | |||
1034 | int err = mailimap_select( m_imap, fromFolder->getName().latin1()); | ||
1035 | if ( err != MAILIMAP_NO_ERROR ) { | ||
1036 | Global::statusMessage(tr("error selecting mailbox: %1").arg(m_imap->imap_response)); | ||
1037 | return; | ||
1038 | } | ||
1039 | |||
1040 | int last = m_imap->imap_selection_info->sel_exists; | ||
1041 | set = mailimap_set_new_interval( 1, last ); | ||
1042 | err = mailimap_copy(m_imap,set,targetFolder.latin1()); | ||
1043 | if ( err != MAILIMAP_NO_ERROR ) { | ||
1044 | Global::statusMessage(tr("error copy mails: %1").arg(m_imap->imap_response)); | ||
1045 | return; | ||
1046 | } | ||
1047 | mailimap_set_free( set ); | ||
1048 | if (moveit) { | ||
1049 | deleteAllMail(fromFolder); | ||
1050 | } | ||
1051 | } | ||
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: | |||
31 | virtual void answeredMail(const RecMail&mail); | 31 | virtual void answeredMail(const RecMail&mail); |
32 | virtual int deleteAllMail(const Folder*folder); | 32 | virtual int deleteAllMail(const Folder*folder); |
33 | virtual void storeMessage(const char*msg,size_t length, const QString&folder); | 33 | virtual void storeMessage(const char*msg,size_t length, const QString&folder); |
34 | virtual void mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit); | ||
34 | 35 | ||
35 | virtual RecBody fetchBody(const RecMail&mail); | 36 | virtual RecBody fetchBody(const RecMail&mail); |
36 | virtual QString fetchTextPart(const RecMail&mail,const RecPart&part); | 37 | virtual QString fetchTextPart(const RecMail&mail,const RecPart&part); |