summaryrefslogtreecommitdiffstats
path: root/kmail/kmkernel.cpp
diff options
context:
space:
mode:
authorTimothy Pearson <[email protected]>2014-10-06 00:52:45 -0500
committerTimothy Pearson <[email protected]>2014-10-06 00:52:45 -0500
commit111cc213644c3d3f0f0659b7c61877871c6a5519 (patch)
tree07ad7f8572af6e6f8f8b9c07e32eccba7ce6a3a2 /kmail/kmkernel.cpp
parentfaf37227f5194237dbda5973c21d05de3633ea03 (diff)
downloadtdepim-111cc213644c3d3f0f0659b7c61877871c6a5519.tar.gz
tdepim-111cc213644c3d3f0f0659b7c61877871c6a5519.zip
Detect if kmail is online or offline and automatically switch modes
This relates to Bug 1525 and Bug 1105
Diffstat (limited to 'kmail/kmkernel.cpp')
-rw-r--r--kmail/kmkernel.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/kmail/kmkernel.cpp b/kmail/kmkernel.cpp
index df0ab2d5b..162e179ba 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() )