QObject* VkAccount::CreateNonRosterItem (const QString& idStr) { auto realId = idStr; if (realId.startsWith ("id")) realId = realId.remove (0, 2); bool ok = false; const auto id = realId.toULongLong (&ok); if (!ok) throw std::runtime_error (tr ("%1 is invalid VKontake ID") .arg (idStr) .toUtf8 ().constData ()); if (Entries_.contains (id)) return Entries_ [id]; const auto entry = CreateNonRosterItem (id); emit gotCLItems ({ entry }); NonRosterItems_ << id; Conn_->SetNRIList (NonRosterItems_); Conn_->GetUserInfo ({ id }); return entry; }
void AccountActionsManager::handleOpenNonRoster () { const auto obj = sender ()->property ("Azoth/AccountObject").value<QObject*> (); const auto isnr = qobject_cast<ISupportNonRoster*> (obj); if (!isnr) return; QObject *entryObj = nullptr; QString contactId; while (!entryObj) { contactId = QInputDialog::getText (nullptr, tr ("Open chat with non-roster contact"), tr ("Enter ID of the contact you wish to open chat with:"), QLineEdit::Normal, contactId); if (contactId.isEmpty ()) return; try { entryObj = isnr->CreateNonRosterItem (contactId); } catch (const std::exception& e) { QMessageBox::critical (nullptr, "LeechCraft Azoth", tr ("Error opening chat: %1") .arg (QString::fromUtf8 (e.what ()))); } } const auto entry = qobject_cast<ICLEntry*> (entryObj); Core::Instance ().GetChatTabsManager ()->OpenChat (entry, true); }
void VkAccount::handleNRIList (const QList<qulonglong>& ids) { QList<qulonglong> toRequest; QList<QObject*> objs; for (auto id : ids) { if (Entries_.contains (id)) continue; toRequest << id; objs << CreateNonRosterItem (id); } emit gotCLItems (objs); Conn_->GetUserInfo (toRequest); NonRosterItems_ = toRequest; }