summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/crsm.cpp42
-rw-r--r--src/crsm.hpp2
2 files changed, 31 insertions, 13 deletions
diff --git a/src/crsm.cpp b/src/crsm.cpp
index 73828b6..9bc2a19 100644
--- a/src/crsm.cpp
+++ b/src/crsm.cpp
@@ -77,15 +77,6 @@ CRSM::CRSM(QObject *parent) :
reallog->open(QIODevice::Append | QIODevice::Text);
logstream.setDevice(reallog);
- if(Config.IRC.Use)
- {
- prepareAndConnectIrc();
- }
- else
- {
- Config.IRC.UseIngameChat = false;
- }
-
ok = true;
}
@@ -489,9 +480,14 @@ void CRSM::ircMessageReceived(IrcMessage *message)
void CRSM::ircDisconnected()
{
- if(!finish)
+ if(connection != nullptr)
+ {
+ delete connection;
+ }
+ connection = nullptr;
+ if(!finish && Config.IRC.Use)
{
- reconnectIrc();
+ QTimer::singleShot(Config.IRC.ReconnectDelay * 1000, this, SLOT(reconnectIrc()));
}
}
@@ -1551,8 +1547,11 @@ void CRSM::prepareAndConnectIrc()
void CRSM::reconnectIrc()
{
- connection->close();
- delete connection;
+ if(connection != nullptr)
+ {
+ connection->close();
+ delete connection;
+ }
prepareAndConnectIrc();
}
@@ -1629,6 +1628,23 @@ void CRSM::applyConfig()
ok = false;
exit();
}
+
+ if(Config.IRC.Use)
+ {
+ if(connection == nullptr)
+ {
+ prepareAndConnectIrc();
+ }
+ }
+ else
+ {
+ Config.IRC.UseIngameChat = false;
+ if(connection != nullptr)
+ {
+ connection->quit(Config.IRC.QuitMessage);
+ }
+ }
+
setupCmds();
out(Stats.read(Config.CRSM.StatsFile));
out(Packs.read(Config.CRSM.PacksFile, Config.Auto.Volatile.Clonk.Directory));
diff --git a/src/crsm.hpp b/src/crsm.hpp
index af3b5cf..7c3c34f 100644
--- a/src/crsm.hpp
+++ b/src/crsm.hpp
@@ -127,6 +127,7 @@ private slots:
void nextScen();
void scenarioFinished();
void ircMessageReceived(IrcMessage* message);
+ void ircDisconnected();
void greet(QString pcName);
void newManagementConnection();
@@ -134,6 +135,7 @@ private slots:
void managementConnectionDisconnected();
void updateNextAutoScens();
+ void reconnectIrc();
private:
CRSMConfig Config;