summaryrefslogtreecommitdiffabout
path: root/kmicromail/libmailwrapper/abstractmail.cpp
Side-by-side diff
Diffstat (limited to 'kmicromail/libmailwrapper/abstractmail.cpp') (more/less context) (ignore 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 @@
+#include "abstractmail.h"
+#include "imapwrapper.h"
+#include "pop3wrapper.h"
+#include "nntpwrapper.h"
+#include "mhwrapper.h"
+#include "mailtypes.h"
+
+
+
+#include <kdecore/kstandarddirs.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <stdlib.h>
+#include <libetpan/mailmime_content.h>
+#include <libetpan/mailmime.h>
+
+using namespace Opie::Core;
+AbstractMail* AbstractMail::getWrapper(IMAPaccount *a)
+{
+ return new IMAPwrapper(a);
+}
+
+AbstractMail* AbstractMail::getWrapper(POP3account *a)
+{
+ return new POP3wrapper(a);
+}
+
+AbstractMail* AbstractMail::getWrapper(NNTPaccount *a)
+{
+ return new NNTPwrapper(a);
+}
+
+AbstractMail* AbstractMail::getWrapper(const QString&a,const QString&name)
+{
+ return new MHwrapper(a,name);
+}
+
+AbstractMail* AbstractMail::getWrapper(Account*a)
+{
+ if (!a) return 0;
+ switch (a->getType()) {
+ case MAILLIB::A_IMAP:
+ return new IMAPwrapper((IMAPaccount*)a);
+ break;
+ case MAILLIB::A_POP3:
+ return new POP3wrapper((POP3account*)a);
+ break;
+ case MAILLIB::A_NNTP:
+ return new NNTPwrapper((NNTPaccount*)a);
+ break;
+ default:
+ return 0;
+ }
+}
+
+encodedString* AbstractMail::decode_String(const encodedString*text,const QString&enc)
+{
+ // odebug << "Decode string start" << oendl;
+ char*result_text;
+ size_t index = 0;
+ /* reset for recursive use! */
+ size_t target_length = 0;
+ result_text = 0;
+ int mimetype = MAILMIME_MECHANISM_7BIT;
+ if (enc.lower()=="quoted-printable") {
+ mimetype = MAILMIME_MECHANISM_QUOTED_PRINTABLE;
+ } else if (enc.lower()=="base64") {
+ mimetype = MAILMIME_MECHANISM_BASE64;
+ } else if (enc.lower()=="8bit") {
+ mimetype = MAILMIME_MECHANISM_8BIT;
+ } else if (enc.lower()=="binary") {
+ mimetype = MAILMIME_MECHANISM_BINARY;
+ }
+
+ int err = mailmime_part_parse(text->Content(),text->Length(),&index,mimetype,
+ &result_text,&target_length);
+
+ encodedString* result = new encodedString();
+ if (err == MAILIMF_NO_ERROR) {
+ result->setContent(result_text,target_length);
+ }
+ //odebug << "Decode string finished" << oendl;
+ return result;
+}
+
+QString AbstractMail::convert_String(const char*text)
+{
+ //size_t index = 0;
+ char*res = 0;
+ int err = MAILIMF_NO_ERROR;
+
+ QString result(text);
+
+ /* due a bug in libetpan it isn't usable this moment */
+/* int err = mailmime_encoded_phrase_parse("iso-8859-1",
+ text, strlen(text),&index, "iso-8859-1",&res);*/
+ //odebug << "Input: " << text << "" << oendl;
+ if (err == MAILIMF_NO_ERROR && res && strlen(res)) {
+// result = QString(res);
+// odebug << "Res: " << res << ", length: " << strlen(res) << "" << oendl;
+ }
+ if (res) free(res);
+ return result;
+}
+
+/* cp & paste from launcher */
+QString AbstractMail::gen_attachment_id()
+{
+ QFile file( "/proc/sys/kernel/random/uuid" );
+ if (!file.open(IO_ReadOnly ) )
+ return QString::null;
+
+ QTextStream stream(&file);
+
+ return "{" + stream.read().stripWhiteSpace() + "}";
+}
+
+int AbstractMail::createMbox(const QString&,const FolderP&,const QString& ,bool)
+{
+ return 0;
+}
+
+QString AbstractMail::defaultLocalfolder()
+{
+ // QString f = getenv( "HOME" );
+ QString f = locateLocal( "data", "kmicromail/localmail");
+ // f += "/Applications/opiemail/localmail";
+ return f;
+}
+
+QString AbstractMail::draftFolder()
+{
+ return QString("Drafts");
+}
+
+/* temporary - will be removed when implemented in all classes */
+void AbstractMail::deleteMails(const QString &,const QValueList<Opie::Core::OSmartPointer<RecMail> > &)
+{
+}
+
+void AbstractMail::mvcpAllMails(const FolderP&fromFolder,
+ const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
+{
+ QValueList<RecMailP> t;
+ listMessages(fromFolder->getName(),t);
+ encodedString*st = 0;
+ while (t.count()>0) {
+ RecMailP r = (*t.begin());
+ st = fetchRawBody(r);
+ if (st) {
+ targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder);
+ delete st;
+ }
+ t.remove(t.begin());
+ }
+ if (moveit) {
+ deleteAllMail(fromFolder);
+ }
+}
+
+void AbstractMail::mvcpMail(const RecMailP&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit)
+{
+ encodedString*st = 0;
+ st = fetchRawBody(mail);
+ if (st) {
+ targetWrapper->storeMessage(st->Content(),st->Length(),targetFolder);
+ delete st;
+ }
+ if (moveit) {
+ deleteMail(mail);
+ }
+}