summaryrefslogtreecommitdiff
path: root/protocols/Telegram/tdlib/td/td/telegram/Venue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Telegram/tdlib/td/td/telegram/Venue.cpp')
-rw-r--r--protocols/Telegram/tdlib/td/td/telegram/Venue.cpp126
1 files changed, 126 insertions, 0 deletions
diff --git a/protocols/Telegram/tdlib/td/td/telegram/Venue.cpp b/protocols/Telegram/tdlib/td/td/telegram/Venue.cpp
new file mode 100644
index 0000000000..711d843674
--- /dev/null
+++ b/protocols/Telegram/tdlib/td/td/telegram/Venue.cpp
@@ -0,0 +1,126 @@
+//
+// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+#include "td/telegram/Venue.h"
+
+#include "td/telegram/misc.h"
+#include "td/telegram/secret_api.h"
+
+namespace td {
+
+Venue::Venue(const tl_object_ptr<telegram_api::GeoPoint> &geo_point_ptr, string title, string address, string provider,
+ string id, string type)
+ : location_(geo_point_ptr)
+ , title_(std::move(title))
+ , address_(std::move(address))
+ , provider_(std::move(provider))
+ , id_(std::move(id))
+ , type_(std::move(type)) {
+}
+
+Venue::Venue(Location location, string title, string address, string provider, string id, string type)
+ : location_(location)
+ , title_(std::move(title))
+ , address_(std::move(address))
+ , provider_(std::move(provider))
+ , id_(std::move(id))
+ , type_(std::move(type)) {
+}
+
+Venue::Venue(const tl_object_ptr<td_api::venue> &venue)
+ : location_(venue->location_)
+ , title_(venue->title_)
+ , address_(venue->address_)
+ , provider_(venue->provider_)
+ , id_(venue->id_)
+ , type_(venue->type_) {
+}
+
+bool Venue::empty() const {
+ return location_.empty();
+}
+
+Location &Venue::location() {
+ return location_;
+}
+
+const Location &Venue::location() const {
+ return location_;
+}
+
+tl_object_ptr<td_api::venue> Venue::get_venue_object() const {
+ return make_tl_object<td_api::venue>(location_.get_location_object(), title_, address_, provider_, id_, type_);
+}
+
+tl_object_ptr<telegram_api::inputMediaVenue> Venue::get_input_media_venue() const {
+ return make_tl_object<telegram_api::inputMediaVenue>(location_.get_input_geo_point(), title_, address_, provider_,
+ id_, type_);
+}
+
+SecretInputMedia Venue::get_secret_input_media_venue() const {
+ return SecretInputMedia{nullptr,
+ make_tl_object<secret_api::decryptedMessageMediaVenue>(
+ location_.get_latitude(), location_.get_longitude(), title_, address_, provider_, id_)};
+}
+
+tl_object_ptr<telegram_api::inputBotInlineMessageMediaVenue> Venue::get_input_bot_inline_message_media_venue(
+ tl_object_ptr<telegram_api::ReplyMarkup> &&reply_markup) const {
+ int32 flags = 0;
+ if (reply_markup != nullptr) {
+ flags |= telegram_api::inputBotInlineMessageMediaVenue::REPLY_MARKUP_MASK;
+ }
+ return make_tl_object<telegram_api::inputBotInlineMessageMediaVenue>(
+ flags, location_.get_input_geo_point(), title_, address_, provider_, id_, type_, std::move(reply_markup));
+}
+
+bool operator==(const Venue &lhs, const Venue &rhs) {
+ return lhs.location_ == rhs.location_ && lhs.title_ == rhs.title_ && lhs.address_ == rhs.address_ &&
+ lhs.provider_ == rhs.provider_ && lhs.id_ == rhs.id_ && lhs.type_ == rhs.type_;
+}
+
+bool operator!=(const Venue &lhs, const Venue &rhs) {
+ return !(lhs == rhs);
+}
+
+StringBuilder &operator<<(StringBuilder &string_builder, const Venue &venue) {
+ return string_builder << "Venue[location = " << venue.location_ << ", title = " << venue.title_
+ << ", address = " << venue.address_ << ", provider = " << venue.provider_
+ << ", ID = " << venue.id_ << ", type = " << venue.type_ << "]";
+}
+
+Result<Venue> process_input_message_venue(tl_object_ptr<td_api::InputMessageContent> &&input_message_content) {
+ CHECK(input_message_content != nullptr);
+ CHECK(input_message_content->get_id() == td_api::inputMessageVenue::ID);
+ auto venue = std::move(static_cast<td_api::inputMessageVenue *>(input_message_content.get())->venue_);
+ if (venue == nullptr) {
+ return Status::Error(400, "Venue must be non-empty");
+ }
+
+ if (!clean_input_string(venue->title_)) {
+ return Status::Error(400, "Venue title must be encoded in UTF-8");
+ }
+ if (!clean_input_string(venue->address_)) {
+ return Status::Error(400, "Venue address must be encoded in UTF-8");
+ }
+ if (!clean_input_string(venue->provider_)) {
+ return Status::Error(400, "Venue provider must be encoded in UTF-8");
+ }
+ if (!clean_input_string(venue->id_)) {
+ return Status::Error(400, "Venue identifier must be encoded in UTF-8");
+ }
+ if (!clean_input_string(venue->type_)) {
+ return Status::Error(400, "Venue type must be encoded in UTF-8");
+ }
+
+ Venue result(venue);
+ if (result.empty()) {
+ return Status::Error(400, "Wrong venue location specified");
+ }
+
+ return result;
+}
+
+} // namespace td