summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt3
-rw-r--r--kmicromail/accountview.cpp5
-rw-r--r--kmicromail/libmailwrapper/smtpwrapper.cpp12
-rw-r--r--kmicromail/opiemail.cpp5
4 files changed, 18 insertions, 7 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index dc22fc6..a9b6c87 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,200 +1,203 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 2.0.13 ************ 3********** VERSION 2.0.13 ************
4 4
5Fixed a problem in the addressee select dialog and made it more user friendly by adding a minimize splitter. 5Fixed a problem in the addressee select dialog and made it more user friendly by adding a minimize splitter.
6 6
7In the search dialog you can switch now the focus from search line edit to the list view by pressing key "arrow down". 7In the search dialog you can switch now the focus from search line edit to the list view by pressing key "arrow down".
8 8
9OM/Pi:
10Fixed a refresh problem of outgoing/sent/sendfailed folders after sending mails.
11
9********** VERSION 2.0.12 ************ 12********** VERSION 2.0.12 ************
10 13
11KO/Pi: 14KO/Pi:
12Fixed a bug in todo start/due date handling for non recurring todos with a start and due date. 15Fixed a bug in todo start/due date handling for non recurring todos with a start and due date.
13Fixed some layout problems in the KO/Pi agenda view when there were many conflicting itmes. 16Fixed some layout problems in the KO/Pi agenda view when there were many conflicting itmes.
14Fixed several problems of the keyboard focus in the desktop versions when opening the search dialog/event viewer. 17Fixed several problems of the keyboard focus in the desktop versions when opening the search dialog/event viewer.
15 18
16Fixed problem in pi-sync mode when wrong password was sent. 19Fixed problem in pi-sync mode when wrong password was sent.
17 20
18OM/Pi: 21OM/Pi:
19Fixed a crash when displaying mails with "Show mail as html" was checked in the config. 22Fixed a crash when displaying mails with "Show mail as html" was checked in the config.
20Added a check before displaying the mail if the mail is in html format, if "Show mail as html" is enabled. 23Added a check before displaying the mail if the mail is in html format, if "Show mail as html" is enabled.
21 24
22********** VERSION 2.0.11 ************ 25********** VERSION 2.0.11 ************
23 26
24Fixed some problems in pi-sync mode 27Fixed some problems in pi-sync mode
25(e.g. details of events were not synced properly) 28(e.g. details of events were not synced properly)
26 29
27********** VERSION 2.0.10 ************ 30********** VERSION 2.0.10 ************
28 31
29KO/Pi: 32KO/Pi:
30In the desktop versions the context menu in the search dialog was broken after introducing the What'sThis info for the list view. 33In the desktop versions the context menu in the search dialog was broken after introducing the What'sThis info for the list view.
31This is fixed. 34This is fixed.
32Changed the search dialog a bit to make it more user friendly. 35Changed the search dialog a bit to make it more user friendly.
33(E.g.: Removed message box about "no items found" and set key focus to search line edit after search). 36(E.g.: Removed message box about "no items found" and set key focus to search line edit after search).
34 37
35Added config option to hide the week number in KO/Pi toolbar. 38Added config option to hide the week number in KO/Pi toolbar.
36 39
37********** VERSION 2.0.9 ************ 40********** VERSION 2.0.9 ************
38 41
39Made month view icons for multiday events a bit nicer. 42Made month view icons for multiday events a bit nicer.
40Some minor fixes in KO/Pi 43Some minor fixes in KO/Pi
41(e.g. go to today did not work for new week view properly). 44(e.g. go to today did not work for new week view properly).
42 45
43 46
44********** VERSION 2.0.8 ************ 47********** VERSION 2.0.8 ************
45 48
46Fixed a problem in dependency info in the ipk files for the Zaurus. 49Fixed a problem in dependency info in the ipk files for the Zaurus.
47 50
48Added icon for the stealth new week view and made navigation more user friendly in monthview by adding a prev/next week button to the navigator bar. 51Added icon for the stealth new week view and made navigation more user friendly in monthview by adding a prev/next week button to the navigator bar.
49 52
50Added a "go today" button to the datepicker. 53Added a "go today" button to the datepicker.
51 54
52Added "created" and "last modified" to event/todo viewer (and What'sThis viewer) 55Added "created" and "last modified" to event/todo viewer (and What'sThis viewer)
53and made it configureable to show these values. 56and made it configureable to show these values.
54 57
55Fixed a problem for events (from external iCal files) that do have a duration but no end date. 58Fixed a problem for events (from external iCal files) that do have a duration but no end date.
56 59
57 60
58********** VERSION 2.0.7 ************ 61********** VERSION 2.0.7 ************
59 62
60Added global application font settings 63Added global application font settings
61(for all KDE-Pim/Pi apps) to the general settings. 64(for all KDE-Pim/Pi apps) to the general settings.
62 65
63Fixed a problem in OM/Pi when trying to login to some IMAP servers 66Fixed a problem in OM/Pi when trying to login to some IMAP servers
64(like the IMAP server of Apple: mail.mac.com ) 67(like the IMAP server of Apple: mail.mac.com )
65 68
66Added recurring todos to KO/Pi. 69Added recurring todos to KO/Pi.
67 70
68 71
69********** VERSION 2.0.6 ************ 72********** VERSION 2.0.6 ************
70 73
71Some bugfixes in the pi-sync mode. 74Some bugfixes in the pi-sync mode.
72Added German translation for pi-sync mode. 75Added German translation for pi-sync mode.
73 76
74KO/Pi: 77KO/Pi:
75Made the todolist using alternate background. 78Made the todolist using alternate background.
76 79
77Other minor fixes in KO/Pi. 80Other minor fixes in KO/Pi.
78 81
79 82
80********** VERSION 2.0.5 ************ 83********** VERSION 2.0.5 ************
81 84
82Bugfixes in KO/Pi. 85Bugfixes in KO/Pi.
83 86
84********** VERSION 2.0.4 ************ 87********** VERSION 2.0.4 ************
85 88
86KO/Pi: 89KO/Pi:
87Fixed problem loading translations for summary/location edit boxes in event/todo editor. 90Fixed problem loading translations for summary/location edit boxes in event/todo editor.
88 91
89Added a general "select week number" to the toolbar. 92Added a general "select week number" to the toolbar.
90 93
91Fixed some small problem of the new features introduced in version 2.0.3. 94Fixed some small problem of the new features introduced in version 2.0.3.
92 95
93Made it possible to specify one specific category as category color, 96Made it possible to specify one specific category as category color,
94if more than one categories are selected. 97if more than one categories are selected.
95 98
96Fixed a bug in saving colors for categories with non-ascii characters. 99Fixed a bug in saving colors for categories with non-ascii characters.
97(Like, e.g. German Umlauts). 100(Like, e.g. German Umlauts).
98Propably you have to set your colors again for those categories. 101Propably you have to set your colors again for those categories.
99 102
100 103
101********** VERSION 2.0.3 ************ 104********** VERSION 2.0.3 ************
102 105
103KO/Pi: 106KO/Pi:
104Added feature for changing alarm settings for many items at once: 107Added feature for changing alarm settings for many items at once:
105Open list view (or search dialog), select the desired items and choose in 108Open list view (or search dialog), select the desired items and choose in
106the popup menu: Set alarm for selected... 109the popup menu: Set alarm for selected...
107 110
108Added to the event/todo viewer the option to send an email to 111Added to the event/todo viewer the option to send an email to
109all attendees or all selected (with RSVP) attendees. 112all attendees or all selected (with RSVP) attendees.
110 113
111Made the week-month mode changing in month view faster. 114Made the week-month mode changing in month view faster.
112 115
113Made month view better useable with keyboard. 116Made month view better useable with keyboard.
114Now TAB key jumps to next cell with an event/todo. 117Now TAB key jumps to next cell with an event/todo.
115Scroll in cell with coursor keys, scroll in time (next week) with 118Scroll in cell with coursor keys, scroll in time (next week) with
116Shift/Control + coursorkeys. 119Shift/Control + coursorkeys.
117 120
118Fixed bug that the todo view flat mode was reset after first view update. 121Fixed bug that the todo view flat mode was reset after first view update.
119 122
120If a todo is displayed closed in the todo view, 123If a todo is displayed closed in the todo view,
121it is now displayed in overdue/due today color depending on the subtodos overdue/due today properties. 124it is now displayed in overdue/due today color depending on the subtodos overdue/due today properties.
122 125
123Added info about the numbers of years to the caption (title) information about a birthday event. 126Added info about the numbers of years to the caption (title) information about a birthday event.
124 127
125Made completion date in todo editor editable. 128Made completion date in todo editor editable.
126 129
127Added possibility to save/load templates for journals. 130Added possibility to save/load templates for journals.
128(Which is just a simple "save text to file" or "insert text from file". 131(Which is just a simple "save text to file" or "insert text from file".
129 132
130********** VERSION 2.0.2 ************ 133********** VERSION 2.0.2 ************
131 134
132KO/Pi: 135KO/Pi:
133Fixed the layout problem of the day label buttons 136Fixed the layout problem of the day label buttons
134of the agenda view introduced in version 2.0.1. 137of the agenda view introduced in version 2.0.1.
135 138
136Added WhatsThis support for the todo view and the list view. 139Added WhatsThis support for the todo view and the list view.
137 140
138Added a quite useful feature to the montview. 141Added a quite useful feature to the montview.
139Just click on the week numbers on the left. 142Just click on the week numbers on the left.
140And in the top right corner of month view/agenda view 143And in the top right corner of month view/agenda view
141there is now a "week number quick selector". 144there is now a "week number quick selector".
142(Click on the black triangle). 145(Click on the black triangle).
143 146
144Made the quite difficult timezone change in KO/Pi easy. 147Made the quite difficult timezone change in KO/Pi easy.
145 148
146OM/Pi: 149OM/Pi:
147Fixed too small icons on desktop. 150Fixed too small icons on desktop.
148Fixed non visible icons in mainwindow on Z with fastload enabled. 151Fixed non visible icons in mainwindow on Z with fastload enabled.
149Added signature file setting to smtp account config. 152Added signature file setting to smtp account config.
150And the signature can be edited and saved in the edit mail dialog. 153And the signature can be edited and saved in the edit mail dialog.
151That does mean: 154That does mean:
152Simply edit the signature for the selected smtp account in the 155Simply edit the signature for the selected smtp account in the
153edit new mail dialog and press the "save signature" button there. 156edit new mail dialog and press the "save signature" button there.
154Then the signature is saved to the file specified in the smtp account settings. 157Then the signature is saved to the file specified in the smtp account settings.
155If there is no file specified, it is saved automatically to the file 158If there is no file specified, it is saved automatically to the file
156kdepim/apps/kopiemail/<accountname>.sig. 159kdepim/apps/kopiemail/<accountname>.sig.
157 160
158 161
159 162
160********** VERSION 2.0.1 ************ 163********** VERSION 2.0.1 ************
161 164
162Oooops ... I forgot to test on the Zaurus 5500 ... 165Oooops ... I forgot to test on the Zaurus 5500 ...
163 166
164Fixed many problems of new (english) strings (and german translations) 167Fixed many problems of new (english) strings (and german translations)
165introduced in the latest versions, where the text was not fitting on the 168introduced in the latest versions, where the text was not fitting on the
166240x320 display of the Zaurus 5500. 169240x320 display of the Zaurus 5500.
167 170
168KO/Pi: 171KO/Pi:
169Added a popup menu ( press pen and hold to get popup ) to the agenda view 172Added a popup menu ( press pen and hold to get popup ) to the agenda view
170with many useful items (add event/todo, show next week, two weeks, month, journal). 173with many useful items (add event/todo, show next week, two weeks, month, journal).
171 174
172Added items to the todolist popup menu for: 175Added items to the todolist popup menu for:
173Display all opened, all closed or all todos flat. 176Display all opened, all closed or all todos flat.
174The "flat" view makes is possible to sort all todos after ,e.g., prio or date. 177The "flat" view makes is possible to sort all todos after ,e.g., prio or date.
175Made the reparenting of todos on the desktop possible via Drag&Drop. 178Made the reparenting of todos on the desktop possible via Drag&Drop.
176Fixed several bugs in setting the completed datetime for todos. 179Fixed several bugs in setting the completed datetime for todos.
177Added info about completed datetime of todos to the todo viewer. 180Added info about completed datetime of todos to the todo viewer.
178Now displaying a completed todo (with completed datetime set) in the agenda view 181Now displaying a completed todo (with completed datetime set) in the agenda view
179at the time of the completion. Such that now it is possible to see in the agenda view 182at the time of the completion. Such that now it is possible to see in the agenda view
180when what todo was completed. 183when what todo was completed.
181Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos. 184Fixed behaviour of automatic setting completion of todos with sub-todos/parent todos.
182Now the behaviour is: 185Now the behaviour is:
183Setting a parent to complete sets all (sub)childs to complete. 186Setting a parent to complete sets all (sub)childs to complete.
184Setting a parent to uncomplete does not change the childs. 187Setting a parent to uncomplete does not change the childs.
185Setting a child to uncomplete sets all parent to uncomplete. 188Setting a child to uncomplete sets all parent to uncomplete.
186Setting a child to complete does not change the parents. 189Setting a child to complete does not change the parents.
187 190
188Smart updating and double buffering of the daymatrix. 191Smart updating and double buffering of the daymatrix.
189Showing holidays in the day matrix. 192Showing holidays in the day matrix.
190Many other small performance updates. 193Many other small performance updates.
191 194
192Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode. 195Made day labels in agenda clickable. By clicking a label, the day is displayed in single day mode.
193 196
194Now the translation file usertranslation.txt is supposed to be in utf8 format. 197Now the translation file usertranslation.txt is supposed to be in utf8 format.
195If you want to translate a language from western europe, just change the germantranslation.txt file. Please read the updated Usertranslation HowTo in KO/Pi Help menu. 198If you want to translate a language from western europe, just change the germantranslation.txt file. Please read the updated Usertranslation HowTo in KO/Pi Help menu.
196 199
197 200
198********** VERSION 2.0.0 ************ 201********** VERSION 2.0.0 ************
199 202
200Stable release 2.0.0! 203Stable release 2.0.0!
diff --git a/kmicromail/accountview.cpp b/kmicromail/accountview.cpp
index 3ad3e9b..e9be224 100644
--- a/kmicromail/accountview.cpp
+++ b/kmicromail/accountview.cpp
@@ -1,230 +1,233 @@
1 1
2#include "accountview.h" 2#include "accountview.h"
3#include "accountitem.h" 3#include "accountitem.h"
4#include "selectstore.h" 4#include "selectstore.h"
5 5
6#include <libmailwrapper/settings.h> 6#include <libmailwrapper/settings.h>
7#include <libmailwrapper/mailwrapper.h> 7#include <libmailwrapper/mailwrapper.h>
8#include <libmailwrapper/mailtypes.h> 8#include <libmailwrapper/mailtypes.h>
9#include <libmailwrapper/abstractmail.h> 9#include <libmailwrapper/abstractmail.h>
10 10
11/* OPIE */ 11/* OPIE */
12#include <qpe/qpeapplication.h> 12#include <qpe/qpeapplication.h>
13 13
14/* QT */ 14/* QT */
15#include <qmessagebox.h> 15#include <qmessagebox.h>
16#include <qpopupmenu.h> 16#include <qpopupmenu.h>
17#include <qcheckbox.h> 17#include <qcheckbox.h>
18#include <qspinbox.h> 18#include <qspinbox.h>
19#include <klocale.h> 19#include <klocale.h>
20 20
21using namespace Opie::Core; 21using namespace Opie::Core;
22AccountView::AccountView( QWidget *parent, const char *name, WFlags flags ) 22AccountView::AccountView( QWidget *parent, const char *name, WFlags flags )
23 : QListView( parent, name, flags ) 23 : QListView( parent, name, flags )
24{ 24{
25 connect( this, SIGNAL( selectionChanged(QListViewItem*) ), 25 connect( this, SIGNAL( selectionChanged(QListViewItem*) ),
26 SLOT( refresh(QListViewItem*) ) ); 26 SLOT( refresh(QListViewItem*) ) );
27 connect( this, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ),this, 27 connect( this, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ),this,
28 SLOT( slotHold(int,QListViewItem*,const QPoint&,int) ) ); 28 SLOT( slotHold(int,QListViewItem*,const QPoint&,int) ) );
29 setSorting(0); 29 setSorting(0);
30} 30}
31 31
32AccountView::~AccountView() 32AccountView::~AccountView()
33{ 33{
34 imapAccounts.clear(); 34 imapAccounts.clear();
35 mhAccounts.clear(); 35 mhAccounts.clear();
36} 36}
37 37
38void AccountView::slotContextMenu(int id) 38void AccountView::slotContextMenu(int id)
39{ 39{
40 AccountViewItem *view = static_cast<AccountViewItem *>(currentItem()); 40 AccountViewItem *view = static_cast<AccountViewItem *>(currentItem());
41 if (!view) return; 41 if (!view) return;
42 view->contextMenuSelected(id); 42 view->contextMenuSelected(id);
43} 43}
44 44
45void AccountView::slotHold(int button, QListViewItem * item,const QPoint&,int) 45void AccountView::slotHold(int button, QListViewItem * item,const QPoint&,int)
46{ 46{
47 if (button==1) {return;} 47 if (button==1) {return;}
48 if (!item) return; 48 if (!item) return;
49 AccountViewItem *view = static_cast<AccountViewItem *>(item); 49 AccountViewItem *view = static_cast<AccountViewItem *>(item);
50 QPopupMenu*m = view->getContextMenu(); 50 QPopupMenu*m = view->getContextMenu();
51 if (!m) return; 51 if (!m) return;
52 connect(m,SIGNAL(activated(int)),this,SLOT(slotContextMenu(int))); 52 connect(m,SIGNAL(activated(int)),this,SLOT(slotContextMenu(int)));
53 m->setFocus(); 53 m->setFocus();
54 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) ); 54 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) );
55 delete m; 55 delete m;
56} 56}
57 57
58void AccountView::populate( QList<Account> list ) 58void AccountView::populate( QList<Account> list )
59{ 59{
60 clear(); 60 clear();
61 61
62 imapAccounts.clear(); 62 imapAccounts.clear();
63 mhAccounts.clear(); 63 mhAccounts.clear();
64 64
65 mhAccounts.append(new MHviewItem(AbstractMail::defaultLocalfolder(),this)); 65 mhAccounts.append(new MHviewItem(AbstractMail::defaultLocalfolder(),this));
66 66
67 Account *it; 67 Account *it;
68 for ( it = list.first(); it; it = list.next() ) 68 for ( it = list.first(); it; it = list.next() )
69 { 69 {
70 if ( it->getType() == MAILLIB::A_IMAP ) 70 if ( it->getType() == MAILLIB::A_IMAP )
71 { 71 {
72 IMAPaccount *imap = static_cast<IMAPaccount *>(it); 72 IMAPaccount *imap = static_cast<IMAPaccount *>(it);
73 imapAccounts.append(new IMAPviewItem( imap, this )); 73 imapAccounts.append(new IMAPviewItem( imap, this ));
74 } 74 }
75 else if ( it->getType() == MAILLIB::A_POP3 ) 75 else if ( it->getType() == MAILLIB::A_POP3 )
76 { 76 {
77 POP3account *pop3 = static_cast<POP3account *>(it); 77 POP3account *pop3 = static_cast<POP3account *>(it);
78 /* must not be hold 'cause it isn't required */ 78 /* must not be hold 'cause it isn't required */
79 (void) new POP3viewItem( pop3, this ); 79 (void) new POP3viewItem( pop3, this );
80 } 80 }
81 else if ( it->getType() == MAILLIB::A_NNTP ) 81 else if ( it->getType() == MAILLIB::A_NNTP )
82 { 82 {
83 NNTPaccount *nntp = static_cast<NNTPaccount *>(it); 83 NNTPaccount *nntp = static_cast<NNTPaccount *>(it);
84 /* must not be hold 'cause it isn't required */ 84 /* must not be hold 'cause it isn't required */
85 (void) new NNTPviewItem( nntp, this ); 85 (void) new NNTPviewItem( nntp, this );
86 } 86 }
87 } 87 }
88} 88}
89 89
90void AccountView::refresh(QListViewItem *item) 90void AccountView::refresh(QListViewItem *item)
91{ 91{
92 if ( item ) 92 if ( item )
93 { 93 {
94 m_currentItem = item; 94 m_currentItem = item;
95 QValueList<RecMailP> headerlist; 95 QValueList<RecMailP> headerlist;
96 AccountViewItem *view = static_cast<AccountViewItem *>(item); 96 AccountViewItem *view = static_cast<AccountViewItem *>(item);
97 view->refresh(headerlist); 97 view->refresh(headerlist);
98 emit refreshMailview(headerlist); 98 emit refreshMailview(headerlist);
99 } 99 }
100} 100}
101void AccountView::refreshOutgoing() 101void AccountView::refreshOutgoing()
102{ 102{
103 m_currentItem = currentItem(); 103 m_currentItem = currentItem();
104 if ( !m_currentItem ) return; 104 if ( !m_currentItem ) return;
105 AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem); 105 AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem);
106 QString bName = view->getFolder()->getDisplayName(); 106 QString bName = view->getFolder()->getDisplayName();
107 if (bName.startsWith("/")&&bName.length()>1) 107 if (bName.startsWith("/")&&bName.length()>1)
108 { 108 {
109 bName.replace(0,1,""); 109 bName.replace(0,1,"");
110 } 110 }
111 int pos = bName.findRev("/"); 111 int pos = bName.findRev("/");
112 if (pos > 0) 112 if (pos > 0)
113 { 113 {
114 bName.replace(0,pos+1,""); 114 bName.replace(0,pos+1,"");
115 } 115 }
116 if ( bName.lower() == "outgoing" ) 116 //qDebug("name *%s* ",bName.lower().latin1() );
117 if ( bName.lower() == "outgoing" || bName.lower() == "sent" || bName.lower() == "sendfailed" ) {
117 refreshCurrent(); 118 refreshCurrent();
119 // qDebug("refresh ");
120 }
118} 121}
119 122
120void AccountView::refreshCurrent() 123void AccountView::refreshCurrent()
121{ 124{
122 m_currentItem = currentItem(); 125 m_currentItem = currentItem();
123 if ( !m_currentItem ) return; 126 if ( !m_currentItem ) return;
124 QValueList<RecMailP> headerlist; 127 QValueList<RecMailP> headerlist;
125 AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem); 128 AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem);
126 view->refresh(headerlist); 129 view->refresh(headerlist);
127 emit refreshMailview(headerlist); 130 emit refreshMailview(headerlist);
128} 131}
129 132
130void AccountView::refreshAll() 133void AccountView::refreshAll()
131{ 134{
132} 135}
133 136
134RecBodyP AccountView::fetchBody(const RecMailP&aMail) 137RecBodyP AccountView::fetchBody(const RecMailP&aMail)
135{ 138{
136 QListViewItem*item = selectedItem (); 139 QListViewItem*item = selectedItem ();
137 if (!item) return new RecBody(); 140 if (!item) return new RecBody();
138 AccountViewItem *view = static_cast<AccountViewItem *>(item); 141 AccountViewItem *view = static_cast<AccountViewItem *>(item);
139 return view->fetchBody(aMail); 142 return view->fetchBody(aMail);
140} 143}
141 144
142void AccountView::setupFolderselect(Selectstore*sels) 145void AccountView::setupFolderselect(Selectstore*sels)
143{ 146{
144 147
145#ifndef DESKTOP_VERSION 148#ifndef DESKTOP_VERSION
146 sels->showMaximized(); 149 sels->showMaximized();
147#else 150#else
148 sels->show(); 151 sels->show();
149#endif 152#endif
150 QStringList sFolders; 153 QStringList sFolders;
151 unsigned int i = 0; 154 unsigned int i = 0;
152 for (i=0; i < mhAccounts.count();++i) 155 for (i=0; i < mhAccounts.count();++i)
153 { 156 {
154 mhAccounts[i]->refresh(false); 157 mhAccounts[i]->refresh(false);
155 sFolders = mhAccounts[i]->subFolders(); 158 sFolders = mhAccounts[i]->subFolders();
156 sels->addAccounts(mhAccounts[i]->getWrapper(),sFolders); 159 sels->addAccounts(mhAccounts[i]->getWrapper(),sFolders);
157 } 160 }
158 for (i=0; i < imapAccounts.count();++i) 161 for (i=0; i < imapAccounts.count();++i)
159 { 162 {
160 if (imapAccounts[i]->offline()) 163 if (imapAccounts[i]->offline())
161 continue; 164 continue;
162 imapAccounts[i]->refreshFolders(false); 165 imapAccounts[i]->refreshFolders(false);
163 sels->addAccounts(imapAccounts[i]->getWrapper(),imapAccounts[i]->subFolders()); 166 sels->addAccounts(imapAccounts[i]->getWrapper(),imapAccounts[i]->subFolders());
164 } 167 }
165} 168}
166void AccountView::downloadMailsInbox(const FolderP&fromFolder,AbstractMail*fromWrapper) 169void AccountView::downloadMailsInbox(const FolderP&fromFolder,AbstractMail*fromWrapper)
167{ 170{
168#if 0 171#if 0
169 AbstractMail*targetMail = 0; 172 AbstractMail*targetMail = 0;
170 QString targetFolder = ""; 173 QString targetFolder = "";
171 Selectstore sels; 174 Selectstore sels;
172 setupFolderselect(&sels); 175 setupFolderselect(&sels);
173 if (!sels.exec()) return; 176 if (!sels.exec()) return;
174 targetMail = sels.currentMail(); 177 targetMail = sels.currentMail();
175 targetFolder = sels.currentFolder(); 178 targetFolder = sels.currentFolder();
176 if ( (fromWrapper==targetMail && fromFolder->getName()==targetFolder) || 179 if ( (fromWrapper==targetMail && fromFolder->getName()==targetFolder) ||
177 targetFolder.isEmpty()) 180 targetFolder.isEmpty())
178 { 181 {
179 return; 182 return;
180 } 183 }
181 if (sels.newFolder() && !targetMail->createMbox(targetFolder)) 184 if (sels.newFolder() && !targetMail->createMbox(targetFolder))
182 { 185 {
183 QMessageBox::critical(0,i18n("Error creating new Folder"), 186 QMessageBox::critical(0,i18n("Error creating new Folder"),
184 i18n("<center>Error while creating<br>new folder - breaking.</center>")); 187 i18n("<center>Error while creating<br>new folder - breaking.</center>"));
185 return; 188 return;
186 } 189 }
187 int maxsize = 0; 190 int maxsize = 0;
188 if ( sels.useSize->isChecked()) 191 if ( sels.useSize->isChecked())
189 maxsize = sels.sizeSpinBox->value(); 192 maxsize = sels.sizeSpinBox->value();
190 fromWrapper->mvcpAllMails(fromFolder,targetFolder,targetMail,sels.moveMails(), maxsize); 193 fromWrapper->mvcpAllMails(fromFolder,targetFolder,targetMail,sels.moveMails(), maxsize);
191#endif 194#endif
192 fromWrapper->downloadNewMails( fromFolder, mhAccounts[0]->getWrapper()); 195 fromWrapper->downloadNewMails( fromFolder, mhAccounts[0]->getWrapper());
193 refreshCurrent(); 196 refreshCurrent();
194 197
195} 198}
196 199
197void AccountView::downloadMails(const FolderP&fromFolder,AbstractMail*fromWrapper) 200void AccountView::downloadMails(const FolderP&fromFolder,AbstractMail*fromWrapper)
198{ 201{
199 AbstractMail*targetMail = 0; 202 AbstractMail*targetMail = 0;
200 QString targetFolder = ""; 203 QString targetFolder = "";
201 Selectstore sels; 204 Selectstore sels;
202 setupFolderselect(&sels); 205 setupFolderselect(&sels);
203 if (!sels.exec()) return; 206 if (!sels.exec()) return;
204 targetMail = sels.currentMail(); 207 targetMail = sels.currentMail();
205 targetFolder = sels.currentFolder(); 208 targetFolder = sels.currentFolder();
206 if ( (fromWrapper==targetMail && fromFolder->getName()==targetFolder) || 209 if ( (fromWrapper==targetMail && fromFolder->getName()==targetFolder) ||
207 targetFolder.isEmpty()) 210 targetFolder.isEmpty())
208 { 211 {
209 return; 212 return;
210 } 213 }
211 if (sels.newFolder() && !targetMail->createMbox(targetFolder)) 214 if (sels.newFolder() && !targetMail->createMbox(targetFolder))
212 { 215 {
213 QMessageBox::critical(0,i18n("Error creating new Folder"), 216 QMessageBox::critical(0,i18n("Error creating new Folder"),
214 i18n("<center>Error while creating<br>new folder - breaking.</center>")); 217 i18n("<center>Error while creating<br>new folder - breaking.</center>"));
215 return; 218 return;
216 } 219 }
217 int maxsize = 0; 220 int maxsize = 0;
218 if ( sels.useSize->isChecked()) 221 if ( sels.useSize->isChecked())
219 maxsize = sels.sizeSpinBox->value(); 222 maxsize = sels.sizeSpinBox->value();
220 223
221 fromWrapper->mvcpAllMails(fromFolder,targetFolder,targetMail,sels.moveMails(), maxsize); 224 fromWrapper->mvcpAllMails(fromFolder,targetFolder,targetMail,sels.moveMails(), maxsize);
222 refreshCurrent(); 225 refreshCurrent();
223} 226}
224 227
225bool AccountView::currentisDraft() 228bool AccountView::currentisDraft()
226{ 229{
227 AccountViewItem *view = static_cast<AccountViewItem *>(currentItem()); 230 AccountViewItem *view = static_cast<AccountViewItem *>(currentItem());
228 if (!view) return false; 231 if (!view) return false;
229 return view->isDraftfolder(); 232 return view->isDraftfolder();
230} 233}
diff --git a/kmicromail/libmailwrapper/smtpwrapper.cpp b/kmicromail/libmailwrapper/smtpwrapper.cpp
index 24f4786..5096f67 100644
--- a/kmicromail/libmailwrapper/smtpwrapper.cpp
+++ b/kmicromail/libmailwrapper/smtpwrapper.cpp
@@ -1,238 +1,239 @@
1#include "smtpwrapper.h" 1#include "smtpwrapper.h"
2#include "mailwrapper.h" 2#include "mailwrapper.h"
3#include "abstractmail.h" 3#include "abstractmail.h"
4#include "logindialog.h" 4#include "logindialog.h"
5#include "mailtypes.h" 5#include "mailtypes.h"
6#include "sendmailprogress.h" 6#include "sendmailprogress.h"
7 7
8//#include <opie2/odebug.h> 8//#include <opie2/odebug.h>
9//#include <qt.h> 9//#include <qt.h>
10#include <qapplication.h> 10#include <qapplication.h>
11#include <qmessagebox.h> 11#include <qmessagebox.h>
12#include <stdlib.h> 12#include <stdlib.h>
13#ifndef DESKTOP_VERSION 13#ifndef DESKTOP_VERSION
14//#include <qpe/config.h> 14//#include <qpe/config.h>
15#include <qpe/qcopenvelope_qws.h> 15#include <qpe/qcopenvelope_qws.h>
16#endif 16#endif
17#include <libetpan/libetpan.h> 17#include <libetpan/libetpan.h>
18#include <klocale.h> 18#include <klocale.h>
19#include <kglobal.h> 19#include <kglobal.h>
20#include <kconfig.h> 20#include <kconfig.h>
21 21
22 22
23using namespace Opie::Core; 23using namespace Opie::Core;
24progressMailSend*SMTPwrapper::sendProgress = 0; 24progressMailSend*SMTPwrapper::sendProgress = 0;
25 25
26SMTPwrapper::SMTPwrapper(SMTPaccount * aSmtp ) 26SMTPwrapper::SMTPwrapper(SMTPaccount * aSmtp )
27 : Generatemail() 27 : Generatemail()
28{ 28{
29 m_SmtpAccount = aSmtp; 29 m_SmtpAccount = aSmtp;
30 KConfig cfg( locateLocal("config", "kopiemailrc" ) ); 30 KConfig cfg( locateLocal("config", "kopiemailrc" ) );
31 cfg.setGroup( "Status" ); 31 cfg.setGroup( "Status" );
32 m_queuedMail = cfg.readNumEntry( "outgoing", 0 ); 32 m_queuedMail = cfg.readNumEntry( "outgoing", 0 );
33 emit queuedMails( m_queuedMail ); 33 emit queuedMails( m_queuedMail );
34 connect( this, SIGNAL( queuedMails(int) ), this, SLOT( emitQCop(int) ) ); 34 connect( this, SIGNAL( queuedMails(int) ), this, SLOT( emitQCop(int) ) );
35 m_smtp = 0; 35 m_smtp = 0;
36} 36}
37 37
38SMTPwrapper::~SMTPwrapper() 38SMTPwrapper::~SMTPwrapper()
39{ 39{
40 disc_server(); 40 disc_server();
41} 41}
42 42
43void SMTPwrapper::emitQCop( int queued ) { 43void SMTPwrapper::emitQCop( int queued ) {
44#ifndef DESKTOP_VERSION 44#ifndef DESKTOP_VERSION
45 QCopEnvelope env( "QPE/Pim", "outgoingMails(int)" ); 45 // LR : not used in kde-pim
46 env << queued; 46 //QCopEnvelope env( "QPE/Pim", "outgoingMails(int)" );
47 //env << queued;
47#endif 48#endif
48} 49}
49 50
50QString SMTPwrapper::mailsmtpError( int errnum ) { 51QString SMTPwrapper::mailsmtpError( int errnum ) {
51 switch ( errnum ) { 52 switch ( errnum ) {
52 case MAILSMTP_NO_ERROR: 53 case MAILSMTP_NO_ERROR:
53 return i18n( "No error" ); 54 return i18n( "No error" );
54 case MAILSMTP_ERROR_UNEXPECTED_CODE: 55 case MAILSMTP_ERROR_UNEXPECTED_CODE:
55 return i18n( "Unexpected error code" ); 56 return i18n( "Unexpected error code" );
56 case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE: 57 case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE:
57 return i18n( "Service not available" ); 58 return i18n( "Service not available" );
58 case MAILSMTP_ERROR_STREAM: 59 case MAILSMTP_ERROR_STREAM:
59 return i18n( "Stream error" ); 60 return i18n( "Stream error" );
60 case MAILSMTP_ERROR_HOSTNAME: 61 case MAILSMTP_ERROR_HOSTNAME:
61 return i18n( "gethostname() failed" ); 62 return i18n( "gethostname() failed" );
62 case MAILSMTP_ERROR_NOT_IMPLEMENTED: 63 case MAILSMTP_ERROR_NOT_IMPLEMENTED:
63 return i18n( "Not implemented" ); 64 return i18n( "Not implemented" );
64 case MAILSMTP_ERROR_ACTION_NOT_TAKEN: 65 case MAILSMTP_ERROR_ACTION_NOT_TAKEN:
65 return i18n( "Error, action not taken" ); 66 return i18n( "Error, action not taken" );
66 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION: 67 case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION:
67 return i18n( "Data exceeds storage allocation" ); 68 return i18n( "Data exceeds storage allocation" );
68 case MAILSMTP_ERROR_IN_PROCESSING: 69 case MAILSMTP_ERROR_IN_PROCESSING:
69 return i18n( "Error in processing" ); 70 return i18n( "Error in processing" );
70 case MAILSMTP_ERROR_STARTTLS_NOT_SUPPORTED: 71 case MAILSMTP_ERROR_STARTTLS_NOT_SUPPORTED:
71 return i18n( "Starttls not supported" ); 72 return i18n( "Starttls not supported" );
72 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE: 73 // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE:
73 // return i18n( "Insufficient system storage" ); 74 // return i18n( "Insufficient system storage" );
74 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE: 75 case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE:
75 return i18n( "Mailbox unavailable" ); 76 return i18n( "Mailbox unavailable" );
76 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED: 77 case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED:
77 return i18n( "Mailbox name not allowed" ); 78 return i18n( "Mailbox name not allowed" );
78 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND: 79 case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND:
79 return i18n( "Bad command sequence" ); 80 return i18n( "Bad command sequence" );
80 case MAILSMTP_ERROR_USER_NOT_LOCAL: 81 case MAILSMTP_ERROR_USER_NOT_LOCAL:
81 return i18n( "User not local" ); 82 return i18n( "User not local" );
82 case MAILSMTP_ERROR_TRANSACTION_FAILED: 83 case MAILSMTP_ERROR_TRANSACTION_FAILED:
83 return i18n( "Transaction failed" ); 84 return i18n( "Transaction failed" );
84 case MAILSMTP_ERROR_MEMORY: 85 case MAILSMTP_ERROR_MEMORY:
85 return i18n( "Memory error" ); 86 return i18n( "Memory error" );
86 case MAILSMTP_ERROR_CONNECTION_REFUSED: 87 case MAILSMTP_ERROR_CONNECTION_REFUSED:
87 return i18n( "Connection refused" ); 88 return i18n( "Connection refused" );
88 default: 89 default:
89 return i18n( "Unknown error code" ); 90 return i18n( "Unknown error code" );
90 } 91 }
91} 92}
92 93
93 94
94void SMTPwrapper::progress( size_t current, size_t maximum ) { 95void SMTPwrapper::progress( size_t current, size_t maximum ) {
95 if (SMTPwrapper::sendProgress) { 96 if (SMTPwrapper::sendProgress) {
96 SMTPwrapper::sendProgress->setSingleMail(current, maximum ); 97 SMTPwrapper::sendProgress->setSingleMail(current, maximum );
97 qApp->processEvents(); 98 qApp->processEvents();
98 } 99 }
99} 100}
100 101
101void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) { 102void SMTPwrapper::storeMail(const char*mail, size_t length, const QString&box) {
102 if (!mail) 103 if (!mail)
103 return; 104 return;
104 QString localfolders = AbstractMail::defaultLocalfolder(); 105 QString localfolders = AbstractMail::defaultLocalfolder();
105 AbstractMail*wrap = AbstractMail::getWrapper(localfolders); 106 AbstractMail*wrap = AbstractMail::getWrapper(localfolders);
106 wrap->createMbox(box); 107 wrap->createMbox(box);
107 wrap->storeMessage(mail,length,box); 108 wrap->storeMessage(mail,length,box);
108 delete wrap; 109 delete wrap;
109} 110}
110 111
111bool SMTPwrapper::smtpSend( mailmime *mail,bool later) { 112bool SMTPwrapper::smtpSend( mailmime *mail,bool later) {
112 clist *rcpts = 0; 113 clist *rcpts = 0;
113 char *from, *data; 114 char *from, *data;
114 size_t size; 115 size_t size;
115 116
116 from = data = 0; 117 from = data = 0;
117 118
118 mailmessage * msg = 0; 119 mailmessage * msg = 0;
119 msg = mime_message_init(mail); 120 msg = mime_message_init(mail);
120 mime_message_set_tmpdir(msg,getenv( "HOME" )); 121 mime_message_set_tmpdir(msg,getenv( "HOME" ));
121 int r = mailmessage_fetch(msg,&data,&size); 122 int r = mailmessage_fetch(msg,&data,&size);
122 mime_message_detach_mime(msg); 123 mime_message_detach_mime(msg);
123 mailmessage_free(msg); 124 mailmessage_free(msg);
124 if (r != MAIL_NO_ERROR || !data) { 125 if (r != MAIL_NO_ERROR || !data) {
125 if (data) 126 if (data)
126 free(data); 127 free(data);
127 qDebug("Error fetching mime... "); 128 qDebug("Error fetching mime... ");
128 return false; 129 return false;
129 } 130 }
130 msg = 0; 131 msg = 0;
131 if (later) { 132 if (later) {
132 storeMail(data,size,"Outgoing"); 133 storeMail(data,size,"Outgoing");
133 if (data) 134 if (data)
134 free( data ); 135 free( data );
135 KConfig cfg( locateLocal("config", "kopiemailrc" ) ); 136 KConfig cfg( locateLocal("config", "kopiemailrc" ) );
136 cfg.setGroup( "Status" ); 137 cfg.setGroup( "Status" );
137 cfg.writeEntry( "outgoing", ++m_queuedMail ); 138 cfg.writeEntry( "outgoing", ++m_queuedMail );
138 emit queuedMails( m_queuedMail ); 139 emit queuedMails( m_queuedMail );
139 return true; 140 return true;
140 } 141 }
141 from = getFrom( mail ); 142 from = getFrom( mail );
142 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields ); 143 rcpts = createRcptList( mail->mm_data.mm_message.mm_fields );
143 bool result = smtpSend(from,rcpts,data,size); 144 bool result = smtpSend(from,rcpts,data,size);
144 if (data) { 145 if (data) {
145 free(data); 146 free(data);
146 } 147 }
147 if (from) { 148 if (from) {
148 free(from); 149 free(from);
149 } 150 }
150 if (rcpts) 151 if (rcpts)
151 smtp_address_list_free( rcpts ); 152 smtp_address_list_free( rcpts );
152 return result; 153 return result;
153} 154}
154 155
155void SMTPwrapper::storeFailedMail(const char*data,unsigned int size, const char*failuremessage) 156void SMTPwrapper::storeFailedMail(const char*data,unsigned int size, const char*failuremessage)
156{ 157{
157 if (data) { 158 if (data) {
158 storeMail(data,size,"Sendfailed"); 159 storeMail(data,size,"Sendfailed");
159 } 160 }
160 if (failuremessage) { 161 if (failuremessage) {
161 QMessageBox::critical(0,i18n("Error sending mail"), 162 QMessageBox::critical(0,i18n("Error sending mail"),
162 failuremessage); 163 failuremessage);
163 } 164 }
164} 165}
165 166
166int SMTPwrapper::start_smtp_tls() 167int SMTPwrapper::start_smtp_tls()
167{ 168{
168 if (!m_smtp) { 169 if (!m_smtp) {
169 return MAILSMTP_ERROR_IN_PROCESSING; 170 return MAILSMTP_ERROR_IN_PROCESSING;
170 } 171 }
171 int err = mailesmtp_starttls(m_smtp); 172 int err = mailesmtp_starttls(m_smtp);
172 if (err != MAILSMTP_NO_ERROR) return err; 173 if (err != MAILSMTP_NO_ERROR) return err;
173 mailstream_low * low; 174 mailstream_low * low;
174 mailstream_low * new_low; 175 mailstream_low * new_low;
175 low = mailstream_get_low(m_smtp->stream); 176 low = mailstream_get_low(m_smtp->stream);
176 if (!low) { 177 if (!low) {
177 return MAILSMTP_ERROR_IN_PROCESSING; 178 return MAILSMTP_ERROR_IN_PROCESSING;
178 } 179 }
179 int fd = mailstream_low_get_fd(low); 180 int fd = mailstream_low_get_fd(low);
180 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) { 181 if (fd > -1 && (new_low = mailstream_low_ssl_open(fd))!=0) {
181 mailstream_low_free(low); 182 mailstream_low_free(low);
182 mailstream_set_low(m_smtp->stream, new_low); 183 mailstream_set_low(m_smtp->stream, new_low);
183 } else { 184 } else {
184 return MAILSMTP_ERROR_IN_PROCESSING; 185 return MAILSMTP_ERROR_IN_PROCESSING;
185 } 186 }
186 return err; 187 return err;
187} 188}
188 189
189void SMTPwrapper::connect_server() 190void SMTPwrapper::connect_server()
190{ 191{
191 QString server, user, pass; 192 QString server, user, pass;
192 bool ssl; 193 bool ssl;
193 uint16_t port; 194 uint16_t port;
194 ssl = false; 195 ssl = false;
195 bool try_tls = true; 196 bool try_tls = true;
196 bool force_tls=false; 197 bool force_tls=false;
197 QString failuretext = ""; 198 QString failuretext = "";
198 199
199 if (m_smtp || !m_SmtpAccount) { 200 if (m_smtp || !m_SmtpAccount) {
200 return; 201 return;
201 } 202 }
202 server = m_SmtpAccount->getServer(); 203 server = m_SmtpAccount->getServer();
203 if ( m_SmtpAccount->ConnectionType() == 2 ) { 204 if ( m_SmtpAccount->ConnectionType() == 2 ) {
204 ssl = true; 205 ssl = true;
205 try_tls = false; 206 try_tls = false;
206 } else if (m_SmtpAccount->ConnectionType() == 1) { 207 } else if (m_SmtpAccount->ConnectionType() == 1) {
207 force_tls = true; 208 force_tls = true;
208 } 209 }
209 int result = 1; 210 int result = 1;
210 port = m_SmtpAccount->getPort().toUInt(); 211 port = m_SmtpAccount->getPort().toUInt();
211 212
212 m_smtp = mailsmtp_new( 20, &progress ); 213 m_smtp = mailsmtp_new( 20, &progress );
213 if ( m_smtp == NULL ) { 214 if ( m_smtp == NULL ) {
214 /* no failure message cause this happens when problems with memory - than we 215 /* no failure message cause this happens when problems with memory - than we
215 we can not display any messagebox */ 216 we can not display any messagebox */
216 return; 217 return;
217 } 218 }
218 219
219 int err = MAILSMTP_NO_ERROR; 220 int err = MAILSMTP_NO_ERROR;
220 ; // odebug << "Servername " << server << " at port " << port << "" << oendl; 221 ; // odebug << "Servername " << server << " at port " << port << "" << oendl;
221 if ( ssl ) { 222 if ( ssl ) {
222 qDebug("smtp: ssl_connect "); 223 qDebug("smtp: ssl_connect ");
223 err = mailsmtp_ssl_connect( m_smtp, server.latin1(), port ); 224 err = mailsmtp_ssl_connect( m_smtp, server.latin1(), port );
224 } else { 225 } else {
225 ; // odebug << "No SSL session" << oendl; 226 ; // odebug << "No SSL session" << oendl;
226 err = mailsmtp_socket_connect( m_smtp, server.latin1(), port ); 227 err = mailsmtp_socket_connect( m_smtp, server.latin1(), port );
227 } 228 }
228 if ( err != MAILSMTP_NO_ERROR ) { 229 if ( err != MAILSMTP_NO_ERROR ) {
229 qDebug("Error init SMTP connection" ); 230 qDebug("Error init SMTP connection" );
230 failuretext = i18n("Error init SMTP connection:\n%1").arg(mailsmtpError(err)); 231 failuretext = i18n("Error init SMTP connection:\n%1").arg(mailsmtpError(err));
231 result = 0; 232 result = 0;
232 } 233 }
233 234
234 qDebug("SMTP connection inited "); 235 qDebug("SMTP connection inited ");
235 /* switch to tls after init 'cause there it will send the ehlo */ 236 /* switch to tls after init 'cause there it will send the ehlo */
236 if (result) { 237 if (result) {
237 err = mailsmtp_init( m_smtp ); 238 err = mailsmtp_init( m_smtp );
238 if (err != MAILSMTP_NO_ERROR) { 239 if (err != MAILSMTP_NO_ERROR) {
@@ -252,219 +253,218 @@ void SMTPwrapper::connect_server()
252 } 253 }
253 } 254 }
254 //qDebug("mailesmtp_ehlo %d ",err ); 255 //qDebug("mailesmtp_ehlo %d ",err );
255 if (!try_tls && force_tls) { 256 if (!try_tls && force_tls) {
256 result = 0; 257 result = 0;
257 failuretext = i18n("Error init SMTP tls:%1").arg(mailsmtpError(err)); 258 failuretext = i18n("Error init SMTP tls:%1").arg(mailsmtpError(err));
258 } 259 }
259 260
260 if (result==1 && m_SmtpAccount->getLogin() ) { 261 if (result==1 && m_SmtpAccount->getLogin() ) {
261 ; // odebug << "smtp with auth" << oendl; 262 ; // odebug << "smtp with auth" << oendl;
262 if ( m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty() ) { 263 if ( m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty() ) {
263 // get'em 264 // get'em
264 LoginDialog login( m_SmtpAccount->getUser(), 265 LoginDialog login( m_SmtpAccount->getUser(),
265 m_SmtpAccount->getPassword(), NULL, 0, true ); 266 m_SmtpAccount->getPassword(), NULL, 0, true );
266 login.show(); 267 login.show();
267 if ( QDialog::Accepted == login.exec() ) { 268 if ( QDialog::Accepted == login.exec() ) {
268 // ok 269 // ok
269 user = login.getUser(); 270 user = login.getUser();
270 pass = login.getPassword(); 271 pass = login.getPassword();
271 } else { 272 } else {
272 result = 0; 273 result = 0;
273 failuretext=i18n("Login aborted - \nstoring mail to localfolder"); 274 failuretext=i18n("Login aborted - \nstoring mail to localfolder");
274 } 275 }
275 } else { 276 } else {
276 user = m_SmtpAccount->getUser(); 277 user = m_SmtpAccount->getUser();
277 pass = m_SmtpAccount->getPassword(); 278 pass = m_SmtpAccount->getPassword();
278 } 279 }
279 ; // odebug << "session->auth: " << m_smtp->auth << "" << oendl; 280 ; // odebug << "session->auth: " << m_smtp->auth << "" << oendl;
280 if (result) { 281 if (result) {
281 err = mailsmtp_auth( m_smtp, (char*)user.latin1(), (char*)pass.latin1() ); 282 err = mailsmtp_auth( m_smtp, (char*)user.latin1(), (char*)pass.latin1() );
282 if ( err == MAILSMTP_NO_ERROR ) { 283 if ( err == MAILSMTP_NO_ERROR ) {
283 qDebug("Smtp authentification ok "); 284 qDebug("Smtp authentification ok ");
284 } else { 285 } else {
285 failuretext = i18n("Authentification failed"); 286 failuretext = i18n("Authentification failed");
286 result = 0; 287 result = 0;
287 } 288 }
288 } 289 }
289 } 290 }
290} 291}
291 292
292void SMTPwrapper::disc_server() 293void SMTPwrapper::disc_server()
293{ 294{
294 if (m_smtp) { 295 if (m_smtp) {
295 mailsmtp_quit( m_smtp ); 296 mailsmtp_quit( m_smtp );
296 mailsmtp_free( m_smtp ); 297 mailsmtp_free( m_smtp );
297 m_smtp = 0; 298 m_smtp = 0;
298 } 299 }
299} 300}
300 301
301int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size ) 302int SMTPwrapper::smtpSend(char*from,clist*rcpts,const char*data,size_t size )
302{ 303{
303 int err,result; 304 int err,result;
304 QString failuretext = ""; 305 QString failuretext = "";
305 306
306 connect_server(); 307 connect_server();
307 308
308 result = 1; 309 result = 1;
309 if (m_smtp) { 310 if (m_smtp) {
310 err = mailsmtp_send( m_smtp, from, rcpts, data, size ); 311 err = mailsmtp_send( m_smtp, from, rcpts, data, size );
311 if ( err != MAILSMTP_NO_ERROR ) { 312 if ( err != MAILSMTP_NO_ERROR ) {
312 qDebug("Error sending mail"); 313 qDebug("Error sending mail");
313 failuretext=i18n("Error sending mail:\n%1").arg(mailsmtpError(err)); 314 failuretext=i18n("Error sending mail:\n%1").arg(mailsmtpError(err));
314 result = 0; 315 result = 0;
315 } 316 }
316 } else { 317 } else {
317 result = 0; 318 result = 0;
318 } 319 }
319 320
320 if (!result) { 321 if (!result) {
321 storeFailedMail(data,size,failuretext); 322 storeFailedMail(data,size,failuretext);
322 } else { 323 } else {
323 ; // odebug << "Mail sent." << oendl; 324 ; // odebug << "Mail sent." << oendl;
324 storeMail(data,size,"Sent"); 325 storeMail(data,size,"Sent");
325 } 326 }
326 return result; 327 return result;
327} 328}
328 329
329bool SMTPwrapper::sendMail(const Opie::Core::OSmartPointer<Mail>&mail,bool later ) 330bool SMTPwrapper::sendMail(const Opie::Core::OSmartPointer<Mail>&mail,bool later )
330{ 331{
331 mailmime * mimeMail; 332 mailmime * mimeMail;
332 bool result = true; 333 bool result = true;
333 mimeMail = createMimeMail(mail ); 334 mimeMail = createMimeMail(mail );
334 if ( mimeMail == 0 ) { 335 if ( mimeMail == 0 ) {
335 qDebug("SMTP wrapper:Error creating mail! "); 336 qDebug("SMTP wrapper:Error creating mail! ");
336 return false; 337 return false;
337 } else { 338 } else {
338 sendProgress = new progressMailSend(); 339 sendProgress = new progressMailSend();
339 sendProgress->show(); 340 sendProgress->show();
340 sendProgress->setMaxMails(1); 341 sendProgress->setMaxMails(1);
341 result = smtpSend( mimeMail,later); 342 result = smtpSend( mimeMail,later);
342 ; // odebug << "Clean up done" << oendl; 343 ; // odebug << "Clean up done" << oendl;
343 sendProgress->hide(); 344 sendProgress->hide();
344 delete sendProgress; 345 delete sendProgress;
345 sendProgress = 0; 346 sendProgress = 0;
346 mailmime_free( mimeMail ); 347 mailmime_free( mimeMail );
347 } 348 }
348 return result; 349 return result;
349} 350}
350 351
351int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,const RecMailP&which) { 352int SMTPwrapper::sendQueuedMail(AbstractMail*wrap,const RecMailP&which) {
352 size_t curTok = 0; 353 size_t curTok = 0;
353 mailimf_fields *fields = 0; 354 mailimf_fields *fields = 0;
354 mailimf_field*ffrom = 0; 355 mailimf_field*ffrom = 0;
355 clist *rcpts = 0; 356 clist *rcpts = 0;
356 char*from = 0; 357 char*from = 0;
357 int res = 0; 358 int res = 0;
358 359
359 encodedString * data = wrap->fetchRawBody(which); 360 encodedString * data = wrap->fetchRawBody(which);
360 if (!data) 361 if (!data)
361 return 0; 362 return 0;
362 int err = mailimf_fields_parse( data->Content(), data->Length(), &curTok, &fields ); 363 int err = mailimf_fields_parse( data->Content(), data->Length(), &curTok, &fields );
363 if (err != MAILIMF_NO_ERROR) { 364 if (err != MAILIMF_NO_ERROR) {
364 delete data; 365 delete data;
365 delete wrap; 366 delete wrap;
366 return 0; 367 return 0;
367 } 368 }
368 369
369 rcpts = createRcptList( fields ); 370 rcpts = createRcptList( fields );
370 ffrom = getField(fields, MAILIMF_FIELD_FROM ); 371 ffrom = getField(fields, MAILIMF_FIELD_FROM );
371 from = getFrom(ffrom); 372 from = getFrom(ffrom);
372 373
373 if (rcpts && from) { 374 if (rcpts && from) {
374 res = smtpSend(from,rcpts,data->Content(),data->Length()); 375 res = smtpSend(from,rcpts,data->Content(),data->Length());
375 } 376 }
376 if (fields) { 377 if (fields) {
377 mailimf_fields_free(fields); 378 mailimf_fields_free(fields);
378 fields = 0; 379 fields = 0;
379 } 380 }
380 if (data) { 381 if (data) {
381 delete data; 382 delete data;
382 } 383 }
383 if (from) { 384 if (from) {
384 free(from); 385 free(from);
385 } 386 }
386 if (rcpts) { 387 if (rcpts) {
387 smtp_address_list_free( rcpts ); 388 smtp_address_list_free( rcpts );
388 } 389 }
389 return res; 390 return res;
390} 391}
391 392
392/* this is a special fun */ 393/* this is a special fun */
393bool SMTPwrapper::flushOutbox() { 394bool SMTPwrapper::flushOutbox() {
394 bool returnValue = true; 395 bool returnValue = true;
395 396
396 ; // odebug << "Sending the queue" << oendl; 397 ; // odebug << "Sending the queue" << oendl;
397 if (!m_SmtpAccount) { 398 if (!m_SmtpAccount) {
398 ; // odebug << "No smtp account given" << oendl; 399 ; // odebug << "No smtp account given" << oendl;
399 return false; 400 return false;
400 } 401 }
401 402
402 bool reset_user_value = false; 403 bool reset_user_value = false;
403 QString localfolders = AbstractMail::defaultLocalfolder(); 404 QString localfolders = AbstractMail::defaultLocalfolder();
404 AbstractMail*wrap = AbstractMail::getWrapper(localfolders); 405 AbstractMail*wrap = AbstractMail::getWrapper(localfolders);
405 if (!wrap) { 406 if (!wrap) {
406 ; // odebug << "memory error" << oendl; 407 ; // odebug << "memory error" << oendl;
407 return false; 408 return false;
408 } 409 }
409 QString oldPw, oldUser; 410 QString oldPw, oldUser;
410 QValueList<RecMailP> mailsToSend; 411 QValueList<RecMailP> mailsToSend;
411 QValueList<RecMailP> mailsToRemove; 412 QValueList<RecMailP> mailsToRemove;
412 QString mbox("Outgoing"); 413 QString mbox("Outgoing");
413 wrap->listMessages(mbox,mailsToSend); 414 wrap->listMessages(mbox,mailsToSend);
414 if (mailsToSend.count()==0) { 415 if (mailsToSend.count()==0) {
415 delete wrap; 416 delete wrap;
416 ; // odebug << "No mails to send" << oendl; 417 ; // odebug << "No mails to send" << oendl;
417 return false; 418 return false;
418 } 419 }
419 420
420 oldPw = m_SmtpAccount->getPassword(); 421 oldPw = m_SmtpAccount->getPassword();
421 oldUser = m_SmtpAccount->getUser(); 422 oldUser = m_SmtpAccount->getUser();
422 if (m_SmtpAccount->getLogin() && (m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty()) ) { 423 if (m_SmtpAccount->getLogin() && (m_SmtpAccount->getUser().isEmpty() || m_SmtpAccount->getPassword().isEmpty()) ) {
423 // get'em 424 // get'em
424 QString user,pass; 425 QString user,pass;
425 LoginDialog login( m_SmtpAccount->getUser(), m_SmtpAccount->getPassword(), NULL, 0, true ); 426 LoginDialog login( m_SmtpAccount->getUser(), m_SmtpAccount->getPassword(), NULL, 0, true );
426 login.show(); 427 login.show();
427 if ( QDialog::Accepted == login.exec() ) { 428 if ( QDialog::Accepted == login.exec() ) {
428 // ok 429 // ok
429 user = login.getUser().latin1(); 430 user = login.getUser().latin1();
430 pass = login.getPassword().latin1(); 431 pass = login.getPassword().latin1();
431 reset_user_value = true; 432 reset_user_value = true;
432 m_SmtpAccount->setUser(user); 433 m_SmtpAccount->setUser(user);
433 m_SmtpAccount->setPassword(pass); 434 m_SmtpAccount->setPassword(pass);
434 } else { 435 } else {
435 return true; 436 return true;
436 } 437 }
437 } 438 }
438 439
439 440
440 sendProgress = new progressMailSend(); 441 sendProgress = new progressMailSend();
441 sendProgress->show(); 442 sendProgress->show();
442 sendProgress->setMaxMails(mailsToSend.count()); 443 sendProgress->setMaxMails(mailsToSend.count());
443 444
444 while (mailsToSend.count()>0) { 445 while (returnValue && mailsToSend.count()>0) {
445 if (sendQueuedMail(wrap, (*mailsToSend.begin()))==0) { 446 if (sendQueuedMail(wrap, (*mailsToSend.begin()))==0) {
446 QMessageBox::critical(0,i18n("Error sending mail"), 447 QMessageBox::critical(0,i18n("Error sending mail"),
447 i18n("Error sending queued mail - breaking")); 448 i18n("Error sending queued mail.\nBreaking."));
448 returnValue = false; 449 returnValue = false;
449 break;
450 } 450 }
451 mailsToRemove.append((*mailsToSend.begin())); 451 mailsToRemove.append((*mailsToSend.begin()));
452 mailsToSend.remove(mailsToSend.begin()); 452 mailsToSend.remove(mailsToSend.begin());
453 sendProgress->setCurrentMails(mailsToRemove.count()); 453 sendProgress->setCurrentMails(mailsToRemove.count());
454 } 454 }
455 if (reset_user_value) { 455 if (reset_user_value) {
456 m_SmtpAccount->setUser(oldUser); 456 m_SmtpAccount->setUser(oldUser);
457 m_SmtpAccount->setPassword(oldPw); 457 m_SmtpAccount->setPassword(oldPw);
458 } 458 }
459 KConfig cfg( locateLocal("config", "kopiemailrc" ) ); 459 KConfig cfg( locateLocal("config", "kopiemailrc" ) );
460 cfg.setGroup( "Status" ); 460 cfg.setGroup( "Status" );
461 m_queuedMail = 0; 461 m_queuedMail = mailsToSend.count();
462 cfg.writeEntry( "outgoing", m_queuedMail ); 462 cfg.writeEntry( "outgoing", m_queuedMail );
463 emit queuedMails( m_queuedMail ); 463 emit queuedMails( m_queuedMail );
464 sendProgress->hide(); 464 sendProgress->hide();
465 delete sendProgress; 465 delete sendProgress;
466 sendProgress = 0; 466 sendProgress = 0;
467 wrap->deleteMails(mbox,mailsToRemove); 467 wrap->deleteMails(mbox,mailsToRemove);
468 delete wrap; 468 delete wrap;
469 return returnValue; 469 return returnValue;
470} 470}
diff --git a/kmicromail/opiemail.cpp b/kmicromail/opiemail.cpp
index f68467c..197f7ec 100644
--- a/kmicromail/opiemail.cpp
+++ b/kmicromail/opiemail.cpp
@@ -1,672 +1,677 @@
1// CHANGED 2004-09-31 Lutz Rogowski 1// CHANGED 2004-09-31 Lutz Rogowski
2// CHANGED 2004-08-06 Lutz Rogowski 2// CHANGED 2004-08-06 Lutz Rogowski
3 3
4 4
5#define protected public 5#define protected public
6#include <qwidget.h> 6#include <qwidget.h>
7#undef protected 7#undef protected
8#include "koprefsdialog.h" 8#include "koprefsdialog.h"
9#include <kapplication.h> 9#include <kapplication.h>
10#include <libkdepim/externalapphandler.h> 10#include <libkdepim/externalapphandler.h>
11#include <libkdepim/kpimglobalprefs.h> 11#include <libkdepim/kpimglobalprefs.h>
12#ifdef MINIKDE_KDIALOG_H 12#ifdef MINIKDE_KDIALOG_H
13#undef MINIKDE_KDIALOG_H 13#undef MINIKDE_KDIALOG_H
14#endif 14#endif
15#include "settingsdialog.h" 15#include "settingsdialog.h"
16#include "opiemail.h" 16#include "opiemail.h"
17#include "editaccounts.h" 17#include "editaccounts.h"
18#include "composemail.h" 18#include "composemail.h"
19#include "mailistviewitem.h" 19#include "mailistviewitem.h"
20#include "viewmail.h" 20#include "viewmail.h"
21#include "selectstore.h" 21#include "selectstore.h"
22#include "selectsmtp.h" 22#include "selectsmtp.h"
23#include "accountitem.h" 23#include "accountitem.h"
24#include "accountview.h" 24#include "accountview.h"
25#include "klocale.h" 25#include "klocale.h"
26 26
27#include <qmessagebox.h> 27#include <qmessagebox.h>
28#include <qtimer.h> 28#include <qtimer.h>
29#include <qcursor.h> 29#include <qcursor.h>
30#include <qtextbrowser.h> 30#include <qtextbrowser.h>
31#include <qregexp.h> 31#include <qregexp.h>
32#include <qpe/global.h> 32#include <qpe/global.h>
33 33
34#ifdef DESKTOP_VERSION 34#ifdef DESKTOP_VERSION
35#include <qapplication.h> 35#include <qapplication.h>
36#else 36#else
37#include <qpe/qpeapplication.h> 37#include <qpe/qpeapplication.h>
38#endif 38#endif
39#include <libmailwrapper/smtpwrapper.h> 39#include <libmailwrapper/smtpwrapper.h>
40#include <libmailwrapper/mailtypes.h> 40#include <libmailwrapper/mailtypes.h>
41#include <libmailwrapper/abstractmail.h> 41#include <libmailwrapper/abstractmail.h>
42#include "koprefs.h" 42#include "koprefs.h"
43 43
44//using namespace Opie::Core; 44//using namespace Opie::Core;
45 45
46OpieMail::OpieMail( QWidget *parent, const char *name ) 46OpieMail::OpieMail( QWidget *parent, const char *name )
47 : MainWindow( parent, name) //, WStyle_ContextHelp ) 47 : MainWindow( parent, name) //, WStyle_ContextHelp )
48{ 48{
49 mCurrentComposer = 0; 49 mCurrentComposer = 0;
50 settings = new Settings(); 50 settings = new Settings();
51 tb = 0; 51 tb = 0;
52 setIcon(SmallIcon( "kmicromail" ) ); 52 setIcon(SmallIcon( "kmicromail" ) );
53 folderView->populate( settings->getAccounts() ); 53 folderView->populate( settings->getAccounts() );
54 connect(ExternalAppHandler::instance(), SIGNAL(receivedNameEmailUidListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&)), 54 connect(ExternalAppHandler::instance(), SIGNAL(receivedNameEmailUidListEvent(const QString&, const QStringList&, const QStringList&, const QStringList&)),
55 this, SLOT(insertAttendees(const QString&, const QStringList&, const QStringList&, const QStringList&))); 55 this, SLOT(insertAttendees(const QString&, const QStringList&, const QStringList&, const QStringList&)));
56} 56}
57 57
58OpieMail::~OpieMail() 58OpieMail::~OpieMail()
59{ 59{
60 if (settings) delete settings; 60 if (settings) delete settings;
61 if ( tb ) 61 if ( tb )
62 delete tb; 62 delete tb;
63} 63}
64 64
65void OpieMail::appMessage(const QCString &msg, const QByteArray &data) 65void OpieMail::appMessage(const QCString &msg, const QByteArray &data)
66{ 66{
67 67
68} 68}
69#include <stdlib.h> 69#include <stdlib.h>
70void OpieMail::message(const QCString &msg, const QByteArray &data) 70void OpieMail::message(const QCString &msg, const QByteArray &data)
71{ 71{
72 // copied from old mail2 72 // copied from old mail2
73 static int ii = 0; 73 static int ii = 0;
74 //qDebug("QCOP CALL ############################# %d ", ii); 74 //qDebug("QCOP CALL ############################# %d ", ii);
75 //QString mess ( msg ); 75 //QString mess ( msg );
76 //qDebug("Message = %s ",mess.latin1()); 76 //qDebug("Message = %s ",mess.latin1());
77 ++ii; 77 ++ii;
78 //qDebug("KM:appMessage %d *%s* %x", ii, msg.data(), this); 78 //qDebug("KM:appMessage %d *%s* %x", ii, msg.data(), this);
79 79
80 mPendingEmail = QString::null; 80 mPendingEmail = QString::null;
81 mPendingName = QString::null; 81 mPendingName = QString::null;
82 if (msg == "writeMail(QString,QString)") 82 if (msg == "writeMail(QString,QString)")
83 { 83 {
84 //qDebug("writeMail(QString,QString) "); 84 //qDebug("writeMail(QString,QString) ");
85 QDataStream stream(data,IO_ReadOnly); 85 QDataStream stream(data,IO_ReadOnly);
86 stream >> mPendingName >> mPendingEmail; 86 stream >> mPendingName >> mPendingEmail;
87 // removing the whitespaces at beginning and end is needed! 87 // removing the whitespaces at beginning and end is needed!
88 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) ); 88 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) );
89 } 89 }
90 else if (msg == "newMail()") 90 else if (msg == "newMail()")
91 { 91 {
92 //qDebug("slotComposeMail() "); 92 //qDebug("slotComposeMail() ");
93 // we cannot call slotComposeMail(); directly, because may be executing a QCOP call 93 // we cannot call slotComposeMail(); directly, because may be executing a QCOP call
94 // and a QCOP call does not like a processevents in his execution 94 // and a QCOP call does not like a processevents in his execution
95 // with the Qtimer we call slotComposeMail() after we reached the main event loop 95 // with the Qtimer we call slotComposeMail() after we reached the main event loop
96 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) ); 96 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) );
97 // slotComposeMail(); 97 // slotComposeMail();
98 } 98 }
99 else if (msg == "newMail(QString)") 99 else if (msg == "newMail(QString)")
100 { 100 {
101 //qDebug(" newMail(QString)"); 101 //qDebug(" newMail(QString)");
102 QDataStream stream(data,IO_ReadOnly); 102 QDataStream stream(data,IO_ReadOnly);
103 stream >> mPendingName; 103 stream >> mPendingName;
104 // the format is 104 // the format is
105 // NAME <EMAIL>:SUBJECT 105 // NAME <EMAIL>:SUBJECT
106 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) ); 106 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) );
107 } else { 107 } else {
108 mPendingData = data; 108 mPendingData = data;
109 mPendingMessage = msg; 109 mPendingMessage = msg;
110 QTimer::singleShot ( 50, this, SLOT(slotExtAppHandler() ) ); 110 QTimer::singleShot ( 50, this, SLOT(slotExtAppHandler() ) );
111 } 111 }
112 112
113 //qDebug("END OpieMail::message "); 113 //qDebug("END OpieMail::message ");
114} 114}
115void OpieMail::slotExtAppHandler() 115void OpieMail::slotExtAppHandler()
116{ 116{
117 ExternalAppHandler::instance()->appMessage ( mPendingMessage, mPendingData ); 117 ExternalAppHandler::instance()->appMessage ( mPendingMessage, mPendingData );
118} 118}
119void OpieMail::slotwriteMail2(const QString& namemail ) 119void OpieMail::slotwriteMail2(const QString& namemail )
120{ 120{
121 //qDebug("OpieMail::slotwriteMail2 "); 121 //qDebug("OpieMail::slotwriteMail2 ");
122 //qApp->processEvents(); 122 //qApp->processEvents();
123 ComposeMail compose( settings, this, 0, true ); 123 ComposeMail compose( settings, this, 0, true );
124 if ( !namemail.isEmpty() ) { 124 if ( !namemail.isEmpty() ) {
125 QString to = namemail; 125 QString to = namemail;
126 if ( namemail.find( " <") > 1 ) { 126 if ( namemail.find( " <") > 1 ) {
127 to = "\"" +to.replace( QRegExp( " <"), "\" <") ; 127 to = "\"" +to.replace( QRegExp( " <"), "\" <") ;
128 } else 128 } else
129 if ( namemail.find( "<") > 1 ) { 129 if ( namemail.find( "<") > 1 ) {
130 to = "\"" +to.replace( QRegExp( "<"), "\" <") ; 130 to = "\"" +to.replace( QRegExp( "<"), "\" <") ;
131 } 131 }
132 int sub = to.find( ">:"); 132 int sub = to.find( ">:");
133 if ( sub > 0 ) { 133 if ( sub > 0 ) {
134 compose.setTo( to.left(sub+1) ); 134 compose.setTo( to.left(sub+1) );
135 compose.setSubject( to.mid(sub+2) ); 135 compose.setSubject( to.mid(sub+2) );
136 } else 136 } else
137 compose.setTo( to ); 137 compose.setTo( to );
138 } 138 }
139 compose.slotAdjustColumns(); 139 compose.slotAdjustColumns();
140#ifndef DESKTOP_VERSION 140#ifndef DESKTOP_VERSION
141 compose.showMaximized(); 141 compose.showMaximized();
142#endif 142#endif
143 mCurrentComposer = &compose; 143 mCurrentComposer = &compose;
144 compose.exec(); 144 compose.exec();
145 mCurrentComposer = 0; 145 mCurrentComposer = 0;
146 folderView->refreshOutgoing();
146 raise(); 147 raise();
147 //qDebug("retttich "); 148 //qDebug("retttich ");
148} 149}
149void OpieMail::slotwriteMail(const QString&name,const QString&email) 150void OpieMail::slotwriteMail(const QString&name,const QString&email)
150{ 151{
151 // qDebug("OpieMail::slotwriteMail "); 152 // qDebug("OpieMail::slotwriteMail ");
152 ComposeMail compose( settings, this, 0, true ); 153 ComposeMail compose( settings, this, 0, true );
153 if (!email.isEmpty()) 154 if (!email.isEmpty())
154 { 155 {
155 if (!name.isEmpty()) 156 if (!name.isEmpty())
156 { 157 {
157 compose.setTo("\"" + name + "\"" + " " + "<"+ email + ">"); 158 compose.setTo("\"" + name + "\"" + " " + "<"+ email + ">");
158 } 159 }
159 else 160 else
160 { 161 {
161 compose.setTo(email); 162 compose.setTo(email);
162 } 163 }
163 } 164 }
164 compose.slotAdjustColumns(); 165 compose.slotAdjustColumns();
165#ifndef DESKTOP_VERSION 166#ifndef DESKTOP_VERSION
166 compose.showMaximized(); 167 compose.showMaximized();
167#endif 168#endif
168 169
169 mCurrentComposer = &compose; 170 mCurrentComposer = &compose;
170 compose.exec(); 171 compose.exec();
171 mCurrentComposer = 0; 172 mCurrentComposer = 0;
173 folderView->refreshOutgoing();
172 raise(); 174 raise();
173} 175}
174 176
175void OpieMail::slotComposeMail() 177void OpieMail::slotComposeMail()
176{ 178{
177 if ( mPendingEmail == QString::null && mPendingName == QString::null) 179 if ( mPendingEmail == QString::null && mPendingName == QString::null)
178 slotwriteMail2( QString () ); 180 slotwriteMail2( QString () );
179 else { 181 else {
180 if ( mPendingEmail == QString::null ) 182 if ( mPendingEmail == QString::null )
181 slotwriteMail2( mPendingName ); 183 slotwriteMail2( mPendingName );
182 else 184 else
183 slotwriteMail( mPendingName, mPendingEmail ); 185 slotwriteMail( mPendingName, mPendingEmail );
184 } 186 }
185 //slotwriteMail(0l,0l); 187 //slotwriteMail(0l,0l);
186} 188}
187 189
188void OpieMail::slotSendQueued() 190void OpieMail::slotSendQueued()
189{ 191{
190 SMTPaccount *smtp = 0; 192 SMTPaccount *smtp = 0;
191 193
192 QList<Account> list = settings->getAccounts(); 194 QList<Account> list = settings->getAccounts();
193 QList<SMTPaccount> smtpList; 195 QList<SMTPaccount> smtpList;
194 smtpList.setAutoDelete(false); 196 smtpList.setAutoDelete(false);
195 Account *it; 197 Account *it;
196 for ( it = list.first(); it; it = list.next() ) 198 for ( it = list.first(); it; it = list.next() )
197 { 199 {
198 if ( it->getType() == MAILLIB::A_SMTP ) 200 if ( it->getType() == MAILLIB::A_SMTP )
199 { 201 {
200 smtp = static_cast<SMTPaccount *>(it); 202 smtp = static_cast<SMTPaccount *>(it);
201 smtpList.append(smtp); 203 smtpList.append(smtp);
202 } 204 }
203 } 205 }
204 if (smtpList.count()==0) 206 if (smtpList.count()==0)
205 { 207 {
206 QMessageBox::information(0,i18n("Info"),i18n("Define a smtp account first!\n")); 208 QMessageBox::information(0,i18n("Info"),i18n("Define a smtp account first!\n"));
207 return; 209 return;
208 } 210 }
209 if ( QMessageBox::warning(this, i18n("Sending all mails"), i18n("Do you really want to send\nall queued mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::No ) 211 if ( QMessageBox::warning(this, i18n("Sending all mails"), i18n("Do you really want to send\nall queued mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::No )
210 return; 212 return;
211 if (smtpList.count()==1) 213 if (smtpList.count()==1)
212 { 214 {
213 smtp = smtpList.at(0); 215 smtp = smtpList.at(0);
214 } 216 }
215 else 217 else
216 { 218 {
217 smtp = 0; 219 smtp = 0;
218 selectsmtp selsmtp; 220 selectsmtp selsmtp;
219 selsmtp.setSelectionlist(&smtpList); 221 selsmtp.setSelectionlist(&smtpList);
220#ifndef DESKTOP_VERSION 222#ifndef DESKTOP_VERSION
221 selsmtp.showMaximized(); 223 selsmtp.showMaximized();
222#endif 224#endif
223 if ( selsmtp.exec() == QDialog::Accepted ) 225 if ( selsmtp.exec() == QDialog::Accepted )
224 { 226 {
225 smtp = selsmtp.selected_smtp(); 227 smtp = selsmtp.selected_smtp();
226 } 228 }
227 } 229 }
228 if (smtp) 230 if (smtp)
229 { 231 {
230 232
231 Global::statusMessage("Sending mails...!"); 233 Global::statusMessage("Sending mails...!");
232 SMTPwrapper * wrap = new SMTPwrapper(smtp); 234 SMTPwrapper * wrap = new SMTPwrapper(smtp);
233 if ( wrap->flushOutbox() ) 235 if ( wrap->flushOutbox() )
234 { 236 {
235 Global::statusMessage("Mails sent!"); 237 Global::statusMessage("Mails sent!");
236 } 238 }
237 delete wrap; 239 delete wrap;
238 } 240 }
239 folderView->refreshOutgoing(); 241 folderView->refreshOutgoing();
240} 242}
241 243
242void OpieMail::slotSearchMails() 244void OpieMail::slotSearchMails()
243{ 245{
244 qDebug("OpieMail::slotSearchMails():not implemented "); 246 qDebug("OpieMail::slotSearchMails():not implemented ");
245} 247}
246 248
247void OpieMail::slotEditSettings() 249void OpieMail::slotEditSettings()
248{ 250{
249 251
250 KOPrefsDialog settingsDialog( this, "koprefs", true ); 252 KOPrefsDialog settingsDialog( this, "koprefs", true );
251#ifndef DESKTOP_VERSION 253#ifndef DESKTOP_VERSION
252 settingsDialog.showMaximized(); 254 settingsDialog.showMaximized();
253#endif 255#endif
254 settingsDialog.exec(); 256 settingsDialog.exec();
255 257
256 slotSetCodec( KOPrefs::instance()->mCurrentCodec ); 258 slotSetCodec( KOPrefs::instance()->mCurrentCodec );
257 // KApplication::execDialog(settingsDialog); 259 // KApplication::execDialog(settingsDialog);
258} 260}
259 261
260void OpieMail::slotEditAccounts() 262void OpieMail::slotEditAccounts()
261{ 263{
262 EditAccounts eaDialog( settings, this, 0, true ); 264 EditAccounts eaDialog( settings, this, 0, true );
263 eaDialog.slotAdjustColumns(); 265 eaDialog.slotAdjustColumns();
264#ifndef DESKTOP_VERSION 266#ifndef DESKTOP_VERSION
265 eaDialog.showMaximized(); 267 eaDialog.showMaximized();
266#endif 268#endif
267 eaDialog.exec(); 269 eaDialog.exec();
268 if ( settings ) delete settings; 270 if ( settings ) delete settings;
269 settings = new Settings(); 271 settings = new Settings();
270 272
271 folderView->populate( settings->getAccounts() ); 273 folderView->populate( settings->getAccounts() );
272} 274}
273void OpieMail::replyMail() 275void OpieMail::replyMail()
274{ 276{
275 277
276 QListViewItem*item = mailView->currentItem(); 278 QListViewItem*item = mailView->currentItem();
277 if (!item) return; 279 if (!item) return;
278 RecMailP mail = ((MailListViewItem*)item)->data(); 280 RecMailP mail = ((MailListViewItem*)item)->data();
279 RecBodyP body = folderView->fetchBody(mail); 281 RecBodyP body = folderView->fetchBody(mail);
280 282
281 QString rtext; 283 QString rtext;
282 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose 284 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose
283 .arg( mail->getFrom()) 285 .arg( mail->getFrom())
284 .arg( mail->getDate()); 286 .arg( mail->getDate());
285 287
286 QString text = body->Bodytext(); 288 QString text = body->Bodytext();
287 QStringList lines = QStringList::split(QRegExp("\\n"), text); 289 QStringList lines = QStringList::split(QRegExp("\\n"), text);
288 QStringList::Iterator it; 290 QStringList::Iterator it;
289 for (it = lines.begin(); it != lines.end(); it++) 291 for (it = lines.begin(); it != lines.end(); it++)
290 { 292 {
291 rtext += "> " + *it + "\n"; 293 rtext += "> " + *it + "\n";
292 } 294 }
293 rtext += "\n"; 295 rtext += "\n";
294 296
295 QString prefix; 297 QString prefix;
296 if ( mail->getSubject().find(QRegExp("^Re: .*$")) != -1) prefix = ""; 298 if ( mail->getSubject().find(QRegExp("^Re: .*$")) != -1) prefix = "";
297 else prefix = "Re: "; // no i18n on purpose 299 else prefix = "Re: "; // no i18n on purpose
298 300
299 Settings *settings = new Settings(); 301 Settings *settings = new Settings();
300 ComposeMail composer( settings ,this, 0, true); 302 ComposeMail composer( settings ,this, 0, true);
301 if (mail->Replyto().isEmpty()) { 303 if (mail->Replyto().isEmpty()) {
302 composer.setTo( mail->getFrom()); 304 composer.setTo( mail->getFrom());
303 } else { 305 } else {
304 composer.setTo( mail->Replyto()); 306 composer.setTo( mail->Replyto());
305 } 307 }
306 composer.setSubject( prefix + mail->getSubject()); 308 composer.setSubject( prefix + mail->getSubject());
307 composer.setMessage( rtext ); 309 composer.setMessage( rtext );
308 composer.setInReplyTo( mail->Msgid()); 310 composer.setInReplyTo( mail->Msgid());
309 composer.setCharset( body->getCharset() ); 311 composer.setCharset( body->getCharset() );
310 312
311 mCurrentComposer = &composer; 313 mCurrentComposer = &composer;
312 if ( QDialog::Accepted == KApplication::execDialog( &composer ) ) 314 if ( QDialog::Accepted == KApplication::execDialog( &composer ) )
313 { 315 {
314 mail->Wrapper()->answeredMail(mail); 316 mail->Wrapper()->answeredMail(mail);
315 } 317 }
316 mCurrentComposer = 0; 318 mCurrentComposer = 0;
319 folderView->refreshOutgoing();
317 delete settings; 320 delete settings;
318 321
319} 322}
320void OpieMail::closeViewMail(ViewMail * vm) 323void OpieMail::closeViewMail(ViewMail * vm)
321{ 324{
322 vm->hide(); 325 vm->hide();
323} 326}
324 327
325void OpieMail::slotDownloadMail( ) 328void OpieMail::slotDownloadMail( )
326{ 329{
327 QListViewItem*item = mailView->currentItem(); 330 QListViewItem*item = mailView->currentItem();
328 if (!item ) { 331 if (!item ) {
329 Global::statusMessage("Error: No item slected!"); 332 Global::statusMessage("Error: No item slected!");
330 return; 333 return;
331 } 334 }
332 RecMailP mail = ((MailListViewItem*)item)->data(); 335 RecMailP mail = ((MailListViewItem*)item)->data();
333 Account * acc = mail->Wrapper()->getAccount(); 336 Account * acc = mail->Wrapper()->getAccount();
334 if ( !acc ) { 337 if ( !acc ) {
335 Global::statusMessage("Mail is already stored locally!"); 338 Global::statusMessage("Mail is already stored locally!");
336 return; 339 return;
337 } 340 }
338 QString lfName = acc->getLocalFolder(); 341 QString lfName = acc->getLocalFolder();
339 //qDebug("local folder " + lfName ); 342 //qDebug("local folder " + lfName );
340 if ( lfName.isEmpty() ) 343 if ( lfName.isEmpty() )
341 lfName = acc->getAccountName(); 344 lfName = acc->getAccountName();
342 AbstractMail* targetMail = folderView->allAccounts()[0]->getWrapper(); 345 AbstractMail* targetMail = folderView->allAccounts()[0]->getWrapper();
343 //qDebug("target %d %d ",targetMail,mail->Wrapper() ); 346 //qDebug("target %d %d ",targetMail,mail->Wrapper() );
344 if ( targetMail == mail->Wrapper() ) { 347 if ( targetMail == mail->Wrapper() ) {
345 Global::statusMessage("Mail is already locally stored!"); 348 Global::statusMessage("Mail is already locally stored!");
346 return; 349 return;
347 } 350 }
348 if ( !targetMail->createMbox(lfName)) { 351 if ( !targetMail->createMbox(lfName)) {
349 Global::statusMessage("Error creating folder!"); 352 Global::statusMessage("Error creating folder!");
350 return; 353 return;
351 } 354 }
352 Global::statusMessage("Fetching mail...please wait!"); 355 Global::statusMessage("Fetching mail...please wait!");
353 qApp->processEvents(); 356 qApp->processEvents();
354 encodedString*st = 0; 357 encodedString*st = 0;
355 st = mail->Wrapper()->fetchRawBody(mail); 358 st = mail->Wrapper()->fetchRawBody(mail);
356 if ( st ) { 359 if ( st ) {
357 targetMail->storeMessage(st->Content(),st->Length(),lfName); 360 targetMail->storeMessage(st->Content(),st->Length(),lfName);
358 Global::statusMessage("Mail stored in "+ lfName); 361 Global::statusMessage("Mail stored in "+ lfName);
359 delete st; 362 delete st;
360 } else { 363 } else {
361 Global::statusMessage("Error: Cannot fetch mail!"); 364 Global::statusMessage("Error: Cannot fetch mail!");
362 } 365 }
363} 366}
364 367
365 368
366void OpieMail::deleteAndDisplayNextMail(ViewMail * vm) 369void OpieMail::deleteAndDisplayNextMail(ViewMail * vm)
367{ 370{
368 QListViewItem*item = mailView->currentItem(); 371 QListViewItem*item = mailView->currentItem();
369 if (!item ) { 372 if (!item ) {
370 closeViewMail(vm); 373 closeViewMail(vm);
371 return; 374 return;
372 } 375 }
373 RecMailP mail = ((MailListViewItem*)item)->data(); 376 RecMailP mail = ((MailListViewItem*)item)->data();
374 mail->Wrapper()->deleteMail( mail ); 377 mail->Wrapper()->deleteMail( mail );
375 item = item->itemBelow(); 378 item = item->itemBelow();
376 if (!item ) { 379 if (!item ) {
377 closeViewMail(vm); 380 closeViewMail(vm);
378 return; 381 return;
379 } 382 }
380 mailView->setCurrentItem(item); 383 mailView->setCurrentItem(item);
381 mail = ((MailListViewItem*)item)->data(); 384 mail = ((MailListViewItem*)item)->data();
382 RecBodyP body = folderView->fetchBody(mail); 385 RecBodyP body = folderView->fetchBody(mail);
383 vm->setBody( body ); 386 vm->setBody( body );
384 vm->setMail( mail ); 387 vm->setMail( mail );
385} 388}
386void OpieMail::displayNextMail(ViewMail * vm) 389void OpieMail::displayNextMail(ViewMail * vm)
387{ 390{
388 QListViewItem*item = mailView->currentItem(); 391 QListViewItem*item = mailView->currentItem();
389 if (!item) return; 392 if (!item) return;
390 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() ); 393 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() );
391 item = item->itemBelow(); 394 item = item->itemBelow();
392 if (!item) { 395 if (!item) {
393 vm->setCaption(i18n("End of List" )); 396 vm->setCaption(i18n("End of List" ));
394 return; 397 return;
395 } 398 }
396 mailView->setCurrentItem(item); 399 mailView->setCurrentItem(item);
397 RecMailP mail = ((MailListViewItem*)item)->data(); 400 RecMailP mail = ((MailListViewItem*)item)->data();
398 RecBodyP body = folderView->fetchBody(mail); 401 RecBodyP body = folderView->fetchBody(mail);
399 vm->setBody( body ); 402 vm->setBody( body );
400 vm->setMail( mail ); 403 vm->setMail( mail );
401} 404}
402void OpieMail::displayMail() 405void OpieMail::displayMail()
403{ 406{
404 QListViewItem*item = mailView->currentItem(); 407 QListViewItem*item = mailView->currentItem();
405 if (!item) return; 408 if (!item) return;
406 RecMailP mail = ((MailListViewItem*)item)->data(); 409 RecMailP mail = ((MailListViewItem*)item)->data();
407 RecBodyP body = folderView->fetchBody(mail); 410 RecBodyP body = folderView->fetchBody(mail);
408 ViewMail readMail( this,"", Qt::WType_Modal ); 411 ViewMail readMail( this,"", Qt::WType_Modal );
409 readMail.setBody( body ); 412 readMail.setBody( body );
410 readMail.setMail( mail ); 413 readMail.setMail( mail );
411#ifndef DESKTOP_VERSION 414#ifndef DESKTOP_VERSION
412 readMail.showMaximized(); 415 readMail.showMaximized();
413#else 416#else
414 readMail.resize( 640, 480); 417 readMail.resize( 640, 480);
415#endif 418#endif
416 connect( &readMail,SIGNAL( showNextMail(ViewMail *) ), this, SLOT( displayNextMail(ViewMail *) ) ); 419 connect( &readMail,SIGNAL( showNextMail(ViewMail *) ), this, SLOT( displayNextMail(ViewMail *) ) );
417 connect( &readMail,SIGNAL( deleteAndDisplayNextMail(ViewMail *) ), this, SLOT(deleteAndDisplayNextMail(ViewMail *) ) ); 420 connect( &readMail,SIGNAL( deleteAndDisplayNextMail(ViewMail *) ), this, SLOT(deleteAndDisplayNextMail(ViewMail *) ) );
418 connect( &readMail,SIGNAL( signalDownloadMail() ), this, SLOT( slotDownloadMail() ) ); 421 connect( &readMail,SIGNAL( signalDownloadMail() ), this, SLOT( slotDownloadMail() ) );
419 422
420 readMail.exec(); 423 readMail.exec();
421 424
422 if ( readMail.deleted ) 425 if ( readMail.deleted )
423 { 426 {
424 folderView->refreshCurrent(); 427 folderView->refreshCurrent();
425 } 428 }
426 else 429 else
427 { 430 {
428 QListViewItem*item = mailView->currentItem(); 431 QListViewItem*item = mailView->currentItem();
429 if (item) 432 if (item)
430 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() ); 433 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() );
431 } 434 }
432} 435}
433void OpieMail::slotGetAllMail() 436void OpieMail::slotGetAllMail()
434{ 437{
435 QListViewItem * item = folderView->firstChild(); 438 QListViewItem * item = folderView->firstChild();
436 while ( item ){ 439 while ( item ){
437 ((AccountViewItem *)item)->contextMenuSelected( 101 ); 440 ((AccountViewItem *)item)->contextMenuSelected( 101 );
438 item = item->nextSibling (); 441 item = item->nextSibling ();
439 } 442 }
440} 443}
441void OpieMail::slotGetMail() 444void OpieMail::slotGetMail()
442{ 445{
443 QListViewItem * item = folderView->currentItem(); 446 QListViewItem * item = folderView->currentItem();
444 if ( ! item ) return; 447 if ( ! item ) return;
445 ((AccountViewItem *)item)->contextMenuSelected( 101 ); 448 ((AccountViewItem *)item)->contextMenuSelected( 101 );
446} 449}
447void OpieMail::slotDeleteMail() 450void OpieMail::slotDeleteMail()
448{ 451{
449 if (!mailView->currentItem()) return; 452 if (!mailView->currentItem()) return;
450 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data(); 453 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data();
451 if ( QMessageBox::warning(this, i18n("Delete Mail"), QString( i18n("<p>Do you really want to delete this mail? <br><br>" ) + mail->getFrom() + " - " + mail->getSubject() ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) 454 if ( QMessageBox::warning(this, i18n("Delete Mail"), QString( i18n("<p>Do you really want to delete this mail? <br><br>" ) + mail->getFrom() + " - " + mail->getSubject() ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
452 { 455 {
453 mail->Wrapper()->deleteMail( mail ); 456 mail->Wrapper()->deleteMail( mail );
454 folderView->refreshCurrent(); 457 folderView->refreshCurrent();
455 } 458 }
456} 459}
457void OpieMail::slotDeleteAllMail() 460void OpieMail::slotDeleteAllMail()
458{ 461{
459 462
460 QValueList<RecMailP> t; 463 QValueList<RecMailP> t;
461 if ( QMessageBox::warning(this, i18n("Delete All Mails"), i18n("Do you really want to delete\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) 464 if ( QMessageBox::warning(this, i18n("Delete All Mails"), i18n("Do you really want to delete\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
462 { 465 {
463 MailListViewItem* item = (MailListViewItem*)mailView->firstChild (); 466 MailListViewItem* item = (MailListViewItem*)mailView->firstChild ();
464 while ( item ) { 467 while ( item ) {
465 if ( item->isSelected() ) { 468 if ( item->isSelected() ) {
466 t.append( item->data() ); 469 t.append( item->data() );
467 } 470 }
468 item = (MailListViewItem*)item->nextSibling(); 471 item = (MailListViewItem*)item->nextSibling();
469 } 472 }
470 } 473 }
471 else 474 else
472 return; 475 return;
473 if ( t.count() == 0 ) 476 if ( t.count() == 0 )
474 return; 477 return;
475 RecMailP mail = t.first(); 478 RecMailP mail = t.first();
476 mail->Wrapper()->deleteMailList(t); 479 mail->Wrapper()->deleteMailList(t);
477 folderView->refreshCurrent(); 480 folderView->refreshCurrent();
478 481
479 482
480} 483}
481void OpieMail::clearSelection() 484void OpieMail::clearSelection()
482{ 485{
483 mailView->clearSelection(); 486 mailView->clearSelection();
484 487
485} 488}
486 489
487void OpieMail::mailHold(int button, QListViewItem *item,const QPoint&,int ) 490void OpieMail::mailHold(int button, QListViewItem *item,const QPoint&,int )
488{ 491{
489 if (!mailView->currentItem()) return; 492 if (!mailView->currentItem()) return;
490 MAILLIB::ATYPE mailtype = ((MailListViewItem*)mailView->currentItem() )->wrapperType(); 493 MAILLIB::ATYPE mailtype = ((MailListViewItem*)mailView->currentItem() )->wrapperType();
491 /* just the RIGHT button - or hold on pda */ 494 /* just the RIGHT button - or hold on pda */
492 if (button!=2) {return;} 495 if (button!=2) {return;}
493 if (!item) return; 496 if (!item) return;
494 QPopupMenu *m = new QPopupMenu(0); 497 QPopupMenu *m = new QPopupMenu(0);
495 if (m) 498 if (m)
496 { 499 {
497 if (mailtype==MAILLIB::A_NNTP) { 500 if (mailtype==MAILLIB::A_NNTP) {
498 m->insertItem(i18n("Read this posting"),this,SLOT(displayMail())); 501 m->insertItem(i18n("Read this posting"),this,SLOT(displayMail()));
499 m->insertItem(i18n("Copy this posting"),this,SLOT(slotMoveCopyMail())); 502 m->insertItem(i18n("Copy this posting"),this,SLOT(slotMoveCopyMail()));
500 m->insertSeparator(); 503 m->insertSeparator();
501 m->insertItem(i18n("Copy all selected postings"),this,SLOT(slotMoveCopyAllMail())); 504 m->insertItem(i18n("Copy all selected postings"),this,SLOT(slotMoveCopyAllMail()));
502 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection())); 505 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection()));
503 } else { 506 } else {
504 if (folderView->currentisDraft()) { 507 if (folderView->currentisDraft()) {
505 m->insertItem(i18n("Edit this mail"),this,SLOT(reEditMail())); 508 m->insertItem(i18n("Edit this mail"),this,SLOT(reEditMail()));
506 } 509 }
507 m->insertItem(i18n("Reply to this mail"),this,SLOT(replyMail())); 510 m->insertItem(i18n("Reply to this mail"),this,SLOT(replyMail()));
508 m->insertItem(i18n("Read this mail"),this,SLOT(displayMail())); 511 m->insertItem(i18n("Read this mail"),this,SLOT(displayMail()));
509 m->insertSeparator(); 512 m->insertSeparator();
510 m->insertItem(i18n("Move/Copy this mail"),this,SLOT(slotMoveCopyMail())); 513 m->insertItem(i18n("Move/Copy this mail"),this,SLOT(slotMoveCopyMail()));
511 m->insertItem(i18n("Delete this mail"),this,SLOT(slotDeleteMail())); 514 m->insertItem(i18n("Delete this mail"),this,SLOT(slotDeleteMail()));
512 m->insertSeparator(); 515 m->insertSeparator();
513 m->insertItem(i18n("Move/Copy all selected mail"),this,SLOT(slotMoveCopyAllMail())); 516 m->insertItem(i18n("Move/Copy all selected mail"),this,SLOT(slotMoveCopyAllMail()));
514 m->insertItem(i18n("Delete all selected mails"),this,SLOT(slotDeleteAllMail())); 517 m->insertItem(i18n("Delete all selected mails"),this,SLOT(slotDeleteAllMail()));
515 m->insertSeparator(); 518 m->insertSeparator();
516 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection())); 519 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection()));
517 } 520 }
518 m->setFocus(); 521 m->setFocus();
519 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) ); 522 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) );
520 delete m; 523 delete m;
521 } 524 }
522} 525}
523 526
524void OpieMail::slotShowFolders( bool show ) 527void OpieMail::slotShowFolders( bool show )
525{ 528{
526 if ( show && folderView->isHidden() ) 529 if ( show && folderView->isHidden() )
527 { 530 {
528 folderView->show(); 531 folderView->show();
529 } 532 }
530 else if ( !show && !folderView->isHidden() ) 533 else if ( !show && !folderView->isHidden() )
531 { 534 {
532 folderView->hide(); 535 folderView->hide();
533 } 536 }
534} 537}
535 538
536void OpieMail::refreshMailView(const QValueList<RecMailP>&list) 539void OpieMail::refreshMailView(const QValueList<RecMailP>&list)
537{ 540{
538 MailListViewItem*item = 0; 541 MailListViewItem*item = 0;
539 mailView->clear(); 542 mailView->clear();
540 543
541 QValueList<RecMailP>::ConstIterator it; 544 QValueList<RecMailP>::ConstIterator it;
542 for (it = list.begin(); it != list.end();++it) 545 for (it = list.begin(); it != list.end();++it)
543 { 546 {
544 item = new MailListViewItem(mailView,item); 547 item = new MailListViewItem(mailView,item);
545 item->storeData((*it)); 548 item->storeData((*it));
546 item->showEntry(); 549 item->showEntry();
547 } 550 }
548 mailView->setSorting ( 4, false ); 551 mailView->setSorting ( 4, false );
549} 552}
550 553
551void OpieMail::mailLeftClicked( QListViewItem *item ) 554void OpieMail::mailLeftClicked( QListViewItem *item )
552{ 555{
553 mailView->clearSelection(); 556 mailView->clearSelection();
554 /* just LEFT button - or tap with stylus on pda */ 557 /* just LEFT button - or tap with stylus on pda */
555 //if (button!=1) return; 558 //if (button!=1) return;
556 if (!item) return; 559 if (!item) return;
557 if (folderView->currentisDraft()) { 560 if (folderView->currentisDraft()) {
558 reEditMail(); 561 reEditMail();
559 } else { 562 } else {
560 displayMail(); 563 displayMail();
561 } 564 }
562} 565}
563 566
564void OpieMail::slotMoveCopyMail() 567void OpieMail::slotMoveCopyMail()
565{ 568{
566 if (!mailView->currentItem()) return; 569 if (!mailView->currentItem()) return;
567 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data(); 570 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data();
568 AbstractMail*targetMail = 0; 571 AbstractMail*targetMail = 0;
569 QString targetFolder = ""; 572 QString targetFolder = "";
570 Selectstore sels; 573 Selectstore sels;
571 folderView->setupFolderselect(&sels); 574 folderView->setupFolderselect(&sels);
572 if (!sels.exec()) return; 575 if (!sels.exec()) return;
573 targetMail = sels.currentMail(); 576 targetMail = sels.currentMail();
574 targetFolder = sels.currentFolder(); 577 targetFolder = sels.currentFolder();
575 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) || 578 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) ||
576 targetFolder.isEmpty()) 579 targetFolder.isEmpty())
577 { 580 {
578 return; 581 return;
579 } 582 }
580 if (sels.newFolder() && !targetMail->createMbox(targetFolder)) 583 if (sels.newFolder() && !targetMail->createMbox(targetFolder))
581 { 584 {
582 QMessageBox::critical(0,i18n("Error creating new Folder"), 585 QMessageBox::critical(0,i18n("Error creating new Folder"),
583 i18n("<center>Error while creating<br>new folder - breaking.</center>")); 586 i18n("<center>Error while creating<br>new folder - breaking.</center>"));
584 return; 587 return;
585 } 588 }
586 sels.hide(); 589 sels.hide();
587 qApp->processEvents(); 590 qApp->processEvents();
588 // qDebug("hiding sels "); 591 // qDebug("hiding sels ");
589 mail->Wrapper()->mvcpMail(mail,targetFolder,targetMail,sels.moveMails()); 592 mail->Wrapper()->mvcpMail(mail,targetFolder,targetMail,sels.moveMails());
590 folderView->refreshCurrent(); 593 folderView->refreshCurrent();
591} 594}
592 595
593void OpieMail::slotMoveCopyAllMail() 596void OpieMail::slotMoveCopyAllMail()
594{ 597{
595 598
596 if (!mailView->currentItem()) return; 599 if (!mailView->currentItem()) return;
597 QValueList<RecMailP> t; 600 QValueList<RecMailP> t;
598 // if ( QMessageBox::warning(this, i18n("Move/Copy all selected mails"), i18n("Do you really want to copy/move\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) 601 // if ( QMessageBox::warning(this, i18n("Move/Copy all selected mails"), i18n("Do you really want to copy/move\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
599 { 602 {
600 MailListViewItem* item = (MailListViewItem*)mailView->firstChild (); 603 MailListViewItem* item = (MailListViewItem*)mailView->firstChild ();
601 while ( item ) { 604 while ( item ) {
602 if ( item->isSelected() ) { 605 if ( item->isSelected() ) {
603 t.append( item->data() ); 606 t.append( item->data() );
604 } 607 }
605 item = (MailListViewItem*)item->nextSibling(); 608 item = (MailListViewItem*)item->nextSibling();
606 } 609 }
607 } 610 }
608 // else 611 // else
609 // return; 612 // return;
610 if ( t.count() == 0 ) 613 if ( t.count() == 0 )
611 return; 614 return;
612 RecMailP mail = t.first(); 615 RecMailP mail = t.first();
613 AbstractMail*targetMail = 0; 616 AbstractMail*targetMail = 0;
614 QString targetFolder = ""; 617 QString targetFolder = "";
615 Selectstore sels; 618 Selectstore sels;
616 folderView->setupFolderselect(&sels); 619 folderView->setupFolderselect(&sels);
617 if (!sels.exec()) return; 620 if (!sels.exec()) return;
618 targetMail = sels.currentMail(); 621 targetMail = sels.currentMail();
619 targetFolder = sels.currentFolder(); 622 targetFolder = sels.currentFolder();
620 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) || 623 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) ||
621 targetFolder.isEmpty()) 624 targetFolder.isEmpty())
622 { 625 {
623 return; 626 return;
624 } 627 }
625 if (sels.newFolder() && !targetMail->createMbox(targetFolder)) 628 if (sels.newFolder() && !targetMail->createMbox(targetFolder))
626 { 629 {
627 QMessageBox::critical(0,i18n("Error creating new Folder"), 630 QMessageBox::critical(0,i18n("Error creating new Folder"),
628 i18n("<center>Error while creating<br>new folder - breaking.</center>")); 631 i18n("<center>Error while creating<br>new folder - breaking.</center>"));
629 return; 632 return;
630 } 633 }
631 sels.hide(); 634 sels.hide();
632 qApp->processEvents(); 635 qApp->processEvents();
633 //qDebug("hiding sels "); 636 //qDebug("hiding sels ");
634 mail->Wrapper()->mvcpMailList(t,targetFolder,targetMail,sels.moveMails()); 637 mail->Wrapper()->mvcpMailList(t,targetFolder,targetMail,sels.moveMails());
635 folderView->refreshCurrent(); 638 folderView->refreshCurrent();
636} 639}
637 640
638void OpieMail::reEditMail() 641void OpieMail::reEditMail()
639{ 642{
640 if (!mailView->currentItem()) return; 643 if (!mailView->currentItem()) return;
641 644
642 ComposeMail compose( settings, this, 0, true ); 645 ComposeMail compose( settings, this, 0, true );
643 compose.reEditMail(((MailListViewItem*)mailView->currentItem() )->data()); 646 compose.reEditMail(((MailListViewItem*)mailView->currentItem() )->data());
644 compose.slotAdjustColumns(); 647 compose.slotAdjustColumns();
645#ifndef DESKTOP_VERSION 648#ifndef DESKTOP_VERSION
646 compose.showMaximized(); 649 compose.showMaximized();
647#else 650#else
648 compose.resize(640,480); 651 compose.resize(640,480);
649#endif 652#endif
650 mCurrentComposer = &compose; 653 mCurrentComposer = &compose;
651 compose.exec(); 654 compose.exec();
655 folderView->refreshOutgoing();
652 mCurrentComposer = 0; 656 mCurrentComposer = 0;
653} 657}
654 658
655void OpieMail::insertAttendees(const QString& uid,const QStringList& nameList,const QStringList& emailList,const QStringList& uidList) 659void OpieMail::insertAttendees(const QString& uid,const QStringList& nameList,const QStringList& emailList,const QStringList& uidList)
656{ 660{
657 661
658 if ( mCurrentComposer ) { 662 if ( mCurrentComposer ) {
659 mCurrentComposer->insertAttendees(uid,nameList,emailList,uidList); 663 mCurrentComposer->insertAttendees(uid,nameList,emailList,uidList);
660 } else { 664 } else {
661 ComposeMail compose( settings, this, 0, true ); 665 ComposeMail compose( settings, this, 0, true );
662 compose.slotAdjustColumns(); 666 compose.slotAdjustColumns();
663#ifndef DESKTOP_VERSION 667#ifndef DESKTOP_VERSION
664 compose.showMaximized(); 668 compose.showMaximized();
665#endif 669#endif
666 mCurrentComposer = &compose; 670 mCurrentComposer = &compose;
667 mCurrentComposer->insertAttendees(uid,nameList,emailList,uidList); 671 mCurrentComposer->insertAttendees(uid,nameList,emailList,uidList);
668 compose.exec(); 672 compose.exec();
669 mCurrentComposer = 0; 673 mCurrentComposer = 0;
674 folderView->refreshOutgoing();
670 raise(); 675 raise();
671 } 676 }
672} 677}