author | zautrix <zautrix> | 2004-07-03 16:33:12 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-07-03 16:33:12 (UTC) |
commit | e3b89230f065c48c84b48c88edb6eb088374c487 (patch) (unidiff) | |
tree | 162ea2ef909a6f82ccfcedf45d80d6c821174912 /kmicromail/libmailwrapper/abstractmail.cpp | |
parent | 2dd6ac0b2d24c91d35ce674a6c26351352df2b15 (diff) | |
download | kdepimpi-e3b89230f065c48c84b48c88edb6eb088374c487.zip kdepimpi-e3b89230f065c48c84b48c88edb6eb088374c487.tar.gz kdepimpi-e3b89230f065c48c84b48c88edb6eb088374c487.tar.bz2 |
Initial revision
Diffstat (limited to 'kmicromail/libmailwrapper/abstractmail.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | kmicromail/libmailwrapper/abstractmail.cpp | 172 |
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 | |||
17 | using namespace Opie::Core; | ||
18 | AbstractMail* AbstractMail::getWrapper(IMAPaccount *a) | ||
19 | { | ||
20 | return new IMAPwrapper(a); | ||
21 | } | ||
22 | |||
23 | AbstractMail* AbstractMail::getWrapper(POP3account *a) | ||
24 | { | ||
25 | return new POP3wrapper(a); | ||
26 | } | ||
27 | |||
28 | AbstractMail* AbstractMail::getWrapper(NNTPaccount *a) | ||
29 | { | ||
30 | return new NNTPwrapper(a); | ||
31 | } | ||
32 | |||
33 | AbstractMail* AbstractMail::getWrapper(const QString&a,const QString&name) | ||
34 | { | ||
35 | return new MHwrapper(a,name); | ||
36 | } | ||
37 | |||
38 | AbstractMail* 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 | |||
56 | encodedString* 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 | |||
86 | QString 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 */ | ||
107 | QString 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 | |||
118 | int AbstractMail::createMbox(const QString&,const FolderP&,const QString& ,bool) | ||
119 | { | ||
120 | return 0; | ||
121 | } | ||
122 | |||
123 | QString 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 | |||
131 | QString AbstractMail::draftFolder() | ||
132 | { | ||
133 | return QString("Drafts"); | ||
134 | } | ||
135 | |||
136 | /* temporary - will be removed when implemented in all classes */ | ||
137 | void AbstractMail::deleteMails(const QString &,const QValueList<Opie::Core::OSmartPointer<RecMail> > &) | ||
138 | { | ||
139 | } | ||
140 | |||
141 | void 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 | |||
161 | void 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 | } | ||