[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