/*
 * This file contains D-Bus client proxy classes generated by qt4-client-gen.py.
 *
 * This file can be distributed under the same terms as the specification from
 * which it was generated.
 */

#ifndef IN_TELEPATHY_QT4_HEADER
#error IN_TELEPATHY_QT4_HEADER
#endif

#include <TelepathyQt4/Types>

#include <QtGlobal>

#include <QString>
#include <QObject>
#include <QVariant>

#include <QDBusPendingReply>

#include <TelepathyQt4/AbstractInterface>
#include <TelepathyQt4/DBusProxy>
#include <TelepathyQt4/Global>

namespace Tp{
class PendingVariant;
class PendingOperation;
}

// FIXME: (API/ABI break) Remove definition of TELEPATHY_GNUC_DEPRECATED

// basically the same as GLib's G_GNUC_DEPRECATED
#ifndef TELEPATHY_GNUC_DEPRECATED
#   if defined(Q_CC_GNUC) && __GNUC__ >= 4
#       define TELEPATHY_GNUC_DEPRECATED __attribute__((__deprecated__))
#   else
#       define TELEPATHY_GNUC_DEPRECATED
#   endif
#endif
namespace Tp
{
namespace Client
{

/**
 * \class AccountInterface
 * \headerfile TelepathyQt4/account.h <TelepathyQt4/AccountManager>
 * \ingroup clientaccount
 *
 * Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Account."
 */
class TELEPATHY_QT4_EXPORT AccountInterface : public Tp::AbstractInterface
{
    Q_OBJECT

public:
    /**
     * Returns the name of the interface "org.freedesktop.Telepathy.Account", which this class
     * represents.
     *
     * \return The D-Bus interface name.
     */
    static inline const char *staticInterfaceName()
    {
        return "org.freedesktop.Telepathy.Account";
    }

    /**
     * Creates a AccountInterface associated with the given object on the session bus.
     *
     * \param busName Name of the service the object is on.
     * \param objectPath Path to the object on the service.
     * \param parent Passed to the parent class constructor.
     */
    AccountInterface(
        const QString& busName,
        const QString& objectPath,
        QObject* parent = 0
    );

    /**
     * Creates a AccountInterface associated with the given object on the given bus.
     *
     * \param connection The bus via which the object can be reached.
     * \param busName Name of the service the object is on.
     * \param objectPath Path to the object on the service.
     * \param parent Passed to the parent class constructor.
     */
    AccountInterface(
        const QDBusConnection& connection,
        const QString& busName,
        const QString& objectPath,
        QObject* parent = 0
    );

    /**
     * Creates a AccountInterface associated with the same object as the given proxy.
     *
     * \param proxy The proxy to use. It will also be the QObject::parent()
     *               for this object.
     */
    AccountInterface(Tp::DBusProxy *proxy);

    /**
     * Represents property "Interfaces" on the remote object.
     * 
     * A list of the extra interfaces provided by this account.
     */
    Q_PROPERTY(QStringList Interfaces READ _deprecated_Interfaces)

    /**
     * Getter for the remote object property "Interfaces".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyInterfaces() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED QStringList Interfaces() const
    {
        return _deprecated_Interfaces();
    }

private:
    inline QStringList _deprecated_Interfaces() const
    {
        return qvariant_cast<QStringList>(internalPropGet("Interfaces"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "Interfaces" of type QStringList.
     *
     * 
     * A list of the extra interfaces provided by this account.
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyInterfaces() const
    {
        return internalRequestProperty(QLatin1String("Interfaces"));
    }

    /**
     * Represents property "DisplayName" on the remote object.
     * 
     * The user-visible name of this account. This SHOULD be chosen by the 
     * user at account creation time. The account creation user interface is 
     * responsible for setting a reasonable default value in the user&apos;s 
     * locale; something like &quot;Jabber (bob@example.com)&quot; would be 
     * sensible. This approximately corresponds to &quot;display name&quot; in 
     * NMC 4.x and Decibel.
     */
    Q_PROPERTY(QString DisplayName READ _deprecated_DisplayName WRITE _deprecated_setDisplayName)

    /**
     * Getter for the remote object property "DisplayName".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyDisplayName() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED QString DisplayName() const
    {
        return _deprecated_DisplayName();
    }

private:
    inline QString _deprecated_DisplayName() const
    {
        return qvariant_cast<QString>(internalPropGet("DisplayName"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "DisplayName" of type QString.
     *
     * 
     * The user-visible name of this account. This SHOULD be chosen by the 
     * user at account creation time. The account creation user interface is 
     * responsible for setting a reasonable default value in the user&apos;s 
     * locale; something like &quot;Jabber (bob@example.com)&quot; would be 
     * sensible. This approximately corresponds to &quot;display name&quot; in 
     * NMC 4.x and Decibel.
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyDisplayName() const
    {
        return internalRequestProperty(QLatin1String("DisplayName"));
    }

    /**
     * Setter for the remote object property "DisplayName".
     *
     * Don't use this: it blocks the main loop.
     *
     * \param newValue The value to set the property to.
     */
    inline TELEPATHY_QT4_DEPRECATED void setDisplayName(const QString& newValue)
    {
        return _deprecated_setDisplayName(newValue);
    }

private:
    inline void _deprecated_setDisplayName(const QString& newValue)
    {
        internalPropSet("DisplayName", QVariant::fromValue(newValue));
    }
public:

    /**
     * Asynchronous setter for the remote object property "DisplayName" of type QString.
     *
     * 
     * The user-visible name of this account. This SHOULD be chosen by the 
     * user at account creation time. The account creation user interface is 
     * responsible for setting a reasonable default value in the user&apos;s 
     * locale; something like &quot;Jabber (bob@example.com)&quot; would be 
     * sensible. This approximately corresponds to &quot;display name&quot; in 
     * NMC 4.x and Decibel.
     *
     * \return A pending operation which will emit finished when the property has been
     *          set.
     */
    inline Tp::PendingOperation *setPropertyDisplayName(QString newValue)
    {
        return internalSetProperty(QLatin1String("DisplayName"), QVariant::fromValue(newValue));
    }

    /**
     * Represents property "Icon" on the remote object.
     * 
     * The name of an icon in the system&apos;s icon theme, such as 
     * &quot;im-msn&quot;, or the empty string to not specify an icon. If the 
     * icon is set to an empty string, the account manager or any client MAY 
     * derive a default icon, for instance from the protocol. This 
     * approximately corresponds to mc_profile_get_icon_name (or possibly 
     * mc_profile_get_branding_icon_name) in NMC 4.x. It&apos;s accessed via 
     * the account rather than the profile because we no longer have profiles 
     * as a core concept.
     */
    Q_PROPERTY(QString Icon READ _deprecated_Icon WRITE _deprecated_setIcon)

    /**
     * Getter for the remote object property "Icon".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyIcon() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED QString Icon() const
    {
        return _deprecated_Icon();
    }

private:
    inline QString _deprecated_Icon() const
    {
        return qvariant_cast<QString>(internalPropGet("Icon"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "Icon" of type QString.
     *
     * 
     * The name of an icon in the system&apos;s icon theme, such as 
     * &quot;im-msn&quot;, or the empty string to not specify an icon. If the 
     * icon is set to an empty string, the account manager or any client MAY 
     * derive a default icon, for instance from the protocol. This 
     * approximately corresponds to mc_profile_get_icon_name (or possibly 
     * mc_profile_get_branding_icon_name) in NMC 4.x. It&apos;s accessed via 
     * the account rather than the profile because we no longer have profiles 
     * as a core concept.
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyIcon() const
    {
        return internalRequestProperty(QLatin1String("Icon"));
    }

    /**
     * Setter for the remote object property "Icon".
     *
     * Don't use this: it blocks the main loop.
     *
     * \param newValue The value to set the property to.
     */
    inline TELEPATHY_QT4_DEPRECATED void setIcon(const QString& newValue)
    {
        return _deprecated_setIcon(newValue);
    }

private:
    inline void _deprecated_setIcon(const QString& newValue)
    {
        internalPropSet("Icon", QVariant::fromValue(newValue));
    }
public:

    /**
     * Asynchronous setter for the remote object property "Icon" of type QString.
     *
     * 
     * The name of an icon in the system&apos;s icon theme, such as 
     * &quot;im-msn&quot;, or the empty string to not specify an icon. If the 
     * icon is set to an empty string, the account manager or any client MAY 
     * derive a default icon, for instance from the protocol. This 
     * approximately corresponds to mc_profile_get_icon_name (or possibly 
     * mc_profile_get_branding_icon_name) in NMC 4.x. It&apos;s accessed via 
     * the account rather than the profile because we no longer have profiles 
     * as a core concept.
     *
     * \return A pending operation which will emit finished when the property has been
     *          set.
     */
    inline Tp::PendingOperation *setPropertyIcon(QString newValue)
    {
        return internalSetProperty(QLatin1String("Icon"), QVariant::fromValue(newValue));
    }

    /**
     * Represents property "Valid" on the remote object.
     * 
     * If true, this account is considered by the account manager to be 
     * complete and usable. If false, user action is required to make it 
     * usable, and it will never attempt to connect (for instance, this might 
     * be caused by the absence of a required parameter). For connection 
     * managers with a plugin architecture, like telepathy-haze, we have 
     * little or no control over the parameters offered; for platforms with 
     * package management, we have little or no control over the CMs offered. 
     * NMC 4.x would just pretend the account didn&apos;t exist in these 
     * circumstances, but silent data loss is bad, and UIs with CM-specific 
     * knowledge (or a user filling in newly-required parameters) might be 
     * able to rescue a broken account.
     */
    Q_PROPERTY(bool Valid READ _deprecated_Valid)

    /**
     * Getter for the remote object property "Valid".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyValid() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED bool Valid() const
    {
        return _deprecated_Valid();
    }

private:
    inline bool _deprecated_Valid() const
    {
        return qvariant_cast<bool>(internalPropGet("Valid"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "Valid" of type bool.
     *
     * 
     * If true, this account is considered by the account manager to be 
     * complete and usable. If false, user action is required to make it 
     * usable, and it will never attempt to connect (for instance, this might 
     * be caused by the absence of a required parameter). For connection 
     * managers with a plugin architecture, like telepathy-haze, we have 
     * little or no control over the parameters offered; for platforms with 
     * package management, we have little or no control over the CMs offered. 
     * NMC 4.x would just pretend the account didn&apos;t exist in these 
     * circumstances, but silent data loss is bad, and UIs with CM-specific 
     * knowledge (or a user filling in newly-required parameters) might be 
     * able to rescue a broken account.
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyValid() const
    {
        return internalRequestProperty(QLatin1String("Valid"));
    }

    /**
     * Represents property "Enabled" on the remote object.
     * 
     * <p>This property gives the users the possibility to prevent an account
     *   from being used. This flag does not change the validity of the
     *   account.</p>
     * 
     * <p>A disabled account can never be put online.</p>
     * 
     * <tp:rationale>
     *   <p>Use cases:</p>
     * 
     *   <ul>
     *     <li>user has two or more accounts capable of calling contact X, but
     *       he doesn't want the UI to prompt him everytime about which one he
     *       wants to use for the call. He can then disable all the equivalent
     *       accounts but one.</li>
     * 
     *     <li>There is some temporary server error and the user doesn't want
     *       to be be bother by error messages, or change the account
     *       configuration: temporarily disabling the account is quicker.</li>
     *   </ul>
     * </tp:rationale>
     * 
     * <p>The AccountManager SHOULD allow this property to be set on invalid
     *   accounts, but MUST NOT attempt to put invalid accounts online
     *   even if they become Enabled.</p>
     * 
     * <tp:rationale>
     *   <p>There doesn't seem to be any good reason not to allow this.</p>
     * </tp:rationale>
     */
    Q_PROPERTY(bool Enabled READ _deprecated_Enabled WRITE _deprecated_setEnabled)

    /**
     * Getter for the remote object property "Enabled".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyEnabled() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED bool Enabled() const
    {
        return _deprecated_Enabled();
    }

private:
    inline bool _deprecated_Enabled() const
    {
        return qvariant_cast<bool>(internalPropGet("Enabled"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "Enabled" of type bool.
     *
     * 
     * <p>This property gives the users the possibility to prevent an account
     *   from being used. This flag does not change the validity of the
     *   account.</p>
     * 
     * <p>A disabled account can never be put online.</p>
     * 
     * <tp:rationale>
     *   <p>Use cases:</p>
     * 
     *   <ul>
     *     <li>user has two or more accounts capable of calling contact X, but
     *       he doesn't want the UI to prompt him everytime about which one he
     *       wants to use for the call. He can then disable all the equivalent
     *       accounts but one.</li>
     * 
     *     <li>There is some temporary server error and the user doesn't want
     *       to be be bother by error messages, or change the account
     *       configuration: temporarily disabling the account is quicker.</li>
     *   </ul>
     * </tp:rationale>
     * 
     * <p>The AccountManager SHOULD allow this property to be set on invalid
     *   accounts, but MUST NOT attempt to put invalid accounts online
     *   even if they become Enabled.</p>
     * 
     * <tp:rationale>
     *   <p>There doesn't seem to be any good reason not to allow this.</p>
     * </tp:rationale>
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyEnabled() const
    {
        return internalRequestProperty(QLatin1String("Enabled"));
    }

    /**
     * Setter for the remote object property "Enabled".
     *
     * Don't use this: it blocks the main loop.
     *
     * \param newValue The value to set the property to.
     */
    inline TELEPATHY_QT4_DEPRECATED void setEnabled(bool newValue)
    {
        return _deprecated_setEnabled(newValue);
    }

private:
    inline void _deprecated_setEnabled(bool newValue)
    {
        internalPropSet("Enabled", QVariant::fromValue(newValue));
    }
public:

    /**
     * Asynchronous setter for the remote object property "Enabled" of type bool.
     *
     * 
     * <p>This property gives the users the possibility to prevent an account
     *   from being used. This flag does not change the validity of the
     *   account.</p>
     * 
     * <p>A disabled account can never be put online.</p>
     * 
     * <tp:rationale>
     *   <p>Use cases:</p>
     * 
     *   <ul>
     *     <li>user has two or more accounts capable of calling contact X, but
     *       he doesn't want the UI to prompt him everytime about which one he
     *       wants to use for the call. He can then disable all the equivalent
     *       accounts but one.</li>
     * 
     *     <li>There is some temporary server error and the user doesn't want
     *       to be be bother by error messages, or change the account
     *       configuration: temporarily disabling the account is quicker.</li>
     *   </ul>
     * </tp:rationale>
     * 
     * <p>The AccountManager SHOULD allow this property to be set on invalid
     *   accounts, but MUST NOT attempt to put invalid accounts online
     *   even if they become Enabled.</p>
     * 
     * <tp:rationale>
     *   <p>There doesn't seem to be any good reason not to allow this.</p>
     * </tp:rationale>
     *
     * \return A pending operation which will emit finished when the property has been
     *          set.
     */
    inline Tp::PendingOperation *setPropertyEnabled(bool newValue)
    {
        return internalSetProperty(QLatin1String("Enabled"), QVariant::fromValue(newValue));
    }

    /**
     * Represents property "Nickname" on the remote object.
     * 
     * The nickname to set on this account for display to other contacts, as 
     * set by the user. When the account becomes connected, the account 
     * manager SHOULD set this as the user&apos;s alias using SetAliases if 
     * appropriate. In a later specification revision, we plan to separate the 
     * concepts of a contact&apos;s nickname as set by themselves, and the 
     * local name for them in our contact list (a &quot;handle&quot; or 
     * &quot;pet name&quot; as described in XEP-0165 and its references). The 
     * terminology change from alias to nickname here is a step in that 
     * direction. This corresponds to NMC 4.x mc_account_get_alias.
     */
    Q_PROPERTY(QString Nickname READ _deprecated_Nickname WRITE _deprecated_setNickname)

    /**
     * Getter for the remote object property "Nickname".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyNickname() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED QString Nickname() const
    {
        return _deprecated_Nickname();
    }

private:
    inline QString _deprecated_Nickname() const
    {
        return qvariant_cast<QString>(internalPropGet("Nickname"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "Nickname" of type QString.
     *
     * 
     * The nickname to set on this account for display to other contacts, as 
     * set by the user. When the account becomes connected, the account 
     * manager SHOULD set this as the user&apos;s alias using SetAliases if 
     * appropriate. In a later specification revision, we plan to separate the 
     * concepts of a contact&apos;s nickname as set by themselves, and the 
     * local name for them in our contact list (a &quot;handle&quot; or 
     * &quot;pet name&quot; as described in XEP-0165 and its references). The 
     * terminology change from alias to nickname here is a step in that 
     * direction. This corresponds to NMC 4.x mc_account_get_alias.
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyNickname() const
    {
        return internalRequestProperty(QLatin1String("Nickname"));
    }

    /**
     * Setter for the remote object property "Nickname".
     *
     * Don't use this: it blocks the main loop.
     *
     * \param newValue The value to set the property to.
     */
    inline TELEPATHY_QT4_DEPRECATED void setNickname(const QString& newValue)
    {
        return _deprecated_setNickname(newValue);
    }

private:
    inline void _deprecated_setNickname(const QString& newValue)
    {
        internalPropSet("Nickname", QVariant::fromValue(newValue));
    }
public:

    /**
     * Asynchronous setter for the remote object property "Nickname" of type QString.
     *
     * 
     * The nickname to set on this account for display to other contacts, as 
     * set by the user. When the account becomes connected, the account 
     * manager SHOULD set this as the user&apos;s alias using SetAliases if 
     * appropriate. In a later specification revision, we plan to separate the 
     * concepts of a contact&apos;s nickname as set by themselves, and the 
     * local name for them in our contact list (a &quot;handle&quot; or 
     * &quot;pet name&quot; as described in XEP-0165 and its references). The 
     * terminology change from alias to nickname here is a step in that 
     * direction. This corresponds to NMC 4.x mc_account_get_alias.
     *
     * \return A pending operation which will emit finished when the property has been
     *          set.
     */
    inline Tp::PendingOperation *setPropertyNickname(QString newValue)
    {
        return internalSetProperty(QLatin1String("Nickname"), QVariant::fromValue(newValue));
    }

    /**
     * Represents property "Service" on the remote object.
     * 
     * <p>Some protocols, like XMPP and SIP, are used by various different
     *   user-recognised brands, such as <i>Google Talk</i> and <i>Ovi by
     *   Nokia</i>. On accounts for such services, this property SHOULD be
     *   set to a string describing the service, which MUST consist only of
     *   ASCII letters, numbers and hyphen/minus signs, and start with a
     *   letter (matching the requirements for <tp:type>Protocol</tp:type>).
     *   For the <tt>jabber</tt> protocol, one of the following service names
     *   should be used if possible:</p>
     * 
     * <ul>
     *   <li><tt>google-talk</tt> (for <a href="http://www.google.com/talk/">Google's IM service</a>)</li>
     *   <li><tt>ovi-chat</tt> (for <a href="http://www.ovi.com/">Ovi</a>'s IM
     *     service)</li>
     *   <li><tt>facebook</tt> (for <a href="http://www.facebook.com/sitetour/chat.php">Facebook's IM
     *     service</a>)</li>
     *   <li><tt>lj-talk</tt> (for <a href="http://www.livejournal.com/chat/">LiveJournal's IM
     *     service</a>)</li>
     * 
     * </ul>
     * 
     * <p>The <tp:member-ref>Icon</tp:member-ref> property SHOULD be set to a
     *   corresponding brand-specific icon name, if possible. In the future,
     *   this property may be used as an index into additional
     *   service-specific customizations. If this property is the empty string
     *   (or missing), the service is determined by the protocol name (either
     *   because this is a single-service protocol like <tt>msn</tt>, or
     *   because this is just a generic <tt>jabber</tt> or <tt>sip</tt>
     *   account without specific branding).</p>
     * 
     * <p>This property MAY be set, if appropriate, when calling
     *   <tp:dbus-ref namespace="org.freedesktop.Telepathy.AccountManager">CreateAccount</tp:dbus-ref>. Updating this property will fail on
     *   externally-stored accounts whose <tp:dbus-ref namespace="org.freedesktop.Telepathy.Account.Interface.Storage">StorageRestrictions</tp:dbus-ref> include
     *   <code>Cannot_Set_Service</code>.</p>
     */
    Q_PROPERTY(QString Service READ _deprecated_Service WRITE _deprecated_setService)

    /**
     * Getter for the remote object property "Service".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyService() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED QString Service() const
    {
        return _deprecated_Service();
    }

private:
    inline QString _deprecated_Service() const
    {
        return qvariant_cast<QString>(internalPropGet("Service"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "Service" of type QString.
     *
     * 
     * <p>Some protocols, like XMPP and SIP, are used by various different
     *   user-recognised brands, such as <i>Google Talk</i> and <i>Ovi by
     *   Nokia</i>. On accounts for such services, this property SHOULD be
     *   set to a string describing the service, which MUST consist only of
     *   ASCII letters, numbers and hyphen/minus signs, and start with a
     *   letter (matching the requirements for <tp:type>Protocol</tp:type>).
     *   For the <tt>jabber</tt> protocol, one of the following service names
     *   should be used if possible:</p>
     * 
     * <ul>
     *   <li><tt>google-talk</tt> (for <a href="http://www.google.com/talk/">Google's IM service</a>)</li>
     *   <li><tt>ovi-chat</tt> (for <a href="http://www.ovi.com/">Ovi</a>'s IM
     *     service)</li>
     *   <li><tt>facebook</tt> (for <a href="http://www.facebook.com/sitetour/chat.php">Facebook's IM
     *     service</a>)</li>
     *   <li><tt>lj-talk</tt> (for <a href="http://www.livejournal.com/chat/">LiveJournal's IM
     *     service</a>)</li>
     * 
     * </ul>
     * 
     * <p>The <tp:member-ref>Icon</tp:member-ref> property SHOULD be set to a
     *   corresponding brand-specific icon name, if possible. In the future,
     *   this property may be used as an index into additional
     *   service-specific customizations. If this property is the empty string
     *   (or missing), the service is determined by the protocol name (either
     *   because this is a single-service protocol like <tt>msn</tt>, or
     *   because this is just a generic <tt>jabber</tt> or <tt>sip</tt>
     *   account without specific branding).</p>
     * 
     * <p>This property MAY be set, if appropriate, when calling
     *   <tp:dbus-ref namespace="org.freedesktop.Telepathy.AccountManager">CreateAccount</tp:dbus-ref>. Updating this property will fail on
     *   externally-stored accounts whose <tp:dbus-ref namespace="org.freedesktop.Telepathy.Account.Interface.Storage">StorageRestrictions</tp:dbus-ref> include
     *   <code>Cannot_Set_Service</code>.</p>
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyService() const
    {
        return internalRequestProperty(QLatin1String("Service"));
    }

    /**
     * Setter for the remote object property "Service".
     *
     * Don't use this: it blocks the main loop.
     *
     * \param newValue The value to set the property to.
     */
    inline TELEPATHY_QT4_DEPRECATED void setService(const QString& newValue)
    {
        return _deprecated_setService(newValue);
    }

private:
    inline void _deprecated_setService(const QString& newValue)
    {
        internalPropSet("Service", QVariant::fromValue(newValue));
    }
public:

    /**
     * Asynchronous setter for the remote object property "Service" of type QString.
     *
     * 
     * <p>Some protocols, like XMPP and SIP, are used by various different
     *   user-recognised brands, such as <i>Google Talk</i> and <i>Ovi by
     *   Nokia</i>. On accounts for such services, this property SHOULD be
     *   set to a string describing the service, which MUST consist only of
     *   ASCII letters, numbers and hyphen/minus signs, and start with a
     *   letter (matching the requirements for <tp:type>Protocol</tp:type>).
     *   For the <tt>jabber</tt> protocol, one of the following service names
     *   should be used if possible:</p>
     * 
     * <ul>
     *   <li><tt>google-talk</tt> (for <a href="http://www.google.com/talk/">Google's IM service</a>)</li>
     *   <li><tt>ovi-chat</tt> (for <a href="http://www.ovi.com/">Ovi</a>'s IM
     *     service)</li>
     *   <li><tt>facebook</tt> (for <a href="http://www.facebook.com/sitetour/chat.php">Facebook's IM
     *     service</a>)</li>
     *   <li><tt>lj-talk</tt> (for <a href="http://www.livejournal.com/chat/">LiveJournal's IM
     *     service</a>)</li>
     * 
     * </ul>
     * 
     * <p>The <tp:member-ref>Icon</tp:member-ref> property SHOULD be set to a
     *   corresponding brand-specific icon name, if possible. In the future,
     *   this property may be used as an index into additional
     *   service-specific customizations. If this property is the empty string
     *   (or missing), the service is determined by the protocol name (either
     *   because this is a single-service protocol like <tt>msn</tt>, or
     *   because this is just a generic <tt>jabber</tt> or <tt>sip</tt>
     *   account without specific branding).</p>
     * 
     * <p>This property MAY be set, if appropriate, when calling
     *   <tp:dbus-ref namespace="org.freedesktop.Telepathy.AccountManager">CreateAccount</tp:dbus-ref>. Updating this property will fail on
     *   externally-stored accounts whose <tp:dbus-ref namespace="org.freedesktop.Telepathy.Account.Interface.Storage">StorageRestrictions</tp:dbus-ref> include
     *   <code>Cannot_Set_Service</code>.</p>
     *
     * \return A pending operation which will emit finished when the property has been
     *          set.
     */
    inline Tp::PendingOperation *setPropertyService(QString newValue)
    {
        return internalSetProperty(QLatin1String("Service"), QVariant::fromValue(newValue));
    }

    /**
     * Represents property "Parameters" on the remote object.
     * 
     * <p>A map from connection manager parameter names (as in the
     *   <tp:dbus-ref namespace="org.freedesktop.Telepathy">ConnectionManager</tp:dbus-ref>
     *   interface) to their values. This property includes
     *   only those parameters that are stored for this account, and SHOULD
     *   only include those parameters that the user has explicitly set.
     * </p>
     * <p>This property cannot be altered using Set() - use
     *   <tp:member-ref>UpdateParameters</tp:member-ref> instead.</p>
     */
    Q_PROPERTY(QVariantMap Parameters READ _deprecated_Parameters)

    /**
     * Getter for the remote object property "Parameters".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyParameters() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED QVariantMap Parameters() const
    {
        return _deprecated_Parameters();
    }

private:
    inline QVariantMap _deprecated_Parameters() const
    {
        return qvariant_cast<QVariantMap>(internalPropGet("Parameters"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "Parameters" of type QVariantMap.
     *
     * 
     * <p>A map from connection manager parameter names (as in the
     *   <tp:dbus-ref namespace="org.freedesktop.Telepathy">ConnectionManager</tp:dbus-ref>
     *   interface) to their values. This property includes
     *   only those parameters that are stored for this account, and SHOULD
     *   only include those parameters that the user has explicitly set.
     * </p>
     * <p>This property cannot be altered using Set() - use
     *   <tp:member-ref>UpdateParameters</tp:member-ref> instead.</p>
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyParameters() const
    {
        return internalRequestProperty(QLatin1String("Parameters"));
    }

    /**
     * Represents property "AutomaticPresence" on the remote object.
     * 
     * <p>The presence status that this account should have if it is brought
     *   online.</p>
     * 
     * <tp:rationale>
     *   In ITOS2007 and ITOS2008 this is a global preference, not visible
     *   on D-Bus (the &quot;default presence&quot;). &quot;Automatic presence&quot; better
     *   describes when it is used.
     * </tp:rationale>
     * 
     * <p>Setting this property MUST NOT actually change the account's
     *   status until the next time it is (re)connected for some reason.</p>
     * 
     * <p>The value of this property MUST be one that would be acceptable
     *   for <tp:member-ref>RequestedPresence</tp:member-ref>,
     *   with the additional restriction that the
     *   <tp:type>Connection_Presence_Type</tp:type> MUST NOT be Offline.</p>
     * 
     * <tp:rationale>
     *   <p>Otherwise, it would not be possible to use this presence to bring
     *     the account online for a channel request.</p>
     * </tp:rationale>
     */
    Q_PROPERTY(Tp::SimplePresence AutomaticPresence READ _deprecated_AutomaticPresence WRITE _deprecated_setAutomaticPresence)

    /**
     * Getter for the remote object property "AutomaticPresence".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyAutomaticPresence() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED Tp::SimplePresence AutomaticPresence() const
    {
        return _deprecated_AutomaticPresence();
    }

private:
    inline Tp::SimplePresence _deprecated_AutomaticPresence() const
    {
        return qvariant_cast<Tp::SimplePresence>(internalPropGet("AutomaticPresence"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "AutomaticPresence" of type Tp::SimplePresence.
     *
     * 
     * <p>The presence status that this account should have if it is brought
     *   online.</p>
     * 
     * <tp:rationale>
     *   In ITOS2007 and ITOS2008 this is a global preference, not visible
     *   on D-Bus (the &quot;default presence&quot;). &quot;Automatic presence&quot; better
     *   describes when it is used.
     * </tp:rationale>
     * 
     * <p>Setting this property MUST NOT actually change the account's
     *   status until the next time it is (re)connected for some reason.</p>
     * 
     * <p>The value of this property MUST be one that would be acceptable
     *   for <tp:member-ref>RequestedPresence</tp:member-ref>,
     *   with the additional restriction that the
     *   <tp:type>Connection_Presence_Type</tp:type> MUST NOT be Offline.</p>
     * 
     * <tp:rationale>
     *   <p>Otherwise, it would not be possible to use this presence to bring
     *     the account online for a channel request.</p>
     * </tp:rationale>
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyAutomaticPresence() const
    {
        return internalRequestProperty(QLatin1String("AutomaticPresence"));
    }

    /**
     * Setter for the remote object property "AutomaticPresence".
     *
     * Don't use this: it blocks the main loop.
     *
     * \param newValue The value to set the property to.
     */
    inline TELEPATHY_QT4_DEPRECATED void setAutomaticPresence(const Tp::SimplePresence& newValue)
    {
        return _deprecated_setAutomaticPresence(newValue);
    }

private:
    inline void _deprecated_setAutomaticPresence(const Tp::SimplePresence& newValue)
    {
        internalPropSet("AutomaticPresence", QVariant::fromValue(newValue));
    }
public:

    /**
     * Asynchronous setter for the remote object property "AutomaticPresence" of type Tp::SimplePresence.
     *
     * 
     * <p>The presence status that this account should have if it is brought
     *   online.</p>
     * 
     * <tp:rationale>
     *   In ITOS2007 and ITOS2008 this is a global preference, not visible
     *   on D-Bus (the &quot;default presence&quot;). &quot;Automatic presence&quot; better
     *   describes when it is used.
     * </tp:rationale>
     * 
     * <p>Setting this property MUST NOT actually change the account's
     *   status until the next time it is (re)connected for some reason.</p>
     * 
     * <p>The value of this property MUST be one that would be acceptable
     *   for <tp:member-ref>RequestedPresence</tp:member-ref>,
     *   with the additional restriction that the
     *   <tp:type>Connection_Presence_Type</tp:type> MUST NOT be Offline.</p>
     * 
     * <tp:rationale>
     *   <p>Otherwise, it would not be possible to use this presence to bring
     *     the account online for a channel request.</p>
     * </tp:rationale>
     *
     * \return A pending operation which will emit finished when the property has been
     *          set.
     */
    inline Tp::PendingOperation *setPropertyAutomaticPresence(Tp::SimplePresence newValue)
    {
        return internalSetProperty(QLatin1String("AutomaticPresence"), QVariant::fromValue(newValue));
    }

    /**
     * Represents property "ConnectAutomatically" on the remote object.
     * 
     * If true, the account manager SHOULD attempt to put this account online 
     * with the AutomaticPresence whenever possible (in the base Account 
     * interface this is deliberately left vague). If false, it MUST NOT put 
     * the account online automatically in response to, for instance, 
     * connectivity changes, but SHOULD still put the account online with the 
     * AutomaticPresence if requested by the user (for instance, if the user 
     * tries to start a conversation using this account). This approximately 
     * corresponds to NMC 4.x &quot;enabled&quot; and Decibel 
     * &quot;autoreconnect&quot;.
     */
    Q_PROPERTY(bool ConnectAutomatically READ _deprecated_ConnectAutomatically WRITE _deprecated_setConnectAutomatically)

    /**
     * Getter for the remote object property "ConnectAutomatically".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyConnectAutomatically() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED bool ConnectAutomatically() const
    {
        return _deprecated_ConnectAutomatically();
    }

private:
    inline bool _deprecated_ConnectAutomatically() const
    {
        return qvariant_cast<bool>(internalPropGet("ConnectAutomatically"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "ConnectAutomatically" of type bool.
     *
     * 
     * If true, the account manager SHOULD attempt to put this account online 
     * with the AutomaticPresence whenever possible (in the base Account 
     * interface this is deliberately left vague). If false, it MUST NOT put 
     * the account online automatically in response to, for instance, 
     * connectivity changes, but SHOULD still put the account online with the 
     * AutomaticPresence if requested by the user (for instance, if the user 
     * tries to start a conversation using this account). This approximately 
     * corresponds to NMC 4.x &quot;enabled&quot; and Decibel 
     * &quot;autoreconnect&quot;.
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyConnectAutomatically() const
    {
        return internalRequestProperty(QLatin1String("ConnectAutomatically"));
    }

    /**
     * Setter for the remote object property "ConnectAutomatically".
     *
     * Don't use this: it blocks the main loop.
     *
     * \param newValue The value to set the property to.
     */
    inline TELEPATHY_QT4_DEPRECATED void setConnectAutomatically(bool newValue)
    {
        return _deprecated_setConnectAutomatically(newValue);
    }

private:
    inline void _deprecated_setConnectAutomatically(bool newValue)
    {
        internalPropSet("ConnectAutomatically", QVariant::fromValue(newValue));
    }
public:

    /**
     * Asynchronous setter for the remote object property "ConnectAutomatically" of type bool.
     *
     * 
     * If true, the account manager SHOULD attempt to put this account online 
     * with the AutomaticPresence whenever possible (in the base Account 
     * interface this is deliberately left vague). If false, it MUST NOT put 
     * the account online automatically in response to, for instance, 
     * connectivity changes, but SHOULD still put the account online with the 
     * AutomaticPresence if requested by the user (for instance, if the user 
     * tries to start a conversation using this account). This approximately 
     * corresponds to NMC 4.x &quot;enabled&quot; and Decibel 
     * &quot;autoreconnect&quot;.
     *
     * \return A pending operation which will emit finished when the property has been
     *          set.
     */
    inline Tp::PendingOperation *setPropertyConnectAutomatically(bool newValue)
    {
        return internalSetProperty(QLatin1String("ConnectAutomatically"), QVariant::fromValue(newValue));
    }

    /**
     * Represents property "Connection" on the remote object.
     * 
     * <p>Either the object path of the <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection</tp:dbus-ref> to
     * this account, or the special value <code>'/'</code> if there is no
     * connection.</p>
     * 
     * <p>If this object path is not '/', the Connection's well-known bus
     *   name can be derived from this object path by removing the first '/'
     *   and replacing subsequent '/' characters with '.'.</p>
     * 
     * <tp:rationale>
     *   Object paths aren't nullable, so we can't use an empty string.
     * </tp:rationale>
     */
    Q_PROPERTY(QDBusObjectPath Connection READ _deprecated_Connection)

    /**
     * Getter for the remote object property "Connection".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyConnection() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED QDBusObjectPath Connection() const
    {
        return _deprecated_Connection();
    }

private:
    inline QDBusObjectPath _deprecated_Connection() const
    {
        return qvariant_cast<QDBusObjectPath>(internalPropGet("Connection"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "Connection" of type QDBusObjectPath.
     *
     * 
     * <p>Either the object path of the <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection</tp:dbus-ref> to
     * this account, or the special value <code>'/'</code> if there is no
     * connection.</p>
     * 
     * <p>If this object path is not '/', the Connection's well-known bus
     *   name can be derived from this object path by removing the first '/'
     *   and replacing subsequent '/' characters with '.'.</p>
     * 
     * <tp:rationale>
     *   Object paths aren't nullable, so we can't use an empty string.
     * </tp:rationale>
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyConnection() const
    {
        return internalRequestProperty(QLatin1String("Connection"));
    }

    /**
     * Represents property "ConnectionStatus" on the remote object.
     * 
     * If the Connection property is non-empty, the status of that connection. 
     * If the Connection property is the empty string, this property may 
     * either be Disconnected (indicating that the account manager is not 
     * attempting to bring it online), or Connecting (indicating that the 
     * account manager is attempting to connect). The account manager is 
     * expected to set this by observing signals from the Connection. If the 
     * AM is doing some sort of backoff/delay on reconnection attempts, the 
     * account&apos;s status is conceptually &quot;Connecting&quot; even 
     * though there is no Connection. This vaguely corresponds to 
     * GetCurrentStatus in NMC 4.x.
     */
    Q_PROPERTY(uint ConnectionStatus READ _deprecated_ConnectionStatus)

    /**
     * Getter for the remote object property "ConnectionStatus".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyConnectionStatus() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED uint ConnectionStatus() const
    {
        return _deprecated_ConnectionStatus();
    }

private:
    inline uint _deprecated_ConnectionStatus() const
    {
        return qvariant_cast<uint>(internalPropGet("ConnectionStatus"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "ConnectionStatus" of type uint.
     *
     * 
     * If the Connection property is non-empty, the status of that connection. 
     * If the Connection property is the empty string, this property may 
     * either be Disconnected (indicating that the account manager is not 
     * attempting to bring it online), or Connecting (indicating that the 
     * account manager is attempting to connect). The account manager is 
     * expected to set this by observing signals from the Connection. If the 
     * AM is doing some sort of backoff/delay on reconnection attempts, the 
     * account&apos;s status is conceptually &quot;Connecting&quot; even 
     * though there is no Connection. This vaguely corresponds to 
     * GetCurrentStatus in NMC 4.x.
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyConnectionStatus() const
    {
        return internalRequestProperty(QLatin1String("ConnectionStatus"));
    }

    /**
     * Represents property "ConnectionStatusReason" on the remote object.
     * 
     * The reason for the last change to ConnectionStatus. The account manager 
     * is expected to set this by observing signals from the Connection. If 
     * you weren&apos;t watching the Connection at the time it failed, you 
     * can&apos;t tell why - unless the AM can tell you. This is part of 
     * GetCurrentStatus in NMC 4.x.
     */
    Q_PROPERTY(uint ConnectionStatusReason READ _deprecated_ConnectionStatusReason)

    /**
     * Getter for the remote object property "ConnectionStatusReason".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyConnectionStatusReason() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED uint ConnectionStatusReason() const
    {
        return _deprecated_ConnectionStatusReason();
    }

private:
    inline uint _deprecated_ConnectionStatusReason() const
    {
        return qvariant_cast<uint>(internalPropGet("ConnectionStatusReason"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "ConnectionStatusReason" of type uint.
     *
     * 
     * The reason for the last change to ConnectionStatus. The account manager 
     * is expected to set this by observing signals from the Connection. If 
     * you weren&apos;t watching the Connection at the time it failed, you 
     * can&apos;t tell why - unless the AM can tell you. This is part of 
     * GetCurrentStatus in NMC 4.x.
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyConnectionStatusReason() const
    {
        return internalRequestProperty(QLatin1String("ConnectionStatusReason"));
    }

    /**
     * Represents property "ConnectionError" on the remote object.
     * 
     * <p>If the last connection to this account failed with an error,
     *   the D-Bus error name of that error; otherwise, the empty string.
     *   The account manager is expected to set this by observing the
     *   <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.ConnectionError</tp:dbus-ref> and
     *   <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.StatusChanged</tp:dbus-ref>
     *   signals.</p>
     * 
     * <p>If ConnectionError is received before the connection disconnects,
     *   its first argument should be used to set this property;
     *   otherwise, the Reason argument of StatusChanged should be converted
     *   to a suitable D-Bus error name.</p>
     * 
     * <p>Whenever the Connection connects successfully, this property should
     *   be reset to the empty string.</p>
     * 
     * <tp:rationale>
     *   <p>This combines the state-recoverability of
     *     <tp:member-ref>ConnectionStatusReason</tp:member-ref> with the
     *     extensibility of Connection.ConnectionError.</p>
     * </tp:rationale>
     */
    Q_PROPERTY(QString ConnectionError READ _deprecated_ConnectionError)

    /**
     * Getter for the remote object property "ConnectionError".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyConnectionError() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED QString ConnectionError() const
    {
        return _deprecated_ConnectionError();
    }

private:
    inline QString _deprecated_ConnectionError() const
    {
        return qvariant_cast<QString>(internalPropGet("ConnectionError"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "ConnectionError" of type QString.
     *
     * 
     * <p>If the last connection to this account failed with an error,
     *   the D-Bus error name of that error; otherwise, the empty string.
     *   The account manager is expected to set this by observing the
     *   <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.ConnectionError</tp:dbus-ref> and
     *   <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.StatusChanged</tp:dbus-ref>
     *   signals.</p>
     * 
     * <p>If ConnectionError is received before the connection disconnects,
     *   its first argument should be used to set this property;
     *   otherwise, the Reason argument of StatusChanged should be converted
     *   to a suitable D-Bus error name.</p>
     * 
     * <p>Whenever the Connection connects successfully, this property should
     *   be reset to the empty string.</p>
     * 
     * <tp:rationale>
     *   <p>This combines the state-recoverability of
     *     <tp:member-ref>ConnectionStatusReason</tp:member-ref> with the
     *     extensibility of Connection.ConnectionError.</p>
     * </tp:rationale>
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyConnectionError() const
    {
        return internalRequestProperty(QLatin1String("ConnectionError"));
    }

    /**
     * Represents property "ConnectionErrorDetails" on the remote object.
     * 
     * <p>If the last connection to this account failed with an error,
     *   a mapping representing any additional information about the last
     *   disconnection; otherwise, the empty map. The keys and values are
     *   the same as for the second argument of
     *   <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.ConnectionError</tp:dbus-ref>.</p>
     * 
     * <p>Whenever the Connection connects successfully, this property should
     *   be reset to the empty map.</p>
     * 
     * <tp:rationale>
     *   <p>This combines the state-recoverability of
     *     <tp:member-ref>ConnectionStatusReason</tp:member-ref> with the
     *     extensibility of Connection.ConnectionError.</p>
     * </tp:rationale>
     */
    Q_PROPERTY(QVariantMap ConnectionErrorDetails READ _deprecated_ConnectionErrorDetails)

    /**
     * Getter for the remote object property "ConnectionErrorDetails".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyConnectionErrorDetails() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED QVariantMap ConnectionErrorDetails() const
    {
        return _deprecated_ConnectionErrorDetails();
    }

private:
    inline QVariantMap _deprecated_ConnectionErrorDetails() const
    {
        return qvariant_cast<QVariantMap>(internalPropGet("ConnectionErrorDetails"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "ConnectionErrorDetails" of type QVariantMap.
     *
     * 
     * <p>If the last connection to this account failed with an error,
     *   a mapping representing any additional information about the last
     *   disconnection; otherwise, the empty map. The keys and values are
     *   the same as for the second argument of
     *   <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection.ConnectionError</tp:dbus-ref>.</p>
     * 
     * <p>Whenever the Connection connects successfully, this property should
     *   be reset to the empty map.</p>
     * 
     * <tp:rationale>
     *   <p>This combines the state-recoverability of
     *     <tp:member-ref>ConnectionStatusReason</tp:member-ref> with the
     *     extensibility of Connection.ConnectionError.</p>
     * </tp:rationale>
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyConnectionErrorDetails() const
    {
        return internalRequestProperty(QLatin1String("ConnectionErrorDetails"));
    }

    /**
     * Represents property "CurrentPresence" on the remote object.
     * 
     * The actual presence. If the connection is not online, the 
     * Connection_Presence_Type SHOULD be Connection_Presence_Type_Offline. If 
     * the connection is online but does not support the SimplePresence 
     * interface, the type SHOULD be Connection_Presence_Type_Unset. The 
     * account manager is expected to set this by observing signals from the 
     * Connection. This corresponds to GetPresenceActual in NMC 4.x.
     */
    Q_PROPERTY(Tp::SimplePresence CurrentPresence READ _deprecated_CurrentPresence)

    /**
     * Getter for the remote object property "CurrentPresence".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyCurrentPresence() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED Tp::SimplePresence CurrentPresence() const
    {
        return _deprecated_CurrentPresence();
    }

private:
    inline Tp::SimplePresence _deprecated_CurrentPresence() const
    {
        return qvariant_cast<Tp::SimplePresence>(internalPropGet("CurrentPresence"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "CurrentPresence" of type Tp::SimplePresence.
     *
     * 
     * The actual presence. If the connection is not online, the 
     * Connection_Presence_Type SHOULD be Connection_Presence_Type_Offline. If 
     * the connection is online but does not support the SimplePresence 
     * interface, the type SHOULD be Connection_Presence_Type_Unset. The 
     * account manager is expected to set this by observing signals from the 
     * Connection. This corresponds to GetPresenceActual in NMC 4.x.
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyCurrentPresence() const
    {
        return internalRequestProperty(QLatin1String("CurrentPresence"));
    }

    /**
     * Represents property "RequestedPresence" on the remote object.
     * 
     * <p>The requested presence for this account. When this is changed, the
     * account manager should attempt to manipulate the connection manager to
     * make <tp:member-ref>CurrentPresence</tp:member-ref> match
     * <tp:member-ref>RequestedPresence</tp:member-ref> as closely as
     *   possible. It should not be saved to any sort of persistent
     *   storage.</p>
     * 
     * <p>When the account manager automatically connects an account,
     *   it must signal this by setting the RequestedPresence to the same
     *   thing as the <tp:member-ref>AutomaticPresence</tp:member-ref>.</p>
     * 
     * <tp:rationale>
     *   This corresponds to e.g. GetPresence and GetPresenceMessage
     *   in NMC 4.x.
     * </tp:rationale>
     * 
     * <p>The <tp:type>Connection_Presence_Type</tp:type> in this property
     *   MUST NOT be Unset, Unknown or Error.</p>
     * 
     * <tp:rationale>
     *   <p>Requesting those presence types doesn't make sense.</p>
     * </tp:rationale>
     */
    Q_PROPERTY(Tp::SimplePresence RequestedPresence READ _deprecated_RequestedPresence WRITE _deprecated_setRequestedPresence)

    /**
     * Getter for the remote object property "RequestedPresence".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyRequestedPresence() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED Tp::SimplePresence RequestedPresence() const
    {
        return _deprecated_RequestedPresence();
    }

private:
    inline Tp::SimplePresence _deprecated_RequestedPresence() const
    {
        return qvariant_cast<Tp::SimplePresence>(internalPropGet("RequestedPresence"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "RequestedPresence" of type Tp::SimplePresence.
     *
     * 
     * <p>The requested presence for this account. When this is changed, the
     * account manager should attempt to manipulate the connection manager to
     * make <tp:member-ref>CurrentPresence</tp:member-ref> match
     * <tp:member-ref>RequestedPresence</tp:member-ref> as closely as
     *   possible. It should not be saved to any sort of persistent
     *   storage.</p>
     * 
     * <p>When the account manager automatically connects an account,
     *   it must signal this by setting the RequestedPresence to the same
     *   thing as the <tp:member-ref>AutomaticPresence</tp:member-ref>.</p>
     * 
     * <tp:rationale>
     *   This corresponds to e.g. GetPresence and GetPresenceMessage
     *   in NMC 4.x.
     * </tp:rationale>
     * 
     * <p>The <tp:type>Connection_Presence_Type</tp:type> in this property
     *   MUST NOT be Unset, Unknown or Error.</p>
     * 
     * <tp:rationale>
     *   <p>Requesting those presence types doesn't make sense.</p>
     * </tp:rationale>
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyRequestedPresence() const
    {
        return internalRequestProperty(QLatin1String("RequestedPresence"));
    }

    /**
     * Setter for the remote object property "RequestedPresence".
     *
     * Don't use this: it blocks the main loop.
     *
     * \param newValue The value to set the property to.
     */
    inline TELEPATHY_QT4_DEPRECATED void setRequestedPresence(const Tp::SimplePresence& newValue)
    {
        return _deprecated_setRequestedPresence(newValue);
    }

private:
    inline void _deprecated_setRequestedPresence(const Tp::SimplePresence& newValue)
    {
        internalPropSet("RequestedPresence", QVariant::fromValue(newValue));
    }
public:

    /**
     * Asynchronous setter for the remote object property "RequestedPresence" of type Tp::SimplePresence.
     *
     * 
     * <p>The requested presence for this account. When this is changed, the
     * account manager should attempt to manipulate the connection manager to
     * make <tp:member-ref>CurrentPresence</tp:member-ref> match
     * <tp:member-ref>RequestedPresence</tp:member-ref> as closely as
     *   possible. It should not be saved to any sort of persistent
     *   storage.</p>
     * 
     * <p>When the account manager automatically connects an account,
     *   it must signal this by setting the RequestedPresence to the same
     *   thing as the <tp:member-ref>AutomaticPresence</tp:member-ref>.</p>
     * 
     * <tp:rationale>
     *   This corresponds to e.g. GetPresence and GetPresenceMessage
     *   in NMC 4.x.
     * </tp:rationale>
     * 
     * <p>The <tp:type>Connection_Presence_Type</tp:type> in this property
     *   MUST NOT be Unset, Unknown or Error.</p>
     * 
     * <tp:rationale>
     *   <p>Requesting those presence types doesn't make sense.</p>
     * </tp:rationale>
     *
     * \return A pending operation which will emit finished when the property has been
     *          set.
     */
    inline Tp::PendingOperation *setPropertyRequestedPresence(Tp::SimplePresence newValue)
    {
        return internalSetProperty(QLatin1String("RequestedPresence"), QVariant::fromValue(newValue));
    }

    /**
     * Represents property "ChangingPresence" on the remote object.
     * 
     * <p>If true, a change to the presence of this account is
     * in progress.</p>
     * 
     * <p>Whenever <tp:member-ref>RequestedPresence</tp:member-ref> is set on
     * an account that could go online, or whenever an account with a
     * non-offline <tp:member-ref>RequestedPresence</tp:member-ref> becomes
     * able to go online (for instance because
     * <tp:member-ref>Enabled</tp:member-ref> or
     * <tp:member-ref>Valid</tp:member-ref> changes to True),
     * ChangingPresence MUST change to True, and the two property changes MUST
     * be emitted in the same
     * <tp:member-ref>AccountPropertyChanged</tp:member-ref> signal, before the
     * Set method returns.</p>
     * 
     * <p>When the account manager succeeds or fails in changing the presence,
     * or the connection disconnects due to an error, ChangingPresence MUST
     * change to False as part of the same
     * <tp:member-ref>AccountPropertyChanged</tp:member-ref> signal.</p>
     * 
     * <tp:rationale>
     *   <p>This allows UIs to indicate that a presence change is in progress
     *   or has finished, even if the change was initiated by a different
     *   UI.</p>
     * 
     *   <p>For instance, Maemo 5 and Empathy indicate a presence change by
     *   having the presence indicator alternate between the
     *   <tp:member-ref>RequestedPresence</tp:member-ref>
     *   and the <tp:member-ref>CurrentPresence</tp:member-ref>; they should
     *   start blinking when ChangingPresence becomes true, and stop when it
     *   becomes false.</p>
     * </tp:rationale>
     */
    Q_PROPERTY(bool ChangingPresence READ _deprecated_ChangingPresence)

    /**
     * Getter for the remote object property "ChangingPresence".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyChangingPresence() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED bool ChangingPresence() const
    {
        return _deprecated_ChangingPresence();
    }

private:
    inline bool _deprecated_ChangingPresence() const
    {
        return qvariant_cast<bool>(internalPropGet("ChangingPresence"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "ChangingPresence" of type bool.
     *
     * 
     * <p>If true, a change to the presence of this account is
     * in progress.</p>
     * 
     * <p>Whenever <tp:member-ref>RequestedPresence</tp:member-ref> is set on
     * an account that could go online, or whenever an account with a
     * non-offline <tp:member-ref>RequestedPresence</tp:member-ref> becomes
     * able to go online (for instance because
     * <tp:member-ref>Enabled</tp:member-ref> or
     * <tp:member-ref>Valid</tp:member-ref> changes to True),
     * ChangingPresence MUST change to True, and the two property changes MUST
     * be emitted in the same
     * <tp:member-ref>AccountPropertyChanged</tp:member-ref> signal, before the
     * Set method returns.</p>
     * 
     * <p>When the account manager succeeds or fails in changing the presence,
     * or the connection disconnects due to an error, ChangingPresence MUST
     * change to False as part of the same
     * <tp:member-ref>AccountPropertyChanged</tp:member-ref> signal.</p>
     * 
     * <tp:rationale>
     *   <p>This allows UIs to indicate that a presence change is in progress
     *   or has finished, even if the change was initiated by a different
     *   UI.</p>
     * 
     *   <p>For instance, Maemo 5 and Empathy indicate a presence change by
     *   having the presence indicator alternate between the
     *   <tp:member-ref>RequestedPresence</tp:member-ref>
     *   and the <tp:member-ref>CurrentPresence</tp:member-ref>; they should
     *   start blinking when ChangingPresence becomes true, and stop when it
     *   becomes false.</p>
     * </tp:rationale>
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyChangingPresence() const
    {
        return internalRequestProperty(QLatin1String("ChangingPresence"));
    }

    /**
     * Represents property "NormalizedName" on the remote object.
     * 
     * <p>The normalized user ID of the local user on this account (i.e. the
     *   string returned when the <tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection">InspectHandles</tp:dbus-ref>
     *   method is called on the
     *   result of <tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection">GetSelfHandle</tp:dbus-ref>
     *   for an active connection).</p>
     * 
     * <p>It is unspecified whether this user ID is globally unique.</p>
     * 
     * <tp:rationale>
     *   <p>As currently implemented, IRC user IDs are only unique within
     *     the same IRCnet. On some saner protocols, the user ID includes a
     *     DNS name which provides global uniqueness.</p>
     * </tp:rationale>
     * 
     * <p>If this value is not known yet (which will always be the case for
     *   accounts that have never been online), it will be an empty
     *   string.</p>
     * 
     * <p>It is possible that this value will change if the connection
     *   manager's normalization algorithm changes, although this SHOULD
     *   be avoided.</p>
     * 
     * <tp:rationale>
     *   <p>It's not always completely clear what normalization algorithm
     *     should be used; for instance, in Gabble, we currently use JIDs,
     *     but it would also have been reasonable to use xmpp URIs.</p>
     * </tp:rationale>
     */
    Q_PROPERTY(QString NormalizedName READ _deprecated_NormalizedName)

    /**
     * Getter for the remote object property "NormalizedName".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyNormalizedName() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED QString NormalizedName() const
    {
        return _deprecated_NormalizedName();
    }

private:
    inline QString _deprecated_NormalizedName() const
    {
        return qvariant_cast<QString>(internalPropGet("NormalizedName"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "NormalizedName" of type QString.
     *
     * 
     * <p>The normalized user ID of the local user on this account (i.e. the
     *   string returned when the <tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection">InspectHandles</tp:dbus-ref>
     *   method is called on the
     *   result of <tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection">GetSelfHandle</tp:dbus-ref>
     *   for an active connection).</p>
     * 
     * <p>It is unspecified whether this user ID is globally unique.</p>
     * 
     * <tp:rationale>
     *   <p>As currently implemented, IRC user IDs are only unique within
     *     the same IRCnet. On some saner protocols, the user ID includes a
     *     DNS name which provides global uniqueness.</p>
     * </tp:rationale>
     * 
     * <p>If this value is not known yet (which will always be the case for
     *   accounts that have never been online), it will be an empty
     *   string.</p>
     * 
     * <p>It is possible that this value will change if the connection
     *   manager's normalization algorithm changes, although this SHOULD
     *   be avoided.</p>
     * 
     * <tp:rationale>
     *   <p>It's not always completely clear what normalization algorithm
     *     should be used; for instance, in Gabble, we currently use JIDs,
     *     but it would also have been reasonable to use xmpp URIs.</p>
     * </tp:rationale>
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyNormalizedName() const
    {
        return internalRequestProperty(QLatin1String("NormalizedName"));
    }

    /**
     * Represents property "HasBeenOnline" on the remote object.
     * 
     * If true, this account has successfully been put online at some point in 
     * the past. UIs could apply a policy that the &apos;account&apos; 
     * parameter can only be edited in accounts that have never been online, 
     * or that ConnectAutomatically cannot be set on such accounts. The 
     * account manager should not enforce such policies, but it can expose 
     * enough information to UIs that the UI can decide what to do.
     */
    Q_PROPERTY(bool HasBeenOnline READ _deprecated_HasBeenOnline)

    /**
     * Getter for the remote object property "HasBeenOnline".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyHasBeenOnline() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED bool HasBeenOnline() const
    {
        return _deprecated_HasBeenOnline();
    }

private:
    inline bool _deprecated_HasBeenOnline() const
    {
        return qvariant_cast<bool>(internalPropGet("HasBeenOnline"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "HasBeenOnline" of type bool.
     *
     * 
     * If true, this account has successfully been put online at some point in 
     * the past. UIs could apply a policy that the &apos;account&apos; 
     * parameter can only be edited in accounts that have never been online, 
     * or that ConnectAutomatically cannot be set on such accounts. The 
     * account manager should not enforce such policies, but it can expose 
     * enough information to UIs that the UI can decide what to do.
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyHasBeenOnline() const
    {
        return internalRequestProperty(QLatin1String("HasBeenOnline"));
    }

    /**
     * Request all of the DBus properties on the interface.
     *
     * \return A pending variant map which will emit finished when the properties have
     *          been retrieved.
     */
    Tp::PendingVariantMap *requestAllProperties() const
    {
        return internalRequestAllProperties();
    }

public Q_SLOTS:
    /**
     * Begins a call to the D-Bus method "Remove" on the remote object.
     * 
     * Delete the account.
     */
    inline QDBusPendingReply<> Remove()
    {
        if (!invalidationReason().isEmpty()) {
            return QDBusPendingReply<>(QDBusMessage::createError(
                invalidationReason(),
                invalidationMessage()
            ));
        }

        return asyncCall(QLatin1String("Remove"));
    }

    /**
     * Begins a call to the D-Bus method "UpdateParameters" on the remote object.
     * 
     * <p>Change the value of the <tp:member-ref>Parameters</tp:member-ref>
     *   property.</p>
     * 
     * <p>If any of the changed parameters'
     *   <tp:type>Conn_Mgr_Param_Flags</tp:type> include
     *   <code>DBus_Property</code>, the change will be applied immediately to
     *   the
     *   corresponding D-Bus Property on the active
     *   <tp:member-ref>Connection</tp:member-ref>, if there is one. Changes to
     *   other parameters will not take effect until the next time the account
     *   is disconnected and reconnected.</p>
     * 
     * <tp:rationale>
     *   <p>In general, reconnecting is a destructive operation that shouldn't
     *     happen as a side-effect. In particular, migration tools that
     *     twiddle the settings of all accounts shouldn't cause an automatic
     *     disconnect and reconnect.</p>
     * </tp:rationale>
     *
     * \param set
     *     
     *     A mapping from parameter names to their values. These parameters 
     *     should be stored for future use.
     *
     * \param unset
     *     
     *     A list of the names of parameters to be removed from the set of 
     *     stored values, allowing the default values to be used. If the given 
     *     parameters were not, in fact, stored, or even if they do not exist 
     *     at all, the account manager MUST accept this without error.
     *
     * \return
     *     
     *     <p>If all of the parameters had the <code>DBus_Property</code> flag,
     *       the empty list, signifying that no reconnection is required for the
     *       new parameters to take effect. For example, if the only parameter
     *       updated is <tt>...Cellular.<tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection.Interface.Cellular">MessageValidityPeriod</tp:dbus-ref></tt>,
     *       the new value can be applied immediately to the connection.</p>
     *     
     *     <p>Otherwise, a list of the names of parameters with changes that
     *       will not take effect until the account is reconnected. User
     *       interfaces that require &quot;instant apply&quot; semantics MAY call
     *       <tp:member-ref>Reconnect</tp:member-ref> in response to receiving a
     *       non-empty list. For example, if the caller updates both
     *       <tt>...Anonymity.<tp:dbus-ref namespace="org.freedesktop.Telepathy.Connection.Interface.Anonymity">AnonymityMandatory</tp:dbus-ref></tt>
     *       and <tt>require-encryption</tt>, the former can be applied to the
     *       current connection, but the latter needs a reconnect to take
     *       effect, so this method should return
     *       <code>[&quot;require-encryption&quot;]</code>.</p>
     */
    inline QDBusPendingReply<QStringList> UpdateParameters(const QVariantMap& set, const QStringList& unset)
    {
        if (!invalidationReason().isEmpty()) {
            return QDBusPendingReply<QStringList>(QDBusMessage::createError(
                invalidationReason(),
                invalidationMessage()
            ));
        }

        QList<QVariant> argumentList;
        argumentList << QVariant::fromValue(set) << QVariant::fromValue(unset);
        return asyncCallWithArgumentList(QLatin1String("UpdateParameters"), argumentList);
    }

    /**
     * Begins a call to the D-Bus method "Reconnect" on the remote object.
     * 
     * <p>Re-connect this account. If the account is currently disconnected
     *   and the requested presence is offline, or if the account
     *   is not <tp:member-ref>Enabled</tp:member-ref> or not
     *   <tp:member-ref>Valid</tp:member-ref>, this does nothing.</p>
     * 
     * <p>If the account is disconnected and the requested presence is not
     *   offline, this forces an attempt to connect with the requested
     *   presence immediately.</p>
     * 
     * <p>If the account is connecting or connected, this is equivalent to
     *   remembering the current value of
     *   <tp:member-ref>RequestedPresence</tp:member-ref>, setting its value
     *   to (OFFLINE, &quot;offline&quot;, &quot;&quot;), waiting for the change to take effect,
     *   then setting its value to the value that was previously
     *   remembered.</p>
     * 
     * <tp:rationale>
     *   <p>Clients desiring &quot;instant apply&quot; semantics for CM parameters MAY
     *     call this method to achieve that.</p>
     * </tp:rationale>
     * 
     * <p>In particular, if the account's
     *   <tp:member-ref>Connection</tp:member-ref> is in the Connecting
     *   state, calling this method causes the attempt to connect to be
     *   aborted and re-tried.</p>
     * 
     * <tp:rationale>
     *   <p>This is necessary to ensure that the new parameters are
     *     picked up.</p>
     * </tp:rationale>
     */
    inline QDBusPendingReply<> Reconnect()
    {
        if (!invalidationReason().isEmpty()) {
            return QDBusPendingReply<>(QDBusMessage::createError(
                invalidationReason(),
                invalidationMessage()
            ));
        }

        return asyncCall(QLatin1String("Reconnect"));
    }

Q_SIGNALS:
    /**
     * Represents the signal "Removed" on the remote object.
     * 
     * This account has been removed. This is redundant with AccountRemoved, 
     * but it&apos;s still worth having, to avoid having to bind to 
     * AccountManager.AccountRemoved to tell you whether your Account is valid 
     * — ideally, an account-editing UI should only care about a single 
     * Account.
     */
    void Removed();

    /**
     * Represents the signal "AccountPropertyChanged" on the remote object.
     * 
     * The values of one or more properties on this interface (that do not 
     * specify that this signal does not apply to them) may have changed. This 
     * does not cover properties of other interfaces, which must provide their 
     * own change notification if appropriate.
     *
     * \param properties
     *     
     *     A map from property names in this namespace (e.g. Nickname) to 
     *     values. Properties whose values have not changed SHOULD be omitted, 
     *     but this need not be done.
     */
    void AccountPropertyChanged(const QVariantMap& properties);

protected:
    virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
};

/**
 * \class AccountInterfaceAvatarInterface
 * \headerfile TelepathyQt4/account.h <TelepathyQt4/AccountManager>
 * \ingroup clientaccount
 *
 * Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Account.Interface.Avatar."
 */
class TELEPATHY_QT4_EXPORT AccountInterfaceAvatarInterface : public Tp::AbstractInterface
{
    Q_OBJECT

public:
    /**
     * Returns the name of the interface "org.freedesktop.Telepathy.Account.Interface.Avatar", which this class
     * represents.
     *
     * \return The D-Bus interface name.
     */
    static inline const char *staticInterfaceName()
    {
        return "org.freedesktop.Telepathy.Account.Interface.Avatar";
    }

    /**
     * Creates a AccountInterfaceAvatarInterface associated with the given object on the session bus.
     *
     * \param busName Name of the service the object is on.
     * \param objectPath Path to the object on the service.
     * \param parent Passed to the parent class constructor.
     */
    AccountInterfaceAvatarInterface(
        const QString& busName,
        const QString& objectPath,
        QObject* parent = 0
    );

    /**
     * Creates a AccountInterfaceAvatarInterface associated with the given object on the given bus.
     *
     * \param connection The bus via which the object can be reached.
     * \param busName Name of the service the object is on.
     * \param objectPath Path to the object on the service.
     * \param parent Passed to the parent class constructor.
     */
    AccountInterfaceAvatarInterface(
        const QDBusConnection& connection,
        const QString& busName,
        const QString& objectPath,
        QObject* parent = 0
    );

    /**
     * Creates a AccountInterfaceAvatarInterface associated with the same object as the given proxy.
     *
     * \param proxy The proxy to use. It will also be the QObject::parent()
     *               for this object.
     */
    AccountInterfaceAvatarInterface(Tp::DBusProxy *proxy);

    /**
     * Creates a AccountInterfaceAvatarInterface associated with the same object as the given proxy.
     * Additionally, the created proxy will have the same parent as the given
     * proxy.
     *
     * \param mainInterface The proxy to use.
     */
    explicit AccountInterfaceAvatarInterface(const Tp::Client::AccountInterface& mainInterface);

    /**
     * Creates a AccountInterfaceAvatarInterface associated with the same object as the given proxy.
     * However, a different parent object can be specified.
     *
     * \param mainInterface The proxy to use.
     * \param parent Passed to the parent class constructor.
     */
    AccountInterfaceAvatarInterface(const Tp::Client::AccountInterface& mainInterface, QObject* parent);

    /**
     * Represents property "Avatar" on the remote object.
     * 
     * The avatar to set on this account for display to other contacts, 
     * represented as a structure containing the bytes of the avatar, and the 
     * MIME type as a string; may be set to an empty byte-array and an empty 
     * string to indicate no avatar. When the account becomes connected, the 
     * account manager SHOULD set this avatar using SetAvatar if appropriate. 
     * This corresponds to NMC 4.x mc_account_get_avatar.
     */
    Q_PROPERTY(Tp::Avatar Avatar READ _deprecated_Avatar WRITE _deprecated_setAvatar)

    /**
     * Getter for the remote object property "Avatar".
     *
     * Don't use this: it blocks the main loop. Use the asynchronous
     * requestPropertyAvatar() instead.
     *
     * \return The value of the property, or a default-constructed value
     *          if the property is not readable.
     */
    inline TELEPATHY_QT4_DEPRECATED Tp::Avatar Avatar() const
    {
        return _deprecated_Avatar();
    }

private:
    inline Tp::Avatar _deprecated_Avatar() const
    {
        return qvariant_cast<Tp::Avatar>(internalPropGet("Avatar"));
    }
public:

    /**
     * Asynchronous getter for the remote object property "Avatar" of type Tp::Avatar.
     *
     * 
     * The avatar to set on this account for display to other contacts, 
     * represented as a structure containing the bytes of the avatar, and the 
     * MIME type as a string; may be set to an empty byte-array and an empty 
     * string to indicate no avatar. When the account becomes connected, the 
     * account manager SHOULD set this avatar using SetAvatar if appropriate. 
     * This corresponds to NMC 4.x mc_account_get_avatar.
     *
     * \return A pending variant which will emit finished when the property has been
     *          retrieved.
     */
    inline Tp::PendingVariant *requestPropertyAvatar() const
    {
        return internalRequestProperty(QLatin1String("Avatar"));
    }

    /**
     * Setter for the remote object property "Avatar".
     *
     * Don't use this: it blocks the main loop.
     *
     * \param newValue The value to set the property to.
     */
    inline TELEPATHY_QT4_DEPRECATED void setAvatar(const Tp::Avatar& newValue)
    {
        return _deprecated_setAvatar(newValue);
    }

private:
    inline void _deprecated_setAvatar(const Tp::Avatar& newValue)
    {
        internalPropSet("Avatar", QVariant::fromValue(newValue));
    }
public:

    /**
     * Asynchronous setter for the remote object property "Avatar" of type Tp::Avatar.
     *
     * 
     * The avatar to set on this account for display to other contacts, 
     * represented as a structure containing the bytes of the avatar, and the 
     * MIME type as a string; may be set to an empty byte-array and an empty 
     * string to indicate no avatar. When the account becomes connected, the 
     * account manager SHOULD set this avatar using SetAvatar if appropriate. 
     * This corresponds to NMC 4.x mc_account_get_avatar.
     *
     * \return A pending operation which will emit finished when the property has been
     *          set.
     */
    inline Tp::PendingOperation *setPropertyAvatar(Tp::Avatar newValue)
    {
        return internalSetProperty(QLatin1String("Avatar"), QVariant::fromValue(newValue));
    }

    /**
     * Request all of the DBus properties on the interface.
     *
     * \return A pending variant map which will emit finished when the properties have
     *          been retrieved.
     */
    Tp::PendingVariantMap *requestAllProperties() const
    {
        return internalRequestAllProperties();
    }

Q_SIGNALS:
    /**
     * Represents the signal "AvatarChanged" on the remote object.
     * 
     * Emitted when the Avatar property changes. The avatar itself is 
     * deliberately not included in this signal, to reduce bus traffic in the 
     * (likely common) case where no running application cares about the 
     * user&apos;s own avatar.
     */
    void AvatarChanged();

protected:
    virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
};
}
}
Q_DECLARE_METATYPE(Tp::Client::AccountInterface*)
Q_DECLARE_METATYPE(Tp::Client::AccountInterfaceAvatarInterface*)
