QScriptValue scriptRequestInfo(QScriptContext *context, QScriptEngine *engine) { if (context->argumentCount() < 2) return context->throwError("qutim.requestInfo() takes at least 2 arguments"); QObject *object = context->argument(0).toQObject(); if (!object) return context->throwError("First argument must be QObject"); QScriptValue func = context->argument(1); if (!func.isFunction()) return context->throwError("Second argument must be callback"); InfoRequestFactory *factory = InfoRequestFactory::factory(object); QScriptValue errorFunc = context->argument(2); if (!factory || factory->supportLevel(object) <= InfoRequestFactory::Unavailable) { if (errorFunc.isFunction()) { qDebug() << Q_FUNC_INFO; QScriptValue error = engine->newObject(); error.setProperty(QLatin1String("name"), QLatin1String("NotSupported")); error.setProperty(QLatin1String("text"), QLatin1String("Unit does not support information request")); QList<QScriptValue> args; args << error; errorFunc.call(errorFunc, args); } return engine->undefinedValue(); } InfoRequest *request = factory->createrDataFormRequest(object); new ScriptInfoRequest(func, errorFunc, request); return engine->undefinedValue(); }
void QuickContactInfo::show(QObject *object) { InfoRequestFactory *factory = InfoRequestFactory::factory(object); SupportLevel type = factory ? factory->supportLevel(object) : InfoRequestFactory::Unavailable; if (type <= InfoRequestFactory::Unavailable) object = 0; if (m_object != object) { m_object = object; emit objectChanged(object); } if (!object) { m_item = DataItem("No data"); emit itemChanged(m_item); delete m_request; m_request = 0; return; } bool readWrite = (type == InfoRequestFactory::ReadWrite); if (m_readWrite != readWrite) { m_readWrite = readWrite; emit readOnlyChanged(!readWrite); } delete m_request; m_request = InfoRequestFactory::dataFormRequest(object); if (m_request) { connect(m_request, SIGNAL(stateChanged(qutim_sdk_0_3::InfoRequest::State)), SLOT(onRequestStateChanged(qutim_sdk_0_3::InfoRequest::State))); m_request->requestData(); } QString title; QString avatar; if (Buddy *buddy = qobject_cast<Buddy*>(m_object)) { title = QApplication::translate("ContactInfo", "About contact %1 <%2>") .arg(buddy->name()) .arg(buddy->id()); } else { if (Account *account = qobject_cast<Account*>(m_object)) { title = QApplication::translate("ContactInfo", "About account %1") .arg(account->name()); } else { title = QApplication::translate("ContactInfo", "About %1 <%2>") .arg(m_object->property("name").toString()) .arg(m_object->property("id").toString()); } } if (m_request) onRequestStateChanged(m_request->state()); emit showRequest(); }
QScriptValue createInfoRequest(QScriptContext *context, QScriptEngine *engine) { if (context->argumentCount() != 1) return context->throwError("InfoRequest() takes exactly one argument"); QObject *object = context->argument(0).toQObject(); InfoRequestFactory *factory = InfoRequestFactory::factory(object); if (!factory || factory->supportLevel(object) <= InfoRequestFactory::Unavailable) return engine->undefinedValue(); InfoRequest *request = factory->createrDataFormRequest(object); if (!request) return engine->nullValue(); return engine->newQObject(request, QScriptEngine::ScriptOwnership); }