summaryrefslogtreecommitdiffabout
path: root/kmicromail/opiemail.cpp
Unidiff
Diffstat (limited to 'kmicromail/opiemail.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kmicromail/opiemail.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/kmicromail/opiemail.cpp b/kmicromail/opiemail.cpp
index e296d9c..75a75b9 100644
--- a/kmicromail/opiemail.cpp
+++ b/kmicromail/opiemail.cpp
@@ -1,690 +1,694 @@
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 folderView->setFocus(); 56 folderView->setFocus();
57} 57}
58 58
59OpieMail::~OpieMail() 59OpieMail::~OpieMail()
60{ 60{
61 if (settings) delete settings; 61 if (settings) delete settings;
62 if ( tb ) 62 if ( tb )
63 delete tb; 63 delete tb;
64} 64}
65 65
66void OpieMail::appMessage(const QCString &msg, const QByteArray &data) 66void OpieMail::appMessage(const QCString &msg, const QByteArray &data)
67{ 67{
68 68
69} 69}
70#include <stdlib.h> 70#include <stdlib.h>
71void OpieMail::message(const QCString &msg, const QByteArray &data) 71void OpieMail::message(const QCString &msg, const QByteArray &data)
72{ 72{
73 // copied from old mail2 73 // copied from old mail2
74 static int ii = 0; 74 static int ii = 0;
75 //qDebug("QCOP CALL ############################# %d ", ii); 75 //qDebug("QCOP CALL ############################# %d ", ii);
76 //QString mess ( msg ); 76 //QString mess ( msg );
77 //qDebug("Message = %s ",mess.latin1()); 77 //qDebug("Message = %s ",mess.latin1());
78 ++ii; 78 ++ii;
79 //qDebug("KM:appMessage %d *%s* %x", ii, msg.data(), this); 79 //qDebug("KM:appMessage %d *%s* %x", ii, msg.data(), this);
80 80
81 mPendingEmail = QString::null; 81 mPendingEmail = QString::null;
82 mPendingName = QString::null; 82 mPendingName = QString::null;
83 if (msg == "writeMail(QString,QString)") 83 if (msg == "writeMail(QString,QString)")
84 { 84 {
85 //qDebug("writeMail(QString,QString) "); 85 //qDebug("writeMail(QString,QString) ");
86 QDataStream stream(data,IO_ReadOnly); 86 QDataStream stream(data,IO_ReadOnly);
87 stream >> mPendingName >> mPendingEmail; 87 stream >> mPendingName >> mPendingEmail;
88 // removing the whitespaces at beginning and end is needed! 88 // removing the whitespaces at beginning and end is needed!
89 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) ); 89 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) );
90 } 90 }
91 else if (msg == "newMail()") 91 else if (msg == "newMail()")
92 { 92 {
93 //qDebug("slotComposeMail() "); 93 //qDebug("slotComposeMail() ");
94 // we cannot call slotComposeMail(); directly, because may be executing a QCOP call 94 // we cannot call slotComposeMail(); directly, because may be executing a QCOP call
95 // and a QCOP call does not like a processevents in his execution 95 // and a QCOP call does not like a processevents in his execution
96 // with the Qtimer we call slotComposeMail() after we reached the main event loop 96 // with the Qtimer we call slotComposeMail() after we reached the main event loop
97 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) ); 97 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) );
98 // slotComposeMail(); 98 // slotComposeMail();
99 } 99 }
100 else if (msg == "newMail(QString)") 100 else if (msg == "newMail(QString)")
101 { 101 {
102 //qDebug(" newMail(QString)"); 102 //qDebug(" newMail(QString)");
103 QDataStream stream(data,IO_ReadOnly); 103 QDataStream stream(data,IO_ReadOnly);
104 stream >> mPendingName; 104 stream >> mPendingName;
105 // the format is 105 // the format is
106 // NAME <EMAIL>:SUBJECT 106 // NAME <EMAIL>:SUBJECT
107 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) ); 107 QTimer::singleShot ( 50, this, SLOT(slotComposeMail() ) );
108 } else { 108 } else {
109 mPendingData = data; 109 mPendingData = data;
110 mPendingMessage = msg; 110 mPendingMessage = msg;
111 QTimer::singleShot ( 50, this, SLOT(slotExtAppHandler() ) ); 111 QTimer::singleShot ( 50, this, SLOT(slotExtAppHandler() ) );
112 } 112 }
113 113
114 //qDebug("END OpieMail::message "); 114 //qDebug("END OpieMail::message ");
115} 115}
116void OpieMail::slotExtAppHandler() 116void OpieMail::slotExtAppHandler()
117{ 117{
118 ExternalAppHandler::instance()->appMessage ( mPendingMessage, mPendingData ); 118 ExternalAppHandler::instance()->appMessage ( mPendingMessage, mPendingData );
119} 119}
120void OpieMail::slotwriteMail2(const QString& namemail ) 120void OpieMail::slotwriteMail2(const QString& namemail )
121{ 121{
122 //qDebug("OpieMail::slotwriteMail2 "); 122 //qDebug("OpieMail::slotwriteMail2 ");
123 //qApp->processEvents(); 123 //qApp->processEvents();
124 ComposeMail compose( settings, this, 0, true ); 124 ComposeMail compose( settings, this, 0, true );
125 if ( !namemail.isEmpty() ) { 125 if ( !namemail.isEmpty() ) {
126 QString to = namemail; 126 QString to = namemail;
127 if ( namemail.find( " <") > 1 ) { 127 if ( namemail.find( " <") > 1 ) {
128 to = "\"" +to.replace( QRegExp( " <"), "\" <") ; 128 to = "\"" +to.replace( QRegExp( " <"), "\" <") ;
129 } else 129 } else
130 if ( namemail.find( "<") > 1 ) { 130 if ( namemail.find( "<") > 1 ) {
131 to = "\"" +to.replace( QRegExp( "<"), "\" <") ; 131 to = "\"" +to.replace( QRegExp( "<"), "\" <") ;
132 } 132 }
133 int sub = to.find( ">:"); 133 int sub = to.find( ">:");
134 if ( sub > 0 ) { 134 if ( sub > 0 ) {
135 compose.setTo( to.left(sub+1) ); 135 compose.setTo( to.left(sub+1) );
136 compose.setSubject( to.mid(sub+2) ); 136 compose.setSubject( to.mid(sub+2) );
137 } else 137 } else
138 compose.setTo( to ); 138 compose.setTo( to );
139 } 139 }
140 compose.slotAdjustColumns(); 140 compose.slotAdjustColumns();
141#ifndef DESKTOP_VERSION 141#ifndef DESKTOP_VERSION
142 compose.showMaximized(); 142 compose.showMaximized();
143#endif 143#endif
144 mCurrentComposer = &compose; 144 mCurrentComposer = &compose;
145 compose.exec(); 145 compose.exec();
146 mCurrentComposer = 0; 146 mCurrentComposer = 0;
147 folderView->refreshOutgoing(); 147 folderView->refreshOutgoing();
148 raise(); 148 raise();
149 //qDebug("retttich "); 149 //qDebug("retttich ");
150} 150}
151void OpieMail::slotwriteMail(const QString&name,const QString&email) 151void OpieMail::slotwriteMail(const QString&name,const QString&email)
152{ 152{
153 // qDebug("OpieMail::slotwriteMail "); 153 // qDebug("OpieMail::slotwriteMail ");
154 ComposeMail compose( settings, this, 0, true ); 154 ComposeMail compose( settings, this, 0, true );
155 if (!email.isEmpty()) 155 if (!email.isEmpty())
156 { 156 {
157 if (!name.isEmpty()) 157 if (!name.isEmpty())
158 { 158 {
159 compose.setTo("\"" + name + "\"" + " " + "<"+ email + ">"); 159 compose.setTo("\"" + name + "\"" + " " + "<"+ email + ">");
160 } 160 }
161 else 161 else
162 { 162 {
163 compose.setTo(email); 163 compose.setTo(email);
164 } 164 }
165 } 165 }
166 compose.slotAdjustColumns(); 166 compose.slotAdjustColumns();
167#ifndef DESKTOP_VERSION 167#ifndef DESKTOP_VERSION
168 compose.showMaximized(); 168 compose.showMaximized();
169#endif 169#endif
170 170
171 mCurrentComposer = &compose; 171 mCurrentComposer = &compose;
172 compose.exec(); 172 compose.exec();
173 mCurrentComposer = 0; 173 mCurrentComposer = 0;
174 folderView->refreshOutgoing(); 174 folderView->refreshOutgoing();
175 raise(); 175 raise();
176} 176}
177 177
178void OpieMail::slotComposeMail() 178void OpieMail::slotComposeMail()
179{ 179{
180 if ( mPendingEmail == QString::null && mPendingName == QString::null) 180 if ( mPendingEmail == QString::null && mPendingName == QString::null)
181 slotwriteMail2( QString () ); 181 slotwriteMail2( QString () );
182 else { 182 else {
183 if ( mPendingEmail == QString::null ) 183 if ( mPendingEmail == QString::null )
184 slotwriteMail2( mPendingName ); 184 slotwriteMail2( mPendingName );
185 else 185 else
186 slotwriteMail( mPendingName, mPendingEmail ); 186 slotwriteMail( mPendingName, mPendingEmail );
187 } 187 }
188 //slotwriteMail(0l,0l); 188 //slotwriteMail(0l,0l);
189} 189}
190 190
191void OpieMail::slotSendQueued() 191void OpieMail::slotSendQueued()
192{ 192{
193 SMTPaccount *smtp = 0; 193 SMTPaccount *smtp = 0;
194 194
195 QList<Account> list = settings->getAccounts(); 195 QList<Account> list = settings->getAccounts();
196 QList<SMTPaccount> smtpList; 196 QList<SMTPaccount> smtpList;
197 smtpList.setAutoDelete(false); 197 smtpList.setAutoDelete(false);
198 Account *it; 198 Account *it;
199 for ( it = list.first(); it; it = list.next() ) 199 for ( it = list.first(); it; it = list.next() )
200 { 200 {
201 if ( it->getType() == MAILLIB::A_SMTP ) 201 if ( it->getType() == MAILLIB::A_SMTP )
202 { 202 {
203 smtp = static_cast<SMTPaccount *>(it); 203 smtp = static_cast<SMTPaccount *>(it);
204 smtpList.append(smtp); 204 smtpList.append(smtp);
205 } 205 }
206 } 206 }
207 if (smtpList.count()==0) 207 if (smtpList.count()==0)
208 { 208 {
209 QMessageBox::information(0,i18n("Info"),i18n("Define a smtp\n account first!\n")); 209 QMessageBox::information(0,i18n("Info"),i18n("Define a smtp\n account first!\n"));
210 return; 210 return;
211 } 211 }
212 if ( QMessageBox::warning(this, i18n("Sending all mails"), i18n("Do you really want to\nsend all queued mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::No ) 212 if ( QMessageBox::warning(this, i18n("Sending all mails"), i18n("Do you really want to\nsend all queued mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::No )
213 return; 213 return;
214 if (smtpList.count()==1) 214 if (smtpList.count()==1)
215 { 215 {
216 smtp = smtpList.at(0); 216 smtp = smtpList.at(0);
217 } 217 }
218 else 218 else
219 { 219 {
220 smtp = 0; 220 smtp = 0;
221 selectsmtp selsmtp; 221 selectsmtp selsmtp;
222 selsmtp.setSelectionlist(&smtpList); 222 selsmtp.setSelectionlist(&smtpList);
223 selsmtp.resize( selsmtp.sizeHint() ); 223 selsmtp.resize( selsmtp.sizeHint() );
224 if ( selsmtp.exec() == QDialog::Accepted ) 224 if ( selsmtp.exec() == QDialog::Accepted )
225 { 225 {
226 smtp = selsmtp.selected_smtp(); 226 smtp = selsmtp.selected_smtp();
227 } 227 }
228 } 228 }
229 if (smtp) 229 if (smtp)
230 { 230 {
231 231
232 Global::statusMessage("Sending mails...!"); 232 Global::statusMessage("Sending mails...!");
233 SMTPwrapper * wrap = new SMTPwrapper(smtp); 233 SMTPwrapper * wrap = new SMTPwrapper(smtp);
234 if ( wrap->flushOutbox() ) 234 if ( wrap->flushOutbox() )
235 { 235 {
236 Global::statusMessage("Mails sent!"); 236 Global::statusMessage("Mails sent!");
237 } 237 }
238 delete wrap; 238 delete wrap;
239 } 239 }
240 folderView->refreshOutgoing(); 240 folderView->refreshOutgoing();
241} 241}
242 242
243void OpieMail::slotSearchMails() 243void OpieMail::slotSearchMails()
244{ 244{
245 qDebug("OpieMail::slotSearchMails():not implemented "); 245 qDebug("OpieMail::slotSearchMails():not implemented ");
246} 246}
247void OpieMail::slotEditGlobalSettings() 247void OpieMail::slotEditGlobalSettings()
248{ 248{
249 KPimPrefsGlobalDialog gc ( this ); 249 KPimPrefsGlobalDialog gc ( this );
250 gc.exec(); 250 gc.exec();
251} 251}
252 252
253void OpieMail::slotEditSettings() 253void OpieMail::slotEditSettings()
254{ 254{
255 255
256 KOPrefsDialog settingsDialog( this, "koprefs", true ); 256 KOPrefsDialog settingsDialog( this, "koprefs", true );
257#ifndef DESKTOP_VERSION 257#ifndef DESKTOP_VERSION
258 settingsDialog.showMaximized(); 258 settingsDialog.showMaximized();
259#endif 259#endif
260 settingsDialog.exec(); 260 settingsDialog.exec();
261 261
262 slotSetCodec( KOPrefs::instance()->mCurrentCodec ); 262 slotSetCodec( KOPrefs::instance()->mCurrentCodec );
263 // KApplication::execDialog(settingsDialog); 263 // KApplication::execDialog(settingsDialog);
264} 264}
265 265
266void OpieMail::slotEditAccounts() 266void OpieMail::slotEditAccounts()
267{ 267{
268 EditAccounts eaDialog( settings, this, 0, true ); 268 EditAccounts eaDialog( settings, this, 0, true );
269 eaDialog.slotAdjustColumns(); 269 eaDialog.slotAdjustColumns();
270#ifndef DESKTOP_VERSION 270#ifndef DESKTOP_VERSION
271 eaDialog.showMaximized(); 271 eaDialog.showMaximized();
272#endif 272#endif
273 eaDialog.exec(); 273 eaDialog.exec();
274 if ( settings ) delete settings; 274 if ( settings ) delete settings;
275 settings = new Settings(); 275 settings = new Settings();
276 276
277 folderView->populate( settings->getAccounts() ); 277 folderView->populate( settings->getAccounts() );
278} 278}
279void OpieMail::replyMail() 279void OpieMail::replyMail()
280{ 280{
281 281
282 QListViewItem*item = mailView->currentItem(); 282 QListViewItem*item = mailView->currentItem();
283 if (!item) return; 283 if (!item) return;
284 RecMailP mail = ((MailListViewItem*)item)->data(); 284 RecMailP mail = ((MailListViewItem*)item)->data();
285 RecBodyP body = folderView->fetchBody(mail); 285 RecBodyP body = folderView->fetchBody(mail);
286 286
287 QString rtext; 287 QString rtext;
288 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose 288 rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose
289 .arg( mail->getFrom()) 289 .arg( mail->getFrom())
290 .arg( mail->getDate()); 290 .arg( mail->getDate());
291 291
292 QString text = body->Bodytext(); 292 QString text = body->Bodytext();
293 QStringList lines = QStringList::split(QRegExp("\\n"), text); 293 QStringList lines = QStringList::split(QRegExp("\\n"), text);
294 QStringList::Iterator it; 294 QStringList::Iterator it;
295 for (it = lines.begin(); it != lines.end(); it++) 295 for (it = lines.begin(); it != lines.end(); it++)
296 { 296 {
297 rtext += "> " + *it + "\n"; 297 rtext += "> " + *it + "\n";
298 } 298 }
299 rtext += "\n"; 299 rtext += "\n";
300 300
301 QString prefix; 301 QString prefix;
302 if ( mail->getSubject().find(QRegExp("^Re: .*$")) != -1) prefix = ""; 302 if ( mail->getSubject().find(QRegExp("^Re: .*$")) != -1) prefix = "";
303 else prefix = "Re: "; // no i18n on purpose 303 else prefix = "Re: "; // no i18n on purpose
304 304
305 Settings *settings = new Settings(); 305 Settings *settings = new Settings();
306 ComposeMail composer( settings ,this, 0, true); 306 ComposeMail composer( settings ,this, 0, true);
307 if (mail->Replyto().isEmpty()) { 307 if (mail->Replyto().isEmpty()) {
308 composer.setTo( mail->getFrom()); 308 composer.setTo( mail->getFrom());
309 } else { 309 } else {
310 composer.setTo( mail->Replyto()); 310 composer.setTo( mail->Replyto());
311 } 311 }
312 composer.setSubject( prefix + mail->getSubject()); 312 composer.setSubject( prefix + mail->getSubject());
313 composer.setMessage( rtext ); 313 composer.setMessage( rtext );
314 composer.setInReplyTo( mail->Msgid()); 314 composer.setInReplyTo( mail->Msgid());
315 composer.setCharset( body->getCharset() ); 315 composer.setCharset( body->getCharset() );
316 316
317 mCurrentComposer = &composer; 317 mCurrentComposer = &composer;
318 if ( QDialog::Accepted == KApplication::execDialog( &composer ) ) 318 if ( QDialog::Accepted == KApplication::execDialog( &composer ) )
319 { 319 {
320 mail->Wrapper()->answeredMail(mail); 320 mail->Wrapper()->answeredMail(mail);
321 } 321 }
322 mCurrentComposer = 0; 322 mCurrentComposer = 0;
323 folderView->refreshOutgoing(); 323 folderView->refreshOutgoing();
324 delete settings; 324 delete settings;
325 325
326} 326}
327void OpieMail::closeViewMail(ViewMail * vm) 327void OpieMail::closeViewMail(ViewMail * vm)
328{ 328{
329 vm->hide(); 329 vm->hide();
330} 330}
331 331
332void OpieMail::slotDownloadMail( ) 332void OpieMail::slotDownloadMail( )
333{ 333{
334 QListViewItem*item = mailView->currentItem(); 334 QListViewItem*item = mailView->currentItem();
335 if (!item ) { 335 if (!item ) {
336 Global::statusMessage("Error: No item slected!"); 336 Global::statusMessage("Error: No item slected!");
337 return; 337 return;
338 } 338 }
339 RecMailP mail = ((MailListViewItem*)item)->data(); 339 RecMailP mail = ((MailListViewItem*)item)->data();
340 Account * acc = mail->Wrapper()->getAccount(); 340 Account * acc = mail->Wrapper()->getAccount();
341 if ( !acc ) { 341 if ( !acc ) {
342 Global::statusMessage("Mail is already stored locally!"); 342 Global::statusMessage("Mail is already stored locally!");
343 return; 343 return;
344 } 344 }
345 QString lfName = acc->getLocalFolder(); 345 QString lfName = acc->getLocalFolder();
346 //qDebug("local folder " + lfName ); 346 //qDebug("local folder " + lfName );
347 if ( lfName.isEmpty() ) 347 if ( lfName.isEmpty() )
348 lfName = acc->getAccountName(); 348 lfName = acc->getAccountName();
349 AbstractMail* targetMail = folderView->allAccounts()[0]->getWrapper(); 349 AbstractMail* targetMail = folderView->allAccounts()[0]->getWrapper();
350 //qDebug("target %d %d ",targetMail,mail->Wrapper() ); 350 //qDebug("target %d %d ",targetMail,mail->Wrapper() );
351 if ( targetMail == mail->Wrapper() ) { 351 if ( targetMail == mail->Wrapper() ) {
352 Global::statusMessage("Mail is already locally stored!"); 352 Global::statusMessage("Mail is already locally stored!");
353 return; 353 return;
354 } 354 }
355 if ( !targetMail->createMbox(lfName)) { 355 if ( !targetMail->createMbox(lfName)) {
356 Global::statusMessage("Error creating folder!"); 356 Global::statusMessage("Error creating folder!");
357 return; 357 return;
358 } 358 }
359 Global::statusMessage("Fetching mail...please wait!"); 359 Global::statusMessage("Fetching mail...please wait!");
360 qApp->processEvents(); 360 qApp->processEvents();
361 encodedString*st = 0; 361 encodedString*st = 0;
362 st = mail->Wrapper()->fetchRawBody(mail); 362 st = mail->Wrapper()->fetchRawBody(mail);
363 if ( st ) { 363 if ( st ) {
364 targetMail->storeMessage(st->Content(),st->Length(),lfName); 364 targetMail->storeMessage(st->Content(),st->Length(),lfName);
365 Global::statusMessage("Mail stored in "+ lfName); 365 Global::statusMessage("Mail stored in "+ lfName);
366 delete st; 366 delete st;
367 } else { 367 } else {
368 Global::statusMessage("Error: Cannot fetch mail!"); 368 Global::statusMessage("Error: Cannot fetch mail!");
369 } 369 }
370} 370}
371 371
372 372
373void OpieMail::deleteAndDisplayNextMail(ViewMail * vm) 373void OpieMail::deleteAndDisplayNextMail(ViewMail * vm)
374{ 374{
375 QListViewItem*item = mailView->currentItem(); 375 QListViewItem*item = mailView->currentItem();
376 if (!item ) { 376 if (!item ) {
377 closeViewMail(vm); 377 closeViewMail(vm);
378 return; 378 return;
379 } 379 }
380 RecMailP mail = ((MailListViewItem*)item)->data(); 380 RecMailP mail = ((MailListViewItem*)item)->data();
381 mail->Wrapper()->deleteMail( mail ); 381 mail->Wrapper()->deleteMail( mail );
382 item = item->itemBelow(); 382 item = item->itemBelow();
383 if (!item ) { 383 if (!item ) {
384 closeViewMail(vm); 384 closeViewMail(vm);
385 return; 385 return;
386 } 386 }
387 mailView->setCurrentItem(item); 387 mailView->setCurrentItem(item);
388 mail = ((MailListViewItem*)item)->data(); 388 mail = ((MailListViewItem*)item)->data();
389 RecBodyP body = folderView->fetchBody(mail); 389 RecBodyP body = folderView->fetchBody(mail);
390 vm->setBody( body ); 390 vm->setBody( body );
391 vm->setMail( mail ); 391 vm->setMail( mail );
392} 392}
393void OpieMail::displayNextMail(ViewMail * vm) 393void OpieMail::displayNextMail(ViewMail * vm)
394{ 394{
395 QListViewItem*item = mailView->currentItem(); 395 QListViewItem*item = mailView->currentItem();
396 if (!item) return; 396 if (!item) return;
397 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() ); 397 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() );
398 item = item->itemBelow(); 398 item = item->itemBelow();
399 if (!item) { 399 if (!item) {
400 vm->setCaption(i18n("End of List" )); 400 vm->setCaption(i18n("End of List" ));
401 return; 401 return;
402 } 402 }
403 mailView->setCurrentItem(item); 403 mailView->setCurrentItem(item);
404 RecMailP mail = ((MailListViewItem*)item)->data(); 404 RecMailP mail = ((MailListViewItem*)item)->data();
405 RecBodyP body = folderView->fetchBody(mail); 405 RecBodyP body = folderView->fetchBody(mail);
406 vm->setBody( body ); 406 vm->setBody( body );
407 vm->setMail( mail ); 407 vm->setMail( mail );
408} 408}
409void OpieMail::displayMail() 409void OpieMail::displayMail()
410{ 410{
411 QListViewItem*item = mailView->currentItem(); 411 QListViewItem*item = mailView->currentItem();
412 if (!item) return; 412 if (!item) return;
413 RecMailP mail = ((MailListViewItem*)item)->data(); 413 RecMailP mail = ((MailListViewItem*)item)->data();
414 RecBodyP body = folderView->fetchBody(mail); 414 RecBodyP body = folderView->fetchBody(mail);
415 ViewMail readMail( this,"", Qt::WType_Modal ); 415 ViewMail readMail( this,"", Qt::WType_Modal );
416 readMail.setBody( body ); 416 readMail.setBody( body );
417 readMail.setMail( mail ); 417 readMail.setMail( mail );
418#ifndef DESKTOP_VERSION 418#ifndef DESKTOP_VERSION
419 readMail.showMaximized(); 419 readMail.showMaximized();
420#else 420#else
421 readMail.resize( 640, 480); 421 readMail.resize( 640, 480);
422#endif 422#endif
423 connect( &readMail,SIGNAL( showNextMail(ViewMail *) ), this, SLOT( displayNextMail(ViewMail *) ) ); 423 connect( &readMail,SIGNAL( showNextMail(ViewMail *) ), this, SLOT( displayNextMail(ViewMail *) ) );
424 connect( &readMail,SIGNAL( deleteAndDisplayNextMail(ViewMail *) ), this, SLOT(deleteAndDisplayNextMail(ViewMail *) ) ); 424 connect( &readMail,SIGNAL( deleteAndDisplayNextMail(ViewMail *) ), this, SLOT(deleteAndDisplayNextMail(ViewMail *) ) );
425 connect( &readMail,SIGNAL( signalDownloadMail() ), this, SLOT( slotDownloadMail() ) ); 425 connect( &readMail,SIGNAL( signalDownloadMail() ), this, SLOT( slotDownloadMail() ) );
426 426
427 readMail.exec(); 427 readMail.exec();
428 428
429 if ( readMail.deleted ) 429 if ( readMail.deleted )
430 { 430 {
431 folderView->refreshCurrent(); 431 folderView->refreshCurrent();
432 } 432 }
433 else 433 else
434 { 434 {
435 QListViewItem*item = mailView->currentItem(); 435 QListViewItem*item = mailView->currentItem();
436 if (item) 436 if (item)
437 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() ); 437 ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() );
438 } 438 }
439} 439}
440void OpieMail::slotGetAllMail() 440void OpieMail::slotGetAllMail()
441{ 441{
442 QListViewItem * item = folderView->firstChild(); 442 QListViewItem * item = folderView->firstChild();
443 while ( item ){ 443 while ( item ){
444 ((AccountViewItem *)item)->contextMenuSelected( 101 ); 444 ((AccountViewItem *)item)->contextMenuSelected( 101 );
445 item = item->nextSibling (); 445 item = item->nextSibling ();
446 } 446 }
447} 447}
448void OpieMail::slotGetMail() 448void OpieMail::slotGetMail()
449{ 449{
450 QListViewItem * item = folderView->currentItem(); 450 QListViewItem * item = folderView->currentItem();
451 if ( ! item ) return; 451 if ( ! item ) return;
452 ((AccountViewItem *)item)->contextMenuSelected( 101 ); 452 ((AccountViewItem *)item)->contextMenuSelected( 101 );
453} 453}
454void OpieMail::slotDeleteMail() 454void OpieMail::slotDeleteMail()
455{ 455{
456 if (!mailView->currentItem()) return; 456 if (!mailView->currentItem()) return;
457 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data(); 457 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data();
458 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 ) 458 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 )
459 { 459 {
460 mail->Wrapper()->deleteMail( mail ); 460 mail->Wrapper()->deleteMail( mail );
461 folderView->refreshCurrent(); 461 folderView->refreshCurrent();
462 } 462 }
463} 463}
464void OpieMail::slotDeleteAllMail() 464void OpieMail::slotDeleteAllMail()
465{ 465{
466 466
467 QValueList<RecMailP> t; 467 QValueList<RecMailP> t;
468 if ( QMessageBox::warning(this, i18n("Delete All Mails"), i18n("Do you really want to delete\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) 468 if ( QMessageBox::warning(this, i18n("Delete All Mails"), i18n("Do you really want to delete\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
469 { 469 {
470 MailListViewItem* item = (MailListViewItem*)mailView->firstChild (); 470 MailListViewItem* item = (MailListViewItem*)mailView->firstChild ();
471 while ( item ) { 471 while ( item ) {
472 if ( item->isSelected() ) { 472 if ( item->isSelected() ) {
473 t.append( item->data() ); 473 t.append( item->data() );
474 } 474 }
475 item = (MailListViewItem*)item->nextSibling(); 475 item = (MailListViewItem*)item->nextSibling();
476 } 476 }
477 } 477 }
478 else 478 else
479 return; 479 return;
480 if ( t.count() == 0 ) 480 if ( t.count() == 0 )
481 return; 481 return;
482 RecMailP mail = t.first(); 482 RecMailP mail = t.first();
483 mail->Wrapper()->deleteMailList(t); 483 mail->Wrapper()->deleteMailList(t);
484 folderView->refreshCurrent(); 484 folderView->refreshCurrent();
485 485
486 486
487} 487}
488void OpieMail::clearSelection() 488void OpieMail::clearSelection()
489{ 489{
490 mailView->clearSelection(); 490 mailView->clearSelection();
491 491
492} 492}
493void OpieMail::selectAll() 493void OpieMail::selectAll()
494{ 494{
495 QListViewItem* item = mailView->firstChild (); 495 QListViewItem* item = mailView->firstChild ();
496 while ( item ) { 496 while ( item ) {
497 mailView->setSelected ( item, true ); 497 mailView->setSelected ( item, true );
498 item = item->nextSibling(); 498 item = item->nextSibling();
499 } 499 }
500} 500}
501 501
502void OpieMail::mailHold(int button, QListViewItem *item,const QPoint&,int ) 502void OpieMail::mailHold(int button, QListViewItem *item,const QPoint&,int )
503{ 503{
504 if (!mailView->currentItem()) return; 504 if (!mailView->currentItem()) return;
505 MAILLIB::ATYPE mailtype = ((MailListViewItem*)mailView->currentItem() )->wrapperType(); 505 MAILLIB::ATYPE mailtype = ((MailListViewItem*)mailView->currentItem() )->wrapperType();
506 /* just the RIGHT button - or hold on pda */ 506 /* just the RIGHT button - or hold on pda */
507 if (button!=2) {return;} 507 if (button!=2) {return;}
508 if (!item) return; 508 if (!item) return;
509 QPopupMenu *m = new QPopupMenu(0); 509 QPopupMenu *m = new QPopupMenu(0);
510 if (m) 510 if (m)
511 { 511 {
512 if (mailtype==MAILLIB::A_NNTP) { 512 if (mailtype==MAILLIB::A_NNTP) {
513 m->insertItem(i18n("Read this posting"),this,SLOT(displayMail())); 513 m->insertItem(i18n("Read this posting"),this,SLOT(displayMail()));
514 m->insertItem(i18n("Copy this posting"),this,SLOT(slotMoveCopyMail())); 514 m->insertItem(i18n("Copy this posting"),this,SLOT(slotMoveCopyMail()));
515 m->insertSeparator(); 515 m->insertSeparator();
516 m->insertItem(i18n("Copy all selected postings"),this,SLOT(slotMoveCopyAllMail())); 516 m->insertItem(i18n("Copy all selected postings"),this,SLOT(slotMoveCopyAllMail()));
517 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection())); 517 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection()));
518 } else { 518 } else {
519 if (folderView->currentisDraft()) { 519 if (folderView->currentisDraft()) {
520 m->insertItem(i18n("Edit this mail"),this,SLOT(reEditMail())); 520 m->insertItem(i18n("Edit this mail"),this,SLOT(reEditMail()));
521 } 521 }
522 m->insertItem(i18n("Reply to this mail"),this,SLOT(replyMail())); 522 m->insertItem(i18n("Reply to this mail"),this,SLOT(replyMail()));
523 m->insertItem(i18n("Read this mail"),this,SLOT(displayMail())); 523 m->insertItem(i18n("Read this mail"),this,SLOT(displayMail()));
524 m->insertSeparator(); 524 m->insertSeparator();
525 m->insertItem(i18n("Move/Copy this mail"),this,SLOT(slotMoveCopyMail())); 525 m->insertItem(i18n("Move/Copy this mail"),this,SLOT(slotMoveCopyMail()));
526 m->insertItem(i18n("Delete this mail"),this,SLOT(slotDeleteMail())); 526 m->insertItem(i18n("Delete this mail"),this,SLOT(slotDeleteMail()));
527 m->insertSeparator(); 527 m->insertSeparator();
528 m->insertItem(i18n("Move/Copy all selected mail"),this,SLOT(slotMoveCopyAllMail())); 528 m->insertItem(i18n("Move/Copy all selected mail"),this,SLOT(slotMoveCopyAllMail()));
529 m->insertItem(i18n("Delete all selected mails"),this,SLOT(slotDeleteAllMail())); 529 m->insertItem(i18n("Delete all selected mails"),this,SLOT(slotDeleteAllMail()));
530 m->insertSeparator(); 530 m->insertSeparator();
531 m->insertItem(i18n("Select all"),this,SLOT(selectAll())); 531 m->insertItem(i18n("Select all"),this,SLOT(selectAll()));
532 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection())); 532 m->insertItem(i18n("Clear selection"),this,SLOT(clearSelection()));
533 } 533 }
534 m->setFocus(); 534 m->setFocus();
535 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) ); 535 m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) );
536 delete m; 536 delete m;
537 } 537 }
538} 538}
539 539
540void OpieMail::slotShowFolders( bool show ) 540void OpieMail::slotShowFolders( bool show )
541{ 541{
542 if ( show && folderView->isHidden() ) 542 if ( show && folderView->isHidden() )
543 { 543 {
544 slotAdjustColumns();
544 folderView->show(); 545 folderView->show();
546 //slotAdjustColumns();
545 } 547 }
546 else if ( !show && !folderView->isHidden() ) 548 else if ( !show && !folderView->isHidden() )
547 { 549 {
550 slotAdjustColumnsWide();
548 folderView->hide(); 551 folderView->hide();
552 //slotAdjustColumnsWide();
549 } 553 }
550} 554}
551 555
552void OpieMail::refreshMailView(const QValueList<RecMailP>&list) 556void OpieMail::refreshMailView(const QValueList<RecMailP>&list)
553{ 557{
554 MailListViewItem*item = 0; 558 MailListViewItem*item = 0;
555 mailView->clear(); 559 mailView->clear();
556 560
557 QValueList<RecMailP>::ConstIterator it; 561 QValueList<RecMailP>::ConstIterator it;
558 for (it = list.begin(); it != list.end();++it) 562 for (it = list.begin(); it != list.end();++it)
559 { 563 {
560 item = new MailListViewItem(mailView,item); 564 item = new MailListViewItem(mailView,item);
561 item->storeData((*it)); 565 item->storeData((*it));
562 item->showEntry(); 566 item->showEntry();
563 } 567 }
564 mailView->setSorting ( 4, false ); 568 mailView->setSorting ( 4, false );
565} 569}
566 570
567void OpieMail::mailLeftClicked( QListViewItem *item ) 571void OpieMail::mailLeftClicked( QListViewItem *item )
568{ 572{
569 mailView->clearSelection(); 573 mailView->clearSelection();
570 /* just LEFT button - or tap with stylus on pda */ 574 /* just LEFT button - or tap with stylus on pda */
571 //if (button!=1) return; 575 //if (button!=1) return;
572 if (!item) return; 576 if (!item) return;
573 if (folderView->currentisDraft()) { 577 if (folderView->currentisDraft()) {
574 reEditMail(); 578 reEditMail();
575 } else { 579 } else {
576 displayMail(); 580 displayMail();
577 } 581 }
578} 582}
579 583
580void OpieMail::slotMoveCopyMail() 584void OpieMail::slotMoveCopyMail()
581{ 585{
582 if (!mailView->currentItem()) return; 586 if (!mailView->currentItem()) return;
583 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data(); 587 RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data();
584 AbstractMail*targetMail = 0; 588 AbstractMail*targetMail = 0;
585 QString targetFolder = ""; 589 QString targetFolder = "";
586 Selectstore sels; 590 Selectstore sels;
587 folderView->setupFolderselect(&sels); 591 folderView->setupFolderselect(&sels);
588 if (!sels.exec()) return; 592 if (!sels.exec()) return;
589 targetMail = sels.currentMail(); 593 targetMail = sels.currentMail();
590 targetFolder = sels.currentFolder(); 594 targetFolder = sels.currentFolder();
591 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) || 595 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) ||
592 targetFolder.isEmpty()) 596 targetFolder.isEmpty())
593 { 597 {
594 return; 598 return;
595 } 599 }
596 if (sels.newFolder() && !targetMail->createMbox(targetFolder)) 600 if (sels.newFolder() && !targetMail->createMbox(targetFolder))
597 { 601 {
598 QMessageBox::critical(0,i18n("Error creating new Folder"), 602 QMessageBox::critical(0,i18n("Error creating new Folder"),
599 i18n("<center>Error while creating<br>new folder - breaking.</center>")); 603 i18n("<center>Error while creating<br>new folder - breaking.</center>"));
600 return; 604 return;
601 } 605 }
602 sels.hide(); 606 sels.hide();
603 qApp->processEvents(); 607 qApp->processEvents();
604 // qDebug("hiding sels "); 608 // qDebug("hiding sels ");
605 mail->Wrapper()->mvcpMail(mail,targetFolder,targetMail,sels.moveMails()); 609 mail->Wrapper()->mvcpMail(mail,targetFolder,targetMail,sels.moveMails());
606 folderView->refreshCurrent(); 610 folderView->refreshCurrent();
607} 611}
608 612
609void OpieMail::slotMoveCopyAllMail() 613void OpieMail::slotMoveCopyAllMail()
610{ 614{
611 615
612 if (!mailView->currentItem()) return; 616 if (!mailView->currentItem()) return;
613 QValueList<RecMailP> t; 617 QValueList<RecMailP> t;
614 // 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 ) 618 // 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 )
615 { 619 {
616 MailListViewItem* item = (MailListViewItem*)mailView->firstChild (); 620 MailListViewItem* item = (MailListViewItem*)mailView->firstChild ();
617 while ( item ) { 621 while ( item ) {
618 if ( item->isSelected() ) { 622 if ( item->isSelected() ) {
619 t.append( item->data() ); 623 t.append( item->data() );
620 } 624 }
621 item = (MailListViewItem*)item->nextSibling(); 625 item = (MailListViewItem*)item->nextSibling();
622 } 626 }
623 } 627 }
624 // else 628 // else
625 // return; 629 // return;
626 if ( t.count() == 0 ) 630 if ( t.count() == 0 )
627 return; 631 return;
628 RecMailP mail = t.first(); 632 RecMailP mail = t.first();
629 AbstractMail*targetMail = 0; 633 AbstractMail*targetMail = 0;
630 QString targetFolder = ""; 634 QString targetFolder = "";
631 Selectstore sels; 635 Selectstore sels;
632 folderView->setupFolderselect(&sels); 636 folderView->setupFolderselect(&sels);
633 if (!sels.exec()) return; 637 if (!sels.exec()) return;
634 targetMail = sels.currentMail(); 638 targetMail = sels.currentMail();
635 targetFolder = sels.currentFolder(); 639 targetFolder = sels.currentFolder();
636 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) || 640 if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) ||
637 targetFolder.isEmpty()) 641 targetFolder.isEmpty())
638 { 642 {
639 return; 643 return;
640 } 644 }
641 if (sels.newFolder() && !targetMail->createMbox(targetFolder)) 645 if (sels.newFolder() && !targetMail->createMbox(targetFolder))
642 { 646 {
643 QMessageBox::critical(0,i18n("Error creating new Folder"), 647 QMessageBox::critical(0,i18n("Error creating new Folder"),
644 i18n("<center>Error while creating<br>new folder - breaking.</center>")); 648 i18n("<center>Error while creating<br>new folder - breaking.</center>"));
645 return; 649 return;
646 } 650 }
647 sels.hide(); 651 sels.hide();
648 qApp->processEvents(); 652 qApp->processEvents();
649 //qDebug("hiding sels "); 653 //qDebug("hiding sels ");
650 mail->Wrapper()->mvcpMailList(t,targetFolder,targetMail,sels.moveMails()); 654 mail->Wrapper()->mvcpMailList(t,targetFolder,targetMail,sels.moveMails());
651 folderView->refreshCurrent(); 655 folderView->refreshCurrent();
652} 656}
653 657
654void OpieMail::reEditMail() 658void OpieMail::reEditMail()
655{ 659{
656 if (!mailView->currentItem()) return; 660 if (!mailView->currentItem()) return;
657 661
658 ComposeMail compose( settings, this, 0, true ); 662 ComposeMail compose( settings, this, 0, true );
659 compose.reEditMail(((MailListViewItem*)mailView->currentItem() )->data()); 663 compose.reEditMail(((MailListViewItem*)mailView->currentItem() )->data());
660 compose.slotAdjustColumns(); 664 compose.slotAdjustColumns();
661#ifndef DESKTOP_VERSION 665#ifndef DESKTOP_VERSION
662 compose.showMaximized(); 666 compose.showMaximized();
663#else 667#else
664 compose.resize(640,480); 668 compose.resize(640,480);
665#endif 669#endif
666 mCurrentComposer = &compose; 670 mCurrentComposer = &compose;
667 compose.exec(); 671 compose.exec();
668 folderView->refreshOutgoing(); 672 folderView->refreshOutgoing();
669 mCurrentComposer = 0; 673 mCurrentComposer = 0;
670} 674}
671 675
672void OpieMail::insertAttendees(const QString& uid,const QStringList& nameList,const QStringList& emailList,const QStringList& uidList) 676void OpieMail::insertAttendees(const QString& uid,const QStringList& nameList,const QStringList& emailList,const QStringList& uidList)
673{ 677{
674 678
675 if ( mCurrentComposer ) { 679 if ( mCurrentComposer ) {
676 mCurrentComposer->insertAttendees(uid,nameList,emailList,uidList); 680 mCurrentComposer->insertAttendees(uid,nameList,emailList,uidList);
677 } else { 681 } else {
678 ComposeMail compose( settings, this, 0, true ); 682 ComposeMail compose( settings, this, 0, true );
679 compose.slotAdjustColumns(); 683 compose.slotAdjustColumns();
680#ifndef DESKTOP_VERSION 684#ifndef DESKTOP_VERSION
681 compose.showMaximized(); 685 compose.showMaximized();
682#endif 686#endif
683 mCurrentComposer = &compose; 687 mCurrentComposer = &compose;
684 mCurrentComposer->insertAttendees(uid,nameList,emailList,uidList); 688 mCurrentComposer->insertAttendees(uid,nameList,emailList,uidList);
685 compose.exec(); 689 compose.exec();
686 mCurrentComposer = 0; 690 mCurrentComposer = 0;
687 folderView->refreshOutgoing(); 691 folderView->refreshOutgoing();
688 raise(); 692 raise();
689 } 693 }
690} 694}