diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/crsm.cpp | 42 | ||||
| -rw-r--r-- | src/crsm.hpp | 2 |
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; |
