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 #pragma once
8
9 #include "td/telegram/td_api.h"
10 #include "td/telegram/telegram_api.h"
11
12 #include "td/utils/common.h"
13 #include "td/utils/StringBuilder.h"
14
15 namespace td {
16
17 // append only before Size
18 enum class MessageSearchFilter : int32 {
19 Empty,
20 Animation,
21 Audio,
22 Document,
23 Photo,
24 Video,
25 VoiceNote,
26 PhotoAndVideo,
27 Url,
28 ChatPhoto,
29 Call,
30 MissedCall,
31 VideoNote,
32 VoiceAndVideoNote,
33 Mention,
34 UnreadMention,
35 FailedToSend,
36 Pinned,
37 Size
38 };
39
message_search_filter_count()40 inline constexpr size_t message_search_filter_count() {
41 return static_cast<int32>(MessageSearchFilter::Size) - 1;
42 }
43
message_search_filter_index(MessageSearchFilter filter)44 inline int32 message_search_filter_index(MessageSearchFilter filter) {
45 CHECK(filter != MessageSearchFilter::Empty);
46 return static_cast<int32>(filter) - 1;
47 }
48
message_search_filter_index_mask(MessageSearchFilter filter)49 inline int32 message_search_filter_index_mask(MessageSearchFilter filter) {
50 if (filter == MessageSearchFilter::Empty) {
51 return 0;
52 }
53 return 1 << message_search_filter_index(filter);
54 }
55
call_message_search_filter_index(MessageSearchFilter filter)56 inline int32 call_message_search_filter_index(MessageSearchFilter filter) {
57 CHECK(filter == MessageSearchFilter::Call || filter == MessageSearchFilter::MissedCall);
58 return static_cast<int32>(filter) - static_cast<int32>(MessageSearchFilter::Call);
59 }
60
61 tl_object_ptr<telegram_api::MessagesFilter> get_input_messages_filter(MessageSearchFilter filter);
62
63 MessageSearchFilter get_message_search_filter(const tl_object_ptr<td_api::SearchMessagesFilter> &filter);
64
65 StringBuilder &operator<<(StringBuilder &string_builder, MessageSearchFilter filter);
66
67 } // namespace td
68