예제 #1
0
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();
	}
}
예제 #2
0
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();
}
예제 #3
0
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();
}
예제 #4
0
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();
}
예제 #5
0
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);
}