KIMAP Library
job.cpp
00001 /* 00002 Copyright (c) 2009 Kevin Ottens <ervin@kde.org> 00003 00004 This library is free software; you can redistribute it and/or modify it 00005 under the terms of the GNU Library General Public License as published by 00006 the Free Software Foundation; either version 2 of the License, or (at your 00007 option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, but WITHOUT 00010 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00011 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public 00012 License for more details. 00013 00014 You should have received a copy of the GNU Library General Public License 00015 along with this library; see the file COPYING.LIB. If not, write to the 00016 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 00017 02110-1301, USA. 00018 */ 00019 00020 #include "job.h" 00021 #include "job_p.h" 00022 #include "message_p.h" 00023 #include "session_p.h" 00024 00025 #include <KDE/KLocale> 00026 #include <KDE/KDebug> 00027 00028 using namespace KIMAP; 00029 00030 Job::Job( Session *session ) 00031 : KJob( session ), d_ptr(new JobPrivate(session, i18n("Job"))) 00032 { 00033 00034 } 00035 00036 Job::Job( JobPrivate &dd ) 00037 : KJob( dd.m_session ), d_ptr(&dd) 00038 { 00039 00040 } 00041 00042 Job::~Job() 00043 { 00044 delete d_ptr; 00045 } 00046 00047 Session *Job::session() const 00048 { 00049 Q_D(const Job); 00050 return d->m_session; 00051 } 00052 00053 void Job::start() 00054 { 00055 Q_D(Job); 00056 d->sessionInternal()->addJob(this); 00057 } 00058 00059 void Job::handleResponse(const Message &response) 00060 { 00061 handleErrorReplies(response); 00062 } 00063 00064 void Job::connectionLost() 00065 { 00066 setError( KJob::UserDefinedError ); 00067 setErrorText( i18n("Connection to server lost.") ); 00068 emitResult(); 00069 } 00070 00071 Job::HandlerResponse Job::handleErrorReplies(const Message &response) 00072 { 00073 Q_D(Job); 00074 // kDebug() << response.toString(); 00075 00076 if ( !response.content.isEmpty() 00077 && d->tags.contains( response.content.first().toString() ) ) { 00078 if ( response.content.size() < 2 ) { 00079 setErrorText( i18n("%1 failed, malformed reply from the server.", d->m_name) ); 00080 } else if ( response.content[1].toString() != "OK" ) { 00081 setError( UserDefinedError ); 00082 setErrorText( i18n("%1 failed, server replied: %2", d->m_name, response.toString().constData()) ); 00083 } 00084 d->tags.removeAll( response.content.first().toString() ); 00085 if ( d->tags.isEmpty() ) { // Only emit result when the last command returned 00086 emitResult(); 00087 } 00088 return Handled; 00089 } 00090 00091 return NotHandled; 00092 } 00093 00094 00095 #include "job.moc"