summaryrefslogtreecommitdiffabout
path: root/kmicromail/libmailwrapper/abstractmail.cpp
Unidiff
Diffstat (limited to 'kmicromail/libmailwrapper/abstractmail.cpp') (more/less context) (show whitespace changes)
-rw-r--r--kmicromail/libmailwrapper/abstractmail.cpp172
1 files changed, 172 insertions, 0 deletions
diff --git a/kmicromail/libmailwrapper/abstractmail.cpp b/kmicromail/libmailwrapper/abstractmail.cpp
new file mode 100644
index 0000000..128a7c0
--- a/dev/null
+++ b/kmicromail/libmailwrapper/abstractmail.cpp
@@ -0,0 +1,172 @@
1#include "abstractmail.h"
2#include "imapwrapper.h"
3#include "pop3wrapper.h"
4#include "nntpwrapper.h"
5#include "mhwrapper.h"
6#include "mailtypes.h"
7
8
9
10#include <kdecore/kstandarddirs.h>
11#include <qfile.h>
12#include <qtextstream.h>
13#include <stdlib.h>
14#include <libetpan/mailmime_content.h>
15#include <libetpan/mailmime.h>
16
17using namespace Opie::Core;
18AbstractMail* AbstractMail::getWrapper(IMAPaccount *a)
19{
20 return new IMAPwrapper(a);
21}
22
23AbstractMail* AbstractMail::getWrapper(POP3account *a)
24{
25 return new POP3wrapper(a);
26}
27
28AbstractMail* AbstractMail::getWrapper(NNTPaccount *a)
29{
30 return new NNTPwrapper(a);
31}
32
33AbstractMail* AbstractMail::getWrapper(const QString&a,const QString&name)
34{
35 return new MHwrapper(a,name);
36}
37
38AbstractMail* AbstractMail::getWrapper(Account*a)
39{
40 if (!a) return 0;
41 switch (a->getType()) {
42 case MAILLIB::A_IMAP:
43 return new IMAPwrapper((IMAPaccount*)a);
44 break;
45 case MAILLIB::A_POP3:
46 return new POP3wrapper((POP3account*)a);
47 break;
48 case MAILLIB::A_NNTP:
49 return new NNTPwrapper((NNTPaccount*)a);
50 break;
51 default:
52 return 0;
53 }
54}
55
56encodedString* AbstractMail::decode_String(const encodedString*text,const QString&enc)
57{
58 // odebug << "Decode string start" << oendl;
59 char*result_text;
60 size_t index = 0;
61 /* reset for recursive use! */
62 size_t target_length = 0;
63 result_text = 0;
64 int mimetype = MAILMIME_MECHANISM_7BIT;
65 if (enc.lower()=="quoted-printable") {
66 mimetype = MAILMIME_MECHANISM_QUOTED_PRINTABLE;
67 } else if (enc.lower()=="base64") {
68 mimetype = MAILMIME_MECHANISM_BASE64;
69 } else if (enc.lower()=="8bit") {
70 mimetype = MAILMIME_MECHANISM_8BIT;
71 } else if (enc.lower()=="binary") {
72 mimetype = MAILMIME_MECHANISM_BINARY;
73 }
74
75 int err = mailmime_part_parse(text->Content(),text->Length(),&index,mimetype,
76 &result_text,&target_length);
77
78 encodedString* result = new encodedString();
79 if (err == MAILIMF_NO_ERROR) {
80 result->setContent(result_text,target_length);
81 }
82 //odebug << "Decode string finished" << oendl;
83 return result;
84}
85
86QString AbstractMail::convert_String(const char*text)
87{
88 //size_t index = 0;
89 char*res = 0;
90 int err = MAILIMF_NO_ERROR;
91
92 QString result(text);
93
94 /* due a bug in libetpan it isn't usable this moment */
95/* int err = mailmime_encoded_phrase_parse("iso-8859-1",
96 text, strlen(text),&index, "iso-8859-1",&res);*/
97 //odebug << "Input: " << text << "" << oendl;
98 if (err == MAILIMF_NO_ERROR && res && strlen(res)) {
99// result = QString(res);
100// odebug << "Res: " << res << ", length: " << strlen(res) << "" << oendl;
101 }
102 if (res) free(res);
103 return result;
104}
105
106/* cp & paste from launcher */
107QString AbstractMail::gen_attachment_id()
108{
109 QFile file( "/proc/sys/kernel/random/uuid" );
110 if (!file.open(IO_ReadOnly ) )
111 return QString::null;
112
113 QTextStream stream(&file);
114
115 return "{" + stream.read().stripWhiteSpace() + "}";
116}
117
118int AbstractMail::createMbox(const QString&,const FolderP&,const QString& ,bool)
119{
120 return 0;
121}
122
123QString AbstractMail::defaultLocalfolder()
124{
125 // QString f = getenv( "HOME" );
126 QString f = locateLocal( "data", "kmicromail/localmail");
127 // f += "/Applications/opiemail/localmail";
128 return f;
129}
130
131QString AbstractMail::draftFolder()
132{
133 return QString("Drafts");
134}
135
136/* temporary - will be removed when implemented in all classes */
137void AbstractMail::deleteMails(const QString &,const QValueList<Opie::Core::OSmartPointer<RecMail> > &)
138{
139}
140
141void AbstractMail::mvcpAllMails(const FolderP&fromFolder,
142 const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
143{
144 QValueList<RecMailP> t;
145 listMessages(fromFolder->getName(),t);
146 encodedString*st = 0;
147 while (t.count()>0) {
148 RecMailP r = (*t.begin());
149 st = fetchRawBody(r);
150 if (st) {
151 targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder);
152 delete st;
153 }
154 t.remove(t.begin());
155 }
156 if (moveit) {
157 deleteAllMail(fromFolder);
158 }
159}
160
161void AbstractMail::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
162{
163 encodedString*st = 0;
164 st = fetchRawBody(mail);
165 if (st) {
166 targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder);
167 delete st;
168 }
169 if (moveit) {
170 deleteMail(mail);
171 }
172}