/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include "TelepathyQt/debug-internal.h" #include namespace Tp { struct TP_QT_NO_EXPORT ProtocolParameter::Private : public QSharedData { Private(const ParamSpec &sp) : spec(sp), type(variantTypeFromDBusSignature(spec.signature)) { init(); } Private(const QString &name, const QString &dbusSignature, ConnMgrParamFlags flags, const QVariant &defaultValue) : type(variantTypeFromDBusSignature(dbusSignature)) { spec.name = name; spec.flags = flags; spec.signature = dbusSignature; spec.defaultValue = QDBusVariant(defaultValue); init(); } void init() { if (spec.flags & ConnMgrParamFlagHasDefault) { if (spec.defaultValue.variant() == QVariant::Invalid) { // flags contains HasDefault but no default value is passed, // lets warn and build a default value from signature warning() << "Building ProtocolParameter with flags containing ConnMgrParamFlagHasDefault" " and no default value, generating a dummy one from signature"; spec.defaultValue = QDBusVariant( parseValueWithDBusSignature(QString(), spec.signature)); } } else { if (spec.defaultValue.variant() != QVariant::Invalid) { // flags does not contain HasDefault but a default value is passed, // lets add HasDefault to flags debug() << "Building ProtocolParameter with flags not containing ConnMgrParamFlagHasDefault" " and a default value, updating flags to contain ConnMgrParamFlagHasDefault"; spec.flags |= ConnMgrParamFlagHasDefault; } } } ParamSpec spec; QVariant::Type type; }; /** * \class ProtocolParameter * \ingroup clientcm * \headerfile TelepathyQt/protocol-parameter.h * * \brief The ProtocolParameter class represents a Telepathy protocol parameter. */ ProtocolParameter::ProtocolParameter() { } ProtocolParameter::ProtocolParameter(const ParamSpec &spec) : mPriv(new Private(spec)) { } ProtocolParameter::ProtocolParameter(const QString &name, const QDBusSignature &dbusSignature, ConnMgrParamFlags flags, QVariant defaultValue) : mPriv(new Private(name, dbusSignature.signature(), flags, defaultValue)) { } ProtocolParameter::ProtocolParameter(const QString &name, const QString &dbusSignature, ConnMgrParamFlags flags, QVariant defaultValue) : mPriv(new Private(name, dbusSignature, flags, defaultValue)) { } ProtocolParameter::ProtocolParameter(const ProtocolParameter &other) : mPriv(other.mPriv) { } ProtocolParameter::~ProtocolParameter() { } ProtocolParameter &ProtocolParameter::operator=(const ProtocolParameter &other) { this->mPriv = other.mPriv; return *this; } bool ProtocolParameter::operator==(const ProtocolParameter &other) const { if (!isValid() || !other.isValid()) { if (!isValid() && !other.isValid()) { return true; } return false; } return (mPriv->spec.name == other.name()); } bool ProtocolParameter::operator==(const QString &name) const { if (!isValid()) { return false; } return (mPriv->spec.name == name); } bool ProtocolParameter::operator<(const Tp::ProtocolParameter& other) const { return mPriv->spec.name < other.name(); } QString ProtocolParameter::name() const { if (!isValid()) { return QString(); } return mPriv->spec.name; } QDBusSignature ProtocolParameter::dbusSignature() const { if (!isValid()) { return QDBusSignature(); } return QDBusSignature(mPriv->spec.signature); } QVariant::Type ProtocolParameter::type() const { if (!isValid()) { return QVariant::Invalid; } return mPriv->type; } QVariant ProtocolParameter::defaultValue() const { if (!isValid()) { return QVariant(); } return mPriv->spec.defaultValue.variant(); } bool ProtocolParameter::isRequired() const { if (!isValid()) { return false; } return mPriv->spec.flags & ConnMgrParamFlagRequired; } bool ProtocolParameter::isSecret() const { if (!isValid()) { return false; } return mPriv->spec.flags & ConnMgrParamFlagSecret; } bool ProtocolParameter::isRequiredForRegistration() const { if (!isValid()) { return false; } return mPriv->spec.flags & ConnMgrParamFlagRegister; } ParamSpec ProtocolParameter::bareParameter() const { if (!isValid()) { return ParamSpec(); } return mPriv->spec; } uint qHash(const ProtocolParameter& parameter) { return qHash(parameter.name()); } } // Tp