@@ -99,3 +99,136 @@ class Subscription {
99
99
factory Subscription .fromJson (Map <String , dynamic > json) =>
100
100
_$SubscriptionFromJson (json);
101
101
}
102
+
103
+ /// As in the get-messages response.
104
+ ///
105
+ /// https://zulip.com/api/get-messages#response
106
+ abstract class Message {
107
+ final String ? avatar_url;
108
+ final String client;
109
+ final String content;
110
+ final String content_type;
111
+
112
+ // final List<MessageEditHistory> edit_history; // TODO handle
113
+ final int id;
114
+ final bool is_me_message;
115
+ final int ? last_edit_timestamp;
116
+
117
+ // final List<Reaction> reactions; // TODO handle
118
+ final int recipient_id;
119
+ final String sender_email;
120
+ final String sender_full_name;
121
+ final int sender_id;
122
+ final String sender_realm_str;
123
+ final String subject; // TODO call it "topic" internally; also similar others
124
+ // final List<string> submessages; // TODO handle
125
+ final int timestamp;
126
+
127
+ // final List<TopicLink> topic_links; // TODO handle
128
+ // final string type; // handled by runtime type of object
129
+ final List <String > flags; // TODO enum
130
+ final String ? match_content;
131
+ final String ? match_subject;
132
+
133
+ Message ({
134
+ this .avatar_url,
135
+ required this .client,
136
+ required this .content,
137
+ required this .content_type,
138
+ required this .id,
139
+ required this .is_me_message,
140
+ this .last_edit_timestamp,
141
+ required this .recipient_id,
142
+ required this .sender_email,
143
+ required this .sender_full_name,
144
+ required this .sender_id,
145
+ required this .sender_realm_str,
146
+ required this .subject,
147
+ required this .timestamp,
148
+ required this .flags,
149
+ this .match_content,
150
+ this .match_subject,
151
+ });
152
+
153
+ factory Message .fromJson (Map <String , dynamic > json) {
154
+ final type = json['type' ] as String ;
155
+ if (type == 'stream' ) return StreamMessage .fromJson (json);
156
+ if (type == 'private' ) return PmMessage .fromJson (json);
157
+ throw Exception ("Message.fromJson: unexpected message type $type " );
158
+ }
159
+ }
160
+
161
+ @JsonSerializable ()
162
+ class StreamMessage extends Message {
163
+ final String display_recipient;
164
+ final int stream_id;
165
+
166
+ StreamMessage ({
167
+ super .avatar_url,
168
+ required super .client,
169
+ required super .content,
170
+ required super .content_type,
171
+ required super .id,
172
+ required super .is_me_message,
173
+ super .last_edit_timestamp,
174
+ required super .recipient_id,
175
+ required super .sender_email,
176
+ required super .sender_full_name,
177
+ required super .sender_id,
178
+ required super .sender_realm_str,
179
+ required super .subject,
180
+ required super .timestamp,
181
+ required super .flags,
182
+ super .match_content,
183
+ super .match_subject,
184
+ required this .display_recipient,
185
+ required this .stream_id,
186
+ });
187
+
188
+ factory StreamMessage .fromJson (Map <String , dynamic > json) =>
189
+ _$StreamMessageFromJson (json);
190
+ }
191
+
192
+ @JsonSerializable ()
193
+ class PmRecipient {
194
+ final int id;
195
+ final String email;
196
+ final String full_name;
197
+
198
+ // final String? short_name; // obsolete, ignore
199
+ // final bool? is_mirror_dummy; // obsolete, ignore
200
+
201
+ PmRecipient ({required this .id, required this .email, required this .full_name});
202
+
203
+ factory PmRecipient .fromJson (Map <String , dynamic > json) =>
204
+ _$PmRecipientFromJson (json);
205
+ }
206
+
207
+ @JsonSerializable ()
208
+ class PmMessage extends Message {
209
+ final List <PmRecipient > display_recipient;
210
+
211
+ PmMessage ({
212
+ super .avatar_url,
213
+ required super .client,
214
+ required super .content,
215
+ required super .content_type,
216
+ required super .id,
217
+ required super .is_me_message,
218
+ super .last_edit_timestamp,
219
+ required super .recipient_id,
220
+ required super .sender_email,
221
+ required super .sender_full_name,
222
+ required super .sender_id,
223
+ required super .sender_realm_str,
224
+ required super .subject,
225
+ required super .timestamp,
226
+ required super .flags,
227
+ super .match_content,
228
+ super .match_subject,
229
+ required this .display_recipient,
230
+ });
231
+
232
+ factory PmMessage .fromJson (Map <String , dynamic > json) =>
233
+ _$PmMessageFromJson (json);
234
+ }
0 commit comments