diff --exclude='*orig' -Naur psi-0.10-test3-orig/iris/include/im.h psi-0.10-test3/iris/include/im.h --- psi-0.10-test3-orig/iris/include/im.h 2005-11-08 18:09:02.000000000 +0000 +++ psi-0.10-test3/iris/include/im.h 2005-11-08 18:12:09.000000000 +0000 @@ -172,6 +172,7 @@ const QString & keyID() const; bool isAvailable() const; bool isAway() const; + bool isDnd() const; bool isInvisible() const; bool hasError() const; int errorCode() const; diff --exclude='*orig' -Naur psi-0.10-test3-orig/iris/xmpp-im/types.cpp psi-0.10-test3/iris/xmpp-im/types.cpp --- psi-0.10-test3-orig/iris/xmpp-im/types.cpp 2005-11-08 18:09:03.000000000 +0000 +++ psi-0.10-test3/iris/xmpp-im/types.cpp 2005-11-08 18:13:32.000000000 +0000 @@ -955,6 +955,14 @@ return false; } +bool Status::isDnd() const +{ + if(d->v_show == "dnd") + return true; + + return false; +} + bool Status::isInvisible() const { return d->v_isInvisible; diff --exclude='*orig' -Naur psi-0.10-test3-orig/src/common.h psi-0.10-test3/src/common.h --- psi-0.10-test3-orig/src/common.h 2005-11-08 18:09:03.000000000 +0000 +++ psi-0.10-test3/src/common.h 2005-11-08 18:15:12.000000000 +0000 @@ -111,7 +111,7 @@ QStringList recentStatus; //recent status messages int asAway, asXa, asOffline; - bool use_asAway, use_asXa, use_asOffline; + bool use_asAway, use_asXa, use_asOffline, use_asWhileDnd; bool use_asMessage; QString asMessage; QString onevent[10]; diff --exclude='*orig' -Naur psi-0.10-test3-orig/src/options/opt_status.cpp psi-0.10-test3/src/options/opt_status.cpp --- psi-0.10-test3-orig/src/options/opt_status.cpp 2005-11-08 18:09:03.000000000 +0000 +++ psi-0.10-test3/src/options/opt_status.cpp 2005-11-08 18:23:19.000000000 +0000 @@ -97,6 +97,7 @@ opt->use_asAway = d->ck_asAway->isChecked(); opt->use_asXa = d->ck_asXa->isChecked(); opt->use_asOffline = d->ck_asOffline->isChecked(); + opt->use_asWhileDnd = d->ck_asWhileDnd->isChecked(); opt->use_asMessage = d->ck_asMessage->isChecked(); opt->asMessage = d->te_asMessage->text(); @@ -128,6 +129,7 @@ d->ck_asAway->setChecked( opt->use_asAway ); d->ck_asXa->setChecked( opt->use_asXa ); d->ck_asOffline->setChecked( opt->use_asOffline ); + d->ck_asWhileDnd->setChecked( opt->use_asWhileDnd ); d->ck_asMessage->setChecked( opt->use_asMessage ); d->te_asMessage->setEnabled( opt->use_asMessage ); d->te_asMessage->setText( opt->asMessage ); diff --exclude='*orig' -Naur psi-0.10-test3-orig/src/options/opt_status-ui.ui psi-0.10-test3/src/options/opt_status-ui.ui --- psi-0.10-test3-orig/src/options/opt_status-ui.ui 2005-11-08 18:09:03.000000000 +0000 +++ psi-0.10-test3/src/options/opt_status-ui.ui 2005-11-08 18:23:19.000000000 +0000 @@ -153,6 +153,14 @@ + ck_asWhileDnd + + + Use auto status while DND + + + + ck_asMessage diff --exclude='*orig' -Naur psi-0.10-test3-orig/src/psiaccount.cpp psi-0.10-test3/src/psiaccount.cpp --- psi-0.10-test3-orig/src/psiaccount.cpp 2005-11-08 18:09:03.000000000 +0000 +++ psi-0.10-test3/src/psiaccount.cpp 2005-11-08 18:23:19.000000000 +0000 @@ -1843,7 +1843,7 @@ usingAutoStatus = false; } } - else if( !(ls.isAway() && !usingAutoStatus) ) { + else if( !ls.isAway() || (ls.isDnd() && option.use_asWhileDnd) || usingAutoStatus ) { int minutes = x / 60; if(option.use_asOffline && option.asOffline > 0 && minutes >= option.asOffline) { diff --exclude='*orig' -Naur psi-0.10-test3-orig/src/psi_profiles.cpp psi-0.10-test3/src/psi_profiles.cpp --- psi-0.10-test3-orig/src/psi_profiles.cpp 2005-11-08 18:09:03.000000000 +0000 +++ psi-0.10-test3/src/psi_profiles.cpp 2005-11-08 18:22:46.000000000 +0000 @@ -375,6 +375,7 @@ prefs.asXa = 30; prefs.asOffline = 0; prefs.use_asAway = TRUE; + prefs.use_asWhileDnd = FALSE; prefs.use_asXa = TRUE; prefs.use_asOffline = FALSE; prefs.use_asMessage = TRUE; @@ -966,6 +967,10 @@ setBoolAttribute(e, "use", prefs.use_asOffline); tag.appendChild(e); + e = textTag(doc, "useWhileDnd", prefs.use_asWhileDnd); + setBoolAttribute(e, "use", prefs.use_asWhileDnd); + tag.appendChild(e); + e = textTag(doc, "message", prefs.asMessage); setBoolAttribute(e, "use", prefs.use_asMessage); tag.appendChild(e); @@ -1701,6 +1706,13 @@ else prefs.use_asOffline = TRUE; } + e = findSubTag(tag, "useWhileDnd", &found); + if(found) { + if(e.hasAttribute("use")) + readBoolAttribute(e, "use", &prefs.use_asWhileDnd); + else + prefs.use_asWhileDnd = FALSE; + } e = findSubTag(tag, "message", &found); if(found) { if(e.hasAttribute("use"))