/**
* 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
namespace Tp
{
struct TP_QT_NO_EXPORT RequestableChannelClassSpec::Private : public QSharedData
{
Private(const RequestableChannelClass &rcc)
: rcc(rcc) {}
RequestableChannelClass rcc;
};
/**
* \class RequestableChannelClassSpec
* \ingroup wrappers
* \headerfile TelepathyQt/requestable-channel-class-spec.h
*
* \brief The RequestableChannelClassSpec class represents a Telepathy
* requestable channel class.
*/
RequestableChannelClassSpec::RequestableChannelClassSpec(const RequestableChannelClass &rcc)
: mPriv(new Private(rcc))
{
}
RequestableChannelClassSpec::RequestableChannelClassSpec()
{
}
RequestableChannelClassSpec::RequestableChannelClassSpec(const RequestableChannelClassSpec &other)
: mPriv(other.mPriv)
{
}
RequestableChannelClassSpec::~RequestableChannelClassSpec()
{
}
RequestableChannelClassSpec RequestableChannelClassSpec::textChat()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_TEXT);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
(uint) HandleTypeContact);
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::textChatroom()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_TEXT);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
(uint) HandleTypeRoom);
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::audioCall()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_CALL);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
(uint) HandleTypeContact);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"),
true);
rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudioName"));
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::audioCallWithVideoAllowed()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_CALL);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
(uint) HandleTypeContact);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"),
true);
rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudioName"));
rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"));
rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideoName"));
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::videoCall()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_CALL);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
(uint) HandleTypeContact);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"),
true);
rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideoName"));
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::videoCallWithAudioAllowed()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_CALL);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
(uint) HandleTypeContact);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"),
true);
rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideoName"));
rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"));
rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudioName"));
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::streamedMediaCall()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
(uint) HandleTypeContact);
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::streamedMediaAudioCall()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
(uint) HandleTypeContact);
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio"));
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::streamedMediaVideoCall()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
(uint) HandleTypeContact);
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo"));
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::streamedMediaVideoCallWithAudio()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
(uint) HandleTypeContact);
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio"));
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo"));
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::fileTransfer()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
(uint) HandleTypeContact);
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::conferenceTextChat()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_TEXT);
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels"));
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::conferenceTextChatWithInvitees()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_TEXT);
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels"));
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles"));
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::conferenceTextChatroom()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_TEXT);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
(uint) HandleTypeRoom);
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels"));
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::conferenceTextChatroomWithInvitees()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_TEXT);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
(uint) HandleTypeRoom);
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels"));
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles"));
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::conferenceStreamedMediaCall()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA);
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels"));
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::conferenceStreamedMediaCallWithInvitees()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA);
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels"));
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles"));
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::contactSearch()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH);
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::contactSearchWithSpecificServer()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH);
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Server"));
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::contactSearchWithLimit()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH);
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Limit"));
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::contactSearchWithSpecificServerAndLimit()
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH);
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Server"));
rcc.allowedProperties.append(
TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Limit"));
spec = RequestableChannelClassSpec(rcc);
}
return spec;
}
RequestableChannelClassSpec RequestableChannelClassSpec::dbusTube(const QString &serviceName)
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
(uint) HandleTypeContact);
spec = RequestableChannelClassSpec(rcc);
}
if (serviceName.isEmpty()) {
return spec;
}
RequestableChannelClass rcc = spec.bareClass();
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1String(".ServiceName"),
serviceName);
return RequestableChannelClassSpec(rcc);
}
RequestableChannelClassSpec RequestableChannelClassSpec::streamTube(const QString &service)
{
static RequestableChannelClassSpec spec;
if (!spec.isValid()) {
RequestableChannelClass rcc;
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE);
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
(uint) HandleTypeContact);
spec = RequestableChannelClassSpec(rcc);
}
if (service.isEmpty()) {
return spec;
}
RequestableChannelClass rcc = spec.bareClass();
rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QLatin1String(".Service"),
service);
return RequestableChannelClassSpec(rcc);
}
RequestableChannelClassSpec &RequestableChannelClassSpec::operator=(const RequestableChannelClassSpec &other)
{
this->mPriv = other.mPriv;
return *this;
}
bool RequestableChannelClassSpec::operator==(const RequestableChannelClassSpec &other) const
{
if (!isValid() || !other.isValid()) {
if (!isValid() && !other.isValid()) {
return true;
}
return false;
}
return mPriv->rcc == other.mPriv->rcc;
}
bool RequestableChannelClassSpec::supports(const RequestableChannelClassSpec &other) const
{
if (!isValid()) {
return false;
}
if (mPriv->rcc.fixedProperties == other.fixedProperties()) {
foreach (const QString &prop, other.allowedProperties()) {
if (!mPriv->rcc.allowedProperties.contains(prop)) {
return false;
}
}
return true;
}
return false;
}
QString RequestableChannelClassSpec::channelType() const
{
if (!isValid()) {
return QString();
}
return qdbus_cast(mPriv->rcc.fixedProperties.value(
TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")));
}
bool RequestableChannelClassSpec::hasTargetHandleType() const
{
if (!isValid()) {
return false;
}
return mPriv->rcc.fixedProperties.contains(
TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"));
}
HandleType RequestableChannelClassSpec::targetHandleType() const
{
if (!hasTargetHandleType()) {
return (HandleType) -1;
}
return (HandleType) qdbus_cast(mPriv->rcc.fixedProperties.value(
TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType")));
}
bool RequestableChannelClassSpec::hasFixedProperty(const QString &name) const
{
if (!isValid()) {
return false;
}
return mPriv->rcc.fixedProperties.contains(name);
}
QVariant RequestableChannelClassSpec::fixedProperty(const QString &name) const
{
if (!isValid()) {
return QVariant();
}
return mPriv->rcc.fixedProperties.value(name);
}
QVariantMap RequestableChannelClassSpec::fixedProperties() const
{
if (!isValid()) {
return QVariantMap();
}
return mPriv->rcc.fixedProperties;
}
bool RequestableChannelClassSpec::allowsProperty(const QString &name) const
{
if (!isValid()) {
return false;
}
return mPriv->rcc.allowedProperties.contains(name);
}
QStringList RequestableChannelClassSpec::allowedProperties() const
{
if (!isValid()) {
return QStringList();
}
return mPriv->rcc.allowedProperties;
}
RequestableChannelClass RequestableChannelClassSpec::bareClass() const
{
return isValid() ? mPriv->rcc : RequestableChannelClass();
}
/**
* \class RequestableChannelClassSpecList
* \ingroup wrappers
* \headerfile TelepathyQt/requestable-channel-class-spec.h
*
* \brief The RequestableChannelClassSpecList class represents a list of
* RequestableChannelClassSpec.
*/
} // Tp