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

imaphandler.cpp

Go to the documentation of this file.
00001 #include "imapresponse.h"
00002 #include "imaphandler.h"
00003 #include "imapbase.h"
00004 
00005 IMAPHandler::IMAPHandler(const Account &account)
00006         : QObject(), _account(account)
00007 {
00008         _ready = false;
00009         _loggingin = false;
00010         _loggedin = false;
00011         _tag = 0;
00012         _ibase = new IMAPBase(account);
00013 
00014         connect(_ibase, SIGNAL(dataReceived(const QString&)), SLOT(slotDataReceived(const QString&)));
00015         connect(_ibase, SIGNAL(lookingUpHost()), SLOT(slotLookingUpHost()));
00016         connect(_ibase, SIGNAL(hostFound()), SLOT(slotHostFound()));
00017         connect(_ibase, SIGNAL(connected()), SLOT(slotConnected()));
00018         connect(_ibase, SIGNAL(disconnected()), SLOT(slotDisconnected()));
00019         connect(_ibase, SIGNAL(error(int)), SLOT(slotError(int)));
00020 }
00021 
00022 void IMAPHandler::doLogin()
00023 {
00024         if (_loggedin) return;
00025         if (_loggingin) return;
00026 
00027         _loggingin = true;
00028         iLogin(_account.user(), _account.pass());
00029 }
00030 
00031 QString IMAPHandler::iCapability()
00032 {
00033         _ibase->sendCommand(QString("%1 CAPABILITY\r\n")
00034                 .arg(tag()));
00035         return tag(false);
00036 }
00037 
00038 QString IMAPHandler::iNoop()
00039 {
00040         _ibase->sendCommand(QString("%1 NOOP\r\n")
00041                 .arg(tag()));
00042         return tag(false);
00043 }
00044 
00045 QString IMAPHandler::iLogout()
00046 {
00047         _ibase->sendCommand(QString("%1 LOGOUT\r\n")
00048                 .arg(tag()));
00049         return tag(false);
00050 }
00051 
00052 QString IMAPHandler::iAuthenticate(const QString &mechanism)
00053 {
00054         _ibase->sendCommand(QString("%1 AUTHENTICATE \"%2\"\r\n")
00055                 .arg(tag())
00056                 .arg(escape(mechanism)));
00057         return tag(false);
00058 }
00059 
00060 QString IMAPHandler::iLogin(const QString &user, const QString &pass)
00061 {
00062         _ibase->sendCommand(QString("%1 LOGIN \"%2\" \"%3\"\r\n")
00063                 .arg(tag())
00064                 .arg(escape(user))
00065                 .arg(escape(pass)));
00066         return tag(false);
00067 }
00068 
00069 QString IMAPHandler::iSelect(const QString &mailbox)
00070 {
00071         doLogin();
00072 
00073         _ibase->sendCommand(QString("%1 SELECT \"%2\"\r\n")
00074                 .arg(tag())
00075                 .arg(escape(mailbox)));
00076         return tag(false);
00077 }
00078 
00079 QString IMAPHandler::iExamine(const QString &mailbox)
00080 {
00081         doLogin();
00082 
00083         _ibase->sendCommand(QString("%1 EXAMINE \"%2\"\r\n")
00084                 .arg(tag())
00085                 .arg(escape(mailbox)));
00086         return tag(false);
00087 }
00088 
00089 QString IMAPHandler::iCreate(const QString &mailbox)
00090 {
00091         doLogin();
00092 
00093         _ibase->sendCommand(QString("%1 CREATE \"%2\"\r\n")
00094                 .arg(tag())
00095                 .arg(escape(mailbox)));
00096         return tag(false);
00097 }
00098 
00099 QString IMAPHandler::iDelete(const QString &mailbox)
00100 {
00101         doLogin();
00102 
00103         _ibase->sendCommand(QString("%1 DELETE \"%2\"\r\n")
00104                 .arg(tag())
00105                 .arg(escape(mailbox)));
00106         return tag(false);
00107 }
00108 
00109 QString IMAPHandler::iRename(const QString &mailbox, const QString &newMailbox)
00110 {
00111         doLogin();
00112 
00113         _ibase->sendCommand(QString("%1 RENAME \"%2\" \"%3\"\r\n")
00114                 .arg(tag())
00115                 .arg(escape(mailbox))
00116                 .arg(escape(newMailbox)));
00117         return tag(false);
00118 }
00119 
00120 QString IMAPHandler::iSubscribe(const QString &mailbox)
00121 {
00122         doLogin();
00123 
00124         _ibase->sendCommand(QString("%1 SUBSCRIBE \"%2\"\r\n")
00125                 .arg(tag())
00126                 .arg(escape(mailbox)));
00127         return tag(false);
00128 }
00129 
00130 QString IMAPHandler::iUnsubscribe(const QString &mailbox)
00131 {
00132         doLogin();
00133 
00134         _ibase->sendCommand(QString("%1 UNSUBSCRIBE \"%2\"\r\n")
00135                 .arg(tag())
00136                 .arg(escape(mailbox)));
00137         return tag(false);
00138 }
00139 
00140 QString IMAPHandler::iList(const QString &reference, const QString &mailbox)
00141 {
00142         doLogin();
00143 
00144         _ibase->sendCommand(QString("%1 LIST \"%2\" \"%3\"\r\n")
00145                 .arg(tag())
00146                 .arg(escape(reference))
00147                 .arg(escape(mailbox)));
00148         return tag(false);
00149 }
00150 
00151 QString IMAPHandler::iLsub(const QString &reference, const QString &mailbox)
00152 {
00153         doLogin();
00154 
00155         _ibase->sendCommand(QString("%1 LSUB \"%2\" \"%3\"\r\n")
00156                 .arg(tag())
00157                 .arg(escape(reference))
00158                 .arg(escape(mailbox)));
00159         return tag(false);
00160 }
00161 
00162 QString IMAPHandler::iStatus(const QString &mailbox, const QString &items)
00163 {
00164         doLogin();
00165 
00166         _ibase->sendCommand(QString("%1 STATUS \"%2\" (%3)\r\n")
00167                 .arg(tag())
00168                 .arg(escape(mailbox))
00169                 .arg(escape(items)));
00170         return tag(false);
00171 }
00172 
00173 QString IMAPHandler::iAppend(const QString &mailbox, const QString &literal, const QString &flags, const QString &datetime)
00174 {
00175         doLogin();
00176 
00177         _ibase->sendCommand(QString("%1 APPEND \"%2\" (%3) \"%4\" {%5}\r\n%6\r\n")
00178                 .arg(tag())
00179                 .arg(escape(mailbox))
00180                 .arg(flags)
00181                 .arg(escape(datetime))
00182                 .arg(literal.length())
00183                 .arg(literal));
00184         return tag(false);
00185 }
00186 
00187 QString IMAPHandler::iCheck()
00188 {
00189         doLogin();
00190 
00191         _ibase->sendCommand(QString("%1 CHECK\r\n")
00192                 .arg(tag()));
00193         return tag(false);
00194 }
00195 
00196 QString IMAPHandler::iClose()
00197 {
00198         doLogin();
00199 
00200         _ibase->sendCommand(QString("%1 CLOSE\r\n")
00201                 .arg(tag()));
00202         return tag(false);
00203 }
00204 
00205 QString IMAPHandler::iExpunge()
00206 {
00207         doLogin();
00208 
00209         _ibase->sendCommand(QString("%1 EXPUNGE\r\n")
00210                 .arg(tag()));
00211         return tag(false);
00212 }
00213 
00214 QString IMAPHandler::iSearch(const QString &search, const QString &charset)
00215 {
00216         doLogin();
00217 
00218         _ibase->sendCommand(QString("%1 SEARCH %2 %3\r\n")
00219                 .arg(tag())
00220                 .arg(charset.isEmpty() ? QString(0) : escape(charset))
00221                 .arg(search));
00222         return tag(false);
00223 }
00224 
00225 QString IMAPHandler::iFetch(const QString &message, const QString &items)
00226 {
00227         doLogin();
00228 
00229         _ibase->sendCommand(QString("%1 FETCH %2 (%3)\r\n")
00230                 .arg(tag())
00231                 .arg(message)
00232                 .arg(items));
00233         return tag(false);
00234 }
00235 
00236 QString IMAPHandler::iStore(const QString &message, const QString &items)
00237 {
00238         doLogin();
00239 
00240         _ibase->sendCommand(QString("%1 STORE %2 %3\r\n")
00241                 .arg(tag())
00242                 .arg(message)
00243                 .arg(items));
00244         return tag(false);
00245 }
00246 
00247 QString IMAPHandler::iCopy(const QString &message, const QString &mailbox)
00248 {
00249         doLogin();
00250 
00251         _ibase->sendCommand(QString("%1 COPY %2 \"%3\"\r\n")
00252                 .arg(tag())
00253                 .arg(message)
00254                 .arg(escape(mailbox)));
00255         return tag(false);
00256 }
00257 
00258 QString IMAPHandler::iUid(const QString &command, const QString &arguments)
00259 {
00260         doLogin();
00261 
00262         _ibase->sendCommand(QString("%1 UID %2 %3\r\n")
00263                 .arg(tag())
00264                 .arg(command)
00265                 .arg(arguments));
00266         return tag(false);
00267 }
00268 
00269 QString IMAPHandler::iX(const QString &commandAtom, const QString &arguments)
00270 {
00271         doLogin();
00272 
00273         _ibase->sendCommand(QString("%1 X%2 %3\r\n")
00274                 .arg(tag())
00275                 .arg(commandAtom)
00276                 .arg(arguments));
00277         return tag(false);
00278 }
00279 
00280 QString IMAPHandler::escape(const QString &in)
00281 {
00282         QString in_ = in;
00283         return in_.replace(QRegExp("\""), "\\\"");
00284 }
00285 
00286 QString IMAPHandler::tag(bool count)
00287 {
00288         return QString("a%1").arg(count ? _tag++ : _tag);
00289 }
00290 
00291 void IMAPHandler::slotDataReceived(const QString &data)
00292 {
00293         if (!_ready) {
00294                 // The first data is always the greeting string.
00295                 // We can ignore it.
00296                 _ready = true;
00297                 return;
00298         }
00299 
00300 
00301         IMAPResponseParser parser;
00302 //      connect ( &parser, SIGNAL( needMoreData(QString&)), _ibase, SLOT( tryRead(QString&)));
00303         parser. parse ( data );
00304         IMAPResponse response = parser.response();
00305 //      disconnect ( &parser, SIGNAL( needMoreData(QString&)), _ibase, SLOT( tryRead(QString&)));
00306         response.setImapHandler(this);
00307 
00308         if (!_loggingin) { qDebug("Emitting gotResponse!\n" ); emit gotResponse(response); }
00309         else {
00310                 if (response.statusResponse().status() == IMAPResponseEnums::OK) {
00311                         _loggingin = false;
00312                         _loggedin = true;
00313                         qWarning("OK. Logged in. Leaving loggingin state.");
00314                 } else {
00315                         _loggingin = false;
00316                         emit IMAPError(IMAPBase::IMAPErrLoginFailed);
00317                 }
00318         }
00319 }
00320 
00321 void IMAPHandler::slotLookingUpHost()
00322 {
00323         emit IMAPLookingUpHost();
00324 }
00325 
00326 void IMAPHandler::slotHostFound()
00327 {
00328         emit IMAPHostFound();
00329 }
00330 
00331 void IMAPHandler::slotConnected()
00332 {
00333         emit IMAPConnected();
00334 }
00335 
00336 void IMAPHandler::slotDisconnected()
00337 {
00338         _loggedin = false;
00339         emit IMAPDisconnected();
00340 }
00341 
00342 void IMAPHandler::slotError(int err)
00343 {
00344         emit IMAPError(err);
00345 }
00346 

Generated on Sat Nov 5 16:18:07 2005 for OPIE by  doxygen 1.4.2