diff --git a/src/provider.h b/src/provider.h --- a/src/provider.h +++ b/src/provider.h @@ -127,6 +127,33 @@ bool isEnabled() const; void setEnabled(bool enabled); + /** + * Set a custom identifier for your application (sent along with the requests as + * the http agent header in addition to the applicaiton name and version). + * + * For example, you might have an application named SomeApplication, version 23, + * and wish to send along the data "lookandfeel.knsrc". Call this function, and + * the resulting agent header would be: + * + * SomeApplication/23 (+lookandfeel.knsrc) + * + * If you do not set this (or set it to an empty string), the agent string becomes + * + * SomeApplication/23 + * + * @param additionalAgentInformation The extra string + * @since 5.65 + */ + void setAdditionalAgentInformation(const QString& additionalInformation); + /** + * The custom identifier sent along with requests + * + * @return The custom identifier + * @see setAdditionalAgentInformation(const QString&) + * @since 5.65 + */ + QString additionalAgentInformation() const; + /** A url that identifies this provider. This should be used as identifier when referring to this provider but you don't want to use the full provider object. @@ -706,6 +733,12 @@ const QString &person, const QString &friendV, const QString &message, const QString &achievements, const QString &activity, const QString &content, const QString &fan, const QString &forum, const QString &knowledgebase, const QString &event, const QString &comment, const QString ®isterUrl); + // TODO KF6: merge with the constructor above (i.e. remove the above one - and actually do it this time :P ) + Provider(PlatformDependent *internals, const QUrl &baseUrl, const QString &name, const QUrl &icon, + const QString &person, const QString &friendV, const QString &message, const QString &achievements, + const QString &activity, const QString &content, const QString &fan, const QString &forum, + const QString &knowledgebase, const QString &event, const QString &comment, const QString ®isterUrl, + const QString &additionalAgentInformation); friend class ProviderManager; }; diff --git a/src/provider.cpp b/src/provider.cpp --- a/src/provider.cpp +++ b/src/provider.cpp @@ -89,6 +89,7 @@ #include #include #include +#include using namespace Attica; @@ -122,6 +123,7 @@ QString m_commentVersion; QString m_registerUrl; PlatformDependent *m_internals; + QString m_additionalAgentInformation; Private() : m_internals(nullptr) @@ -144,13 +146,15 @@ , m_commentVersion(other.m_commentVersion) , m_registerUrl(other.m_registerUrl) , m_internals(other.m_internals) + , m_additionalAgentInformation(other.m_additionalAgentInformation) { } Private(PlatformDependent *internals, const QUrl &baseUrl, const QString &name, const QUrl &icon, const QString &person, const QString &friendV, const QString &message, const QString &achievement, const QString &activity, const QString &content, const QString &fan, const QString &forum, - const QString &knowledgebase, const QString &event, const QString &comment, const QString ®isterUrl) + const QString &knowledgebase, const QString &event, const QString &comment, const QString ®isterUrl, + const QString &additionalAgentInformation) : m_baseUrl(baseUrl), m_icon(icon), m_name(name) , m_personVersion(person) , m_friendVersion(friendV) @@ -165,6 +169,7 @@ , m_commentVersion(comment) , m_registerUrl(registerUrl) , m_internals(internals) + , m_additionalAgentInformation(additionalAgentInformation) { if (m_baseUrl.isEmpty()) { return; @@ -197,16 +202,26 @@ const QString &activity, const QString &content, const QString &fan, const QString &forum, const QString &knowledgebase, const QString &event, const QString &comment) : d(new Private(internals, baseUrl, name, icon, person, friendV, message, achievement, activity, content, - fan, forum, knowledgebase, event, comment, QString())) + fan, forum, knowledgebase, event, comment, QString(), QString())) { } Provider::Provider(PlatformDependent *internals, const QUrl &baseUrl, const QString &name, const QUrl &icon, const QString &person, const QString &friendV, const QString &message, const QString &achievement, const QString &activity, const QString &content, const QString &fan, const QString &forum, const QString &knowledgebase, const QString &event, const QString &comment, const QString ®isterUrl) : d(new Private(internals, baseUrl, name, icon, person, friendV, message, achievement, activity, content, - fan, forum, knowledgebase, event, comment, registerUrl)) + fan, forum, knowledgebase, event, comment, registerUrl, QString())) +{ +} + +Provider::Provider(PlatformDependent *internals, const QUrl &baseUrl, const QString &name, const QUrl &icon, + const QString &person, const QString &friendV, const QString &message, const QString &achievement, + const QString &activity, const QString &content, const QString &fan, const QString &forum, + const QString &knowledgebase, const QString &event, const QString &comment, const QString ®isterUrl, + const QString &additionalAgentInformation) + : d(new Private(internals, baseUrl, name, icon, person, friendV, message, achievement, activity, content, + fan, forum, knowledgebase, event, comment, registerUrl, additionalAgentInformation)) { } @@ -248,6 +263,14 @@ d->m_internals->enableProvider(d->m_baseUrl, enabled); } +void Provider::setAdditionalAgentInformation(const QString& additionalInformation) { + d->m_additionalAgentInformation = additionalInformation; +} + +QString Provider::additionalAgentInformation() const { + return d->m_additionalAgentInformation; +} + QString Provider::name() const { return d->m_name; @@ -1603,6 +1626,18 @@ { QNetworkRequest request(url); request.setHeader(QNetworkRequest::ContentTypeHeader,QStringLiteral("application/x-www-form-urlencoded")); + + QString agentHeader; + if (QCoreApplication::instance()) { + agentHeader = QString::fromLocal8Bit("%1/%2").arg(QCoreApplication::instance()->applicationName(), QCoreApplication::instance()->applicationVersion()); + } else { + agentHeader = QString::fromLocal8Bit("Attica/%1").arg(QCoreApplication::instance()->applicationVersion()); + } + if (!d->m_additionalAgentInformation.isEmpty()) { + agentHeader = QString::fromLocal8Bit("%1 (+%2)").arg(agentHeader, d->m_additionalAgentInformation); + } + request.setHeader(QNetworkRequest::UserAgentHeader, agentHeader); + if (!d->m_credentialsUserName.isEmpty()) { request.setAttribute((QNetworkRequest::Attribute) BaseJob::UserAttribute, QVariant(d->m_credentialsUserName)); request.setAttribute((QNetworkRequest::Attribute) BaseJob::PasswordAttribute, QVariant(d->m_credentialsPassword));