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)11StringBuilder &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)113bool 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)169bool 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)173bool 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)232bool 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)288bool 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