aboutsummaryrefslogtreecommitdiff
path: root/lib/csapi/create_room.h
blob: ee09fb35a7541815334d9cda4761db4fedf2be43 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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
/******************************************************************************
 * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
 */

#pragma once

#include "jobs/basejob.h"

#include <QtCore/QJsonObject>
#include "converters.h"
#include <QtCore/QVector>

namespace QMatrixClient
{
    // 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.
    /// 
    /// 1. Events set by the ``preset``.
    /// 
    /// 2. Events listed in ``initial_state``, in the order that they are
    ///    listed.
    /// 
    /// 3. Events implied by ``name`` and ``topic``.
    /// 
    /// 4. Invite events implied by ``invite`` and ``invite_3pid``.
    /// 
    /// 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``     
    /// ========================  ==============  ======================  ================  =========
    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 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.
            /// 
            /// 1. Events set by the ``preset``.
            /// 
            /// 2. Events listed in ``initial_state``, in the order that they are
            ///    listed.
            /// 
            /// 3. Events implied by ``name`` and ``topic``.
            /// 
            /// 4. Invite events implied by ``invite`` and ``invite_3pid``.
            /// 
            /// 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``     
            /// ========================  ==============  ======================  ================  =========
            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 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.
            /// 
            /// 1. Events set by the ``preset``.
            /// 
            /// 2. Events listed in ``initial_state``, in the order that they are
            ///    listed.
            /// 
            /// 3. Events implied by ``name`` and ``topic``.
            /// 
            /// 4. Invite events implied by ``invite`` and ``invite_3pid``.
            /// 
            /// 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``     
            /// ========================  ==============  ======================  ================  =========
            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``.
             * \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 creationContent 
             *   Extra keys to be added to the content of the ``m.room.create``.
             *   The server will clobber the following keys: ``creator``. 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.
             * \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 guestCanJoin 
             *   Allows guests to join the room. See `Guest Access`_ for more information.
             */
            explicit CreateRoomJob(const QString& visibility = {}, const QString& roomAliasName = {}, const QString& name = {}, const QString& topic = {}, const QStringList& invite = {}, const QVector<Invite3pid>& invite3pid = {}, const QJsonObject& creationContent = {}, const QVector<StateEvent>& initialState = {}, const QString& preset = {}, bool isDirect = false, bool guestCanJoin = false);
            ~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 QMatrixClient