void BirthdayUpdater::onRequestStateChanged(qutim_sdk_0_3::InfoRequest::State state) { if (state == InfoRequest::RequestDone) { InfoRequest *request = sender_cast<InfoRequest*>(sender()); request->deleteLater(); Contact *contact = qobject_cast<Contact*>(request->object()); if (!contact) return; emit birthdayUpdated(contact, request->value("birthday", QDate())); } else if (state == InfoRequest::Canceled || state == InfoRequest::Error) { sender()->deleteLater(); } }
void ScriptInfoRequest::handleError(const char *name, const QString &text) { InfoRequest *request = qobject_cast<InfoRequest*>(parent()); Q_ASSERT(request); request->deleteLater(); debug() << Q_FUNC_INFO << m_error.isFunction(); if (m_error.isFunction()) { QScriptValue error = m_func.engine()->newObject(); error.setProperty(QLatin1String("name"), name); error.setProperty(QLatin1String("text"), text); QList<QScriptValue> args; args << error; m_error.call(m_error, args); } deleteLater(); }
void BirthdayUpdater::onUpdateNext() { Contact *contact = 0; QMutableListIterator<QWeakPointer<Contact> > itr(m_waitingUpdate); while (itr.hasNext()) { if (!itr.next()) { itr.remove(); continue; } contact = itr.value().data(); InfoRequestFactory::SupportLevel level = m_factory->supportLevel(contact); if (level >= InfoRequestFactory::ReadOnly) { m_updateFails = 0; itr.remove(); break; } else { contact = NULL; } } if (!contact) { if (++m_updateFails >= 30) { // We have been trying to update the contacts for a long time now. // Maybe their protocol is not supported information requests // despite its saying otherwise. So just forget about the contacts. m_waitingUpdate.clear(); m_updateFails = 0; m_updateTimer.stop(); } return; } static QSet<QString> hints = QSet<QString>() << "birthday"; InfoRequest *request = m_factory->createrDataFormRequest(contact); connect(request, SIGNAL(stateChanged(qutim_sdk_0_3::InfoRequest::State)), SLOT(onRequestStateChanged(qutim_sdk_0_3::InfoRequest::State))); request->requestData(hints); if (m_waitingUpdate.isEmpty()) m_updateTimer.stop(); }
void ScriptInfoRequest::onStateChanged(qutim_sdk_0_3::InfoRequest::State state) { debug() << Q_FUNC_INFO << state; if (state == InfoRequest::Requesting) return; InfoRequest *request = qobject_cast<InfoRequest*>(parent()); Q_ASSERT(request); if (state == InfoRequest::LoadedFromCache) { request->deleteLater(); } else if (state == InfoRequest::Canceled) { handleError("Canceled", "Request was canceled"); return; } else if (state == InfoRequest::Error) { handleError("Error", request->errorString().toString()); return; } DataItem item = request->dataItem(); QList<QScriptValue> args; args << m_func.engine()->toScriptValue(item); debug() << Q_FUNC_INFO; Q_ASSERT(m_func.isFunction()); m_func.call(m_func, args); deleteLater(); }
void JabberClient::info_request(JabberUserData *user_data) { if (getState() != Connected) return; if (user_data == NULL) user_data = &data.owner; InfoRequest *req = new InfoRequest(this, user_data); req->start_element("vCard"); req->add_attribute("prodid", "-//HandGen//NONSGML vGen v1.0//EN"); req->add_attribute("xmlns", "vcard-temp"); req->add_attribute("version", "2.0"); req->send(); m_requests.push_back(req); }