aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Matt Ullman2015-10-19 00:40:49 -0400
committerGravatar Matt Ullman2015-10-19 00:40:49 -0400
commit06fb76557c87aea7363c592f8ffde6b80bd5b980 (patch)
treed5c12047aa30e7891a1629aa29f694839782b818
parentMerge pull request #1678 from blindsighttf2/cleanup (diff)
downloadKVIrc-06fb76557c87aea7363c592f8ffde6b80bd5b980.tar.gz
KVIrc-06fb76557c87aea7363c592f8ffde6b80bd5b980.tar.bz2
KVIrc-06fb76557c87aea7363c592f8ffde6b80bd5b980.zip
context: Fix #1682
Add a message when the client is currently delaying to recconect to a lost link. Set the action icon to connected during the reconnect delay period.
-rw-r--r--src/kvirc/kernel/KviCoreActions.cpp2
-rw-r--r--src/kvirc/kernel/KviIrcContext.cpp15
-rw-r--r--src/kvirc/kernel/KviIrcContext.h3
-rw-r--r--src/kvirc/ui/KviConsoleWindow.cpp3
-rw-r--r--src/modules/context/libkvicontext.cpp3
5 files changed, 20 insertions, 6 deletions
diff --git a/src/kvirc/kernel/KviCoreActions.cpp b/src/kvirc/kernel/KviCoreActions.cpp
index 4e15e7fed..8aabec733 100644
--- a/src/kvirc/kernel/KviCoreActions.cpp
+++ b/src/kvirc/kernel/KviCoreActions.cpp
@@ -599,6 +599,7 @@ void KviConnectAction::activeContextStateChanged()
p = g_pIconManager->getBigIcon(KVI_BIGICON_DISCONNECTED);
txt = m_szConnectString;
break;
+ case KviIrcContext::PendingRecon:
case KviIrcContext::Connecting:
case KviIrcContext::LoggingIn:
p = g_pIconManager->getBigIcon(KVI_BIGICON_CONNECTING);
@@ -662,6 +663,7 @@ bool KviConnectAction::addToPopupMenu(QMenu *p)
if(!m_szKeySequence.isEmpty())t += '\t' + m_szKeySequence;
p->addAction(t,this,SLOT(activate()));
break;
+ case KviIrcContext::PendingRecon:
case KviIrcContext::Connecting:
case KviIrcContext::LoggingIn:
t = m_szAbortConnectionString;
diff --git a/src/kvirc/kernel/KviIrcContext.cpp b/src/kvirc/kernel/KviIrcContext.cpp
index 14a3857c0..4f44fe964 100644
--- a/src/kvirc/kernel/KviIrcContext.cpp
+++ b/src/kvirc/kernel/KviIrcContext.cpp
@@ -346,7 +346,7 @@ void KviIrcContext::setState(State eState)
emit stateChanged();
- if(eState == KviIrcContext::Idle)destroyConnection();
+ if(eState == KviIrcContext::Idle || eState == KviIrcContext::PendingRecon)destroyConnection();
m_pConsole->updateCaption();
}
@@ -383,6 +383,9 @@ void KviIrcContext::connectButtonClicked()
m_pConsole->outputNoFmt(KVI_OUT_SYSTEMERROR,
__tr2qs("Reconnect attempt aborted"));
+ if(m_eState == KviIrcContext::PendingRecon)
+ setState(Idle);
+
return;
}
@@ -649,7 +652,7 @@ void KviIrcContext::connectionFailed(int iError)
setAsynchronousConnectionData(d);
beginAsynchronousConnect(1000 * KVI_OPTION_UINT(KviOption_uintAutoReconnectDelay));
- setState(Idle); // destroy the actual connection
+ setState(PendingRecon); // destroy the actual connection
return;
} else {
@@ -766,8 +769,6 @@ void KviIrcContext::connectionTerminated()
connection()->keepQueriesOpenAfterDisconnect();
}
- setState(Idle);
-
bool bStopOutput = false;
bStopOutput = KVS_TRIGGER_EVENT_0_HALTED(KviEvent_OnIRCConnectionTerminated,m_pConsole);
@@ -784,6 +785,8 @@ void KviIrcContext::connectionTerminated()
if(bUnexpectedDisconnect && KVI_OPTION_BOOL(KviOption_boolAutoReconnectOnUnexpectedDisconnect))
{
+ setState(PendingRecon);
+
//m_uConnectAttemptCount = 1;
if(!_OUTPUT_MUTE)
m_pConsole->output(KVI_OUT_CONNECTION,__tr2qs("The connection terminated unexpectedly. Trying to reconnect..."));
@@ -803,6 +806,8 @@ void KviIrcContext::connectionTerminated()
setAsynchronousConnectionData(d);
beginAsynchronousConnect(1000 * KVI_OPTION_UINT(KviOption_uintAutoReconnectDelay));
+ } else {
+ setState(Idle);
}
}
@@ -879,6 +884,7 @@ void KviIrcContext::terminateConnectionRequest(bool bForce, const QString & szQu
}
}
break;
+ case PendingRecon:
case Connecting:
case LoggingIn:
// was waiting for connection or login, just abort it: it will trigger an error anyway
@@ -907,4 +913,3 @@ void KviIrcContext::timerEvent(QTimerEvent * e)
if(m_pConnection)
m_pConnection->heartbeat(tNow);
}
-
diff --git a/src/kvirc/kernel/KviIrcContext.h b/src/kvirc/kernel/KviIrcContext.h
index 603fdf892..a5137aa0c 100644
--- a/src/kvirc/kernel/KviIrcContext.h
+++ b/src/kvirc/kernel/KviIrcContext.h
@@ -74,12 +74,13 @@ public:
enum State
{
Idle, // connection() == 0
+ PendingRecon, // connection() == 0
Connecting, // connection() != 0
LoggingIn, // connection() != 0
Connected // connection() != 0
};
protected:
- KviConsoleWindow * m_pConsole; // shallow, never null
+ KviConsoleWindow * m_pConsole; // shallow, never null
KviIrcConnection * m_pConnection;
unsigned int m_uId; // this irc context id
diff --git a/src/kvirc/ui/KviConsoleWindow.cpp b/src/kvirc/ui/KviConsoleWindow.cpp
index 8caac1aed..0a4010ab4 100644
--- a/src/kvirc/ui/KviConsoleWindow.cpp
+++ b/src/kvirc/ui/KviConsoleWindow.cpp
@@ -1119,6 +1119,9 @@ void KviConsoleWindow::fillStatusString()
case KviIrcContext::Idle:
m_szStatusString = __tr2qs("No connection");
break;
+ case KviIrcContext::PendingRecon:
+ m_szStatusString = __tr2qs("Waiting to reconnect...");
+ break;
case KviIrcContext::Connecting:
m_szStatusString = __tr2qs("Connection in progress...");
break;
diff --git a/src/modules/context/libkvicontext.cpp b/src/modules/context/libkvicontext.cpp
index a55c60b94..b307e3527 100644
--- a/src/modules/context/libkvicontext.cpp
+++ b/src/modules/context/libkvicontext.cpp
@@ -434,6 +434,9 @@ static bool context_kvs_fnc_state(KviKvsModuleFunctionCall * c)
case KviIrcContext::Idle:
c->returnValue()->setString(QString("idle"));
break;
+ case KviIrcContext::PendingRecon:
+ c->returnValue()->setString(QString("pending"));
+ break;
case KviIrcContext::Connecting:
c->returnValue()->setString(QString("connecting"));
break;