-rw-r--r-- | kmicromail/opiemail.cpp | 363 |
1 files changed, 363 insertions, 0 deletions
diff --git a/kmicromail/opiemail.cpp b/kmicromail/opiemail.cpp new file mode 100644 index 0000000..b1992ec --- a/dev/null +++ b/kmicromail/opiemail.cpp | |||
@@ -0,0 +1,363 @@ | |||
1 | |||
2 | #include "settingsdialog.h" | ||
3 | #include "opiemail.h" | ||
4 | #include "editaccounts.h" | ||
5 | #include "composemail.h" | ||
6 | #include "mailistviewitem.h" | ||
7 | #include "viewmail.h" | ||
8 | #include "selectstore.h" | ||
9 | #include "selectsmtp.h" | ||
10 | |||
11 | #include <qmessagebox.h> | ||
12 | |||
13 | #include <qpe/qpeapplication.h> | ||
14 | #include <libmailwrapper/smtpwrapper.h> | ||
15 | #include <libmailwrapper/mailtypes.h> | ||
16 | #include <libmailwrapper/abstractmail.h> | ||
17 | /* OPIE */ | ||
18 | //#include <qpe/resource.h> | ||
19 | #include <qpe/qpeapplication.h> | ||
20 | |||
21 | /* QT */ | ||
22 | |||
23 | using namespace Opie::Core; | ||
24 | |||
25 | OpieMail::OpieMail( QWidget *parent, const char *name, WFlags flags ) | ||
26 | : MainWindow( parent, name, WStyle_ContextHelp ) | ||
27 | { | ||
28 | settings = new Settings(); | ||
29 | |||
30 | folderView->populate( settings->getAccounts() ); | ||
31 | |||
32 | } | ||
33 | |||
34 | OpieMail::~OpieMail() | ||
35 | { | ||
36 | if (settings) delete settings; | ||
37 | } | ||
38 | |||
39 | void OpieMail::appMessage(const QCString &msg, const QByteArray &data) | ||
40 | { | ||
41 | |||
42 | } | ||
43 | #include <stdlib.h> | ||
44 | void OpieMail::message(const QCString &msg, const QByteArray &data) | ||
45 | { | ||
46 | // copied from old mail2 | ||
47 | static int ii = 0; | ||
48 | |||
49 | // block second call | ||
50 | if ( ii < 2 ) { | ||
51 | ++ii; | ||
52 | if ( ii > 1 ) { | ||
53 | qDebug("qcop call blocked "); | ||
54 | return; | ||
55 | } | ||
56 | } | ||
57 | //qDebug("KM:appMessage %d *%s* %x", ii, msg.data(), this); | ||
58 | if (msg == "writeMail(QString,QString)") | ||
59 | { | ||
60 | QDataStream stream(data,IO_ReadOnly); | ||
61 | QString name, email; | ||
62 | stream >> name >> email; | ||
63 | // removing the whitespaces at beginning and end is needed! | ||
64 | slotwriteMail(name.stripWhiteSpace(),email.stripWhiteSpace()); | ||
65 | } | ||
66 | else if (msg == "newMail()") | ||
67 | { | ||
68 | slotComposeMail(); | ||
69 | } | ||
70 | else if (msg == "newMail(QString)") | ||
71 | { | ||
72 | QDataStream stream(data,IO_ReadOnly); | ||
73 | QString nameemail; | ||
74 | stream >> nameemail; | ||
75 | // the format is | ||
76 | // NAME <EMAIL>:SUBJECT | ||
77 | //qDebug("message %s ", nameemail.latin1()); | ||
78 | |||
79 | slotwriteMail2( nameemail ); | ||
80 | } | ||
81 | } | ||
82 | void OpieMail::slotwriteMail2(const QString& namemail ) | ||
83 | { | ||
84 | // qDebug("OpieMail::slotwriteMail2 "); | ||
85 | qApp->processEvents(); | ||
86 | ComposeMail compose( settings, this, 0, true ); | ||
87 | if ( !namemail.isEmpty() ) { | ||
88 | QString to = namemail; | ||
89 | if ( namemail.find( " <") > 1 ) { | ||
90 | to = "\"" +to.replace( QRegExp( " <"), "\" <") ; | ||
91 | } else | ||
92 | if ( namemail.find( "<") > 1 ) { | ||
93 | to = "\"" +to.replace( QRegExp( "<"), "\" <") ; | ||
94 | } | ||
95 | int sub = to.find( ">:"); | ||
96 | if ( sub > 0 ) { | ||
97 | compose.setTo( to.left(sub+1) ); | ||
98 | compose.setSubject( to.mid(sub+2) ); | ||
99 | } else | ||
100 | compose.setTo( to ); | ||
101 | } | ||
102 | compose.slotAdjustColumns(); | ||
103 | compose.showMaximized(); | ||
104 | compose.exec(); | ||
105 | //qDebug("retttich "); | ||
106 | } | ||
107 | void OpieMail::slotwriteMail(const QString&name,const QString&email) | ||
108 | { | ||
109 | // qDebug("OpieMail::slotwriteMail "); | ||
110 | ComposeMail compose( settings, this, 0, true , WStyle_ContextHelp ); | ||
111 | if (!email.isEmpty()) | ||
112 | { | ||
113 | if (!name.isEmpty()) | ||
114 | { | ||
115 | compose.setTo("\"" + name + "\"" + " " + "<"+ email + ">"); | ||
116 | } | ||
117 | else | ||
118 | { | ||
119 | compose.setTo(email); | ||
120 | } | ||
121 | } | ||
122 | compose.slotAdjustColumns(); | ||
123 | compose.showMaximized(); | ||
124 | compose.exec(); | ||
125 | } | ||
126 | |||
127 | void OpieMail::slotComposeMail() | ||
128 | { | ||
129 | slotwriteMail2( QString () ); | ||
130 | //slotwriteMail(0l,0l); | ||
131 | } | ||
132 | |||
133 | void OpieMail::slotSendQueued() | ||
134 | { | ||
135 | SMTPaccount *smtp = 0; | ||
136 | |||
137 | QList<Account> list = settings->getAccounts(); | ||
138 | QList<SMTPaccount> smtpList; | ||
139 | smtpList.setAutoDelete(false); | ||
140 | Account *it; | ||
141 | for ( it = list.first(); it; it = list.next() ) | ||
142 | { | ||
143 | if ( it->getType() == MAILLIB::A_SMTP ) | ||
144 | { | ||
145 | smtp = static_cast<SMTPaccount *>(it); | ||
146 | smtpList.append(smtp); | ||
147 | } | ||
148 | } | ||
149 | if (smtpList.count()==0) | ||
150 | { | ||
151 | QMessageBox::information(0,tr("Info"),tr("Define a smtp account first")); | ||
152 | return; | ||
153 | } | ||
154 | if (smtpList.count()==1) | ||
155 | { | ||
156 | smtp = smtpList.at(0); | ||
157 | } | ||
158 | else | ||
159 | { | ||
160 | smtp = 0; | ||
161 | selectsmtp selsmtp; | ||
162 | selsmtp.setSelectionlist(&smtpList); | ||
163 | selsmtp.showMaximized(); | ||
164 | if ( selsmtp.exec() == QDialog::Accepted ) | ||
165 | { | ||
166 | smtp = selsmtp.selected_smtp(); | ||
167 | } | ||
168 | } | ||
169 | if (smtp) | ||
170 | { | ||
171 | SMTPwrapper * wrap = new SMTPwrapper(smtp); | ||
172 | if ( wrap->flushOutbox() ) | ||
173 | { | ||
174 | QMessageBox::information(0,tr("Info"),tr("Mail queue flushed")); | ||
175 | } | ||
176 | delete wrap; | ||
177 | } | ||
178 | } | ||
179 | |||
180 | void OpieMail::slotSearchMails() | ||
181 | { | ||
182 | qDebug("OpieMail::slotSearchMails():not implemented "); | ||
183 | } | ||
184 | |||
185 | void OpieMail::slotEditSettings() | ||
186 | { | ||
187 | SettingsDialog settingsDialog( this, 0, true, WStyle_ContextHelp ); | ||
188 | settingsDialog.showMaximized(); | ||
189 | settingsDialog.exec(); | ||
190 | } | ||
191 | |||
192 | void OpieMail::slotEditAccounts() | ||
193 | { | ||
194 | EditAccounts eaDialog( settings, this, 0, true, WStyle_ContextHelp ); | ||
195 | eaDialog.slotAdjustColumns(); | ||
196 | eaDialog.showMaximized(); | ||
197 | eaDialog.exec(); | ||
198 | if ( settings ) delete settings; | ||
199 | settings = new Settings(); | ||
200 | |||
201 | folderView->populate( settings->getAccounts() ); | ||
202 | } | ||
203 | |||
204 | void OpieMail::displayMail() | ||
205 | { | ||
206 | QListViewItem*item = mailView->currentItem(); | ||
207 | if (!item) return; | ||
208 | RecMailP mail = ((MailListViewItem*)item)->data(); | ||
209 | RecBodyP body = folderView->fetchBody(mail); | ||
210 | ViewMail readMail( this,"", Qt::WType_Modal | WStyle_ContextHelp ); | ||
211 | readMail.setBody( body ); | ||
212 | readMail.setMail( mail ); | ||
213 | readMail.showMaximized(); | ||
214 | readMail.exec(); | ||
215 | |||
216 | if ( readMail.deleted ) | ||
217 | { | ||
218 | folderView->refreshCurrent(); | ||
219 | } | ||
220 | else | ||
221 | { | ||
222 | ( (MailListViewItem*)item )->setPixmap( 0, QPixmap() ); | ||
223 | } | ||
224 | } | ||
225 | |||
226 | void OpieMail::slotDeleteMail() | ||
227 | { | ||
228 | if (!mailView->currentItem()) return; | ||
229 | RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data(); | ||
230 | if ( QMessageBox::warning(this, tr("Delete Mail"), QString( tr("<p>Do you really want to delete this mail? <br><br>" ) + mail->getFrom() + " - " + mail->getSubject() ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) | ||
231 | { | ||
232 | mail->Wrapper()->deleteMail( mail ); | ||
233 | folderView->refreshCurrent(); | ||
234 | } | ||
235 | } | ||
236 | void OpieMail::slotDeleteAllMail() | ||
237 | { | ||
238 | if (!mailView->currentItem()) return; | ||
239 | RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data(); | ||
240 | if ( QMessageBox::warning(this, tr("Delete All Mails"), tr("Do you really want to delete\nall selected mails?" ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) | ||
241 | { | ||
242 | MailListViewItem* item = (MailListViewItem*)mailView->firstChild (); | ||
243 | while ( item ) { | ||
244 | if ( item->isSelected() ) { | ||
245 | RecMailP mail = item->data(); | ||
246 | mail->Wrapper()->deleteMail( mail ); | ||
247 | } | ||
248 | item = (MailListViewItem*)item->nextSibling(); | ||
249 | } | ||
250 | folderView->refreshCurrent(); | ||
251 | } | ||
252 | } | ||
253 | void OpieMail::clearSelection() | ||
254 | { | ||
255 | mailView->clearSelection(); | ||
256 | |||
257 | } | ||
258 | |||
259 | void OpieMail::mailHold(int button, QListViewItem *item,const QPoint&,int ) | ||
260 | { | ||
261 | if (!mailView->currentItem()) return; | ||
262 | MAILLIB::ATYPE mailtype = ((MailListViewItem*)mailView->currentItem() )->wrapperType(); | ||
263 | /* just the RIGHT button - or hold on pda */ | ||
264 | if (button!=2) {return;} | ||
265 | if (!item) return; | ||
266 | QPopupMenu *m = new QPopupMenu(0); | ||
267 | if (m) | ||
268 | { | ||
269 | if (mailtype==MAILLIB::A_NNTP) { | ||
270 | m->insertItem(tr("Read this posting"),this,SLOT(displayMail())); | ||
271 | // m->insertItem(tr("Copy this posting"),this,SLOT(slotMoveCopyMail())); | ||
272 | } else { | ||
273 | if (folderView->currentisDraft()) { | ||
274 | m->insertItem(tr("Edit this mail"),this,SLOT(reEditMail())); | ||
275 | } | ||
276 | m->insertItem(tr("Read this mail"),this,SLOT(displayMail())); | ||
277 | m->insertItem(tr("Copy/Move this mail"),this,SLOT(slotMoveCopyMail())); | ||
278 | m->insertItem(tr("Delete this mail"),this,SLOT(slotDeleteMail())); | ||
279 | m->insertSeparator(); | ||
280 | m->insertItem(tr("Delete all selected mails"),this,SLOT(slotDeleteAllMail())); | ||
281 | m->insertItem(tr("Clear selection"),this,SLOT(clearSelection())); | ||
282 | } | ||
283 | m->setFocus(); | ||
284 | m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) ); | ||
285 | delete m; | ||
286 | } | ||
287 | } | ||
288 | |||
289 | void OpieMail::slotShowFolders( bool show ) | ||
290 | { | ||
291 | if ( show && folderView->isHidden() ) | ||
292 | { | ||
293 | folderView->show(); | ||
294 | } | ||
295 | else if ( !show && !folderView->isHidden() ) | ||
296 | { | ||
297 | folderView->hide(); | ||
298 | } | ||
299 | } | ||
300 | |||
301 | void OpieMail::refreshMailView(const QValueList<RecMailP>&list) | ||
302 | { | ||
303 | MailListViewItem*item = 0; | ||
304 | mailView->clear(); | ||
305 | |||
306 | QValueList<RecMailP>::ConstIterator it; | ||
307 | for (it = list.begin(); it != list.end();++it) | ||
308 | { | ||
309 | item = new MailListViewItem(mailView,item); | ||
310 | item->storeData((*it)); | ||
311 | item->showEntry(); | ||
312 | } | ||
313 | } | ||
314 | |||
315 | void OpieMail::mailLeftClicked( QListViewItem *item ) | ||
316 | { | ||
317 | mailView->clearSelection(); | ||
318 | /* just LEFT button - or tap with stylus on pda */ | ||
319 | //if (button!=1) return; | ||
320 | if (!item) return; | ||
321 | if (folderView->currentisDraft()) { | ||
322 | reEditMail(); | ||
323 | } else { | ||
324 | displayMail(); | ||
325 | } | ||
326 | } | ||
327 | |||
328 | void OpieMail::slotMoveCopyMail() | ||
329 | { | ||
330 | if (!mailView->currentItem()) return; | ||
331 | RecMailP mail = ((MailListViewItem*)mailView->currentItem() )->data(); | ||
332 | AbstractMail*targetMail = 0; | ||
333 | QString targetFolder = ""; | ||
334 | Selectstore sels; | ||
335 | folderView->setupFolderselect(&sels); | ||
336 | if (!sels.exec()) return; | ||
337 | targetMail = sels.currentMail(); | ||
338 | targetFolder = sels.currentFolder(); | ||
339 | if ( (mail->Wrapper()==targetMail && mail->getMbox()==targetFolder) || | ||
340 | targetFolder.isEmpty()) | ||
341 | { | ||
342 | return; | ||
343 | } | ||
344 | if (sels.newFolder() && !targetMail->createMbox(targetFolder)) | ||
345 | { | ||
346 | QMessageBox::critical(0,tr("Error creating new Folder"), | ||
347 | tr("<center>Error while creating<br>new folder - breaking.</center>")); | ||
348 | return; | ||
349 | } | ||
350 | mail->Wrapper()->mvcpMail(mail,targetFolder,targetMail,sels.moveMails()); | ||
351 | folderView->refreshCurrent(); | ||
352 | } | ||
353 | |||
354 | void OpieMail::reEditMail() | ||
355 | { | ||
356 | if (!mailView->currentItem()) return; | ||
357 | |||
358 | ComposeMail compose( settings, this, 0, true , WStyle_ContextHelp ); | ||
359 | compose.reEditMail(((MailListViewItem*)mailView->currentItem() )->data()); | ||
360 | compose.slotAdjustColumns(); | ||
361 | compose.showMaximized(); | ||
362 | compose.exec(); | ||
363 | } | ||