-
Notifications
You must be signed in to change notification settings - Fork 7.2k
Expand file tree
/
Copy pathinline_bot_result.h
More file actions
148 lines (121 loc) · 3.34 KB
/
Copy pathinline_bot_result.h
File metadata and controls
148 lines (121 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#pragma once
#include "data/data_cloud_file.h"
#include "api/api_common.h"
#include "media/view/media_view_open_common.h"
#include "ui/effects/message_sending_animation_common.h"
class FileLoader;
class History;
class UserData;
struct HistoryMessageMarkupData;
struct HistoryItemCommonFields;
namespace Data {
class LocationPoint;
struct SendError;
} // namespace Data
namespace InlineBots {
namespace Layout {
class ItemBase;
} // namespace Layout
namespace internal {
class SendData;
} // namespace internal
class Result {
private:
// See http://stackoverflow.com/a/8147326
struct Creator;
public:
// Constructor is public only for std::make_unique<>() to work.
// You should use create() static method instead.
Result(not_null<Main::Session*> session, const Creator &creator);
static std::shared_ptr<Result> Create(
not_null<Main::Session*> session,
uint64 queryId,
const MTPBotInlineResult &mtpData);
uint64 getQueryId() const {
return _queryId;
}
QString getId() const {
return _id;
}
DocumentData *document() const {
return _document;
}
const QString &contentUrl() const {
return _content_url;
}
// This is real SendClickHandler::onClick implementation for the specified
// inline bot result. If it returns true you need to send this result.
bool onChoose(Layout::ItemBase *layout);
Media::View::OpenRequest openRequest();
void cancelFile();
bool hasThumbDisplay() const;
void addToHistory(
not_null<History*> history,
HistoryItemCommonFields &&fields) const;
[[nodiscard]] not_null<HistoryItem*> makeMessage(
not_null<History*> history,
HistoryItemCommonFields &&fields) const;
[[nodiscard]] Data::SendError getErrorOnSend(
not_null<History*> history) const;
// interface for Layout:: usage
std::optional<Data::LocationPoint> getLocationPoint() const;
QString getLayoutTitle() const;
QString getLayoutDescription() const;
~Result();
private:
void createGame(not_null<Main::Session*> session);
QSize thumbBox() const;
MTPWebDocument adjustAttributes(const MTPWebDocument &document);
MTPVector<MTPDocumentAttribute> adjustAttributes(
const MTPVector<MTPDocumentAttribute> &document,
const MTPstring &mimeType);
enum class Type {
Unknown,
Photo,
Video,
Audio,
Sticker,
File,
Gif,
Article,
Contact,
Geo,
Venue,
Game,
};
friend class internal::SendData;
friend class Layout::ItemBase;
struct Creator {
uint64 queryId = 0;
Type type = Type::Unknown;
};
not_null<Main::Session*> _session;
uint64 _queryId = 0;
QString _id;
Type _type = Type::Unknown;
QString _title, _description, _url;
QString _content_url;
DocumentData *_document = nullptr;
PhotoData *_photo = nullptr;
GameData *_game = nullptr;
std::unique_ptr<HistoryMessageMarkupData> _replyMarkup;
Data::CloudImage _thumbnail;
Data::CloudImage _locationThumbnail;
std::unique_ptr<internal::SendData> sendData;
};
struct ResultSelected {
std::shared_ptr<Result> result;
not_null<UserData*> bot;
PeerData *recipientOverride = nullptr;
Api::SendOptions options;
Ui::MessageSendingAnimationFrom messageSendingFrom;
// Open in OverlayWidget;
bool open = false;
};
} // namespace InlineBots