diff --git a/core/account.cpp b/core/account.cpp index 5ffe182..dfa2191 100644 --- a/core/account.cpp +++ b/core/account.cpp @@ -747,7 +747,7 @@ void Core::Account::subscribeToContact(const QString& jid, const QString& reason QXmppRosterManager& rm = client.rosterManager(); rm.subscribe(jid, reason); } else { - qDebug() << "An attempt to subscribe an account " << name << " to jid " << jid << " but the account is not in the connected state, skipping"; + qDebug() << "An attempt to subscribe account " << name << " to contact " << jid << " but the account is not in the connected state, skipping"; } } @@ -757,7 +757,27 @@ void Core::Account::unsubscribeFromContact(const QString& jid, const QString& re QXmppRosterManager& rm = client.rosterManager(); rm.unsubscribe(jid, reason); } else { - qDebug() << "An attempt to unsubscribe an account " << name << " from jid " << jid << " but the account is not in the connected state, skipping"; + qDebug() << "An attempt to unsubscribe account " << name << " from contact " << jid << " but the account is not in the connected state, skipping"; } } +void Core::Account::removeContactRequest(const QString& jid) +{ + if (state == Shared::connected) { + QXmppRosterManager& rm = client.rosterManager(); + rm.removeItem(jid); + } else { + qDebug() << "An attempt to remove contact " << jid << " from account " << name << " but the account is not in the connected state, skipping"; + } +} + + +void Core::Account::addContactRequest(const QString& jid, const QString& name, const QSet& groups) +{ + if (state == Shared::connected) { + QXmppRosterManager& rm = client.rosterManager(); + rm.addItem(jid, name, groups); + } else { + qDebug() << "An attempt to add contact " << jid << " to account " << name << " but the account is not in the connected state, skipping"; + } +} diff --git a/core/account.h b/core/account.h index a26524b..fb2b7d8 100644 --- a/core/account.h +++ b/core/account.h @@ -46,6 +46,8 @@ public: void setReconnectTimes(unsigned int times); void subscribeToContact(const QString& jid, const QString& reason); void unsubscribeFromContact(const QString& jid, const QString& reason); + void removeContactRequest(const QString& jid); + void addContactRequest(const QString& jid, const QString& name, const QSet& groups); signals: void connectionStateChanged(int); diff --git a/core/squawk.cpp b/core/squawk.cpp index 0fd7c7c..e776a20 100644 --- a/core/squawk.cpp +++ b/core/squawk.cpp @@ -354,3 +354,14 @@ void Core::Squawk::unsubscribeContact(const QString& account, const QString& jid itr->second->unsubscribeFromContact(jid, reason); } + +void Core::Squawk::removeContactRequest(const QString& account, const QString& jid) +{ + AccountsMap::const_iterator itr = amap.find(account); + if (itr == amap.end()) { + qDebug("An attempt to remove contact from non existing account, skipping"); + return; + } + + itr->second->removeContactRequest(jid); +} diff --git a/core/squawk.h b/core/squawk.h index c56715d..9126fe3 100644 --- a/core/squawk.h +++ b/core/squawk.h @@ -51,6 +51,7 @@ public slots: void requestArchive(const QString& account, const QString& jid, int count, const QString& before); void subscribeContact(const QString& account, const QString& jid, const QString& reason); void unsubscribeContact(const QString& account, const QString& jid, const QString& reason); + void removeContactRequest(const QString& account, const QString& jid); private: typedef std::deque Accounts; diff --git a/ui/squawk.cpp b/ui/squawk.cpp index 0c6fe4e..d2599aa 100644 --- a/ui/squawk.cpp +++ b/ui/squawk.cpp @@ -313,8 +313,8 @@ void Squawk::onRosterContextMenu(const QPoint& point) Models::Contact* cnt = static_cast(item); hasMenu = true; - QAction* remove = contextMenu->addAction(QIcon::fromTheme("mail-message"), "Open dialog"); - connect(remove, &QAction::triggered, [this, index]() { + QAction* dialog = contextMenu->addAction(QIcon::fromTheme("mail-message"), "Open dialog"); + connect(dialog, &QAction::triggered, [this, index]() { onRosterItemDoubleClicked(index); }); @@ -322,8 +322,8 @@ void Squawk::onRosterContextMenu(const QPoint& point) switch (state) { case Shared::both: case Shared::to: { - QAction* remove = contextMenu->addAction(QIcon::fromTheme("news-unsubscribe"), "Unsubscribe"); - connect(remove, &QAction::triggered, [this, cnt]() { + QAction* unsub = contextMenu->addAction(QIcon::fromTheme("news-unsubscribe"), "Unsubscribe"); + connect(unsub, &QAction::triggered, [this, cnt]() { emit unsubscribeContact(cnt->getAccountName(), cnt->getJid(), ""); }); } @@ -331,13 +331,18 @@ void Squawk::onRosterContextMenu(const QPoint& point) case Shared::from: case Shared::unknown: case Shared::none: { - QAction* remove = contextMenu->addAction(QIcon::fromTheme("news-subscribe"), "Subscribe"); - connect(remove, &QAction::triggered, [this, cnt]() { + QAction* sub = contextMenu->addAction(QIcon::fromTheme("news-subscribe"), "Subscribe"); + connect(sub, &QAction::triggered, [this, cnt]() { emit subscribeContact(cnt->getAccountName(), cnt->getJid(), ""); }); } } + QAction* remove = contextMenu->addAction(QIcon::fromTheme("edit-delete"), "Remove"); + connect(remove, &QAction::triggered, [this, cnt]() { + emit removeContactRequest(cnt->getAccountName(), cnt->getJid()); + }); + } break; default: diff --git a/ui/squawk.h b/ui/squawk.h index d427401..5d8a4ee 100644 --- a/ui/squawk.h +++ b/ui/squawk.h @@ -37,6 +37,7 @@ signals: void requestArchive(const QString& account, const QString& jid, int count, const QString& before); void subscribeContact(const QString& account, const QString& jid, const QString& reason); void unsubscribeContact(const QString& account, const QString& jid, const QString& reason); + void removeContactRequest(const QString& account, const QString& jid); public slots: void newAccount(const QMap& account);