clearing presences and statuses on disconnect of an account

This commit is contained in:
Blue 2019-06-23 14:31:03 +03:00
parent 49aa99d4db
commit 833913cac2
6 changed files with 38 additions and 0 deletions

View File

@ -30,6 +30,9 @@ void Models::Account::setState(Shared::ConnectionState p_state)
if (state != p_state) { if (state != p_state) {
state = p_state; state = p_state;
changed(2); changed(2);
if (state == Shared::disconnected) {
toOfflineState();
}
} }
} }
@ -198,3 +201,8 @@ void Models::Account::setError(const QString& p_resource)
} }
} }
void Models::Account::toOfflineState()
{
setAvailability(Shared::offline);
Item::toOfflineState();
}

View File

@ -8,6 +8,7 @@
namespace Models { namespace Models {
class Account : public Item { class Account : public Item {
Q_OBJECT
public: public:
explicit Account(const QMap<QString, QVariant> &data, Item *parentItem = 0); explicit Account(const QMap<QString, QVariant> &data, Item *parentItem = 0);
~Account(); ~Account();
@ -50,6 +51,9 @@ namespace Models {
QString error; QString error;
Shared::ConnectionState state; Shared::ConnectionState state;
Shared::Availability availability; Shared::Availability availability;
protected slots:
void toOfflineState() override;
}; };
} }

View File

@ -320,3 +320,18 @@ const Models::Account * Models::Contact::getParentAccount() const
return static_cast<const Account*>(p); return static_cast<const Account*>(p);
} }
void Models::Contact::toOfflineState()
{
emit childIsAboutToBeRemoved(this, 0, childItems.size());
for (int i = 0; i < childItems.size(); ++i) {
Item* item = childItems[i];
disconnect(item, SIGNAL(childChanged(Models::Item*, int, int)), this, SLOT(refresh()));
Item::_removeChild(i);
item->deleteLater();
}
childItems.clear();
presences.clear();
emit childRemoved();
refresh();
}

View File

@ -50,6 +50,7 @@ protected:
protected slots: protected slots:
void refresh(); void refresh();
void toOfflineState() override;
protected: protected:
void setAvailability(Shared::Availability p_state); void setAvailability(Shared::Availability p_state);

View File

@ -140,3 +140,11 @@ void Models::Item::changed(int col)
emit childChanged(this, row(), col); emit childChanged(this, row(), col);
} }
} }
void Models::Item::toOfflineState()
{
for (std::deque<Item*>::iterator itr = childItems.begin(), end = childItems.end(); itr != end; ++itr) {
Item* it = *itr;
it->toOfflineState();
}
}

View File

@ -59,6 +59,8 @@ class Item : public QObject{
Item* parent; Item* parent;
protected slots: protected slots:
virtual void toOfflineState();
}; };
} }