[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-pim
Subject:    [Kde-pim] kmail network-awareness patch
From:       Martin =?ISO-8859-1?Q?Bedn=E1r?= <serafean () gmail ! com>
Date:       2011-08-20 9:59:08
Message-ID: 1977809.KqvXZCtcxV () nemmerle
[Download RAW message or body]

[Attachment #2 (multipart/signed)]

[Attachment #4 (multipart/mixed)]


Hi,

I played around with some kmail code to make it a bit more networkstatus-aware 
(via solid) than it was. I'm not sure it's really needed functionality-wise, 
but my ultimate goal being a connected/disconnected icon in the status bar, I 
think these changes are useful.

Also, what's your view on merging setAccountOnline() and setAccountOffline() 
from kmkernel.cpp into one function setAccountStatus(bool) ?

Cheers,

Martin
["kmail-autoOffline.patch" (kmail-autoOffline.patch)]

diff --git a/kmail/kmkernel.cpp b/kmail/kmkernel.cpp
index 51602fe..3c80f75 100644
--- a/kmail/kmkernel.cpp
+++ b/kmail/kmkernel.cpp
@@ -910,20 +910,26 @@ void KMKernel::stopNetworkJobs()
   if ( GlobalSettings::self()->networkState() == \
GlobalSettings::EnumNetworkState::Offline )  return;
 
-  const Akonadi::AgentInstance::List lst = MailCommon::Util::agentInstances();
+  setAccountOffline();
+  
+  GlobalSettings::setNetworkState( GlobalSettings::EnumNetworkState::Offline );
+  BroadcastStatus::instance()->setStatusMsg( i18n("KMail is set to be offline; all \
network jobs are suspended")); +  emit onlineStatusChanged( \
(GlobalSettings::EnumNetworkState::type)GlobalSettings::networkState() ); +
+}
+
+void KMKernel::setAccountOffline()
+{
+    const Akonadi::AgentInstance::List lst = MailCommon::Util::agentInstances();
   foreach ( Akonadi::AgentInstance type, lst ) {
     if ( type.identifier().contains( IMAP_RESOURCE_IDENTIFIER ) ||
          type.identifier().contains( POP3_RESOURCE_IDENTIFIER ) ) {
       type.setIsOnline( false );
     }
   }
-
-  GlobalSettings::setNetworkState( GlobalSettings::EnumNetworkState::Offline );
-  BroadcastStatus::instance()->setStatusMsg( i18n("KMail is set to be offline; all \
                network jobs are suspended"));
-  emit onlineStatusChanged( \
                (GlobalSettings::EnumNetworkState::type)GlobalSettings::networkState() \
                );
-
 }
 
+
 void KMKernel::setAccountOnline()
 {
   const Akonadi::AgentInstance::List lst = MailCommon::Util::agentInstances();
@@ -953,7 +959,7 @@ void KMKernel::resumeNetworkJobs()
 
 bool KMKernel::isOffline()
 {
-  if ( GlobalSettings::self()->networkState() == \
GlobalSettings::EnumNetworkState::Offline ) +  if ( ( \
GlobalSettings::self()->networkState() == GlobalSettings::EnumNetworkState::Offline ) \
|| ( Solid::Networking::status() != Solid::Networking::Connected ) )  return true;
   else
     return false;
diff --git a/kmail/kmkernel.h b/kmail/kmkernel.h
index 4488d7e..8300888 100644
--- a/kmail/kmkernel.h
+++ b/kmail/kmkernel.h
@@ -330,6 +330,7 @@ public:
   bool isImapFolder( const Akonadi::Collection& ) const;
 
   void setAccountOnline();
+  void setAccountOffline();
 
   const KComponentData &xmlGuiInstance() { return mXmlGuiInstance; }
   void setXmlGuiInstance( const KComponentData &instance ) { mXmlGuiInstance = \
                instance; }
diff --git a/kmail/kmmainwidget.cpp b/kmail/kmmainwidget.cpp
index 087dea4..df12ab2 100644
--- a/kmail/kmmainwidget.cpp
+++ b/kmail/kmmainwidget.cpp
@@ -273,6 +273,9 @@ K_GLOBAL_STATIC( KMMainWidget::PtrList, theMainWidgetList )
   connect( mTagActionManager, SIGNAL(tagActionTriggered(QString)),
            this, SLOT(slotUpdateMessageTagList(QString)) );
 
+  connect ( Solid::Networking::notifier(), SIGNAL( statusChanged( \
Solid::Networking::Status ) ), +           this, SLOT( slotNetworkStatusChanged( \
Solid::Networking::Status ) ) ); +
   toggleSystemTray();
 
   { // make sure the pages are registered only once, since there can be multiple \
instances of KMMainWidget @@ -2421,6 +2424,17 @@ void \
KMMainWidget::slotUpdateOnlineStatus( GlobalSettings::EnumNetworkState::typ  }
 }
 
+void KMMainWidget::slotNetworkStatusChanged ( Solid::Networking::Status status)
+{
+  if ( status == Solid::Networking::Connected && \
GlobalSettings::self()->networkState() == GlobalSettings::EnumNetworkState::Online ) \
{ +    BroadcastStatus::instance()->setStatusMsg(i18n("Network connection detected, \
all network jobs resumed")); +    kmkernel->setAccountOnline();
+  }
+  else {
+    BroadcastStatus::instance()->setStatusMsg(i18n("No network connection detected, \
all network jobs are suspended")); +    kmkernel->setAccountOffline();
+  }
+}
 
 //-----------------------------------------------------------------------------
 void KMMainWidget::slotSendQueued()
diff --git a/kmail/kmmainwidget.h b/kmail/kmmainwidget.h
index 3a30134..69bb5d9 100644
--- a/kmail/kmmainwidget.h
+++ b/kmail/kmmainwidget.h
@@ -43,6 +43,7 @@
 #include <QPointer>
 #include <akonadi/kmime/standardmailactionmanager.h>
 #include <messagelist/core/view.h>
+#include <Solid/Networking>
 
 namespace Akonadi {
   class EntityListView;
@@ -84,6 +85,7 @@ namespace MailCommon {
   class FolderSelectionDialog;
 }
 
+
 class KMAIL_EXPORT KMMainWidget : public QWidget
 {
   Q_OBJECT
@@ -371,6 +373,7 @@ class KMAIL_EXPORT KMMainWidget : public QWidget
     void slotSendQueuedVia( QAction* item );
     void slotOnlineStatus();
     void slotUpdateOnlineStatus( GlobalSettings::EnumNetworkState::type );
+    void slotNetworkStatusChanged ( Solid::Networking::Status );
     void slotMessagePopup(const Akonadi::Item& ,const KUrl&,const QPoint& );
     void slotDelayedMessagePopup( KJob *job );
     void slotMarkAll();


["signature.asc" (application/pgp-signature)]

_______________________________________________
KDE PIM mailing list kde-pim@kde.org
https://mail.kde.org/mailman/listinfo/kde-pim
KDE PIM home page at http://pim.kde.org/

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic