aboutsummaryrefslogtreecommitdiff
path: root/.gitmodules
diff options
context:
space:
mode:
authorKitsune Ral <Kitsune-Ral@users.sf.net>2017-01-11 07:41:53 +0900
committerGitHub <noreply@github.com>2017-01-11 07:41:53 +0900
commitf37874c7e55239359d02b926a65cd62d17336522 (patch)
treec14ba3abd15c380dd6430240dba46c615fc5eee8 /.gitmodules
parent78cfe3c102b686c71a1da5cbe91a2ae42dc03825 (diff)
parentfb4127da9db32e5e18b14beaaabbee7adf9cc334 (diff)
downloadlibquotient-f37874c7e55239359d02b926a65cd62d17336522.tar.gz
libquotient-f37874c7e55239359d02b926a65cd62d17336522.zip
Merge pull request #51 from Fxrh/kitsune-traceable-events
Make events traceable
Diffstat (limited to '.gitmodules')
0 files changed, 0 insertions, 0 deletions
3'>113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238
/******************************************************************************
 * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
 */

#pragma once

#include "converters.h"

#include "jobs/basejob.h"

#include <QtCore/QJsonObject>
#include <QtCore/QVector>

namespace Quotient
{

// Operations

/// Create a new room
/*!
 * Create a new room with various configuration options.
 *
 * The server MUST apply the normal state resolution rules when creating
 * the new room, including checking power levels for each event. It MUST
 * apply the events implied by the request in the following order:
 *
 * 0. A default ``m.room.power_levels`` event, giving the room creator
 *    (and not other members) permission to send state events. Overridden
 *    by the ``power_level_content_override`` parameter.
 *
 * 1. Events set by the ``preset``. Currently these are the
 * ``m.room.join_rules``,
 *    ``m.room.history_visibility``, and ``m.room.guest_access`` state events.
 *
 * 2. Events listed in ``initial_state``, in the order that they are
 *    listed.
 *
 * 3. Events implied by ``name`` and ``topic`` (``m.room.name`` and
 * ``m.room.topic`` state events).
 *
 * 4. Invite events implied by ``invite`` and ``invite_3pid`` (``m.room.member``
 * with
 *    ``membership: invite`` and ``m.room.third_party_invite``).
 *
 * The available presets do the following with respect to room state:
 *
 * ========================  ==============  ======================
 * ================  ========= Preset           ``join_rules``
 * ``history_visibility``  ``guest_access``  Other
 * ========================  ==============  ======================
 * ================  =========
 * ``private_chat``          ``invite``      ``shared`` ``can_join``
 * ``trusted_private_chat``  ``invite``      ``shared`` ``can_join``      All
 * invitees are given the same power level as the room creator.
 * ``public_chat``           ``public``      ``shared`` ``forbidden``
 * ========================  ==============  ======================
 * ================  =========
 *
 * The server will create a ``m.room.create`` event in the room with the
 * requesting user as the creator, alongside other keys provided in the
 * ``creation_content``.
 */
class CreateRoomJob : public BaseJob
{
public:
    // Inner data structures

    /// Create a new room with various configuration options.The server MUST
    /// apply the normal state resolution rules when creatingthe new room,
    /// including checking power levels for each event. It MUSTapply the events
    /// implied by the request in the following order:0. A default
    /// ``m.room.power_levels`` event, giving the room creator   (and not other
    /// members) permission to send state events. Overridden   by the
    /// ``power_level_content_override`` parameter.1. Events set by the
    /// ``preset``. Currently these are the ``m.room.join_rules``,
    /// ``m.room.history_visibility``, and ``m.room.guest_access`` state
    /// events.2. Events listed in ``initial_state``, in the order that they are
    /// listed.3. Events implied by ``name`` and ``topic`` (``m.room.name`` and
    /// ``m.room.topic``   state events).4. Invite events implied by ``invite``
    /// and ``invite_3pid`` (``m.room.member`` with   ``membership: invite`` and
    /// ``m.room.third_party_invite``).The available presets do the following
    /// with respect to room state:========================  ==============
    /// ======================  ================  =========         Preset
    /// ``join_rules``  ``history_visibility``  ``guest_access``
    /// Other========================  ==============  ======================
    /// ================  =========``private_chat``          ``invite``
    /// ``shared``              ``can_join````trusted_private_chat``  ``invite``
    /// ``shared``              ``can_join``      All invitees are given the
    /// same power level as the room creator.``public_chat`` ``public``
    /// ``shared``              ``forbidden``========================
    /// ==============  ======================  ================  =========The
    /// server will create a ``m.room.create`` event in the room with
    /// therequesting user as the creator, alongside other keys provided in
    /// the``creation_content``.
    struct Invite3pid
    {
        /// The hostname+port of the identity server which should be used for
        /// third party identifier lookups.
        QString idServer;
        /// The kind of address being passed in the address field, for example
        /// ``email``.
        QString medium;
        /// The invitee's third party identifier.
        QString address;
    };

    /// Create a new room with various configuration options.The server MUST
    /// apply the normal state resolution rules when creatingthe new room,
    /// including checking power levels for each event. It MUSTapply the events
    /// implied by the request in the following order:0. A default
    /// ``m.room.power_levels`` event, giving the room creator   (and not other
    /// members) permission to send state events. Overridden   by the
    /// ``power_level_content_override`` parameter.1. Events set by the
    /// ``preset``. Currently these are the ``m.room.join_rules``,
    /// ``m.room.history_visibility``, and ``m.room.guest_access`` state
    /// events.2. Events listed in ``initial_state``, in the order that they are
    /// listed.3. Events implied by ``name`` and ``topic`` (``m.room.name`` and
    /// ``m.room.topic``   state events).4. Invite events implied by ``invite``
    /// and ``invite_3pid`` (``m.room.member`` with   ``membership: invite`` and
    /// ``m.room.third_party_invite``).The available presets do the following
    /// with respect to room state:========================  ==============
    /// ======================  ================  =========         Preset
    /// ``join_rules``  ``history_visibility``  ``guest_access``
    /// Other========================  ==============  ======================
    /// ================  =========``private_chat``          ``invite``
    /// ``shared``              ``can_join````trusted_private_chat``  ``invite``
    /// ``shared``              ``can_join``      All invitees are given the
    /// same power level as the room creator.``public_chat`` ``public``
    /// ``shared``              ``forbidden``========================
    /// ==============  ======================  ================  =========The
    /// server will create a ``m.room.create`` event in the room with
    /// therequesting user as the creator, alongside other keys provided in
    /// the``creation_content``.
    struct StateEvent
    {
        /// The type of event to send.
        QString type;
        /// The state_key of the state event. Defaults to an empty string.
        QString stateKey;
        /// The content of the event.
        QJsonObject content;
    };

    // Construction/destruction

    /*! Create a new room
     * \param visibility
     *   A ``public`` visibility indicates that the room will be shown
     *   in the published room list. A ``private`` visibility will hide
     *   the room from the published room list. Rooms default to
     *   ``private`` visibility if this key is not included. NB: This
     *   should not be confused with ``join_rules`` which also uses the
     *   word ``public``.
     * \param roomAliasName
     *   The desired room alias **local part**. If this is included, a
     *   room alias will be created and mapped to the newly created
     *   room. The alias will belong on the *same* homeserver which
     *   created the room. For example, if this was set to "foo" and
     *   sent to the homeserver "example.com" the complete room alias
     *   would be ``#foo:example.com``.
     *
     *   The complete room alias will become the canonical alias for
     *   the room.
     * \param name
     *   If this is included, an ``m.room.name`` event will be sent
     *   into the room to indicate the name of the room. See Room
     *   Events for more information on ``m.room.name``.
     * \param topic
     *   If this is included, an ``m.room.topic`` event will be sent
     *   into the room to indicate the topic for the room. See Room
     *   Events for more information on ``m.room.topic``.
     * \param invite
     *   A list of user IDs to invite to the room. This will tell the
     *   server to invite everyone in the list to the newly created room.
     * \param invite3pid
     *   A list of objects representing third party IDs to invite into
     *   the room.
     * \param roomVersion
     *   The room version to set for the room. If not provided, the homeserver
     * is to use its configured default. If provided, the homeserver will return
     * a 400 error with the errcode ``M_UNSUPPORTED_ROOM_VERSION`` if it does
     * not support the room version. \param creationContent Extra keys, such as
     * ``m.federate``, to be added to the content of the `m.room.create`_ event.
     * The server will clobber the following keys: ``creator``,
     * ``room_version``. Future versions of the specification may allow the
     * server to clobber other keys. \param initialState A list of state events
     * to set in the new room. This allows the user to override the default
     * state events set in the new room. The expected format of the state events
     * are an object with type, state_key and content keys set.
     *
     *   Takes precedence over events set by ``preset``, but gets
     *   overriden by ``name`` and ``topic`` keys.
     * \param preset
     *   Convenience parameter for setting various default state events
     *   based on a preset.
     *
     *   If unspecified, the server should use the ``visibility`` to determine
     *   which preset to use. A visbility of ``public`` equates to a preset of
     *   ``public_chat`` and ``private`` visibility equates to a preset of
     *   ``private_chat``.
     * \param isDirect
     *   This flag makes the server set the ``is_direct`` flag on the
     *   ``m.room.member`` events sent to the users in ``invite`` and
     *   ``invite_3pid``. See `Direct Messaging`_ for more information.
     * \param powerLevelContentOverride
     *   The power level content to override in the default power level
     *   event. This object is applied on top of the generated
     * `m.room.power_levels`_ event content prior to it being sent to the room.
     * Defaults to overriding nothing.
     */
    explicit CreateRoomJob(const QString& visibility = {},
                           const QString& roomAliasName = {},
                           const QString& name = {}, const QString& topic = {},
                           const QStringList& invite = {},
                           const QVector<Invite3pid>& invite3pid = {},
                           const QString& roomVersion = {},
                           const QJsonObject& creationContent = {},
                           const QVector<StateEvent>& initialState = {},
                           const QString& preset = {},
                           Omittable<bool> isDirect = none,
                           const QJsonObject& powerLevelContentOverride = {});

    ~CreateRoomJob() override;

    // Result properties

    /// The created room's ID.
    const QString& roomId() const;

protected:
    Status parseJson(const QJsonDocument& data) override;

private:
    class Private;
    QScopedPointer<Private> d;
};

} // namespace Quotient