void AdHocCommandServer::ChangeStatusInfo (const QDomElement& sourceElem) { QList<QXmppDataForm::Field> fields; QXmppDataForm::Field field (QXmppDataForm::Field::HiddenField); field.setValue (RcStr); field.setKey ("FORM_TYPE"); fields << field; const GlooxAccountState& state = Conn_->GetLastState (); QList<QPair<State, QString>> rawOpts; rawOpts << qMakePair<State, QString> (SChat, "chat"); rawOpts << qMakePair<State, QString> (SOnline, "online"); rawOpts << qMakePair<State, QString> (SAway, "away"); rawOpts << qMakePair<State, QString> (SXA, "xa"); rawOpts << qMakePair<State, QString> (SDND, "dnd"); rawOpts << qMakePair<State, QString> (SInvisible, "invisible"); rawOpts << qMakePair<State, QString> (SOffline, "offline"); QString option; QList<QPair<QString, QString>> options; QPair<State, QString> pair; IProxyObject *proxy = Core::Instance ().GetPluginProxy (); Q_FOREACH (pair, rawOpts) { options << qMakePair (proxy->StateToString (pair.first), pair.second); if (pair.first == state.State_) option = pair.second; }
void RoomHandler::requestVoice () { QList<QXmppDataForm::Field> fields; QXmppDataForm::Field typeField (QXmppDataForm::Field::HiddenField); typeField.setKey ("FORM_TYPE"); typeField.setValue ("http://jabber.org/protocol/muc#request"); fields << typeField; QXmppDataForm::Field reqField (QXmppDataForm::Field::TextSingleField); reqField.setLabel ("Requested role"); reqField.setKey ("muc#role"); reqField.setValue ("participant"); fields << reqField; QXmppDataForm form; form.setType (QXmppDataForm::Submit); form.setFields (fields); QXmppMessage msg ("", Room_->jid ()); msg.setType (QXmppMessage::Normal); msg.setExtensions (XooxUtil::Form2XmppElem (form)); Account_->GetClientConnection ()->GetClient ()->sendPacket (msg); }
void Xep0313ReqIq::toXmlElementFromChild (QXmlStreamWriter *writer) const { QXmppIq::toXmlElementFromChild (writer); writer->writeStartElement ("query"); const auto endGuard = Util::MakeScopeGuard ([writer] { writer->writeEndElement (); }); writer->writeAttribute ("xmlns", Xep0313Manager::GetNsUri ()); if (!QueryID_.isEmpty ()) writer->writeAttribute ("queryid", QueryID_); if (JID_.isEmpty () && !Count_ && ItemId_.isEmpty ()) return; if (!JID_.isEmpty ()) { QXmppDataForm::Field formTypeField { QXmppDataForm::Field::HiddenField }; formTypeField.setKey ("FORM_TYPE"); formTypeField.setValue (Xep0313Manager::GetNsUri ()); QXmppDataForm::Field jidField { QXmppDataForm::Field::JidSingleField }; jidField.setKey ("with"); jidField.setValue (JID_); QXmppDataForm form { QXmppDataForm::Form }; form.setFields ({ formTypeField, jidField }); form.toXml (writer); } if (Count_ > 0 || !ItemId_.isEmpty ()) { QXmppResultSetQuery q; if (Count_ > 0) q.setMax (Count_); if (!ItemId_.isEmpty ()) { switch (Dir_) { case Direction::After: q.setAfter (ItemId_); break; case Direction::Before: q.setBefore (ItemId_); break; default: break; } } q.toXml (writer); } }
/// \cond void QXmppDataForm::parse(const QDomElement &element) { if (element.isNull()) return; /* form type */ const QString typeStr = element.attribute("type"); if (typeStr == "form") d->type = QXmppDataForm::Form; else if (typeStr == "submit") d->type = QXmppDataForm::Submit; else if (typeStr == "cancel") d->type = QXmppDataForm::Cancel; else if (typeStr == "result") d->type = QXmppDataForm::Result; else { qWarning() << "Unknown form type" << typeStr; return; } /* form properties */ d->title = element.firstChildElement("title").text(); d->instructions = element.firstChildElement("instructions").text(); QDomElement fieldElement = element.firstChildElement("field"); while (!fieldElement.isNull()) { QXmppDataForm::Field field; /* field type */ QXmppDataForm::Field::Type type = QXmppDataForm::Field::TextSingleField; const QString typeStr = fieldElement.attribute("type"); struct field_type *ptr; for (ptr = field_types; ptr->str; ptr++) { if (typeStr == ptr->str) { type = ptr->type; break; } } field.setType(type); /* field attributes */ field.setLabel(fieldElement.attribute("label")); field.setKey(fieldElement.attribute("var")); /* field value(s) */ if (type == QXmppDataForm::Field::BooleanField) { const QString valueStr = fieldElement.firstChildElement("value").text(); field.setValue(valueStr == "1" || valueStr == "true"); } else if (type == QXmppDataForm::Field::ListMultiField || type == QXmppDataForm::Field::JidMultiField || type == QXmppDataForm::Field::TextMultiField) { QStringList values; QDomElement valueElement = fieldElement.firstChildElement("value"); while (!valueElement.isNull()) { values.append(valueElement.text()); valueElement = valueElement.nextSiblingElement("value"); } field.setValue(values); } else { field.setValue(fieldElement.firstChildElement("value").text()); } /* field media */ QDomElement mediaElement = fieldElement.firstChildElement("media"); if (!mediaElement.isNull()) { Media media; media.setHeight(mediaElement.attribute("height", "-1").toInt()); media.setWidth(mediaElement.attribute("width", "-1").toInt()); QList<QPair<QString, QString> > uris; QDomElement uriElement = mediaElement.firstChildElement("uri"); while (!uriElement.isNull()) { uris.append(QPair<QString, QString>(uriElement.attribute("type"), uriElement.text())); uriElement = uriElement.nextSiblingElement("uri"); } media.setUris(uris); field.setMedia(media); } /* field options */ if (type == QXmppDataForm::Field::ListMultiField || type == QXmppDataForm::Field::ListSingleField) { QList<QPair<QString, QString> > options; QDomElement optionElement = fieldElement.firstChildElement("option"); while (!optionElement.isNull()) { options.append(QPair<QString, QString>(optionElement.attribute("label"), optionElement.firstChildElement("value").text())); optionElement = optionElement.nextSiblingElement("option"); } field.setOptions(options); } /* other properties */ field.setDescription(fieldElement.firstChildElement("description").text()); field.setRequired(!fieldElement.firstChildElement("required").isNull()); d->fields.append(field); fieldElement = fieldElement.nextSiblingElement("field"); } }
void QXmppDataForm::parse(const QDomElement &element) { if (element.isNull()) return; /* form type */ const QString typeStr = element.attribute("type"); if (typeStr == "form") m_type = QXmppDataForm::Form; else if (typeStr == "submit") m_type = QXmppDataForm::Submit; else if (typeStr == "cancel") m_type = QXmppDataForm::Cancel; else if (typeStr == "result") m_type = QXmppDataForm::Result; else { qWarning() << "Unknown form type" << typeStr; return; } /* form properties */ m_title = element.firstChildElement("title").text(); m_instructions = element.firstChildElement("instructions").text(); QDomElement fieldElement = element.firstChildElement("field"); while (!fieldElement.isNull()) { QXmppDataForm::Field field; /* field type */ QXmppDataForm::Field::Type type = static_cast<QXmppDataForm::Field::Type>(-1); const QString typeStr = fieldElement.attribute("type"); struct field_type *ptr; for (ptr = field_types; ptr->str; ptr++) { if (typeStr == ptr->str) { type = ptr->type; break; } } if (type < 0) qWarning() << "Unknown field type" << typeStr; field.setType(type); /* field attributes */ field.setLabel(fieldElement.attribute("label")); field.setKey(fieldElement.attribute("var")); /* field value(s) */ if (type == QXmppDataForm::Field::BooleanField) { const QString valueStr = fieldElement.firstChildElement("value").text(); field.setValue(valueStr == "1" || valueStr == "true"); } else if (type == QXmppDataForm::Field::ListMultiField || type == QXmppDataForm::Field::JidMultiField || type == QXmppDataForm::Field::TextMultiField) { QStringList values; QDomElement valueElement = fieldElement.firstChildElement("value"); while (!valueElement.isNull()) { values.append(valueElement.text()); valueElement = valueElement.nextSiblingElement("value"); } field.setValue(values); } else { field.setValue(fieldElement.firstChildElement("value").text()); } /* field options */ if (type == QXmppDataForm::Field::ListMultiField || type == QXmppDataForm::Field::ListSingleField) { QList<QPair<QString, QString> > options; QDomElement optionElement = fieldElement.firstChildElement("option"); while (!optionElement.isNull()) { options.append(QPair<QString, QString>(optionElement.attribute("label"), optionElement.firstChildElement("value").text())); optionElement = optionElement.nextSiblingElement("option"); } field.setOptions(options); } /* other properties */ field.setDescription(fieldElement.firstChildElement("description").text()); field.setRequired(!fieldElement.firstChildElement("required").isNull()); m_fields.append(field); fieldElement = fieldElement.nextSiblingElement("field"); } }