[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