api_return ApiModule::handleUnsubscribe(ApiRequest& aRequest) { auto subscription = aRequest.getStringParam(0); if (subscriptionExists(subscription)) { setSubscriptionState(subscription, false); return websocketpp::http::status_code::ok; } return websocketpp::http::status_code::not_found; }
api_return ApiModule::handleSubscribe(ApiRequest& aRequest) { if (!socket) { aRequest.setResponseErrorStr("Socket required"); return websocketpp::http::status_code::precondition_required; } const auto& subscription = aRequest.getStringParam(0); if (!subscriptionExists(subscription)) { aRequest.setResponseErrorStr("No such subscription: " + subscription); return websocketpp::http::status_code::not_found; } setSubscriptionState(subscription, true); return websocketpp::http::status_code::ok; }
void Contact::augment(const Features &requestedFeatures, const QVariantMap &attributes) { mPriv->requestedFeatures.unite(requestedFeatures); mPriv->id = qdbus_cast<QString>(attributes[ TP_QT_IFACE_CONNECTION + QLatin1String("/contact-id")]); if (attributes.contains(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST + QLatin1String("/subscribe"))) { uint subscriptionState = qdbus_cast<uint>(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST + QLatin1String("/subscribe"))); setSubscriptionState((SubscriptionState) subscriptionState); } if (attributes.contains(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST + QLatin1String("/publish"))) { uint publishState = qdbus_cast<uint>(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST + QLatin1String("/publish"))); QString publishRequest = qdbus_cast<QString>(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST + QLatin1String("/publish-request"))); setPublishState((SubscriptionState) publishState, publishRequest); } foreach (const Feature &feature, requestedFeatures) { QString maybeAlias; SimplePresence maybePresence; RequestableChannelClassList maybeCaps; QVariantMap maybeLocation; ContactInfoFieldList maybeInfo; if (feature == FeatureAlias) { maybeAlias = qdbus_cast<QString>(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_ALIASING + QLatin1String("/alias"))); if (!maybeAlias.isEmpty()) { receiveAlias(maybeAlias); } else if (mPriv->alias.isEmpty()) { mPriv->alias = mPriv->id; } } else if (feature == FeatureAvatarData) { if (manager()->supportedFeatures().contains(FeatureAvatarData)) { mPriv->actualFeatures.insert(FeatureAvatarData); mPriv->updateAvatarData(); } } else if (feature == FeatureAvatarToken) { if (attributes.contains( TP_QT_IFACE_CONNECTION_INTERFACE_AVATARS + QLatin1String("/token"))) { receiveAvatarToken(qdbus_cast<QString>(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_AVATARS + QLatin1String("/token")))); } else { if (manager()->supportedFeatures().contains(FeatureAvatarToken)) { // AvatarToken being supported but not included in the mapping indicates // that the avatar token is not known - however, the feature is working fine mPriv->actualFeatures.insert(FeatureAvatarToken); } // In either case, the avatar token can't be known mPriv->isAvatarTokenKnown = false; mPriv->avatarToken = QLatin1String(""); } } else if (feature == FeatureCapabilities) { maybeCaps = qdbus_cast<RequestableChannelClassList>(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_CAPABILITIES + QLatin1String("/capabilities"))); if (!maybeCaps.isEmpty()) { receiveCapabilities(maybeCaps); } else { if (manager()->supportedFeatures().contains(FeatureCapabilities) && mPriv->requestedFeatures.contains(FeatureCapabilities)) { // Capabilities being supported but not updated in the // mapping indicates that the capabilities is not known - // however, the feature is working fine. mPriv->actualFeatures.insert(FeatureCapabilities); } } } else if (feature == FeatureInfo) { maybeInfo = qdbus_cast<ContactInfoFieldList>(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_INFO + QLatin1String("/info"))); if (!maybeInfo.isEmpty()) { receiveInfo(maybeInfo); } else { if (manager()->supportedFeatures().contains(FeatureInfo) && mPriv->requestedFeatures.contains(FeatureInfo)) { // Info being supported but not updated in the // mapping indicates that the info is not known - // however, the feature is working fine mPriv->actualFeatures.insert(FeatureInfo); } } } else if (feature == FeatureLocation) { maybeLocation = qdbus_cast<QVariantMap>(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_LOCATION + QLatin1String("/location"))); if (!maybeLocation.isEmpty()) { receiveLocation(maybeLocation); } else { if (manager()->supportedFeatures().contains(FeatureLocation) && mPriv->requestedFeatures.contains(FeatureLocation)) { // Location being supported but not updated in the // mapping indicates that the location is not known - // however, the feature is working fine mPriv->actualFeatures.insert(FeatureLocation); } } } else if (feature == FeatureSimplePresence) { maybePresence = qdbus_cast<SimplePresence>(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE + QLatin1String("/presence"))); if (!maybePresence.status.isEmpty()) { receiveSimplePresence(maybePresence); } else { mPriv->presence.setStatus(ConnectionPresenceTypeUnknown, QLatin1String("unknown"), QLatin1String("")); } } else if (feature == FeatureRosterGroups) { QStringList groups = qdbus_cast<QStringList>(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_GROUPS + QLatin1String("/groups"))); mPriv->groups = groups.toSet(); } else if (feature == FeatureAddresses) { VCardFieldAddressMap addresses = qdbus_cast<VCardFieldAddressMap>(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_ADDRESSING + QLatin1String("/addresses"))); QStringList uris = qdbus_cast<QStringList>(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_ADDRESSING + QLatin1String("/uris"))); receiveAddresses(addresses, uris); } else if (feature == FeatureClientTypes) { QStringList maybeClientTypes = qdbus_cast<QStringList>(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_CLIENT_TYPES + QLatin1String("/client-types"))); if (!maybeClientTypes.isEmpty()) { receiveClientTypes(maybeClientTypes); } else { if (manager()->supportedFeatures().contains(FeatureClientTypes) && mPriv->requestedFeatures.contains(FeatureClientTypes)) { // ClientTypes being supported but not updated in the // mapping indicates that the info is not known - // however, the feature is working fine mPriv->actualFeatures.insert(FeatureClientTypes); } } } else { warning() << "Unknown feature" << feature << "encountered when augmenting Contact"; } }