Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

mboxwrapper.cpp

Go to the documentation of this file.
00001 #include "mboxwrapper.h"
00002 #include "mailtypes.h"
00003 #include "mailwrapper.h"
00004 #include <libetpan/libetpan.h>
00005 #include <qdir.h>
00006 #include <stdlib.h>
00007 
00008 #include <opie2/odebug.h>
00009 #include <qpe/global.h>
00010 
00011 using namespace Opie::Core;
00012 MBOXwrapper::MBOXwrapper(const QString & mbox_dir,const QString&mbox_name)
00013     : Genericwrapper(),MBOXPath(mbox_dir),MBOXName(mbox_name)
00014 {
00015     QDir dir(MBOXPath);
00016     if (!dir.exists()) {
00017         dir.mkdir(MBOXPath);
00018     }
00019 }
00020 
00021 MBOXwrapper::~MBOXwrapper()
00022 {
00023 }
00024 
00025 void MBOXwrapper::listMessages(const QString & mailbox, QValueList<RecMailP> &target )
00026 {
00027     mailstorage*storage = mailstorage_new(NULL);
00028     QString p = MBOXPath+"/";
00029     p+=mailbox;
00030 
00031     int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
00032     mailfolder*folder;
00033     folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
00034     r = mailfolder_connect(folder);
00035     if (r != MAIL_NO_ERROR) {
00036         odebug << "Error initializing mbox" << oendl; 
00037         mailfolder_free(folder);
00038         mailstorage_free(storage);
00039         return;
00040     }
00041 
00042     parseList(target,folder->fld_session,mailbox);
00043 
00044     mailfolder_disconnect(folder);
00045     mailfolder_free(folder);
00046     mailstorage_free(storage);
00047     Global::statusMessage(tr("Mailbox has %1 mail(s)").arg(target.count()));
00048 }
00049 
00050 QValueList<Opie::Core::OSmartPointer<Folder> >* MBOXwrapper::listFolders()
00051 {
00052     QValueList<Opie::Core::OSmartPointer<Folder> >* folders = new QValueList<Opie::Core::OSmartPointer<Folder> >();
00053     QDir dir(MBOXPath);
00054     if (!dir.exists()) return folders;
00055     dir.setFilter(QDir::Files|QDir::Writable|QDir::Readable);
00056     QStringList entries = dir.entryList();
00057     QStringList::ConstIterator it = entries.begin();
00058     for (;it!=entries.end();++it) {
00059         FolderP inb=new Folder(*it,"/");
00060         folders->append(inb);
00061     }
00062     return folders;
00063 }
00064 
00065 void MBOXwrapper::deleteMail(const RecMailP & mail)
00066 {
00067     mailstorage*storage = mailstorage_new(NULL);
00068     QString p = MBOXPath+"/";
00069     p+=mail->getMbox();
00070     int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
00071     mailfolder*folder;
00072     folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
00073     r = mailfolder_connect(folder);
00074     if (r != MAIL_NO_ERROR) {
00075         odebug << "Error initializing mbox" << oendl; 
00076         mailfolder_free(folder);
00077         mailstorage_free(storage);
00078         return;
00079     }
00080     r = mailsession_remove_message(folder->fld_session,mail->getNumber());
00081     if (r != MAIL_NO_ERROR) {
00082         odebug << "error deleting mail" << oendl; 
00083     }
00084     mailfolder_free(folder);
00085     mailstorage_free(storage);
00086 }
00087 
00088 void MBOXwrapper::answeredMail(const RecMailP&)
00089 {
00090 }
00091 
00092 RecBodyP MBOXwrapper::fetchBody( const RecMailP &mail )
00093 {
00094     RecBodyP body = new RecBody();
00095     mailstorage*storage = mailstorage_new(NULL);
00096     QString p = MBOXPath+"/";
00097     p+=mail->getMbox();
00098     mailmessage * msg;
00099     char*data=0;
00100     size_t size;
00101 
00102     int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
00103     mailfolder*folder;
00104     folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
00105     r = mailfolder_connect(folder);
00106     if (r != MAIL_NO_ERROR) {
00107         odebug << "Error initializing mbox" << oendl; 
00108         mailfolder_free(folder);
00109         mailstorage_free(storage);
00110         return body;
00111     }
00112     r = mailsession_get_message(folder->fld_session, mail->getNumber(), &msg);
00113     if (r != MAIL_NO_ERROR) {
00114         odebug << "Error fetching mail " << mail->getNumber() << "" << oendl; 
00115         mailfolder_free(folder);
00116         mailstorage_free(storage);
00117         return body;
00118     }
00119     r = mailmessage_fetch(msg,&data,&size);
00120     if (r != MAIL_NO_ERROR) {
00121         odebug << "Error fetching mail " << mail->getNumber() << "" << oendl; 
00122         mailfolder_free(folder);
00123         mailstorage_free(storage);
00124         mailmessage_free(msg);
00125         return body;
00126     }
00127     body = parseMail(msg);
00128     mailmessage_fetch_result_free(msg,data);
00129     mailfolder_free(folder);
00130     mailstorage_free(storage);
00131 
00132     return body;
00133 }
00134 
00135 void MBOXwrapper::mbox_progress( size_t current, size_t maximum )
00136 {
00137     odebug << "MBOX " << current << " von " << maximum << "" << oendl; 
00138 }
00139 
00140 int MBOXwrapper::createMbox(const QString&folder,const FolderP&,const QString&,bool )
00141 {
00142     QString p = MBOXPath+"/";
00143     p+=folder;
00144     QFileInfo fi(p);
00145     if (fi.exists()) {
00146         Global::statusMessage(tr("Mailbox exists."));
00147         return 0;
00148     }
00149     mailmbox_folder*f = 0;
00150     if (mailmbox_init(p.latin1(),0,1,0,&f) != MAIL_NO_ERROR) {
00151         Global::statusMessage(tr("Error init folder"));
00152         return 0;
00153     }
00154     if (f) mailmbox_done(f);
00155     return 1;
00156 }
00157 
00158 void MBOXwrapper::storeMessage(const char*msg,size_t length, const QString&folder)
00159 {
00160     QString p = MBOXPath+"/";
00161     p+=folder;
00162     mailmbox_folder*f = 0;
00163     int r = mailmbox_init(p.latin1(),0,1,0,&f);
00164     if (r != MAIL_NO_ERROR) {
00165         Global::statusMessage(tr("Error init folder"));
00166         return;
00167     }
00168     r = mailmbox_append_message(f,msg,length);
00169     if (r != MAIL_NO_ERROR) {
00170         Global::statusMessage(tr("Error writing to message folder"));
00171     }
00172     mailmbox_done(f);
00173 }
00174 
00175 encodedString* MBOXwrapper::fetchRawBody(const RecMailP&mail)
00176 {
00177     RecBody body;
00178     mailstorage*storage = mailstorage_new(NULL);
00179     QString p = MBOXPath+"/";
00180     p+=mail->getMbox();
00181     mailmessage * msg;
00182     char*data=0;
00183     size_t size;
00184 
00185     int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
00186     mailfolder*folder;
00187     folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
00188     r = mailfolder_connect(folder);
00189     if (r != MAIL_NO_ERROR) {
00190         Global::statusMessage(tr("Error initializing mbox"));
00191         mailfolder_free(folder);
00192         mailstorage_free(storage);
00193         return 0;
00194     }
00195     r = mailsession_get_message(folder->fld_session, mail->getNumber(), &msg);
00196     if (r != MAIL_NO_ERROR) {
00197         Global::statusMessage(tr("Error fetching mail %i").arg(mail->getNumber()));
00198         mailfolder_free(folder);
00199         mailstorage_free(storage);
00200         return 0;
00201     }
00202     r = mailmessage_fetch(msg,&data,&size);
00203     if (r != MAIL_NO_ERROR) {
00204         Global::statusMessage(tr("Error fetching mail %i").arg(mail->getNumber()));
00205         mailfolder_free(folder);
00206         mailstorage_free(storage);
00207         mailmessage_free(msg);
00208         return 0;
00209     }
00210     encodedString*result = new encodedString(data,size);
00211 
00212     mailfolder_free(folder);
00213     mailstorage_free(storage);
00214     mailmessage_free(msg);
00215     return result;
00216 }
00217 
00218 void MBOXwrapper::deleteMails(const QString & mailbox,const QValueList<RecMailP> &target)
00219 {
00220     QString p = MBOXPath+"/";
00221     p+=mailbox;
00222     mailmbox_folder*f = 0;
00223     int r = mailmbox_init(p.latin1(),0,1,0,&f);
00224     if (r != MAIL_NO_ERROR) {
00225         odebug << "Error init folder" << oendl; 
00226         return;
00227     }
00228     deleteMails(f,target);
00229     mailmbox_done(f);
00230 }
00231 
00232 void MBOXwrapper::deleteMails(mailmbox_folder*f,const QValueList<RecMailP> &target)
00233 {
00234     if (!f) return;
00235     int r;
00236     QValueList<RecMailP>::ConstIterator it;
00237     for (it=target.begin(); it != target.end();++it) {
00238         r = mailmbox_delete_msg(f,(*it)->getNumber());
00239         if (r!=MAILMBOX_NO_ERROR) {
00240             odebug << "error delete mail" << oendl; 
00241         }
00242     }
00243     r = mailmbox_expunge(f);
00244     if (r != MAILMBOX_NO_ERROR) {
00245         odebug << "error expunge mailbox" << oendl; 
00246     }
00247 }
00248 
00249 int MBOXwrapper::deleteAllMail(const FolderP&tfolder)
00250 {
00251     if (!tfolder) return 0;
00252     QString p = MBOXPath+"/"+tfolder->getDisplayName();
00253     int res = 1;
00254 
00255     mailfolder*folder = 0;
00256     mailmessage_list*l=0;
00257     mailstorage*storage = mailstorage_new(NULL);
00258     int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
00259     if (r != MAIL_NO_ERROR) {
00260         Global::statusMessage(tr("Error initializing mbox"));
00261         res = 0;
00262     }
00263     if (res) {
00264         folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
00265         r = mailfolder_connect(folder);
00266         if (r != MAIL_NO_ERROR) {
00267             Global::statusMessage(tr("Error initializing mbox"));
00268             res = 0;
00269         }
00270     }
00271     if (res) {
00272         r = mailsession_get_messages_list(folder->fld_session,&l);
00273         if (r != MAIL_NO_ERROR) {
00274             odebug << "Error message list" << oendl; 
00275             res=0;
00276         }
00277     }
00278     for(unsigned int i = 0 ; l!= 0 && res==1 && i < carray_count(l->msg_tab) ; ++i) {
00279         r = mailsession_remove_message(folder->fld_session,i+1);
00280         if (r != MAIL_NO_ERROR) {
00281             Global::statusMessage(tr("Error deleting mail %1").arg(i+1));
00282             res = 0;
00283             break;
00284         }
00285     }
00286     if (l) mailmessage_list_free(l);
00287     if (folder) mailfolder_free(folder);
00288     if (storage) mailstorage_free(storage);
00289     return res;
00290 }
00291 
00292 int MBOXwrapper::deleteMbox(const FolderP&tfolder)
00293 {
00294     if (!tfolder) return 0;
00295     QString p = MBOXPath+"/"+tfolder->getDisplayName();
00296     QFile fi(p);
00297     if (!fi.exists()) {
00298         Global::statusMessage(tr("Mailbox doesn't exist."));
00299         return 0;
00300     }
00301     if (!fi.remove()) {
00302         Global::statusMessage(tr("Error deleting Mailbox."));
00303         return 0;
00304     }
00305     return 1;
00306 }
00307 
00308 void MBOXwrapper::statusFolder(folderStat&target_stat,const QString & mailbox)
00309 {
00310     mailfolder*folder = 0;
00311     mailstorage*storage = mailstorage_new(NULL);
00312     target_stat.message_count = 0;
00313     target_stat.message_unseen = 0;
00314     target_stat.message_recent = 0;
00315     QString p = MBOXPath+"/"+mailbox;
00316     QFile fi(p);
00317     if (!fi.exists()) {
00318         Global::statusMessage(tr("Mailbox doesn't exist."));
00319         return;
00320     }
00321     int r = mbox_mailstorage_init(storage,(char*)p.latin1(),0,0,0);
00322     folder = mailfolder_new( storage,(char*)p.latin1(),NULL);
00323     r = mailfolder_connect(folder);
00324     r = mailsession_status_folder(folder->fld_session,(char*)mailbox.latin1(),&target_stat.message_count,
00325         &target_stat.message_recent,&target_stat.message_unseen);
00326     if (folder) mailfolder_free(folder);
00327     if (storage) mailstorage_free(storage);
00328 }
00329 
00330 MAILLIB::ATYPE MBOXwrapper::getType()const
00331 {
00332     return MAILLIB::A_MBOX;
00333 }
00334 
00335 const QString&MBOXwrapper::getName()const
00336 {
00337     return MBOXName;
00338 }

Generated on Sat Nov 5 16:17:38 2005 for OPIE by  doxygen 1.4.2