From 111cc213644c3d3f0f0659b7c61877871c6a5519 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Mon, 6 Oct 2014 00:52:45 -0500 Subject: Detect if kmail is online or offline and automatically switch modes This relates to Bug 1525 and Bug 1105 --- kmail/kmkernel.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'kmail/kmkernel.cpp') diff --git a/kmail/kmkernel.cpp b/kmail/kmkernel.cpp index df0ab2d5..162e179b 100644 --- a/kmail/kmkernel.cpp +++ b/kmail/kmkernel.cpp @@ -169,6 +169,18 @@ KMKernel::KMKernel (TQObject *parent, const char *name) : connectDCOPSignal( 0, 0, "kmailSelectFolder(TQString)", "selectFolder(TQString)", false ); + + mNetworkManager = TDEGlobal::networkManager(); + if (mNetworkManager) { + connect( mNetworkManager, TQT_SIGNAL( networkDeviceStateChanged( TDENetworkConnectionStatus::TDENetworkConnectionStatus, TDENetworkConnectionStatus::TDENetworkConnectionStatus, TQString ) ), + this, TQT_SLOT( slotNetworkStateChanged( TDENetworkConnectionStatus::TDENetworkConnectionStatus newState, TDENetworkConnectionStatus::TDENetworkConnectionStatus previousState, TQString hwAddress ) ) ); + if (networkStateConnected()) { + resumeNetworkJobs(); + } + else { + stopNetworkJobs(); + } + } } KMKernel::~KMKernel () @@ -2456,6 +2468,38 @@ int KMKernel::timeOfLastMessageCountChange() const return mTimeOfLastMessageCountChange; } +bool KMKernel::networkStateConnected() +{ + if (mNetworkManager) { + TDENetworkGlobalManagerFlags::TDENetworkGlobalManagerFlags networkStatus = mNetworkManager->backendStatus(); + if ((networkStatus & TDENetworkGlobalManagerFlags::Connected) + || (networkStatus & TDENetworkGlobalManagerFlags::BackendUnavailable) + || (networkStatus == TDENetworkGlobalManagerFlags::Unknown) + ){ + // Connected or no backend available + return true; + } + else { + // Not connected + return false; + } + } + else { + // Assume connected + return true; + } +} + +void KMKernel::slotNetworkStateChanged(TDENetworkConnectionStatus::TDENetworkConnectionStatus, TDENetworkConnectionStatus::TDENetworkConnectionStatus, TQString) +{ + if (networkStateConnected()) { + resumeNetworkJobs(); + } + else { + stopNetworkJobs(); + } +} + Wallet *KMKernel::wallet() { static bool walletOpenFailed = false; if ( mWallet && mWallet->isOpen() ) -- cgit v1.2.3