From 6e44347efd47dc1b310a76313feb4b6ea427d959 Mon Sep 17 00:00:00 2001 From: Black Hat Date: Tue, 6 Nov 2018 09:36:17 +0800 Subject: [PATCH] Improve stability. --- src/controller.cpp | 12 +++++++----- src/paintable.h | 1 + src/spectralroom.h | 9 +++++++-- src/userlistmodel.cpp | 2 +- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/controller.cpp b/src/controller.cpp index bbacf756d..28624c11a 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -40,7 +40,12 @@ Controller::Controller(QObject* parent) QTimer::singleShot(0, this, SLOT(invokeLogin())); } -Controller::~Controller() {} +Controller::~Controller() { + for (auto c : qAsConst(m_connections)) { + c->saveState(); + c->stopSync(); + } +} inline QString accessTokenFileName(const AccountSettings& account) { QString fileName = account.userId(); @@ -104,10 +109,7 @@ void Controller::addConnection(Connection* c) { m_connections.push_back(c); - connect(c, &Connection::syncDone, this, [=] { - c->saveState(); - c->sync(30000); - }); + connect(c, &Connection::syncDone, this, [=] { c->sync(30000); }); connect(c, &Connection::loggedOut, this, [=] { dropConnection(c); }); using namespace QMatrixClient; diff --git a/src/paintable.h b/src/paintable.h index f09d778dd..5eb56ef97 100644 --- a/src/paintable.h +++ b/src/paintable.h @@ -8,6 +8,7 @@ class Paintable : public QObject { Q_OBJECT public: Paintable(QObject* parent = nullptr); + virtual ~Paintable() = default; virtual QImage image(int) = 0; virtual QImage image(int, int) = 0; diff --git a/src/spectralroom.h b/src/spectralroom.h index 649063459..5a8733119 100644 --- a/src/spectralroom.h +++ b/src/spectralroom.h @@ -18,11 +18,16 @@ class RoomPaintable : public Paintable { } QImage image(int dimension) override { - if (!m_room) return QImage(); + if (!m_room) { + qDebug() << "Room is null"; + return QImage(); + } return m_room->avatar(dimension); } QImage image(int width, int height) override { - if (!m_room) return QImage(); + if (!m_room) { + return QImage(); + } return m_room->avatar(width, height); } diff --git a/src/userlistmodel.cpp b/src/userlistmodel.cpp index 4a41459c3..8a56a3e92 100644 --- a/src/userlistmodel.cpp +++ b/src/userlistmodel.cpp @@ -18,7 +18,7 @@ void UserListModel::setRoom(QMatrixClient::Room* room) { using namespace QMatrixClient; beginResetModel(); - if (m_currentRoom) { + if (m_currentRoom && m_currentRoom->connection()) { m_currentRoom->connection()->disconnect(this); m_currentRoom->disconnect(this); for (User* user : m_users) user->disconnect(this);