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

List:       kde-pim
Subject:    Re: [Kde-pim] kmail network-awareness patch
From:       Martin =?ISO-8859-1?Q?Bedn=E1r?= <serafean () gmail ! com>
Date:       2011-08-20 11:45:58
Message-ID: 3268193.2V4gL2zuGf () nemmerle
[Download RAW message or body]

[Attachment #2 (multipart/signed)]

[Attachment #4 (multipart/mixed)]


Le Samedi 20 d'août 2011 12:53:19 vous avez écrit :
> Le Saturday 20 August 2011 11:59:08 Martin Bednár a écrit :
> > 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
> 
> Hi,
> for me patch is good.
> And yes please merge setAccountOnline/Offline

Will do but in another patch.

> 
> Just a little pb:
> "+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();
> +  }
> +}
> " if ( status == Solid::Networking::Connected && GlobalSettings::self()-
> networkState() == GlobalSettings::EnumNetworkState::Online ) {"
> 
> When status is connected and "GlobalSettings::EnumNetworkState::Offline" you
> display "No network connection detected, all network jobs are suspended"
> it's not right. for me because you are connection but just kmail is
> offline.
> 
> 
> => perhaps:
> 
> Not necessary to display change network status when we are offline.
> 
> void KMMainWidget::slotNetworkStatusChanged ( Solid::Networking::Status
> status)
> {
>  if( GlobalSettings::self()->networkState() ==
> GlobalSettings::EnumNetworkState::Offline )
>     return;
> 
> 
>   if ( status == Solid::Networking::Connected  ) {
>     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();
>   }
> }

Hadn't noticed that, modified accordingly.
I also added another i18n for the case that the user chooses to go online, but 
there is no network connection. Now I'm left wondering what to do with this : 
  if ( MessageComposer::MessageComposerSettings::self()->sendImmediate() ) {
    kmkernel->msgSender()->sendQueued();
  }
Should I add it to setAccountOnline()? Does it make sense to call it when a 
network connection appears?

> 
> 
> Otherwise it's ok to commit in master (not in 4.7 because it adds new i18n)

Someone else will have to do that, I can't.

> 
> 
> Thanks
> Regards
["kmail-autoOffline.patch" (kmail-autoOffline.patch)]

diff --git a/kmail/kmkernel.cpp b/kmail/kmkernel.cpp
index 51602fe..3dd436a 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();
@@ -940,10 +946,14 @@ void KMKernel::resumeNetworkJobs()
   if ( GlobalSettings::self()->networkState() == \
GlobalSettings::EnumNetworkState::Online )  return;
 
-  setAccountOnline();
-  
+  if ( Solid::Networking::status()==Solid::Networking::Connected ) {
+    setAccountOnline();
+    BroadcastStatus::instance()->setStatusMsg( i18n("KMail is set to be online; all \
network jobs resumed")); +  }
+  else {
+    BroadcastStatus::instance()->setStatusMsg( i18n ( "KMail is set to be online; \
all network jobs will resume when a network connection is detected" ) ); +  }
   GlobalSettings::setNetworkState( GlobalSettings::EnumNetworkState::Online );
-  BroadcastStatus::instance()->setStatusMsg( i18n("KMail is set to be online; all \
network jobs resumed"));  emit onlineStatusChanged( \
(GlobalSettings::EnumNetworkState::type)GlobalSettings::networkState() );  
   if ( MessageComposer::MessageComposerSettings::self()->sendImmediate() ) {
@@ -953,7 +963,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..d28b361 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,20 @@ void \
KMMainWidget::slotUpdateOnlineStatus( GlobalSettings::EnumNetworkState::typ  }
 }
 
+void KMMainWidget::slotNetworkStatusChanged ( Solid::Networking::Status status)
+{
+  if (GlobalSettings::self()->networkState() == \
GlobalSettings::EnumNetworkState::Offline ) +    return;
+    
+  if ( status == Solid::Networking::Connected ) {
+    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..4ae2916 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;
@@ -371,6 +372,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