summaryrefslogtreecommitdiff
authorleseb <leseb>2002-06-17 20:52:48 (UTC)
committer leseb <leseb>2002-06-17 20:52:48 (UTC)
commitb177eb4a659c674d1bc3ab82d6d980aade7c0959 (patch) (unidiff)
tree4ba2aee9db13423e37ae0a8051d80c010f815666
parent7ba6590093fb86fe4bf64839d3a517dd396853a3 (diff)
downloadopie-b177eb4a659c674d1bc3ab82d6d980aade7c0959.zip
opie-b177eb4a659c674d1bc3ab82d6d980aade7c0959.tar.gz
opie-b177eb4a659c674d1bc3ab82d6d980aade7c0959.tar.bz2
Fix some bugs when dealing with attachments
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/unsupported/mail2/attachdiag.cpp23
-rw-r--r--noncore/unsupported/mail2/attachdiag.h9
-rw-r--r--noncore/unsupported/mail2/composer.cpp4
-rw-r--r--noncore/unsupported/mail2/libmail/mailfactory.cpp2
-rw-r--r--noncore/unsupported/mail2/libmail/mailfactory.h6
5 files changed, 20 insertions, 24 deletions
diff --git a/noncore/unsupported/mail2/attachdiag.cpp b/noncore/unsupported/mail2/attachdiag.cpp
index 36e1948..446cfe5 100644
--- a/noncore/unsupported/mail2/attachdiag.cpp
+++ b/noncore/unsupported/mail2/attachdiag.cpp
@@ -1,71 +1,68 @@
1#include <qmessagebox.h> 1#include <qmessagebox.h>
2#include <qpushbutton.h> 2#include <qpushbutton.h>
3#include <qlistbox.h> 3#include <qlistbox.h>
4#include <qlayout.h> 4#include <qlayout.h>
5 5
6#include <qpe/applnk.h>
6#include <qpe/fileselector.h> 7#include <qpe/fileselector.h>
7#include <qpe/resource.h> 8#include <qpe/resource.h>
8 9
9#include <stdlib.h> 10#include <stdlib.h>
10 11
11#include "attachdiag.h" 12#include "attachdiag.h"
12 13
13AttachDiag::AttachDiag(QWidget* parent = 0, const char* name = 0, bool modal, WFlags fl = 0) 14AttachDiag::AttachDiag(QWidget* parent = 0, const char* name = 0, bool modal, WFlags fl = 0)
14 : QDialog(parent, name, modal, fl) 15 : QDialog(parent, name, modal, fl)
15{ 16{
16 setCaption(tr("Attach File")); 17 setCaption(tr("Attach File"));
17 18
18 QGridLayout *layout = new QGridLayout(this); 19 QGridLayout *layout = new QGridLayout(this);
19 layout->setSpacing(3); 20 layout->setSpacing(3);
20 layout->setMargin(4); 21 layout->setMargin(4);
21 22
22 FileSelector *fileSelector = new FileSelector("*", this, "FileSelector"); 23 _fileSelector = new FileSelector("*", this, "FileSelector");
23 fileSelector->setCloseVisible(false); 24 _fileSelector->setCloseVisible(false);
24 fileSelector->setNewVisible(false); 25 _fileSelector->setNewVisible(false);
25 26
26 layout->addMultiCellWidget(fileSelector, 0, 0, 0, 1); 27 layout->addMultiCellWidget(_fileSelector, 0, 0, 0, 1);
27 28
28 QPushButton *attachButton = new QPushButton(this); 29 QPushButton *attachButton = new QPushButton(this);
29 attachButton->setText(tr("Ok")); 30 attachButton->setText(tr("Ok"));
30 attachButton->setIconSet(Resource::loadPixmap("enter")); 31 attachButton->setIconSet(Resource::loadPixmap("enter"));
31 32
32 layout->addWidget(attachButton, 1, 0); 33 layout->addWidget(attachButton, 1, 0);
33 34
34 QPushButton *cancelButton = new QPushButton(this); 35 QPushButton *cancelButton = new QPushButton(this);
35 cancelButton->setText(tr("Cancel")); 36 cancelButton->setText(tr("Cancel"));
36 cancelButton->setIconSet(Resource::loadPixmap("editdelete")); 37 cancelButton->setIconSet(Resource::loadPixmap("editdelete"));
37 38
38 layout->addWidget(cancelButton, 1, 1); 39 layout->addWidget(cancelButton, 1, 1);
39 40
40 connect(fileSelector, SIGNAL(fileSelected(const DocLnk &)), SLOT(fileSelected(const DocLnk &)));
41 connect(attachButton, SIGNAL(clicked()), SLOT(accept())); 41 connect(attachButton, SIGNAL(clicked()), SLOT(accept()));
42 connect(cancelButton, SIGNAL(clicked()), SLOT(close())); 42 connect(cancelButton, SIGNAL(clicked()), SLOT(close()));
43 43
44 if (fileSelector->selected() != NULL) 44 if (_fileSelector->fileCount() == 0) {
45 currentFile = *fileSelector->selected();
46
47 if (fileSelector->fileCount() == 0) {
48 attachButton->setEnabled(false); 45 attachButton->setEnabled(false);
49 fileSelector->setEnabled(false); 46 _fileSelector->setEnabled(false);
50 } 47 }
51} 48}
52 49
53void AttachDiag::fileSelected(const DocLnk &file) 50DocLnk AttachDiag::selectedFile()
54{ 51{
55 currentFile = file; 52 return *_fileSelector->selected();
56} 53}
57 54
58DocLnk AttachDiag::getFile(QWidget *parent) 55DocLnk AttachDiag::getFile(QWidget *parent)
59{ 56{
60 AttachDiag attach(parent, 0, true); 57 AttachDiag attach(parent, 0, true);
61 attach.showMaximized(); 58 attach.showMaximized();
62 attach.show(); 59 attach.show();
63 60
64 if (QDialog::Accepted == attach.exec()) { 61 if (QDialog::Accepted == attach.exec()) {
65 return attach.currentFile; 62 return attach.selectedFile();
66 } 63 }
67 64
68 return DocLnk(); 65 return DocLnk();
69 } 66 }
70 67
71 68
diff --git a/noncore/unsupported/mail2/attachdiag.h b/noncore/unsupported/mail2/attachdiag.h
index bce5b4b..88686bc 100644
--- a/noncore/unsupported/mail2/attachdiag.h
+++ b/noncore/unsupported/mail2/attachdiag.h
@@ -1,27 +1,26 @@
1#ifndef ATTACHDIAG_H 1#ifndef ATTACHDIAG_H
2#define ATTACHDIAG_H 2#define ATTACHDIAG_H
3 3
4#include <qdialog.h> 4#include <qdialog.h>
5 5
6#include <qpe/applnk.h> 6class DocLnk;
7class FileSelector;
7 8
8class AttachDiag : public QDialog 9class AttachDiag : public QDialog
9{ 10{
10 Q_OBJECT 11 Q_OBJECT
11 12
12public: 13public:
14 DocLnk selectedFile();
13 static DocLnk getFile(QWidget *parent); 15 static DocLnk getFile(QWidget *parent);
14 16
15protected: 17protected:
16 AttachDiag(QWidget *parent = 0, const char* name = 0, bool modal = false, WFlags fl = 0); 18 AttachDiag(QWidget *parent = 0, const char* name = 0, bool modal = false, WFlags fl = 0);
17 19
18private slots:
19 void fileSelected(const DocLnk &);
20
21private: 20private:
22 DocLnk currentFile; 21 FileSelector *_fileSelector;
23 22
24}; 23};
25 24
26#endif 25#endif
27 26
diff --git a/noncore/unsupported/mail2/composer.cpp b/noncore/unsupported/mail2/composer.cpp
index 7f65dba..c36d973 100644
--- a/noncore/unsupported/mail2/composer.cpp
+++ b/noncore/unsupported/mail2/composer.cpp
@@ -1,244 +1,244 @@
1#include <qmultilineedit.h> 1#include <qmultilineedit.h>
2#include <qmessagebox.h> 2#include <qmessagebox.h>
3#include <qpopupmenu.h> 3#include <qpopupmenu.h>
4#include <qcombobox.h> 4#include <qcombobox.h>
5#include <qlineedit.h> 5#include <qlineedit.h>
6#include <qaction.h> 6#include <qaction.h>
7#include <qtimer.h> 7#include <qtimer.h>
8#include <qlabel.h> 8#include <qlabel.h>
9#include <qapplication.h> 9#include <qapplication.h>
10 10
11#include <qpe/resource.h> 11#include <qpe/resource.h>
12 12
13#include "addresspicker.h" 13#include "addresspicker.h"
14#include "listviewplus.h" 14#include "listviewplus.h"
15#include "smtphandler.h" 15#include "smtphandler.h"
16#include "attachdiag.h" 16#include "attachdiag.h"
17#include "composer.h" 17#include "composer.h"
18#include "rename.h" 18#include "rename.h"
19 19
20AttachViewItem::AttachViewItem(QListView *parent, Attachment &attachment) 20AttachViewItem::AttachViewItem(QListView *parent, Attachment &attachment)
21 : QListViewItem(parent), _attachment(attachment) 21 : QListViewItem(parent), _attachment(attachment)
22{ 22{
23 setPixmap(0, _attachment.docLnk()->pixmap().isNull() ? Resource::loadPixmap("UnknownDocument-14") : _attachment.docLnk()->pixmap()); 23 setPixmap(0, _attachment.docLnk().pixmap().isNull() ? Resource::loadPixmap("UnknownDocument-14") : _attachment.docLnk().pixmap());
24 setText(0, _attachment.newName().isEmpty() ? _attachment.fileName() : _attachment.newName()); 24 setText(0, _attachment.newName().isEmpty() ? _attachment.fileName() : _attachment.newName());
25 setText(1, _attachment.description()); 25 setText(1, _attachment.description());
26} 26}
27 27
28Composer::Composer(QWidget *parent, const char *name, WFlags fl) 28Composer::Composer(QWidget *parent, const char *name, WFlags fl)
29 : ComposerBase(parent, name, fl), _inLoop(false) 29 : ComposerBase(parent, name, fl), _inLoop(false)
30{ 30{
31 abort->setEnabled(false); 31 abort->setEnabled(false);
32 to->setFocus(); 32 to->setFocus();
33 33
34 connect(sendmail, SIGNAL(activated()), SLOT(slotSendMail())); 34 connect(sendmail, SIGNAL(activated()), SLOT(slotSendMail()));
35 connect(addressbook, SIGNAL(activated()), SLOT(slotOpenAddressPicker())); 35 connect(addressbook, SIGNAL(activated()), SLOT(slotOpenAddressPicker()));
36 connect(addattach, SIGNAL(activated()), SLOT(slotAddAttach())); 36 connect(addattach, SIGNAL(activated()), SLOT(slotAddAttach()));
37 connect(delattach, SIGNAL(activated()), SLOT(slotDelAttach())); 37 connect(delattach, SIGNAL(activated()), SLOT(slotDelAttach()));
38 38
39 connect(from, SIGNAL(activated(int)), SLOT(slotFromChanged(int))); 39 connect(from, SIGNAL(activated(int)), SLOT(slotFromChanged(int)));
40 40
41 connect(attachPopup, SIGNAL(activated(int)), SLOT(slotPopupHandler(int))); 41 connect(attachPopup, SIGNAL(activated(int)), SLOT(slotPopupHandler(int)));
42 42
43 QTimer::singleShot(0, this, SLOT(slotFillStuff())); 43 QTimer::singleShot(0, this, SLOT(slotFillStuff()));
44 QTimer::singleShot(0, this, SLOT(slotResizing())); 44 QTimer::singleShot(0, this, SLOT(slotResizing()));
45} 45}
46 46
47Composer::~Composer() 47Composer::~Composer()
48{ 48{
49 hide(); 49 hide();
50} 50}
51 51
52void Composer::hide() 52void Composer::hide()
53{ 53{
54 QWidget::hide(); 54 QWidget::hide();
55 55
56 if (_inLoop) { 56 if (_inLoop) {
57 _inLoop = false; 57 _inLoop = false;
58 qApp->exit_loop(); 58 qApp->exit_loop();
59 } 59 }
60} 60}
61 61
62void Composer::exec() 62void Composer::exec()
63{ 63{
64 show(); 64 show();
65 65
66 if (!_inLoop) { 66 if (!_inLoop) {
67 _inLoop = true; 67 _inLoop = true;
68 qApp->enter_loop(); 68 qApp->enter_loop();
69 } 69 }
70} 70}
71 71
72void Composer::setSendMail(SendMail &sendMail) 72void Composer::setSendMail(SendMail &sendMail)
73{ 73{
74 to->setText(sendMail.to()); 74 to->setText(sendMail.to());
75 cc->setText(sendMail.cc()); 75 cc->setText(sendMail.cc());
76 bcc->setText(sendMail.bcc()); 76 bcc->setText(sendMail.bcc());
77 subject->setText(sendMail.subject()); 77 subject->setText(sendMail.subject());
78 message->setText(sendMail.message()); 78 message->setText(sendMail.message());
79 _inReplyTo = sendMail.inReplyTo(); 79 _inReplyTo = sendMail.inReplyTo();
80 80
81 QValueList<Attachment> attachments = sendMail.attachments(); 81 QValueList<Attachment> attachments = sendMail.attachments();
82 QValueList<Attachment>::Iterator it; 82 QValueList<Attachment>::Iterator it;
83 for (it = attachments.begin(); it != attachments.end(); it++) { 83 for (it = attachments.begin(); it != attachments.end(); it++) {
84 (void) new AttachViewItem(attachView, *it); 84 (void) new AttachViewItem(attachView, *it);
85 if (attachView->isHidden()) attachView->show(); 85 if (attachView->isHidden()) attachView->show();
86 } 86 }
87} 87}
88 88
89void Composer::slotResizing() 89void Composer::slotResizing()
90{ 90{
91 from->setMaximumWidth(width() - fromBox->width()); 91 from->setMaximumWidth(width() - fromBox->width());
92 from->resize(width() - fromBox->width(), y()); 92 from->resize(width() - fromBox->width(), y());
93} 93}
94 94
95void Composer::slotPopupHandler(int itemid) 95void Composer::slotPopupHandler(int itemid)
96{ 96{
97 if (attachView->currentItem() == NULL) { 97 if (attachView->currentItem() == NULL) {
98 QMessageBox::information(this, tr("Error"), tr("Please select an entry first."), tr("Ok")); 98 QMessageBox::information(this, tr("Error"), tr("Please select an entry first."), tr("Ok"));
99 return; 99 return;
100 } 100 }
101 101
102 if (itemid == POPUP_ATTACH_RENAME) { 102 if (itemid == POPUP_ATTACH_RENAME) {
103 QString tmp = Rename::rename(attachView->currentItem()->text(0), this); 103 QString tmp = Rename::rename(attachView->currentItem()->text(0), this);
104 if (tmp != QString(0)) attachView->currentItem()->setText(0, tmp); 104 if (tmp != QString(0)) attachView->currentItem()->setText(0, tmp);
105 } else if (itemid == POPUP_ATTACH_DESC) { 105 } else if (itemid == POPUP_ATTACH_DESC) {
106 QString tmp = Rename::getText(tr("Set Description"), tr("<div align=center>Description"), this); 106 QString tmp = Rename::getText(tr("Set Description"), tr("<div align=center>Description"), this);
107 if (tmp != QString(0)) attachView->currentItem()->setText(1, tmp); 107 if (tmp != QString(0)) attachView->currentItem()->setText(1, tmp);
108 } else if (itemid == POPUP_ATTACH_REMOVE) { 108 } else if (itemid == POPUP_ATTACH_REMOVE) {
109 attachView->takeItem(attachView->currentItem()); 109 attachView->takeItem(attachView->currentItem());
110 } 110 }
111} 111}
112 112
113void Composer::slotSendMail() 113void Composer::slotSendMail()
114{ 114{
115 if (to->text().find(QRegExp(".*\\@.*\\..*")) == -1) { 115 if (to->text().find(QRegExp(".*\\@.*\\..*")) == -1) {
116 QMessageBox::information(this, tr("Error"), tr("<p>You have to specify a recipient.<br>(eg: foo@bar.org)</p>"), tr("Ok")); 116 QMessageBox::information(this, tr("Error"), tr("<p>You have to specify a recipient.<br>(eg: foo@bar.org)</p>"), tr("Ok"));
117 return; 117 return;
118 } 118 }
119 119
120 SendMail smail; 120 SendMail smail;
121 smail.setFrom(from->currentText()); 121 smail.setFrom(from->currentText());
122 smail.setReplyTo(replyto->text()); 122 smail.setReplyTo(replyto->text());
123 smail.setTo(to->text()); 123 smail.setTo(to->text());
124 smail.setCc(cc->text()); 124 smail.setCc(cc->text());
125 smail.setBcc(bcc->text()); 125 smail.setBcc(bcc->text());
126 smail.setSubject(subject->text()); 126 smail.setSubject(subject->text());
127 smail.setMessage(message->text()); 127 smail.setMessage(message->text());
128 smail.setNeedsMime(attachView->childCount() == 0 ? false : true); 128 smail.setNeedsMime(attachView->childCount() == 0 ? false : true);
129 smail.setAccount(accountsLoaded[from->currentItem()]); 129 smail.setAccount(accountsLoaded[from->currentItem()]);
130 130
131 if (priority->currentItem() == POPUP_PRIO_LOW) { 131 if (priority->currentItem() == POPUP_PRIO_LOW) {
132 smail.setPriority("Low");// No i18n on purpose 132 smail.setPriority("Low");// No i18n on purpose
133 } else if (priority->currentItem() == POPUP_PRIO_NORMAL) { 133 } else if (priority->currentItem() == POPUP_PRIO_NORMAL) {
134 smail.setPriority("Normal");// No i18n on purpose 134 smail.setPriority("Normal");// No i18n on purpose
135 } else if (priority->currentItem() == POPUP_PRIO_HIGH) { 135 } else if (priority->currentItem() == POPUP_PRIO_HIGH) {
136 smail.setPriority("High");// No i18n on purpose 136 smail.setPriority("High");// No i18n on purpose
137 } 137 }
138 138
139 QValueList<Attachment> attachments; 139 QValueList<Attachment> attachments;
140 QListViewItem *item; 140 QListViewItem *item;
141 for (item = attachView->firstChild(); item != 0; item = item->itemBelow()) { 141 for (item = attachView->firstChild(); item != 0; item = item->itemBelow()) {
142 attachments.append(((AttachViewItem *)item)->attachment()); 142 attachments.append(((AttachViewItem *)item)->attachment());
143 } 143 }
144 144
145 smail.setAttachments(attachments); 145 smail.setAttachments(attachments);
146 146
147 QString header, message; 147 QString header, message;
148 MailFactory::genMail(header, message, smail, this); 148 MailFactory::genMail(header, message, smail, this);
149 if (header.isNull() || message.isNull()) return;// Aborted. 149 if (header.isNull() || message.isNull()) return;// Aborted.
150 150
151 abort->setEnabled(true); 151 abort->setEnabled(true);
152 152
153 SmtpHandler *handler = new SmtpHandler(header, message, accountsLoaded[from->currentItem()], to->text()); 153 SmtpHandler *handler = new SmtpHandler(header, message, accountsLoaded[from->currentItem()], to->text());
154 connect(handler, SIGNAL(finished()), SLOT(slotSendFinished())); 154 connect(handler, SIGNAL(finished()), SLOT(slotSendFinished()));
155 connect(handler, SIGNAL(error(const QString &)), SLOT(slotSendError(const QString &))); 155 connect(handler, SIGNAL(error(const QString &)), SLOT(slotSendError(const QString &)));
156 connect(handler, SIGNAL(status(const QString &)), status, SLOT(setText(const QString &))); 156 connect(handler, SIGNAL(status(const QString &)), status, SLOT(setText(const QString &)));
157} 157}
158 158
159void Composer::slotSendError(const QString &error) 159void Composer::slotSendError(const QString &error)
160{ 160{
161 status->setText(tr("<font color=#ff0000>Error occoured during sending.</font>")); 161 status->setText(tr("<font color=#ff0000>Error occoured during sending.</font>"));
162 QMessageBox::warning(this, tr("Error"), tr("<p>%1</p").arg(error), tr("Ok")); 162 QMessageBox::warning(this, tr("Error"), tr("<p>%1</p").arg(error), tr("Ok"));
163} 163}
164 164
165void Composer::slotSendFinished() 165void Composer::slotSendFinished()
166{ 166{
167 QMessageBox::information(this, tr("Success"), tr("<p>The mail was sent successfully.</p>"), tr("Ok")); 167 QMessageBox::information(this, tr("Success"), tr("<p>The mail was sent successfully.</p>"), tr("Ok"));
168 168
169 status->setText(QString(0)); 169 status->setText(QString(0));
170 abort->setEnabled(false); 170 abort->setEnabled(false);
171} 171}
172 172
173void Composer::slotFillStuff() 173void Composer::slotFillStuff()
174{ 174{
175 QValueList<Account> accounts = ConfigFile::getAccounts(); 175 QValueList<Account> accounts = ConfigFile::getAccounts();
176 int i = 0; 176 int i = 0;
177 177
178 QValueList<Account>::Iterator it; 178 QValueList<Account>::Iterator it;
179 for (it = accounts.begin(); it != accounts.end(); it++) { 179 for (it = accounts.begin(); it != accounts.end(); it++) {
180 if (!(*it).email().isEmpty() && !(*it).smtpServer().isEmpty() && !(*it).smtpPort().isEmpty()) { 180 if (!(*it).email().isEmpty() && !(*it).smtpServer().isEmpty() && !(*it).smtpPort().isEmpty()) {
181 if (!(*it).realName().isEmpty()) 181 if (!(*it).realName().isEmpty())
182 from->insertItem((*it).realName() + " <" + (*it).email() + ">", i); 182 from->insertItem((*it).realName() + " <" + (*it).email() + ">", i);
183 else 183 else
184 from->insertItem((*it).email()); 184 from->insertItem((*it).email());
185 185
186 accountsLoaded.append(*it); 186 accountsLoaded.append(*it);
187 i++; 187 i++;
188 } 188 }
189 } 189 }
190} 190}
191 191
192void Composer::slotFromChanged(int id) 192void Composer::slotFromChanged(int id)
193{ 193{
194 Account account = accountsLoaded[id]; 194 Account account = accountsLoaded[id];
195 195
196 if (account.defaultCc()) cc->setText(account.cc()); 196 if (account.defaultCc()) cc->setText(account.cc());
197 if (account.defaultBcc()) bcc->setText(account.bcc()); 197 if (account.defaultBcc()) bcc->setText(account.bcc());
198 if (account.defaultReplyTo()) replyto->setText(account.replyTo()); 198 if (account.defaultReplyTo()) replyto->setText(account.replyTo());
199 if (!account.signature().isEmpty()) 199 if (!account.signature().isEmpty())
200 message->setText(message->text() + "\n\n-- \n" + account.signature()); 200 message->setText(message->text() + "\n\n-- \n" + account.signature());
201} 201}
202 202
203void Composer::slotOpenAddressPicker() 203void Composer::slotOpenAddressPicker()
204{ 204{
205 if (!to->isHidden() && cc->isHidden() && bcc->isHidden()) { 205 if (!to->isHidden() && cc->isHidden() && bcc->isHidden()) {
206 if (to->text().isEmpty()) { 206 if (to->text().isEmpty()) {
207 to->setText(AddressPicker::getNames()); 207 to->setText(AddressPicker::getNames());
208 } else { 208 } else {
209 to->setText(to->text() + ", " + AddressPicker::getNames()); 209 to->setText(to->text() + ", " + AddressPicker::getNames());
210 } 210 }
211 } else if (to->isHidden() && !cc->isHidden() && bcc->isHidden()) { 211 } else if (to->isHidden() && !cc->isHidden() && bcc->isHidden()) {
212 if (cc->text().isEmpty()) { 212 if (cc->text().isEmpty()) {
213 cc->setText(AddressPicker::getNames()); 213 cc->setText(AddressPicker::getNames());
214 } else { 214 } else {
215 cc->setText(cc->text() + ", " + AddressPicker::getNames()); 215 cc->setText(cc->text() + ", " + AddressPicker::getNames());
216 } 216 }
217 } else if (to->isHidden() && cc->isHidden() && !bcc->isHidden()) { 217 } else if (to->isHidden() && cc->isHidden() && !bcc->isHidden()) {
218 if (bcc->text().isEmpty()) { 218 if (bcc->text().isEmpty()) {
219 bcc->setText(AddressPicker::getNames()); 219 bcc->setText(AddressPicker::getNames());
220 } else { 220 } else {
221 bcc->setText(bcc->text() + ", " + AddressPicker::getNames()); 221 bcc->setText(bcc->text() + ", " + AddressPicker::getNames());
222 } 222 }
223 } 223 }
224} 224}
225 225
226void Composer::slotAddAttach() 226void Composer::slotAddAttach()
227{ 227{
228 DocLnk lnk = AttachDiag::getFile(this); 228 DocLnk lnk = AttachDiag::getFile(this);
229 if (lnk.name().isEmpty()) return; 229 if (lnk.name().isEmpty()) return;
230 230
231 Attachment attachment; 231 Attachment attachment;
232 attachment.setFileName(lnk.file()); 232 attachment.setFileName(lnk.file());
233 attachment.setNewName(lnk.name()); 233 attachment.setNewName(lnk.name());
234 attachment.setDocLnk(&lnk); 234 attachment.setDocLnk(lnk);
235 235
236 (void) new AttachViewItem(attachView, attachment); 236 (void) new AttachViewItem(attachView, attachment);
237} 237}
238 238
239void Composer::slotDelAttach() 239void Composer::slotDelAttach()
240{ 240{
241 if (attachView->currentItem() == NULL) return; 241 if (attachView->currentItem() == NULL) return;
242 attachView->takeItem(attachView->currentItem()); 242 attachView->takeItem(attachView->currentItem());
243} 243}
244 244
diff --git a/noncore/unsupported/mail2/libmail/mailfactory.cpp b/noncore/unsupported/mail2/libmail/mailfactory.cpp
index 6602919..e02f80f 100644
--- a/noncore/unsupported/mail2/libmail/mailfactory.cpp
+++ b/noncore/unsupported/mail2/libmail/mailfactory.cpp
@@ -1,173 +1,173 @@
1#include <qmessagebox.h> 1#include <qmessagebox.h>
2#include <qtextstream.h> 2#include <qtextstream.h>
3#include <qfile.h> 3#include <qfile.h>
4 4
5#include <qpe/mimetype.h> 5#include <qpe/mimetype.h>
6 6
7#include "miscfunctions.h" 7#include "miscfunctions.h"
8#include "mailfactory.h" 8#include "mailfactory.h"
9#include "defines.h" 9#include "defines.h"
10 10
11MailFactory::MailFactory(SendMail &smail, QWidget *parent) 11MailFactory::MailFactory(SendMail &smail, QWidget *parent)
12 : QObject(), _smail(smail), _parent(parent) 12 : QObject(), _smail(smail), _parent(parent)
13{ 13{
14 _abort = false; 14 _abort = false;
15 Account account = _smail.account(); 15 Account account = _smail.account();
16 16
17 if (!_smail.from().isEmpty()) 17 if (!_smail.from().isEmpty())
18 _header += "From: " + _smail.from() + "\n"; 18 _header += "From: " + _smail.from() + "\n";
19 if (!_smail.replyTo().isEmpty()) 19 if (!_smail.replyTo().isEmpty())
20 _header += "Reply-To: " + _smail.replyTo() + "\n"; 20 _header += "Reply-To: " + _smail.replyTo() + "\n";
21 if (!_smail.to().isEmpty()) 21 if (!_smail.to().isEmpty())
22 _header += "To: " + _smail.to() + "\n"; 22 _header += "To: " + _smail.to() + "\n";
23 if (!_smail.cc().isEmpty()) 23 if (!_smail.cc().isEmpty())
24 _header += "Cc: " + _smail.cc() + "\n"; 24 _header += "Cc: " + _smail.cc() + "\n";
25 if (!_smail.bcc().isEmpty()) 25 if (!_smail.bcc().isEmpty())
26 _header += "Bcc: " + _smail.bcc() + "\n"; 26 _header += "Bcc: " + _smail.bcc() + "\n";
27 if (!_smail.subject().isEmpty()) 27 if (!_smail.subject().isEmpty())
28 _header += "Subject: " + _smail.subject() + "\n"; 28 _header += "Subject: " + _smail.subject() + "\n";
29 if (!_smail.priority().isEmpty() || (_smail.priority() != "Normal")) 29 if (!_smail.priority().isEmpty() || (_smail.priority() != "Normal"))
30 _header += "Priority: " + _smail.priority() + "\n"; 30 _header += "Priority: " + _smail.priority() + "\n";
31 _header += "Date: " + MiscFunctions::rfcDate() + "\n"; 31 _header += "Date: " + MiscFunctions::rfcDate() + "\n";
32 if (!_smail.account().org().isEmpty()) 32 if (!_smail.account().org().isEmpty())
33 _header += "Organization: " + _smail.account().org() + "\n"; 33 _header += "Organization: " + _smail.account().org() + "\n";
34 if (_smail.needsMime()) 34 if (_smail.needsMime())
35 _header += "Mime-Version: 1.0\n"; 35 _header += "Mime-Version: 1.0\n";
36 _header += "Message-Id: <" + MiscFunctions::uniqueString() + "." + account.email() + ">\n"; 36 _header += "Message-Id: <" + MiscFunctions::uniqueString() + "." + account.email() + ">\n";
37 if (!_smail.inReplyTo().isEmpty()) 37 if (!_smail.inReplyTo().isEmpty())
38 _header += "In-Reply-To: " + _smail.inReplyTo() + "\n"; 38 _header += "In-Reply-To: " + _smail.inReplyTo() + "\n";
39 if (!QString((QString) USERAGENT).isEmpty()) 39 if (!QString((QString) USERAGENT).isEmpty())
40 _header += (QString) "User-Agent: " + USERAGENT + "\n"; 40 _header += (QString) "User-Agent: " + USERAGENT + "\n";
41 41
42 if (!_smail.needsMime()) { 42 if (!_smail.needsMime()) {
43 // if (_smail.encrypt() && !_smail.sign()) { 43 // if (_smail.encrypt() && !_smail.sign()) {
44 // openPgpEncrypt(_smail.message(), _header, _body); 44 // openPgpEncrypt(_smail.message(), _header, _body);
45 // } else if (!_smail.encrypt() && _smail.sign()) { 45 // } else if (!_smail.encrypt() && _smail.sign()) {
46 // openPgpSign(_smail.message(), _header, _body); 46 // openPgpSign(_smail.message(), _header, _body);
47 // } else if (_smail.encrypt() && _smail.sign()) { 47 // } else if (_smail.encrypt() && _smail.sign()) {
48 // openPgpSignEncrypt(_smail.message(), _header, _body); 48 // openPgpSignEncrypt(_smail.message(), _header, _body);
49 // } else { 49 // } else {
50 _body += _smail.message(); 50 _body += _smail.message();
51 // } 51 // }
52 } else { 52 } else {
53 QString boundary = MiscFunctions::uniqueString(); 53 QString boundary = MiscFunctions::uniqueString();
54 54
55 _header += "Content-Type: multipart/mixed; boundary=\"" + boundary + "\"\n"; 55 _header += "Content-Type: multipart/mixed; boundary=\"" + boundary + "\"\n";
56 56
57 _body += "This is a multi-part message in MIME format.\n\n"; 57 _body += "This is a multi-part message in MIME format.\n\n";
58 _body += "--" + boundary + "\n"; 58 _body += "--" + boundary + "\n";
59 59
60 // if (_smail.encrypt() && !_smail.sign()) { 60 // if (_smail.encrypt() && !_smail.sign()) {
61 // QString header, body; 61 // QString header, body;
62 // openPgpEncrypt(_smail.message(), header, body); 62 // openPgpEncrypt(_smail.message(), header, body);
63 // _body += header + "\n" + body + "\n"; 63 // _body += header + "\n" + body + "\n";
64 // } else if (!_smail.encrypt() && _smail.sign()) { 64 // } else if (!_smail.encrypt() && _smail.sign()) {
65 // QString header, body; 65 // QString header, body;
66 // openPgpSign(_smail.message(), header, body); 66 // openPgpSign(_smail.message(), header, body);
67 // _body += header + "\n" + body + "\n"; 67 // _body += header + "\n" + body + "\n";
68 // } else if (_smail.encrypt() && _smail.sign()) { 68 // } else if (_smail.encrypt() && _smail.sign()) {
69 // QString header, body; 69 // QString header, body;
70 // openPgpSignEncrypt(_smail.message(), header, body); 70 // openPgpSignEncrypt(_smail.message(), header, body);
71 // _body += header + "\n" + body + "\n"; 71 // _body += header + "\n" + body + "\n";
72 // } else { 72 // } else {
73 73
74 // TODO: Do proper charset handling! 74 // TODO: Do proper charset handling!
75 _body += "Content-Type: text/plain; charset=\"iso-8859-1\"\n"; 75 _body += "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
76 _body += "Content-Transfer-Encoding: 8bit\n\n"; 76 _body += "Content-Transfer-Encoding: 8bit\n\n";
77 _body += _smail.message() + "\n"; 77 _body += _smail.message() + "\n";
78 // } 78 // }
79 79
80 QValueList<Attachment> attachments = _smail.attachments(); 80 QValueList<Attachment> attachments = _smail.attachments();
81 QValueList<Attachment>::Iterator it; 81 QValueList<Attachment>::Iterator it;
82 for (it = attachments.begin(); it != attachments.end(); it++) { 82 for (it = attachments.begin(); it != attachments.end(); it++) {
83 QFile f((*it).fileName()); 83 QFile f((*it).fileName());
84 if (f.open(IO_ReadOnly)) { 84 if (f.open(IO_ReadOnly)) {
85 QTextStream t(&f); 85 QTextStream t(&f);
86 QString file; 86 QString file;
87 while (!t.atEnd()) file += t.readLine() + "\n"; 87 while (!t.atEnd()) file += t.readLine() + "\n";
88 f.close(); 88 f.close();
89 QString mimetype = (new MimeType(*(*it).docLnk()))->id(); 89 QString mimetype = (new MimeType((*it).docLnk()))->id();
90 90
91 _body += "\n--" + boundary + "\n"; 91 _body += "\n--" + boundary + "\n";
92 _body += "Content-Type: " + mimetype + "; name=\"" + (*it).newName() + "\"\n"; 92 _body += "Content-Type: " + mimetype + "; name=\"" + (*it).newName() + "\"\n";
93 93
94 // TODO: Decide which content transfer encoding is best. B64 for binary, QP for text. 94 // TODO: Decide which content transfer encoding is best. B64 for binary, QP for text.
95 _body += "Content-Transfer-Encoding: base64\n"; 95 _body += "Content-Transfer-Encoding: base64\n";
96 96
97 _body += "Content-Disposition: attachment; filename=\"" + (*it).newName() + "\"\n"; 97 _body += "Content-Disposition: attachment; filename=\"" + (*it).newName() + "\"\n";
98 if (!(*it).description().isEmpty()) 98 if (!(*it).description().isEmpty())
99 _body += "Content-Description: " + (*it).description() + "\n"; 99 _body += "Content-Description: " + (*it).description() + "\n";
100 100
101 _body += "\n" + MiscFunctions::encodeBase64(file) + "\n"; 101 _body += "\n" + MiscFunctions::encodeBase64(file) + "\n";
102 } else { 102 } else {
103 int ret = QMessageBox::critical(_parent, tr("Error"), tr("<p>Couldn't attach file '%1'. Continue anyway or abort?</p>").arg((*it).fileName()), tr("Continue"), tr("Abort")); 103 int ret = QMessageBox::critical(_parent, tr("Error"), tr("<p>Couldn't attach file '%1'. Continue anyway or abort?</p>").arg((*it).fileName()), tr("Continue"), tr("Abort"));
104 if (ret != 0) { 104 if (ret != 0) {
105 _abort = true; 105 _abort = true;
106 break; 106 break;
107 } 107 }
108 } 108 }
109 } 109 }
110 _body += "\n--" + boundary + "--"; 110 _body += "\n--" + boundary + "--";
111 } 111 }
112 112
113 if (_abort) { 113 if (_abort) {
114 _body = QString(0); 114 _body = QString(0);
115 _header = QString(0); 115 _header = QString(0);
116 } 116 }
117} 117}
118 118
119// Unfinished GPG code. 119// Unfinished GPG code.
120/* 120/*
121void MailFactory::openPgpEncrypt(const QString &text, QString &header, QString &body) 121void MailFactory::openPgpEncrypt(const QString &text, QString &header, QString &body)
122{ 122{
123 QString boundary = MiscFunctions::uniqueString(); 123 QString boundary = MiscFunctions::uniqueString();
124 124
125 header += "Content-Type: multipart/encrypted; boundary=\"" + boundary + "\"; protocol=\"application/pgp-encrypted\"\n"; 125 header += "Content-Type: multipart/encrypted; boundary=\"" + boundary + "\"; protocol=\"application/pgp-encrypted\"\n";
126 126
127 body += "--" + boundary + "\n"; 127 body += "--" + boundary + "\n";
128 body += "Content-Type: application/pgp-encrypted\n\n"; 128 body += "Content-Type: application/pgp-encrypted\n\n";
129 body += "Version: 1\n\n"; 129 body += "Version: 1\n\n";
130 body += "--" + boundary + "\n"; 130 body += "--" + boundary + "\n";
131 body += "Content-Type: application/octet-stream\n\n"; 131 body += "Content-Type: application/octet-stream\n\n";
132 body += GpgHandling::encrypt(_smail.gpgReceivers(), text); 132 body += GpgHandling::encrypt(_smail.gpgReceivers(), text);
133 body += "\n--" + boundary + "--\n"; 133 body += "\n--" + boundary + "--\n";
134} 134}
135 135
136void MailFactory::openPgpSign(const QString &text, QString &header, QString &body) 136void MailFactory::openPgpSign(const QString &text, QString &header, QString &body)
137{ 137{
138 QString boundary = MiscFunctions::uniqueString(); 138 QString boundary = MiscFunctions::uniqueString();
139 139
140 header += "Content-Type: multipart/signed; boundary=\"" + boundary + "\"; protocol=\"application/pgp-signature\"\n"; 140 header += "Content-Type: multipart/signed; boundary=\"" + boundary + "\"; protocol=\"application/pgp-signature\"\n";
141 141
142 body += "--" + boundary + "\n"; 142 body += "--" + boundary + "\n";
143 143
144 QString temp; 144 QString temp;
145 temp += "Content-Type: text/plain; charset=\"iso-8859-1\"\n"; 145 temp += "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
146 temp += "Content-Transfer-Encoding: quoted-printable\n\n"; 146 temp += "Content-Transfer-Encoding: quoted-printable\n\n";
147 temp += MiscFunctions::encodeQPrintable(text) + "\n"; 147 temp += MiscFunctions::encodeQPrintable(text) + "\n";
148 body += temp; 148 body += temp;
149 149
150 temp.replace(QRegExp("\n"), "\r\n"); 150 temp.replace(QRegExp("\n"), "\r\n");
151 QString signature = GpgHandling::sign(temp, _parent); 151 QString signature = GpgHandling::sign(temp, _parent);
152 152
153 body += "\n--" + boundary + "\n"; 153 body += "\n--" + boundary + "\n";
154 body += "Content-Type: application/pgp-signature\n\n"; 154 body += "Content-Type: application/pgp-signature\n\n";
155 body += signature + "\n"; 155 body += signature + "\n";
156 body += "\n--" + boundary + "--\n"; 156 body += "\n--" + boundary + "--\n";
157} 157}
158 158
159void MailFactory::openPgpSignEncrypt(const QString &text, QString &header, QString &message) 159void MailFactory::openPgpSignEncrypt(const QString &text, QString &header, QString &message)
160{ 160{
161 QString header_, message_; 161 QString header_, message_;
162 openPgpSign(text, header_, message_); 162 openPgpSign(text, header_, message_);
163 openPgpEncrypt(header_ + "\n" + message_, header, message); 163 openPgpEncrypt(header_ + "\n" + message_, header, message);
164} 164}
165*/ 165*/
166void MailFactory::genMail(QString &header, QString &message, SendMail &smail, QWidget *parent) 166void MailFactory::genMail(QString &header, QString &message, SendMail &smail, QWidget *parent)
167{ 167{
168 MailFactory factory(smail, parent); 168 MailFactory factory(smail, parent);
169 169
170 header = factory._header; 170 header = factory._header;
171 message = factory._body; 171 message = factory._body;
172} 172}
173 173
diff --git a/noncore/unsupported/mail2/libmail/mailfactory.h b/noncore/unsupported/mail2/libmail/mailfactory.h
index 8f67447..c938c27 100644
--- a/noncore/unsupported/mail2/libmail/mailfactory.h
+++ b/noncore/unsupported/mail2/libmail/mailfactory.h
@@ -1,109 +1,109 @@
1#ifndef MAILFACTORY_H 1#ifndef MAILFACTORY_H
2#define MAILFACTORY_H 2#define MAILFACTORY_H
3 3
4#include <qobject.h> 4#include <qobject.h>
5 5
6#include <qpe/applnk.h> 6#include <qpe/applnk.h>
7 7
8#include "configfile.h" 8#include "configfile.h"
9 9
10class Attachment 10class Attachment
11{ 11{
12public: 12public:
13 void setFileName(QString fileName) { _fileName = fileName; } 13 void setFileName(QString fileName) { _fileName = fileName; }
14 void setNewName(QString newName) { _newName = newName; } 14 void setNewName(QString newName) { _newName = newName; }
15 void setDescription(QString description) { _description = description; } 15 void setDescription(QString description) { _description = description; }
16 void setDocLnk(DocLnk *docLnk) { _docLnk = docLnk; } 16 void setDocLnk(DocLnk docLnk) { _docLnk = docLnk; }
17 17
18 QString fileName() { return _fileName; } 18 QString fileName() { return _fileName; }
19 QString newName() { return _newName; } 19 QString newName() { return _newName; }
20 QString description() { return _description; } 20 QString description() { return _description; }
21 DocLnk *docLnk() { return _docLnk; } 21 DocLnk docLnk() { return _docLnk; }
22 22
23protected: 23protected:
24 QString _fileName, _newName, _description; 24 QString _fileName, _newName, _description;
25 DocLnk *_docLnk; 25 DocLnk _docLnk;
26 26
27}; 27};
28 28
29class SendMail 29class SendMail
30{ 30{
31public: 31public:
32 SendMail() { _needsMime = false; } 32 SendMail() { _needsMime = false; }
33 33
34 void setAccount(Account account) { _account = account; } 34 void setAccount(Account account) { _account = account; }
35 35
36 void setFrom(QString from) { _from = from; } 36 void setFrom(QString from) { _from = from; }
37 void setReplyTo(QString replyTo) { _replyTo = replyTo; } 37 void setReplyTo(QString replyTo) { _replyTo = replyTo; }
38 void setTo(QString to) { _to = to; } 38 void setTo(QString to) { _to = to; }
39 void setCc(QString cc) { _cc = cc; } 39 void setCc(QString cc) { _cc = cc; }
40 void setBcc(QString bcc) { _bcc = bcc; } 40 void setBcc(QString bcc) { _bcc = bcc; }
41 void setSubject(QString subject) { _subject = subject; } 41 void setSubject(QString subject) { _subject = subject; }
42 void setPriority(QString priority) { _priority = priority; } 42 void setPriority(QString priority) { _priority = priority; }
43 void setMessage(QString message) { _message = message; } 43 void setMessage(QString message) { _message = message; }
44 void setInReplyTo(QString inReplyTo) { _inReplyTo = inReplyTo; } 44 void setInReplyTo(QString inReplyTo) { _inReplyTo = inReplyTo; }
45 45
46 void setNeedsMime(bool needsMime) { _needsMime = needsMime; } 46 void setNeedsMime(bool needsMime) { _needsMime = needsMime; }
47 47
48 //void setEncrypt(bool encrypt) { _encrypt = encrypt; } 48 //void setEncrypt(bool encrypt) { _encrypt = encrypt; }
49 //void setSign(bool sign) { _sign = sign; } 49 //void setSign(bool sign) { _sign = sign; }
50 //void setGpgReceivers(QValueList<GpgKey> receivers) { _receivers = receivers; } 50 //void setGpgReceivers(QValueList<GpgKey> receivers) { _receivers = receivers; }
51 //void setGpgPassphrase(QString passphrase) { _passphrase = passphrase; } 51 //void setGpgPassphrase(QString passphrase) { _passphrase = passphrase; }
52 52
53 void setAttachments(QValueList<Attachment> attachments) { _attachments = attachments; } 53 void setAttachments(QValueList<Attachment> attachments) { _attachments = attachments; }
54 void addAttachment(Attachment attachment) { _attachments.append(attachment); } 54 void addAttachment(Attachment attachment) { _attachments.append(attachment); }
55 55
56 Account account() { return _account; } 56 Account account() { return _account; }
57 57
58 QString from() { return _from; } 58 QString from() { return _from; }
59 QString replyTo() { return _replyTo; } 59 QString replyTo() { return _replyTo; }
60 QString to() { return _to; } 60 QString to() { return _to; }
61 QString cc() { return _cc; } 61 QString cc() { return _cc; }
62 QString bcc() { return _bcc; } 62 QString bcc() { return _bcc; }
63 QString subject() { return _subject; } 63 QString subject() { return _subject; }
64 QString priority() { return _priority; } 64 QString priority() { return _priority; }
65 QString message() { return _message; } 65 QString message() { return _message; }
66 QString inReplyTo() { return _inReplyTo; } 66 QString inReplyTo() { return _inReplyTo; }
67 67
68 bool needsMime() { return _needsMime; } 68 bool needsMime() { return _needsMime; }
69 69
70 //bool encrypt() { return _encrypt; } 70 //bool encrypt() { return _encrypt; }
71 //bool sign() { return _sign; } 71 //bool sign() { return _sign; }
72 //QValueList<GpgKey> gpgReceivers() { return _receivers; } 72 //QValueList<GpgKey> gpgReceivers() { return _receivers; }
73 //QString gpgPassphrase() { return _passphrase; } 73 //QString gpgPassphrase() { return _passphrase; }
74 74
75 QValueList<Attachment> attachments() { return _attachments; } 75 QValueList<Attachment> attachments() { return _attachments; }
76 76
77protected: 77protected:
78 Account _account; 78 Account _account;
79 QString _from, _replyTo, _to, _cc, _bcc, _subject, _priority, _message, _inReplyTo; 79 QString _from, _replyTo, _to, _cc, _bcc, _subject, _priority, _message, _inReplyTo;
80 bool _needsMime; 80 bool _needsMime;
81 //bool _encrypt, _sign; 81 //bool _encrypt, _sign;
82 //QValueList<GpgKey> _receivers; 82 //QValueList<GpgKey> _receivers;
83 //QString _passphrase; 83 //QString _passphrase;
84 QValueList<Attachment> _attachments; 84 QValueList<Attachment> _attachments;
85 85
86}; 86};
87 87
88class MailFactory : public QObject 88class MailFactory : public QObject
89{ 89{
90 Q_OBJECT 90 Q_OBJECT
91 91
92public: 92public:
93 static void genMail(QString &header, QString &message, SendMail &smail, QWidget *parent); 93 static void genMail(QString &header, QString &message, SendMail &smail, QWidget *parent);
94 94
95protected: 95protected:
96 MailFactory(SendMail &smail, QWidget *parent); 96 MailFactory(SendMail &smail, QWidget *parent);
97 97
98 //void openPgpEncrypt(const QString &text, QString &header, QString &message); 98 //void openPgpEncrypt(const QString &text, QString &header, QString &message);
99 //void openPgpSign(const QString &text, QString &header, QString &message); 99 //void openPgpSign(const QString &text, QString &header, QString &message);
100 //void openPgpSignEncrypt(const QString &text, QString &header, QString &message); 100 //void openPgpSignEncrypt(const QString &text, QString &header, QString &message);
101 101
102 bool _abort; 102 bool _abort;
103 SendMail _smail; 103 SendMail _smail;
104 QWidget *_parent; 104 QWidget *_parent;
105 QString _header, _body; 105 QString _header, _body;
106 106
107}; 107};
108 108
109#endif 109#endif