diff options
Diffstat (limited to 'kmail/accountmanager.cpp')
-rw-r--r-- | kmail/accountmanager.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/kmail/accountmanager.cpp b/kmail/accountmanager.cpp index c27432ae4..54a1b4166 100644 --- a/kmail/accountmanager.cpp +++ b/kmail/accountmanager.cpp @@ -18,6 +18,7 @@ #include "kmfiltermgr.h" #include "globalsettings.h" +#include <dcopclient.h> #include <klocale.h> #include <kmessagebox.h> #include <kdebug.h> @@ -190,6 +191,34 @@ void AccountManager::processNextCheck( bool _newMail ) return; } + if ( curAccount->type() == "imap" || curAccount->type() == "cachedimap" || curAccount->type() == "pop" ) + { + // Check with the network status daemon whether the network is available + const int NetWorkStatusUnknown = 1; + const int NetWorkStatusOnline = 8; + QCString replyType; + QByteArray params; + QByteArray reply; + + QDataStream stream( params, IO_WriteOnly ); + stream << static_cast<NetworkAccount*>( curAccount )->host(); + + if ( kapp->dcopClient()->call( "kded", "networkstatus", "status(QString)", + params, replyType, reply ) && ( replyType == "int" ) ) + { + int result; + QDataStream stream2( reply, IO_ReadOnly ); + stream2 >> result; + kdDebug() << k_funcinfo << "networkstatus status = " << result << endl; + // if it's not unknown (no networks announced by network control apps), and not offline, give up now + if ( ( result != NetWorkStatusUnknown ) && ( result != NetWorkStatusOnline ) ) + { + emit checkedMail( false, mInteractive, mTotalNewInFolder ); + return; + } + } + } + connect( curAccount, SIGNAL( finishedCheck( bool, CheckStatus ) ), this, SLOT( processNextCheck( bool ) ) ); |