1 //
2 // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2021
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 #include "td/telegram/MessageContentType.h"
8 
9 namespace td {
10 
operator <<(StringBuilder & string_builder,MessageContentType content_type)11 StringBuilder &operator<<(StringBuilder &string_builder, MessageContentType content_type) {
12   switch (content_type) {
13     case MessageContentType::None:
14       return string_builder << "None";
15     case MessageContentType::Animation:
16       return string_builder << "Animation";
17     case MessageContentType::Audio:
18       return string_builder << "Audio";
19     case MessageContentType::Document:
20       return string_builder << "Document";
21     case MessageContentType::ExpiredPhoto:
22       return string_builder << "ExpiredPhoto";
23     case MessageContentType::Photo:
24       return string_builder << "Photo";
25     case MessageContentType::ExpiredVideo:
26       return string_builder << "ExpiredVideo";
27     case MessageContentType::Video:
28       return string_builder << "Video";
29     case MessageContentType::VideoNote:
30       return string_builder << "VideoNote";
31     case MessageContentType::VoiceNote:
32       return string_builder << "VoiceNote";
33     case MessageContentType::Contact:
34       return string_builder << "Contact";
35     case MessageContentType::LiveLocation:
36       return string_builder << "LiveLocation";
37     case MessageContentType::Location:
38       return string_builder << "Location";
39     case MessageContentType::Venue:
40       return string_builder << "Venue";
41     case MessageContentType::Game:
42       return string_builder << "Game";
43     case MessageContentType::Invoice:
44       return string_builder << "Invoice";
45     case MessageContentType::Sticker:
46       return string_builder << "Sticker";
47     case MessageContentType::Text:
48       return string_builder << "Text";
49     case MessageContentType::Unsupported:
50       return string_builder << "Unsupported";
51     case MessageContentType::ChatCreate:
52       return string_builder << "ChatCreate";
53     case MessageContentType::ChatChangeTitle:
54       return string_builder << "ChatChangeTitle";
55     case MessageContentType::ChatChangePhoto:
56       return string_builder << "ChatChangePhoto";
57     case MessageContentType::ChatDeletePhoto:
58       return string_builder << "ChatDeletePhoto";
59     case MessageContentType::ChatDeleteHistory:
60       return string_builder << "ChatDeleteHistory";
61     case MessageContentType::ChatAddUsers:
62       return string_builder << "ChatAddUsers";
63     case MessageContentType::ChatJoinedByLink:
64       return string_builder << "ChatJoinedByLink";
65     case MessageContentType::ChatDeleteUser:
66       return string_builder << "ChatDeleteUser";
67     case MessageContentType::ChatMigrateTo:
68       return string_builder << "ChatMigrateTo";
69     case MessageContentType::ChannelCreate:
70       return string_builder << "ChannelCreate";
71     case MessageContentType::ChannelMigrateFrom:
72       return string_builder << "ChannelMigrateFrom";
73     case MessageContentType::PinMessage:
74       return string_builder << "PinMessage";
75     case MessageContentType::GameScore:
76       return string_builder << "GameScore";
77     case MessageContentType::ScreenshotTaken:
78       return string_builder << "ScreenshotTaken";
79     case MessageContentType::ChatSetTtl:
80       return string_builder << "ChatSetTtl";
81     case MessageContentType::Call:
82       return string_builder << "Call";
83     case MessageContentType::PaymentSuccessful:
84       return string_builder << "PaymentSuccessful";
85     case MessageContentType::ContactRegistered:
86       return string_builder << "ContactRegistered";
87     case MessageContentType::CustomServiceAction:
88       return string_builder << "CustomServiceAction";
89     case MessageContentType::WebsiteConnected:
90       return string_builder << "WebsiteConnected";
91     case MessageContentType::PassportDataSent:
92       return string_builder << "PassportDataSent";
93     case MessageContentType::PassportDataReceived:
94       return string_builder << "PassportDataReceived";
95     case MessageContentType::Poll:
96       return string_builder << "Poll";
97     case MessageContentType::Dice:
98       return string_builder << "Dice";
99     case MessageContentType::ProximityAlertTriggered:
100       return string_builder << "ProximityAlertTriggered";
101     case MessageContentType::GroupCall:
102       return string_builder << "GroupCall";
103     case MessageContentType::InviteToGroupCall:
104       return string_builder << "InviteToGroupCall";
105     case MessageContentType::ChatSetTheme:
106       return string_builder << "ChatSetTheme";
107     default:
108       UNREACHABLE();
109       return string_builder;
110   }
111 }
112 
is_allowed_media_group_content(MessageContentType content_type)113 bool is_allowed_media_group_content(MessageContentType content_type) {
114   switch (content_type) {
115     case MessageContentType::Audio:
116     case MessageContentType::Document:
117     case MessageContentType::Photo:
118     case MessageContentType::Video:
119     case MessageContentType::ExpiredPhoto:
120     case MessageContentType::ExpiredVideo:
121       return true;
122     case MessageContentType::Animation:
123     case MessageContentType::Contact:
124     case MessageContentType::Game:
125     case MessageContentType::Invoice:
126     case MessageContentType::LiveLocation:
127     case MessageContentType::Location:
128     case MessageContentType::Sticker:
129     case MessageContentType::Text:
130     case MessageContentType::Unsupported:
131     case MessageContentType::Venue:
132     case MessageContentType::VideoNote:
133     case MessageContentType::VoiceNote:
134     case MessageContentType::ChatCreate:
135     case MessageContentType::ChatChangeTitle:
136     case MessageContentType::ChatChangePhoto:
137     case MessageContentType::ChatDeletePhoto:
138     case MessageContentType::ChatDeleteHistory:
139     case MessageContentType::ChatAddUsers:
140     case MessageContentType::ChatJoinedByLink:
141     case MessageContentType::ChatDeleteUser:
142     case MessageContentType::ChatMigrateTo:
143     case MessageContentType::ChannelCreate:
144     case MessageContentType::ChannelMigrateFrom:
145     case MessageContentType::PinMessage:
146     case MessageContentType::GameScore:
147     case MessageContentType::ScreenshotTaken:
148     case MessageContentType::ChatSetTtl:
149     case MessageContentType::Call:
150     case MessageContentType::PaymentSuccessful:
151     case MessageContentType::ContactRegistered:
152     case MessageContentType::CustomServiceAction:
153     case MessageContentType::WebsiteConnected:
154     case MessageContentType::PassportDataSent:
155     case MessageContentType::PassportDataReceived:
156     case MessageContentType::Poll:
157     case MessageContentType::Dice:
158     case MessageContentType::ProximityAlertTriggered:
159     case MessageContentType::GroupCall:
160     case MessageContentType::InviteToGroupCall:
161     case MessageContentType::ChatSetTheme:
162       return false;
163     default:
164       UNREACHABLE();
165       return false;
166   }
167 }
168 
is_homogenous_media_group_content(MessageContentType content_type)169 bool is_homogenous_media_group_content(MessageContentType content_type) {
170   return content_type == MessageContentType::Audio || content_type == MessageContentType::Document;
171 }
172 
is_secret_message_content(int32 ttl,MessageContentType content_type)173 bool is_secret_message_content(int32 ttl, MessageContentType content_type) {
174   if (ttl <= 0 || ttl > 60) {
175     return false;
176   }
177   switch (content_type) {
178     case MessageContentType::Animation:
179     case MessageContentType::Audio:
180     case MessageContentType::Photo:
181     case MessageContentType::Video:
182     case MessageContentType::VideoNote:
183     case MessageContentType::VoiceNote:
184       return true;
185     case MessageContentType::Contact:
186     case MessageContentType::Document:
187     case MessageContentType::Game:
188     case MessageContentType::Invoice:
189     case MessageContentType::LiveLocation:
190     case MessageContentType::Location:
191     case MessageContentType::Sticker:
192     case MessageContentType::Text:
193     case MessageContentType::Unsupported:
194     case MessageContentType::Venue:
195     case MessageContentType::ExpiredPhoto:
196     case MessageContentType::ExpiredVideo:
197     case MessageContentType::ChatCreate:
198     case MessageContentType::ChatChangeTitle:
199     case MessageContentType::ChatChangePhoto:
200     case MessageContentType::ChatDeletePhoto:
201     case MessageContentType::ChatDeleteHistory:
202     case MessageContentType::ChatAddUsers:
203     case MessageContentType::ChatJoinedByLink:
204     case MessageContentType::ChatDeleteUser:
205     case MessageContentType::ChatMigrateTo:
206     case MessageContentType::ChannelCreate:
207     case MessageContentType::ChannelMigrateFrom:
208     case MessageContentType::PinMessage:
209     case MessageContentType::GameScore:
210     case MessageContentType::ScreenshotTaken:
211     case MessageContentType::ChatSetTtl:
212     case MessageContentType::Call:
213     case MessageContentType::PaymentSuccessful:
214     case MessageContentType::ContactRegistered:
215     case MessageContentType::CustomServiceAction:
216     case MessageContentType::WebsiteConnected:
217     case MessageContentType::PassportDataSent:
218     case MessageContentType::PassportDataReceived:
219     case MessageContentType::Poll:
220     case MessageContentType::Dice:
221     case MessageContentType::ProximityAlertTriggered:
222     case MessageContentType::GroupCall:
223     case MessageContentType::InviteToGroupCall:
224     case MessageContentType::ChatSetTheme:
225       return false;
226     default:
227       UNREACHABLE();
228       return false;
229   }
230 }
231 
is_service_message_content(MessageContentType content_type)232 bool is_service_message_content(MessageContentType content_type) {
233   switch (content_type) {
234     case MessageContentType::Animation:
235     case MessageContentType::Audio:
236     case MessageContentType::Contact:
237     case MessageContentType::Document:
238     case MessageContentType::Game:
239     case MessageContentType::Invoice:
240     case MessageContentType::LiveLocation:
241     case MessageContentType::Location:
242     case MessageContentType::Photo:
243     case MessageContentType::Sticker:
244     case MessageContentType::Text:
245     case MessageContentType::Unsupported:
246     case MessageContentType::Venue:
247     case MessageContentType::Video:
248     case MessageContentType::VideoNote:
249     case MessageContentType::VoiceNote:
250     case MessageContentType::ExpiredPhoto:
251     case MessageContentType::ExpiredVideo:
252     case MessageContentType::Poll:
253     case MessageContentType::Dice:
254       return false;
255     case MessageContentType::ChatCreate:
256     case MessageContentType::ChatChangeTitle:
257     case MessageContentType::ChatChangePhoto:
258     case MessageContentType::ChatDeletePhoto:
259     case MessageContentType::ChatDeleteHistory:
260     case MessageContentType::ChatAddUsers:
261     case MessageContentType::ChatJoinedByLink:
262     case MessageContentType::ChatDeleteUser:
263     case MessageContentType::ChatMigrateTo:
264     case MessageContentType::ChannelCreate:
265     case MessageContentType::ChannelMigrateFrom:
266     case MessageContentType::PinMessage:
267     case MessageContentType::GameScore:
268     case MessageContentType::ScreenshotTaken:
269     case MessageContentType::ChatSetTtl:
270     case MessageContentType::Call:
271     case MessageContentType::PaymentSuccessful:
272     case MessageContentType::ContactRegistered:
273     case MessageContentType::CustomServiceAction:
274     case MessageContentType::WebsiteConnected:
275     case MessageContentType::PassportDataSent:
276     case MessageContentType::PassportDataReceived:
277     case MessageContentType::ProximityAlertTriggered:
278     case MessageContentType::GroupCall:
279     case MessageContentType::InviteToGroupCall:
280     case MessageContentType::ChatSetTheme:
281       return true;
282     default:
283       UNREACHABLE();
284       return false;
285   }
286 }
287 
can_have_message_content_caption(MessageContentType content_type)288 bool can_have_message_content_caption(MessageContentType content_type) {
289   switch (content_type) {
290     case MessageContentType::Animation:
291     case MessageContentType::Audio:
292     case MessageContentType::Document:
293     case MessageContentType::Photo:
294     case MessageContentType::Video:
295     case MessageContentType::VoiceNote:
296       return true;
297     case MessageContentType::Contact:
298     case MessageContentType::Game:
299     case MessageContentType::Invoice:
300     case MessageContentType::LiveLocation:
301     case MessageContentType::Location:
302     case MessageContentType::Sticker:
303     case MessageContentType::Text:
304     case MessageContentType::Unsupported:
305     case MessageContentType::Venue:
306     case MessageContentType::VideoNote:
307     case MessageContentType::ChatCreate:
308     case MessageContentType::ChatChangeTitle:
309     case MessageContentType::ChatChangePhoto:
310     case MessageContentType::ChatDeletePhoto:
311     case MessageContentType::ChatDeleteHistory:
312     case MessageContentType::ChatAddUsers:
313     case MessageContentType::ChatJoinedByLink:
314     case MessageContentType::ChatDeleteUser:
315     case MessageContentType::ChatMigrateTo:
316     case MessageContentType::ChannelCreate:
317     case MessageContentType::ChannelMigrateFrom:
318     case MessageContentType::PinMessage:
319     case MessageContentType::GameScore:
320     case MessageContentType::ScreenshotTaken:
321     case MessageContentType::ChatSetTtl:
322     case MessageContentType::Call:
323     case MessageContentType::PaymentSuccessful:
324     case MessageContentType::ContactRegistered:
325     case MessageContentType::ExpiredPhoto:
326     case MessageContentType::ExpiredVideo:
327     case MessageContentType::CustomServiceAction:
328     case MessageContentType::WebsiteConnected:
329     case MessageContentType::PassportDataSent:
330     case MessageContentType::PassportDataReceived:
331     case MessageContentType::Poll:
332     case MessageContentType::Dice:
333     case MessageContentType::ProximityAlertTriggered:
334     case MessageContentType::GroupCall:
335     case MessageContentType::InviteToGroupCall:
336     case MessageContentType::ChatSetTheme:
337       return false;
338     default:
339       UNREACHABLE();
340       return false;
341   }
342 }
343 
344 }  // namespace td
345