Unread outgoing messages in supergroups supported.

Looking through the history of group avatar photos added.
Messages about some contact joined Telegram are never unread.
This commit is contained in:
John Preston 2016-05-20 19:01:06 +03:00
parent 1dfb8cbde2
commit 533a955dda
19 changed files with 575 additions and 459 deletions

View file

@ -218,7 +218,7 @@ void ApiWrap::gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result, mt
LOG(("MTP Error: bad type in gotChatFull for channel: %1").arg(d.vfull_chat.type()));
return;
}
const auto &f(d.vfull_chat.c_channelFull());
auto &f(d.vfull_chat.c_channelFull());
PhotoData *photo = App::feedPhoto(f.vchat_photo);
ChannelData *channel = peer->asChannel();
channel->flagsFull = f.vflags.v;
@ -257,7 +257,7 @@ void ApiWrap::gotChatFull(PeerData *peer, const MTPmessages_ChatFull &result, mt
App::main()->peerUpdated(cfrom);
}
}
const auto &v(f.vbot_info.c_vector().v);
auto &v(f.vbot_info.c_vector().v);
for (QVector<MTPBotInfo>::const_iterator i = v.cbegin(), e = v.cend(); i < e; ++i) {
switch (i->type()) {
case mtpc_botInfo: {

View file

@ -1734,11 +1734,11 @@ namespace {
}
History *history(const PeerId &peer) {
return ::histories.findOrInsert(peer, 0, 0);
return ::histories.findOrInsert(peer, 0, 0, 0);
}
History *historyFromDialog(const PeerId &peer, int32 unreadCnt, int32 maxInboxRead) {
return ::histories.findOrInsert(peer, unreadCnt, maxInboxRead);
History *historyFromDialog(const PeerId &peer, int32 unreadCnt, int32 maxInboxRead, int32 maxOutboxRead) {
return ::histories.findOrInsert(peer, unreadCnt, maxInboxRead, maxOutboxRead);
}
History *historyLoaded(const PeerId &peer) {

View file

@ -158,7 +158,7 @@ namespace App {
Histories &histories();
History *history(const PeerId &peer);
History *historyFromDialog(const PeerId &peer, int32 unreadCnt, int32 maxInboxRead);
History *historyFromDialog(const PeerId &peer, int32 unreadCnt, int32 maxInboxRead, int32 maxOutboxRead);
History *historyLoaded(const PeerId &peer);
HistoryItem *histItemById(ChannelId channelId, MsgId itemId);
inline History *history(const PeerData *peer) {

View file

@ -313,7 +313,6 @@ inline const char *cApiSystemVersion() {
inline QString cApiAppVersion() {
return QString::number(AppVersion);
}
static const char *ApiLang = "en";
extern QString gKeyFile;
inline const QString &cDataFile() {

View file

@ -976,22 +976,22 @@ void DialogsInner::itemRemoved(HistoryItem *item) {
}
void DialogsInner::dialogsReceived(const QVector<MTPDialog> &added) {
for (QVector<MTPDialog>::const_iterator i = added.cbegin(), e = added.cend(); i != e; ++i) {
History *history = 0;
switch (i->type()) {
for_const (auto &dialog, added) {
History *history = nullptr;
switch (dialog.type()) {
case mtpc_dialog: {
const auto &d(i->c_dialog());
history = App::historyFromDialog(peerFromMTP(d.vpeer), d.vunread_count.v, d.vread_inbox_max_id.v);
auto &d(dialog.c_dialog());
history = App::historyFromDialog(peerFromMTP(d.vpeer), d.vunread_count.v, d.vread_inbox_max_id.v, d.vread_outbox_max_id.v);
if (App::main()) {
App::main()->applyNotifySetting(MTP_notifyPeer(d.vpeer), d.vnotify_settings, history);
}
} break;
case mtpc_dialogChannel: {
const auto &d(i->c_dialogChannel());
auto &d(dialog.c_dialogChannel());
PeerData *peer = App::peerLoaded(peerFromMTP(d.vpeer));
int32 unreadCount = (peer && peer->isMegagroup()) ? d.vunread_count.v : d.vunread_important_count.v;
History *history = App::historyFromDialog(peerFromMTP(d.vpeer), unreadCount, d.vread_inbox_max_id.v);
History *history = App::historyFromDialog(peerFromMTP(d.vpeer), unreadCount, d.vread_inbox_max_id.v, d.vread_outbox_max_id.v);
if (history->peer->isChannel()) {
history->asChannelHistory()->unreadCountAll = d.vunread_count.v;
history->peer->asChannel()->ptsReceived(d.vpts.v);
@ -1927,20 +1927,21 @@ void DialogsWidget::notify_historyMuteUpdated(History *history) {
}
void DialogsWidget::unreadCountsReceived(const QVector<MTPDialog> &dialogs) {
for (QVector<MTPDialog>::const_iterator i = dialogs.cbegin(), e = dialogs.cend(); i != e; ++i) {
switch (i->type()) {
for_const (auto &dialog, dialogs) {
switch (dialog.type()) {
case mtpc_dialog: {
const auto &d(i->c_dialog());
auto &d(dialog.c_dialog());
if (History *h = App::historyLoaded(peerFromMTP(d.vpeer))) {
App::main()->applyNotifySetting(MTP_notifyPeer(d.vpeer), d.vnotify_settings, h);
if (d.vunread_count.v >= h->unreadCount()) {
h->setUnreadCount(d.vunread_count.v);
h->inboxReadBefore = d.vread_inbox_max_id.v + 1;
}
accumulate_max(h->outboxReadBefore, d.vread_outbox_max_id.v + 1);
}
} break;
case mtpc_dialogChannel: {
const auto &d(i->c_dialogChannel());
auto &d(dialog.c_dialogChannel());
if (History *h = App::historyLoaded(peerFromMTP(d.vpeer))) {
if (h->peer->isChannel()) {
h->peer->asChannel()->ptsReceived(d.vpts.v);
@ -1955,6 +1956,7 @@ void DialogsWidget::unreadCountsReceived(const QVector<MTPDialog> &dialogs) {
h->setUnreadCount(unreadCount);
h->inboxReadBefore = d.vread_inbox_max_id.v + 1;
}
accumulate_max(h->outboxReadBefore, d.vread_outbox_max_id.v + 1);
}
} break;
}

View file

@ -99,6 +99,27 @@ bool needReSetInlineResultDocument(const MTPMessageMedia &media, DocumentData *e
return true;
}
MediaOverviewType messageMediaToOverviewType(HistoryMedia *media) {
switch (media->type()) {
case MediaTypePhoto: return OverviewPhotos;
case MediaTypeVideo: return OverviewVideos;
case MediaTypeFile: return OverviewFiles;
case MediaTypeMusicFile: return media->getDocument()->isMusic() ? OverviewMusicFiles : OverviewFiles;
case MediaTypeVoiceFile: return OverviewVoiceFiles;
case MediaTypeGif: return media->getDocument()->isGifv() ? OverviewCount : OverviewFiles;
default: break;
}
return OverviewCount;
}
MediaOverviewType serviceMediaToOverviewType(HistoryMedia *media) {
switch (media->type()) {
case MediaTypePhoto: return OverviewChatPhotos;
default: break;
}
return OverviewCount;
}
} // namespace
void historyInit() {
@ -108,7 +129,7 @@ void historyInit() {
History::History(const PeerId &peerId)
: peer(App::peer(peerId))
, _mute(isNotifyMuted(peer->notify)) {
if (peer->isChannel() || (peer->isUser() && peer->asUser()->botInfo)) {
if (peer->isUser() && peer->asUser()->botInfo) {
outboxReadBefore = INT_MAX;
}
for (auto &countData : overviewCountData) {
@ -418,8 +439,8 @@ HistoryJoined *ChannelHistory::insertJoinedMessage(bool unread) {
MTPDmessage::Flags flags = 0;
if (peerToUser(inviter->id) == MTP::authedId()) {
unread = false;
} else if (unread) {
flags |= MTPDmessage::Flag::f_unread;
//} else if (unread) {
// flags |= MTPDmessage::Flag::f_unread;
}
QDateTime inviteDate = peer->asChannel()->inviteDate;
@ -838,12 +859,13 @@ History *Histories::find(const PeerId &peerId) {
return (i == map.cend()) ? 0 : i.value();
}
History *Histories::findOrInsert(const PeerId &peerId, int32 unreadCount, int32 maxInboxRead) {
Map::const_iterator i = map.constFind(peerId);
History *Histories::findOrInsert(const PeerId &peerId, int32 unreadCount, int32 maxInboxRead, int32 maxOutboxRead) {
auto i = map.constFind(peerId);
if (i == map.cend()) {
i = map.insert(peerId, peerIsChannel(peerId) ? static_cast<History*>(new ChannelHistory(peerId)) : (new History(peerId)));
i.value()->setUnreadCount(unreadCount);
i.value()->inboxReadBefore = maxInboxRead + 1;
i.value()->outboxReadBefore = maxOutboxRead + 1;
}
return i.value();
}
@ -947,7 +969,7 @@ HistoryItem *Histories::addNewMessage(const MTPMessage &msg, NewMessageType type
PeerId peer = peerFromMessage(msg);
if (!peer) return nullptr;
HistoryItem *result = findOrInsert(peer, 0, 0)->addNewMessage(msg, type);
HistoryItem *result = App::history(peer)->addNewMessage(msg, type);
if (result && type == NewMessageUnread) {
checkForSwitchInlineButton(result);
}
@ -1697,7 +1719,7 @@ MsgId History::inboxRead(MsgId upTo) {
}
if (!upTo) upTo = msgIdForRead();
inboxReadBefore = qMax(inboxReadBefore, upTo + 1);
accumulate_max(inboxReadBefore, upTo + 1);
updateChatListEntry();
if (peer->migrateTo()) {
@ -1720,7 +1742,7 @@ MsgId History::inboxRead(HistoryItem *wasRead) {
MsgId History::outboxRead(int32 upTo) {
if (upTo < 0) return upTo;
if (!upTo) upTo = msgIdForRead();
if (outboxReadBefore < upTo + 1) outboxReadBefore = upTo + 1;
accumulate_max(outboxReadBefore, upTo + 1);
return upTo;
}
@ -3038,6 +3060,8 @@ void HistoryItem::clickHandlerPressedChanged(const ClickHandlerPtr &p, bool pres
void HistoryItem::destroy() {
// All this must be done for all items manually in History::clear(false)!
eraseFromOverview();
bool wasAtBottom = history()->loadedAtBottom();
_history->removeNotification(this);
detach();
@ -3141,6 +3165,30 @@ bool HistoryItem::canEdit(const QDateTime &cur) const {
return false;
}
bool HistoryItem::unread() const {
// Messages from myself are always read.
if (history()->peer->isSelf()) return false;
if (out()) {
// Outgoing messages in converted chats are always read.
if (history()->peer->migrateTo()) return false;
if (id > 0) {
if (id < history()->outboxReadBefore) return false;
if (auto channel = history()->peer->asChannel()) {
if (!channel->isMegagroup()) return false;
}
}
return true;
}
if (id > 0) {
if (id < history()->inboxReadBefore) return false;
return true;
}
return (_flags & MTPDmessage_ClientFlag::f_clientside_unread);
}
void HistoryItem::destroyUnreadBar() {
if (Has<HistoryMessageUnreadBar>()) {
RemoveComponents(HistoryMessageUnreadBar::Bit());
@ -7199,7 +7247,7 @@ int32 HistoryMessage::addToOverview(AddToOverviewMethod method) {
int32 result = 0;
if (HistoryMedia *media = getMedia()) {
MediaOverviewType type = mediaToOverviewType(media);
MediaOverviewType type = messageMediaToOverviewType(media);
if (type != OverviewCount) {
if (history()->addToOverview(type, id, method)) {
result |= (1 << type);
@ -7216,7 +7264,7 @@ int32 HistoryMessage::addToOverview(AddToOverviewMethod method) {
void HistoryMessage::eraseFromOverview() {
if (HistoryMedia *media = getMedia()) {
MediaOverviewType type = mediaToOverviewType(media);
MediaOverviewType type = messageMediaToOverviewType(media);
if (type != OverviewCount) {
history()->eraseFromOverview(type, id);
}
@ -7274,10 +7322,6 @@ QString HistoryMessage::inDialogsText() const {
return emptyText() ? (_media ? _media->inDialogsText() : QString()) : _text.originalText(AllTextSelection, ExpandLinksNone);
}
HistoryMedia *HistoryMessage::getMedia() const {
return _media.data();
}
void HistoryMessage::setMedia(const MTPMessageMedia *media) {
if (!_media && (!media || media->type() == mtpc_messageMediaEmpty)) return;
@ -7659,11 +7703,6 @@ void HistoryMessage::dependencyItemRemoved(HistoryItem *dependency) {
}
}
void HistoryMessage::destroy() {
eraseFromOverview();
HistoryItem::destroy();
}
int HistoryMessage::resizeGetHeight_(int width) {
int result = performResizeGetHeight(width);
@ -8462,8 +8501,28 @@ QString HistoryService::notificationText() const {
return msg;
}
HistoryMedia *HistoryService::getMedia() const {
return _media.data();
int32 HistoryService::addToOverview(AddToOverviewMethod method) {
if (!indexInOverview()) return 0;
int32 result = 0;
if (auto media = getMedia()) {
MediaOverviewType type = serviceMediaToOverviewType(media);
if (type != OverviewCount) {
if (history()->addToOverview(type, id, method)) {
result |= (1 << type);
}
}
}
return result;
}
void HistoryService::eraseFromOverview() {
if (auto media = getMedia()) {
MediaOverviewType type = serviceMediaToOverviewType(media);
if (type != OverviewCount) {
history()->eraseFromOverview(type, id);
}
}
}
HistoryService::~HistoryService() {

View file

@ -48,7 +48,7 @@ public:
void step_typings(uint64 ms, bool timer);
History *find(const PeerId &peerId);
History *findOrInsert(const PeerId &peerId, int32 unreadCount, int32 maxInboxRead);
History *findOrInsert(const PeerId &peerId, int32 unreadCount, int32 maxInboxRead, int32 maxOutboxRead);
void clear();
void remove(const PeerId &peer);
@ -114,6 +114,7 @@ enum MediaOverviewType {
OverviewFiles = 3,
OverviewVoiceFiles = 4,
OverviewLinks = 5,
OverviewChatPhotos = 6,
OverviewCount
};
@ -126,6 +127,7 @@ inline MTPMessagesFilter typeToMediaFilter(MediaOverviewType &type) {
case OverviewFiles: return MTP_inputMessagesFilterDocument();
case OverviewVoiceFiles: return MTP_inputMessagesFilterVoice();
case OverviewLinks: return MTP_inputMessagesFilterUrl();
case OverviewChatPhotos: return MTP_inputMessagesFilterChatPhotos();
case OverviewCount: break;
default: type = OverviewCount; break;
}
@ -1149,7 +1151,7 @@ public:
const HistoryBlock *block() const {
return _block;
}
virtual void destroy();
void destroy();
void detach();
void detachFast();
bool detached() const {
@ -1186,16 +1188,7 @@ public:
bool out() const {
return _flags & MTPDmessage::Flag::f_out;
}
bool unread() const {
if (out() && id > 0 && id < _history->outboxReadBefore) return false;
if (!out() && id > 0) {
if (id < _history->inboxReadBefore) return false;
if (channelId() != NoChannel) return true; // no unread flag for incoming messages in channels
}
if (history()->peer->isSelf()) return false; // messages from myself are always read
if (out() && history()->peer->migrateTo()) return false; // outgoing messages in converted chats are always read
return (_flags & MTPDmessage::Flag::f_unread);
}
bool unread() const;
bool mentionsMe() const {
return _flags & MTPDmessage::Flag::f_mentioned;
}
@ -1288,6 +1281,8 @@ public:
virtual int32 addToOverview(AddToOverviewMethod method) {
return 0;
}
virtual void eraseFromOverview() {
}
virtual bool hasBubble() const {
return false;
}
@ -1363,8 +1358,8 @@ public:
return FullMsgId(channelId(), id);
}
virtual HistoryMedia *getMedia() const {
return nullptr;
HistoryMedia *getMedia() const {
return _media.data();
}
virtual void setText(const TextWithEntities &textWithEntities) {
}
@ -1772,19 +1767,6 @@ protected:
};
inline MediaOverviewType mediaToOverviewType(HistoryMedia *media) {
switch (media->type()) {
case MediaTypePhoto: return OverviewPhotos;
case MediaTypeVideo: return OverviewVideos;
case MediaTypeFile: return OverviewFiles;
case MediaTypeMusicFile: return media->getDocument()->isMusic() ? OverviewMusicFiles : OverviewFiles;
case MediaTypeVoiceFile: return OverviewVoiceFiles;
case MediaTypeGif: return media->getDocument()->isGifv() ? OverviewCount : OverviewFiles;
default: break;
}
return OverviewCount;
}
class HistoryFileMedia : public HistoryMedia {
public:
using HistoryMedia::HistoryMedia;
@ -2654,8 +2636,6 @@ public:
void dependencyItemRemoved(HistoryItem *dependency) override;
void destroy() override;
bool hasPoint(int x, int y) const override;
bool pointInTime(int32 right, int32 bottom, int x, int y, InfoDisplayType type) const override;
@ -2680,11 +2660,10 @@ public:
void applyEdition(const MTPDmessage &message) override;
void updateMedia(const MTPMessageMedia *media) override;
int32 addToOverview(AddToOverviewMethod method) override;
void eraseFromOverview();
void eraseFromOverview() override;
TextWithEntities selectedText(TextSelection selection) const override;
QString inDialogsText() const override;
HistoryMedia *getMedia() const override;
void setText(const TextWithEntities &textWithEntities) override;
TextWithEntities originalText() const override;
bool textHasLinks() const override;
@ -2812,9 +2791,9 @@ inline MTPDmessage::Flags newMessageFlags(PeerData *p) {
MTPDmessage::Flags result = 0;
if (!p->isSelf()) {
result |= MTPDmessage::Flag::f_out;
if (p->isChat() || (p->isUser() && !p->asUser()->botInfo)) {
result |= MTPDmessage::Flag::f_unread;
}
//if (p->isChat() || (p->isUser() && !p->asUser()->botInfo)) {
// result |= MTPDmessage::Flag::f_unread;
//}
}
return result;
}
@ -2873,6 +2852,9 @@ public:
void drawInDialog(Painter &p, const QRect &r, bool act, const HistoryItem *&cacheFor, Text &cache) const override;
QString notificationText() const override;
int32 addToOverview(AddToOverviewMethod method) override;
void eraseFromOverview() override;
bool needCheck() const override {
return false;
}
@ -2883,8 +2865,6 @@ public:
QString inDialogsText() const override;
QString inReplyText() const override;
HistoryMedia *getMedia() const override;
void setServiceText(const QString &text);
~HistoryService();

View file

@ -228,7 +228,7 @@ void IntroPhone::phoneCheckDone(const MTPauth_CheckedPhone &result) {
checkRequest.start(1000);
MTPauth_SendCode::Flags flags = 0;
sentRequest = MTP::send(MTPauth_SendCode(MTP_flags(flags), MTP_string(sentPhone), MTPBool(), MTP_int(ApiId), MTP_string(ApiHash), MTP_string(Sandbox::LangSystemISO())), rpcDone(&IntroPhone::phoneSubmitDone), rpcFail(&IntroPhone::phoneSubmitFail));
sentRequest = MTP::send(MTPauth_SendCode(MTP_flags(flags), MTP_string(sentPhone), MTPBool(), MTP_int(ApiId), MTP_string(ApiHash)), rpcDone(&IntroPhone::phoneSubmitDone), rpcFail(&IntroPhone::phoneSubmitFail));
} else {
showError(lang(lng_bad_phone_noreg), true);
enableAll(true);
@ -269,7 +269,7 @@ void IntroPhone::toSignUp() {
checkRequest.start(1000);
MTPauth_SendCode::Flags flags = 0;
sentRequest = MTP::send(MTPauth_SendCode(MTP_flags(flags), MTP_string(sentPhone), MTPBool(), MTP_int(ApiId), MTP_string(ApiHash), MTP_string(Sandbox::LangSystemISO())), rpcDone(&IntroPhone::phoneSubmitDone), rpcFail(&IntroPhone::phoneSubmitFail));
sentRequest = MTP::send(MTPauth_SendCode(MTP_flags(flags), MTP_string(sentPhone), MTPBool(), MTP_int(ApiId), MTP_string(ApiHash)), rpcDone(&IntroPhone::phoneSubmitDone), rpcFail(&IntroPhone::phoneSubmitFail));
}
bool IntroPhone::phoneSubmitFail(const RPCError &error) {

View file

@ -1707,7 +1707,7 @@ void MainWidget::dialogsCancelled() {
}
void MainWidget::serviceNotification(const QString &msg, const MTPMessageMedia &media) {
MTPDmessage::Flags flags = MTPDmessage::Flag::f_unread | MTPDmessage::Flag::f_entities | MTPDmessage::Flag::f_from_id;
MTPDmessage::Flags flags = MTPDmessage::Flag::f_entities | MTPDmessage::Flag::f_from_id | MTPDmessage_ClientFlag::f_clientside_unread;
QString sendingText, leftText = msg;
EntitiesInText sendingEntities, leftEntities;
textParseEntities(leftText, _historyTextNoMonoOptions.flags, &leftEntities);
@ -4295,7 +4295,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) {
UserData *user = App::userLoaded(d.vuser_id.v);
if (user) {
if (App::history(user->id)->loadedAtBottom()) {
App::history(user->id)->addNewService(clientMsgId(), date(d.vdate), lng_action_user_registered(lt_from, user->name), MTPDmessage::Flag::f_unread);
App::history(user->id)->addNewService(clientMsgId(), date(d.vdate), lng_action_user_registered(lt_from, user->name), 0);
}
}
} break;
@ -4486,11 +4486,17 @@ void MainWidget::feedUpdate(const MTPUpdate &update) {
} break;
case mtpc_updateReadChannelInbox: {
const auto &d(update.c_updateReadChannelInbox());
ChannelData *channel = App::channelLoaded(d.vchannel_id.v);
auto &d(update.c_updateReadChannelInbox());
auto channel = App::channelLoaded(d.vchannel_id.v);
App::feedInboxRead(peerFromChannel(d.vchannel_id.v), d.vmax_id.v);
} break;
case mtpc_updateReadChannelOutbox: {
auto &d(update.c_updateReadChannelOutbox());
auto channel = App::channelLoaded(d.vchannel_id.v);
App::feedOutboxRead(peerFromChannel(d.vchannel_id.v), d.vmax_id.v);
} break;
case mtpc_updateDeleteChannelMessages: {
const auto &d(update.c_updateDeleteChannelMessages());
ChannelData *channel = App::channelLoaded(d.vchannel_id.v);

View file

@ -773,7 +773,7 @@ PasscodeWidget *MainWindow::passcodeWidget() {
}
void MainWindow::showPhoto(const PhotoOpenClickHandler *lnk, HistoryItem *item) {
return lnk->peer() ? showPhoto(lnk->photo(), lnk->peer()) : showPhoto(lnk->photo(), item);
return (!item && lnk->peer()) ? showPhoto(lnk->photo(), lnk->peer()) : showPhoto(lnk->photo(), item);
}
void MainWindow::showPhoto(PhotoData *photo, HistoryItem *item) {

View file

@ -57,65 +57,30 @@ namespace {
0, // maxh
Qt::LayoutDirectionAuto, // dir
};
bool typeHasMediaOverview(MediaOverviewType type) {
switch (type) {
case OverviewPhotos:
case OverviewVideos:
case OverviewMusicFiles:
case OverviewFiles:
case OverviewVoiceFiles:
case OverviewLinks: return true;
default: break;
}
return false;
}
}
MediaView::MediaView() : TWidget(App::wnd())
, _photo(0)
, _doc(0)
, _overview(OverviewCount)
, _leftNavVisible(false)
, _rightNavVisible(false)
, _saveVisible(false)
, _headerHasLink(false)
, _animStarted(getms())
, _width(0)
, _x(0)
, _y(0)
, _w(0)
, _h(0)
, _xStart(0)
, _yStart(0)
, _zoom(0)
, _zoomToScreen(0)
, _pressed(false)
, _dragging(0)
, _gif(0)
, _full(-1)
, _docNameWidth(0)
, _docSizeWidth(0)
, _docThumbx(0)
, _docThumby(0)
, _docThumbw(0)
, _docRadial(animation(this, &MediaView::step_radial))
, _docDownload(this, lang(lng_media_download), st::mvDocLink)
, _docSaveAs(this, lang(lng_mediaview_save_as), st::mvDocLink)
, _docCancel(this, lang(lng_cancel), st::mvDocLink)
, _migrated(0)
, _history(0)
, _peer(0)
, _user(0)
, _from(0)
, _index(-1)
, _msgid(0)
, _msgmigrated(false)
, _channel(NoChannel)
, _canForward(false)
, _canDelete(false)
, _loadRequest(0)
, _over(OverNone)
, _down(OverNone)
, _lastAction(-st::mvDeltaFromLastAction, -st::mvDeltaFromLastAction)
, _ignoringDropdown(false)
, _a_state(animation(this, &MediaView::step_state))
, _controlsState(ControlsShown)
, _controlsAnimStarted(0)
, _menu(0)
, _dropdown(this, st::mvDropdown)
, _receiveMouse(true)
, _touchPress(false)
, _touchMove(false)
, _touchRightButton(false)
, _saveMsgStarted(0)
, _saveMsgOpacity(0) {
TextCustomTagsMap custom;
custom.insert(QChar('c'), qMakePair(textcmdStartLink(1), textcmdStopLink()));
@ -195,7 +160,7 @@ void MediaView::moveToScreen() {
void MediaView::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) {
if (!_photo && !_doc) return;
if (_history && (_history->peer == peer || (_migrated && _migrated->peer == peer)) && type == _overview) {
if (_history && (_history->peer == peer || (_migrated && _migrated->peer == peer)) && type == _overview && _msgid) {
_index = -1;
if (_msgmigrated) {
for (int i = 0, l = _migrated->overview[_overview].size(); i < l; ++i) {
@ -361,15 +326,21 @@ void MediaView::updateControls() {
_dateNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, st::mvFont->width(_dateText), st::mvFont->height);
}
updateHeader();
if (_photo || (_history && (_overview == OverviewPhotos || _overview == OverviewFiles))) {
if (_photo || (_history && (_overview == OverviewPhotos || _overview == OverviewChatPhotos || _overview == OverviewFiles))) {
_leftNavVisible = (_index > 0) || (_index == 0 && (
(!_msgmigrated && _history && _history->overview[_overview].size() < _history->overviewCount(_overview)) ||
(_msgmigrated && _migrated && _migrated->overview[_overview].size() < _migrated->overviewCount(_overview)) ||
(!_msgmigrated && _history && _migrated && (!_migrated->overview[_overview].isEmpty() || _migrated->overviewCount(_overview) > 0))));
(!_msgmigrated && _history && _migrated && (!_migrated->overview[_overview].isEmpty() || _migrated->overviewCount(_overview) > 0)))) ||
(_index < 0 && _photo == _additionalChatPhoto &&
((_history && !_history->overview[_overview].isEmpty()) ||
(_migrated && _history->overviewLoaded(_overview) && !_migrated->overview[_overview].isEmpty()))
);
_rightNavVisible = (_index >= 0) && (
(!_msgmigrated && _history && _index + 1 < _history->overview[_overview].size()) ||
(_msgmigrated && _migrated && _index + 1 < _migrated->overview[_overview].size()) ||
(_msgmigrated && _migrated && _history && (!_history->overview[_overview].isEmpty() || _history->overviewCount(_overview) > 0)) ||
(!_msgmigrated && _history && _index + 1 == _history->overview[_overview].size() && _additionalChatPhoto) ||
(_msgmigrated && _migrated && _index + 1 == _migrated->overview[_overview].size() && _history->overviewCount(_overview) == 0 && _additionalChatPhoto) ||
(!_history && _user && (_index + 1 < _user->photos.size() || _index + 1 < _user->photosCount)));
if (_msgmigrated && !_history->overviewLoaded(_overview)) {
_leftNavVisible = _rightNavVisible = false;
@ -397,7 +368,7 @@ void MediaView::updateDropdown() {
_btnCopy->setVisible((_doc && fileShown()) || (_photo && _photo->loaded()));
_btnForward->setVisible(_canForward);
_btnDelete->setVisible(_canDelete || (_photo && App::self() && _user == App::self()) || (_photo && _photo->peer && _photo->peer->photoId == _photo->id && (_photo->peer->isChat() || (_photo->peer->isChannel() && _photo->peer->asChannel()->amCreator()))));
_btnViewAll->setVisible((_overview != OverviewCount) && _history);
_btnViewAll->setVisible(_history && typeHasMediaOverview(_overview));
_btnViewAll->setText(lang(_doc ? lng_mediaview_files_all : lng_mediaview_photos_all));
_dropdown.updateButtons();
_dropdown.moveToRight(0, height() - _dropdown.height());
@ -750,7 +721,7 @@ void MediaView::onDelete() {
void MediaView::onOverview() {
if (_menu) _menu->hideMenu(true);
if (!_history || _overview == OverviewCount) {
if (!_history || !typeHasMediaOverview(_overview)) {
update();
return;
}
@ -777,7 +748,7 @@ void MediaView::onCopy() {
}
void MediaView::showPhoto(PhotoData *photo, HistoryItem *context) {
_history = context ? context->history() : 0;
_history = context ? context->history() : nullptr;
if (_history) {
if (_history->peer->migrateFrom()) {
_migrated = App::history(_history->peer->migrateFrom()->id);
@ -786,8 +757,9 @@ void MediaView::showPhoto(PhotoData *photo, HistoryItem *context) {
_history = App::history(_history->peer->migrateTo()->id);
}
} else {
_migrated = 0;
_migrated = nullptr;
}
_additionalChatPhoto = nullptr;
_peer = 0;
_user = 0;
_saveMsgStarted = 0;
@ -810,7 +782,14 @@ void MediaView::showPhoto(PhotoData *photo, HistoryItem *context) {
_canDelete = context ? context->canDelete() : false;
_photo = photo;
if (_history) {
_overview = OverviewPhotos;
if (context && !context->toHistoryMessage()) {
_overview = OverviewChatPhotos;
if (!_history->peer->isUser()) {
computeAdditionalChatPhoto(_history->peer, computeLastOverviewChatPhoto().photo);
}
} else {
_overview = OverviewPhotos;
}
findCurrent();
}
@ -820,7 +799,8 @@ void MediaView::showPhoto(PhotoData *photo, HistoryItem *context) {
}
void MediaView::showPhoto(PhotoData *photo, PeerData *context) {
_history = _migrated = 0;
_history = _migrated = nullptr;
_additionalChatPhoto = nullptr;
_peer = context;
_user = context->asUser();
_saveMsgStarted = 0;
@ -854,6 +834,26 @@ void MediaView::showPhoto(PhotoData *photo, PeerData *context) {
if (_user->photosCount < 0) {
loadBack();
}
} else if ((_history = App::historyLoaded(_peer))) {
if (_history->peer->migrateFrom()) {
_migrated = App::history(_history->peer->migrateFrom()->id);
} else if (_history->peer->migrateTo()) {
_migrated = _history;
_history = App::history(_history->peer->migrateTo()->id);
}
auto lastChatPhoto = computeLastOverviewChatPhoto();
if (_photo == lastChatPhoto.photo) {
return showPhoto(_photo, lastChatPhoto.item);
}
computeAdditionalChatPhoto(_history->peer, lastChatPhoto.photo);
if (_additionalChatPhoto == _photo) {
_overview = OverviewChatPhotos;
} else {
_additionalChatPhoto = nullptr;
_history = _migrated = nullptr;
}
}
displayPhoto(photo, 0);
preloadData(0);
@ -873,6 +873,7 @@ void MediaView::showDocument(DocumentData *doc, HistoryItem *context) {
} else {
_migrated = 0;
}
_additionalChatPhoto = nullptr;
_saveMsgStarted = 0;
_peer = 0;
_user = 0;
@ -1510,12 +1511,34 @@ void MediaView::keyPressEvent(QKeyEvent *e) {
}
}
void MediaView::moveToNext(int32 delta) {
if (_index < 0 || (_history && _overview != OverviewPhotos && _overview != OverviewFiles) || (_overview == OverviewCount && !_user)) {
return;
bool MediaView::moveToNext(int32 delta) {
if (_index < 0) {
if (delta == -1 && _photo == _additionalChatPhoto) {
auto lastChatPhoto = computeLastOverviewChatPhoto();
if (lastChatPhoto.item) {
if (lastChatPhoto.item->history() == _history) {
_index = _history->overview[_overview].size() - 1;
_msgmigrated = false;
} else {
_index = _migrated->overview[_overview].size() - 1;
_msgmigrated = true;
}
_msgid = lastChatPhoto.item->id;
_channel = _history ? _history->channelId() : NoChannel;
_canForward = _msgid > 0;
_canDelete = lastChatPhoto.item->canDelete();
stopGif();
displayPhoto(lastChatPhoto.photo, lastChatPhoto.item); preloadData(delta);
return true;
}
}
return false;
}
if ((_history && _overview != OverviewPhotos && _overview != OverviewChatPhotos && _overview != OverviewFiles) || (_overview == OverviewCount && !_user)) {
return false;
}
if (_msgmigrated && !_history->overviewLoaded(_overview)) {
return;
return true;
}
int32 newIndex = _index + delta;
@ -1549,6 +1572,14 @@ void MediaView::moveToNext(int32 delta) {
preloadData(delta);
}
}
} else if (!newMigrated && newIndex == _history->overview[_overview].size() && _additionalChatPhoto) {
_index = -1;
_msgid = 0;
_msgmigrated = false;
_canForward = false;
_canDelete = false;
stopGif();
displayPhoto(_additionalChatPhoto, 0);
}
if (delta < 0 && _index < MediaOverviewStartPerPage) {
loadBack();
@ -1563,26 +1594,34 @@ void MediaView::moveToNext(int32 delta) {
loadBack();
}
}
return true;
}
void MediaView::preloadData(int32 delta) {
if (_index < 0 || (!_user && _overview == OverviewCount)) return;
int indexInOverview = _index;
bool indexOfMigratedItem = _msgmigrated;
if (_index < 0) {
if (_overview != OverviewChatPhotos) return;
indexInOverview = _history->overview[OverviewChatPhotos].size();
indexOfMigratedItem = false;
}
if (!_user && _overview == OverviewCount) return;
int32 from = _index + (delta ? delta : -1), to = _index + (delta ? delta * MediaOverviewPreloadCount : 1);
int32 from = indexInOverview + (delta ? delta : -1), to = indexInOverview + (delta ? delta * MediaOverviewPreloadCount : 1);
if (from > to) qSwap(from, to);
if (_history && _overview != OverviewCount) {
int32 forgetIndex = _index - delta * 2;
History *forgetHistory = _msgmigrated ? _migrated : _history;
int32 forgetIndex = indexInOverview - delta * 2;
History *forgetHistory = indexOfMigratedItem ? _migrated : _history;
if (_migrated) {
if (_msgmigrated && forgetIndex >= _migrated->overview[_overview].size()) {
if (indexOfMigratedItem && forgetIndex >= _migrated->overview[_overview].size()) {
forgetHistory = _history;
forgetIndex -= _migrated->overview[_overview].size() + (_history->overviewCount(_overview) - _history->overview[_overview].size());
} else if (!_msgmigrated && forgetIndex < 0) {
} else if (!indexOfMigratedItem && forgetIndex < 0) {
forgetHistory = _migrated;
forgetIndex += _migrated->overview[_overview].size();
}
}
if (forgetIndex >= 0 && forgetIndex < forgetHistory->overview[_overview].size() && (forgetHistory != (_msgmigrated ? _migrated : _history) || forgetIndex != _index)) {
if (forgetIndex >= 0 && forgetIndex < forgetHistory->overview[_overview].size() && (forgetHistory != (indexOfMigratedItem ? _migrated : _history) || forgetIndex != indexInOverview)) {
if (HistoryItem *item = App::histItemById(forgetHistory->channelId(), forgetHistory->overview[_overview][forgetIndex])) {
if (HistoryMedia *media = item->getMedia()) {
switch (media->type()) {
@ -1596,18 +1635,18 @@ void MediaView::preloadData(int32 delta) {
}
for (int32 i = from; i <= to; ++i) {
History *previewHistory = _msgmigrated ? _migrated : _history;
History *previewHistory = indexOfMigratedItem ? _migrated : _history;
int32 previewIndex = i;
if (_migrated) {
if (_msgmigrated && previewIndex >= _migrated->overview[_overview].size()) {
if (indexOfMigratedItem && previewIndex >= _migrated->overview[_overview].size()) {
previewHistory = _history;
previewIndex -= _migrated->overview[_overview].size() + (_history->overviewCount(_overview) - _history->overview[_overview].size());
} else if (!_msgmigrated && previewIndex < 0) {
} else if (!indexOfMigratedItem && previewIndex < 0) {
previewHistory = _migrated;
previewIndex += _migrated->overview[_overview].size();
}
}
if (previewIndex >= 0 && previewIndex < previewHistory->overview[_overview].size() && (previewHistory != (_msgmigrated ? _migrated : _history) || previewIndex != _index)) {
if (previewIndex >= 0 && previewIndex < previewHistory->overview[_overview].size() && (previewHistory != (indexOfMigratedItem ? _migrated : _history) || previewIndex != indexInOverview)) {
if (HistoryItem *item = App::histItemById(previewHistory->channelId(), previewHistory->overview[_overview][previewIndex])) {
if (HistoryMedia *media = item->getMedia()) {
switch (media->type()) {
@ -1626,17 +1665,17 @@ void MediaView::preloadData(int32 delta) {
}
} else if (_user) {
for (int32 i = from; i <= to; ++i) {
if (i >= 0 && i < _user->photos.size() && i != _index) {
if (i >= 0 && i < _user->photos.size() && i != indexInOverview) {
_user->photos[i]->thumb->load();
}
}
for (int32 i = from; i <= to; ++i) {
if (i >= 0 && i < _user->photos.size() && i != _index) {
if (i >= 0 && i < _user->photos.size() && i != indexInOverview) {
_user->photos[i]->download();
}
}
int32 forgetIndex = _index - delta * 2;
if (forgetIndex >= 0 && forgetIndex < _user->photos.size() && forgetIndex != _index) {
int32 forgetIndex = indexInOverview - delta * 2;
if (forgetIndex >= 0 && forgetIndex < _user->photos.size() && forgetIndex != indexInOverview) {
_user->photos[forgetIndex]->forget();
}
}
@ -1651,11 +1690,9 @@ void MediaView::mousePressEvent(QMouseEvent *e) {
if (e->button() == Qt::LeftButton) {
_down = OverNone;
if (!ClickHandler::getPressed()) {
if (_over == OverLeftNav && _index >= 0) {
moveToNext(-1);
if (_over == OverLeftNav && moveToNext(-1)) {
_lastAction = e->pos();
} else if (_over == OverRightNav && _index >= 0) {
moveToNext(1);
} else if (_over == OverRightNav && moveToNext(1)) {
_lastAction = e->pos();
} else if (_over == OverName) {
_down = OverName;
@ -2062,7 +2099,7 @@ void MediaView::loadBack() {
App::main()->loadMediaBack(_migrated->peer, _overview);
} else {
App::main()->loadMediaBack(_history->peer, _overview);
if (_migrated && _index == 0 && _migrated->overview[_overview].isEmpty() && !_migrated->overviewLoaded(_overview)) {
if (_migrated && _index == 0 && (_migrated->overviewCount(_overview) < 0 || _migrated->overview[_overview].isEmpty()) && !_migrated->overviewLoaded(_overview)) {
App::main()->loadMediaBack(_migrated->peer, _overview);
}
}
@ -2076,6 +2113,43 @@ void MediaView::loadBack() {
}
}
MediaView::LastChatPhoto MediaView::computeLastOverviewChatPhoto() {
LastChatPhoto emptyResult = { nullptr, nullptr };
auto lastPhotoInOverview = [&emptyResult](auto history, auto list) -> LastChatPhoto {
if (auto item = App::histItemById(history->channelId(), list.back())) {
if (auto media = item->getMedia()) {
if (media->type() == MediaTypePhoto && !item->toHistoryMessage()) {
return { item, static_cast<HistoryPhoto*>(media)->photo() };
}
}
}
return emptyResult;
};
if (!_history) return emptyResult;
auto &list = _history->overview[OverviewChatPhotos];
if (!list.isEmpty()) {
return lastPhotoInOverview(_history, list);
}
if (!_migrated || !_history->overviewLoaded(OverviewChatPhotos)) return emptyResult;
auto &migratedList = _migrated->overview[OverviewChatPhotos];
if (!migratedList.isEmpty()) {
return lastPhotoInOverview(_migrated, migratedList);
}
return emptyResult;
}
void MediaView::computeAdditionalChatPhoto(PeerData *peer, PhotoData *lastOverviewPhoto) {
if (!peer->photoId || peer->photoId == UnknownPeerPhotoId) {
_additionalChatPhoto = nullptr;
} else if (lastOverviewPhoto && lastOverviewPhoto->id == peer->photoId) {
_additionalChatPhoto = nullptr;
} else {
_additionalChatPhoto = App::photo(peer->photoId);
}
}
void MediaView::userPhotosLoaded(UserData *u, const MTPphotos_Photos &photos, mtpRequestId req) {
if (req == _loadRequest) {
_loadRequest = 0;
@ -2135,6 +2209,13 @@ void MediaView::updateHeader() {
} else {
index += count - _history->overview[_overview].size();
}
if (_additionalChatPhoto) {
++count;
}
} else if (index < 0 && _additionalChatPhoto && _photo == _additionalChatPhoto) {
// Additional chat photo (not in the list => place it at the end of the list).
index = count;
++count;
} else {
count = 0; // unknown yet
}
@ -2142,7 +2223,7 @@ void MediaView::updateHeader() {
} else if (_user) {
count = _user->photosCount ? _user->photosCount : _user->photos.size();
}
if (_index >= 0 && _index < count && count > 1) {
if (index >= 0 && index < count && count > 1) {
if (_doc) {
_headerText = lng_mediaview_file_n_of_count(lt_file, _doc->name.isEmpty() ? lang(lng_mediaview_doc_image) : _doc->name, lt_n, QString::number(index + 1), lt_count, QString::number(count));
} else {
@ -2161,7 +2242,7 @@ void MediaView::updateHeader() {
_headerText = lang(lng_mediaview_single_photo);
}
}
_headerHasLink = (_overview != OverviewCount) && _history;
_headerHasLink = _history && typeHasMediaOverview(_overview);
int32 hwidth = st::mvThickFont->width(_headerText);
if (hwidth > width() / 3) {
hwidth = width() / 3;

View file

@ -48,7 +48,7 @@ public:
void showPhoto(PhotoData *photo, PeerData *context);
void showDocument(DocumentData *doc, HistoryItem *context);
void moveToScreen();
void moveToNext(int32 delta);
bool moveToNext(int32 delta);
void preloadData(int32 delta);
void leaveToChildEvent(QEvent *e) override { // e -- from enterEvent() of child TWidget
@ -111,6 +111,14 @@ private:
void findCurrent();
void loadBack();
// Computes the last OverviewChatPhotos PhotoData* from _history or _migrated.
struct LastChatPhoto {
HistoryItem *item;
PhotoData *photo;
};
LastChatPhoto computeLastOverviewChatPhoto();
void computeAdditionalChatPhoto(PeerData *peer, PhotoData *lastOverviewPhoto);
void userPhotosLoaded(UserData *u, const MTPphotos_Photos &photos, mtpRequestId req);
void deletePhotosDone(const MTPVector<MTPlong> &result);
@ -124,14 +132,17 @@ private:
QBrush _transparentBrush;
PhotoData *_photo;
DocumentData *_doc;
MediaOverviewType _overview;
PhotoData *_photo = nullptr;
DocumentData *_doc = nullptr;
MediaOverviewType _overview = OverviewCount;
QRect _closeNav, _closeNavIcon;
QRect _leftNav, _leftNavIcon, _rightNav, _rightNavIcon;
QRect _headerNav, _nameNav, _dateNav;
QRect _saveNav, _saveNavIcon, _moreNav, _moreNavIcon;
bool _leftNavVisible, _rightNavVisible, _saveVisible, _headerHasLink;
bool _leftNavVisible = false;
bool _rightNavVisible = false;
bool _saveVisible = false;
bool _headerHasLink = false;
QString _dateText;
QString _headerText;
@ -140,15 +151,17 @@ private:
uint64 _animStarted;
int32 _width, _x, _y, _w, _h, _xStart, _yStart;
int32 _zoom; // < 0 - out, 0 - none, > 0 - in
float64 _zoomToScreen; // for documents
int _width = 0;
int _x = 0, _y = 0, _w = 0, _h = 0;
int _xStart = 0, _yStart = 0;
int _zoom = 0; // < 0 - out, 0 - none, > 0 - in
float64 _zoomToScreen = 0.; // for documents
QPoint _mStart;
bool _pressed;
int32 _dragging;
bool _pressed = false;
int32 _dragging = 0;
QPixmap _current;
ClipReader *_gif;
int32 _full; // -1 - thumb, 0 - medium, 1 - full
ClipReader *_gif = nullptr;
int32 _full = -1; // -1 - thumb, 0 - medium, 1 - full
bool fileShown() const;
bool gifShown() const;
@ -157,26 +170,32 @@ private:
style::sprite _docIcon;
style::color _docIconColor;
QString _docName, _docSize, _docExt;
int32 _docNameWidth, _docSizeWidth, _docExtWidth;
int _docNameWidth = 0, _docSizeWidth = 0, _docExtWidth = 0;
QRect _docRect, _docIconRect;
int32 _docThumbx, _docThumby, _docThumbw;
int _docThumbx = 0, _docThumby = 0, _docThumbw = 0;
RadialAnimation _docRadial;
LinkButton _docDownload, _docSaveAs, _docCancel;
History *_migrated, *_history; // if conversation photos or files overview
PeerData *_peer;
UserData *_user; // if user profile photos overview
History *_migrated = nullptr;
History *_history = nullptr; // if conversation photos or files overview
PeerData *_peer = nullptr;
UserData *_user = nullptr; // if user profile photos overview
PeerData *_from;
// There can be additional first photo in chat photos overview, that is not
// in the _history->overview[OverviewChatPhotos] (if the item was deleted).
PhotoData *_additionalChatPhoto = nullptr;
PeerData *_from = nullptr;
Text _fromName;
int32 _index; // index in photos or files array, -1 if just photo
MsgId _msgid; // msgId of current photo or file
bool _msgmigrated; // msgId is from _migrated history
ChannelId _channel;
bool _canForward, _canDelete;
int _index = -1; // index in photos or files array, -1 if just photo
MsgId _msgid = 0; // msgId of current photo or file
bool _msgmigrated = false; // msgId is from _migrated history
ChannelId _channel = NoChannel;
bool _canForward = false;
bool _canDelete = false;
mtpRequestId _loadRequest;
mtpRequestId _loadRequest = 0;
enum OverState {
OverNone,
@ -190,9 +209,10 @@ private:
OverMore,
OverIcon,
};
OverState _over, _down;
OverState _over = OverNone;
OverState _down = OverNone;
QPoint _lastAction, _lastMouseMovePos;
bool _ignoringDropdown;
bool _ignoringDropdown = false;
Animation _a_state;
@ -202,25 +222,25 @@ private:
ControlsHiding,
ControlsHidden,
};
ControlsState _controlsState;
uint64 _controlsAnimStarted;
ControlsState _controlsState = ControlsShown;
uint64 _controlsAnimStarted = 0;
QTimer _controlsHideTimer;
anim::fvalue a_cOpacity;
PopupMenu *_menu;
PopupMenu *_menu = nullptr;
Dropdown _dropdown;
IconedButton *_btnSaveCancel, *_btnToMessage, *_btnShowInFolder, *_btnSaveAs, *_btnCopy, *_btnForward, *_btnDelete, *_btnViewAll;
QList<IconedButton*> _btns;
bool _receiveMouse;
bool _receiveMouse = true;
bool _touchPress, _touchMove, _touchRightButton;
bool _touchPress = false, _touchMove = false, _touchRightButton = false;
QTimer _touchTimer;
QPoint _touchStart;
QPoint _accumScroll;
QString _saveMsgFilename;
uint64 _saveMsgStarted;
uint64 _saveMsgStarted = 0;
anim::fvalue _saveMsgOpacity;
QRect _saveMsg;
QTimer _saveMsgUpdater;

View file

@ -855,7 +855,7 @@ void ConnectionPrivate::tryToSend() {
MTPInitConnection<mtpRequest> initWrapperImpl, *initWrapper = &initWrapperImpl;
int32 initSize = 0, initSizeInInts = 0;
if (needsLayer) {
initWrapperImpl = MTPInitConnection<mtpRequest>(MTP_int(ApiId), MTP_string(cApiDeviceModel()), MTP_string(cApiSystemVersion()), MTP_string(cApiAppVersion()), MTP_string(ApiLang), mtpRequest());
initWrapperImpl = MTPInitConnection<mtpRequest>(MTP_int(ApiId), MTP_string(cApiDeviceModel()), MTP_string(cApiSystemVersion()), MTP_string(cApiAppVersion()), MTP_string(Sandbox::LangSystemISO()), mtpRequest());
initSizeInInts = (initWrapper->innerLength() >> 2) + 2;
initSize = initSizeInInts * sizeof(mtpPrime);
}

View file

@ -1027,6 +1027,9 @@ enum class MTPDmessage_ClientFlag : int32 {
// message has a switch inline keyboard button, need to return to inline
f_has_switch_inline_button = (1 << 23),
// message is generated on the client side and should be unread
f_clientside_unread = (1 << 22),
// update this when adding new client side flags
MIN_FIELD = (1 << 23),
};

View file

@ -226,8 +226,8 @@ chatPhotoEmpty#37c1011c = ChatPhoto;
chatPhoto#6153276a photo_small:FileLocation photo_big:FileLocation = ChatPhoto;
messageEmpty#83e5de54 id:int = Message;
message#c09be45f flags:# unread:flags.0?true out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector<MessageEntity> views:flags.10?int edit_date:flags.15?int = Message;
messageService#9e19a1f6 flags:# unread:flags.0?true out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true id:int from_id:flags.8?int to_id:Peer reply_to_msg_id:flags.3?int date:int action:MessageAction = Message;
message#c09be45f flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector<MessageEntity> views:flags.10?int edit_date:flags.15?int = Message;
messageService#9e19a1f6 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true id:int from_id:flags.8?int to_id:Peer reply_to_msg_id:flags.3?int date:int action:MessageAction = Message;
messageMediaEmpty#3ded6320 = MessageMedia;
messageMediaPhoto#3d8ce53d photo:Photo caption:string = MessageMedia;
@ -251,8 +251,8 @@ messageActionChatMigrateTo#51bdb021 channel_id:int = MessageAction;
messageActionChannelMigrateFrom#b055eaee title:string chat_id:int = MessageAction;
messageActionPinMessage#94bd38ed = MessageAction;
dialog#c1dd804a peer:Peer top_message:int read_inbox_max_id:int unread_count:int notify_settings:PeerNotifySettings = Dialog;
dialogChannel#5b8496b2 peer:Peer top_message:int top_important_message:int read_inbox_max_id:int unread_count:int unread_important_count:int notify_settings:PeerNotifySettings pts:int = Dialog;
dialog#202de501 peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int notify_settings:PeerNotifySettings = Dialog;
dialogChannel#db17c25 peer:Peer top_message:int top_important_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_important_count:int notify_settings:PeerNotifySettings pts:int = Dialog;
photoEmpty#2331b22d id:long = Photo;
photo#cded42fe id:long access_hash:long date:int sizes:Vector<PhotoSize> = Photo;
@ -341,6 +341,7 @@ inputMessagesFilterUrl#7ef0dd87 = MessagesFilter;
inputMessagesFilterGif#ffc86587 = MessagesFilter;
inputMessagesFilterVoice#50f5c392 = MessagesFilter;
inputMessagesFilterMusic#3751b49e = MessagesFilter;
inputMessagesFilterChatPhotos#3a20ecb8 = MessagesFilter;
updateNewMessage#1f2b0afd message:Message pts:int pts_count:int = Update;
updateMessageID#4e90bfd6 id:int random_id:long = Update;
@ -390,6 +391,7 @@ updateChannelPinnedMessage#98592475 channel_id:int id:int = Update;
updateBotCallbackQuery#a68c688c query_id:long user_id:int peer:Peer msg_id:int data:bytes = Update;
updateEditMessage#e40370a3 message:Message pts:int pts_count:int = Update;
updateInlineBotCallbackQuery#2cbd95af query_id:long user_id:int msg_id:InputBotInlineMessageID data:bytes = Update;
updateReadChannelOutbox#25d6c9c7 channel_id:int max_id:int = Update;
updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State;
@ -398,12 +400,12 @@ updates.difference#f49ca0 new_messages:Vector<Message> new_encrypted_messages:Ve
updates.differenceSlice#a8fb1981 new_messages:Vector<Message> new_encrypted_messages:Vector<EncryptedMessage> other_updates:Vector<Update> chats:Vector<Chat> users:Vector<User> intermediate_state:updates.State = updates.Difference;
updatesTooLong#e317af7e = Updates;
updateShortMessage#914fbf11 flags:# unread:flags.0?true out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int user_id:int message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int entities:flags.7?Vector<MessageEntity> = Updates;
updateShortChatMessage#16812688 flags:# unread:flags.0?true out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int from_id:int chat_id:int message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int entities:flags.7?Vector<MessageEntity> = Updates;
updateShortMessage#914fbf11 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int user_id:int message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int entities:flags.7?Vector<MessageEntity> = Updates;
updateShortChatMessage#16812688 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int from_id:int chat_id:int message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int entities:flags.7?Vector<MessageEntity> = Updates;
updateShort#78d4dec1 update:Update date:int = Updates;
updatesCombined#725b04c3 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq_start:int seq:int = Updates;
updates#74ae4240 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq:int = Updates;
updateShortSentMessage#11f1331c flags:# unread:flags.0?true out:flags.1?true id:int pts:int pts_count:int date:int media:flags.9?MessageMedia entities:flags.7?Vector<MessageEntity> = Updates;
updateShortSentMessage#11f1331c flags:# out:flags.1?true id:int pts:int pts_count:int date:int media:flags.9?MessageMedia entities:flags.7?Vector<MessageEntity> = Updates;
photos.photos#8dca6aa5 photos:Vector<Photo> users:Vector<User> = photos.Photos;
photos.photosSlice#15051f54 count:int photos:Vector<Photo> users:Vector<User> = photos.Photos;
@ -703,7 +705,7 @@ invokeWithLayer#da9b0d0d {X:Type} layer:int query:!X = X;
invokeWithoutUpdates#bf9459b7 {X:Type} query:!X = X;
auth.checkPhone#6fe51dfb phone_number:string = auth.CheckedPhone;
auth.sendCode#ccfd70cf flags:# allow_flashcall:flags.0?true phone_number:string current_number:flags.0?Bool api_id:int api_hash:string lang_code:string = auth.SentCode;
auth.sendCode#86aef0ec flags:# allow_flashcall:flags.0?true phone_number:string current_number:flags.0?Bool api_id:int api_hash:string = auth.SentCode;
auth.signUp#1b067634 phone_number:string phone_code_hash:string phone_code:string first_name:string last_name:string = auth.Authorization;
auth.signIn#bcd51581 phone_number:string phone_code_hash:string phone_code:string = auth.Authorization;
auth.logOut#5717da40 = Bool;
@ -719,7 +721,7 @@ auth.recoverPassword#4ea56e92 code:string = auth.Authorization;
auth.resendCode#3ef1a9bf phone_number:string phone_code_hash:string = auth.SentCode;
auth.cancelCode#1f040578 phone_number:string phone_code_hash:string = Bool;
account.registerDevice#446c712c token_type:int token:string device_model:string system_version:string app_version:string app_sandbox:Bool lang_code:string = Bool;
account.registerDevice#637ea878 token_type:int token:string = Bool;
account.unregisterDevice#65c55b40 token_type:int token:string = Bool;
account.updateNotifySettings#84be5b93 peer:InputNotifyPeer settings:InputPeerNotifySettings = Bool;
account.getNotifySettings#12b3ad31 peer:InputNotifyPeer = PeerNotifySettings;
@ -825,7 +827,7 @@ messages.editMessage#ce91e4ca flags:# no_webpage:flags.1?true peer:InputPeer id:
messages.editInlineBotMessage#130c2c85 flags:# no_webpage:flags.1?true id:InputBotInlineMessageID message:flags.11?string reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector<MessageEntity> = Bool;
messages.getBotCallbackAnswer#a6e94f04 peer:InputPeer msg_id:int data:bytes = messages.BotCallbackAnswer;
messages.setBotCallbackAnswer#481c591a flags:# alert:flags.1?true query_id:long message:flags.0?string = Bool;
messages.getPeerDialogs#19250887 peer:Vector<InputPeer> = messages.PeerDialogs;
messages.getPeerDialogs#2d9776b9 peers:Vector<InputPeer> = messages.PeerDialogs;
updates.getState#edd4882a = updates.State;
updates.getDifference#a041495 pts:int date:int qts:int = updates.Difference;
@ -842,12 +844,12 @@ upload.saveBigFilePart#de7b673d file_id:long file_part:int file_total_parts:int
help.getConfig#c4f9186b = Config;
help.getNearestDc#1fb33026 = NearestDc;
help.getAppUpdate#c812ac7e device_model:string system_version:string app_version:string lang_code:string = help.AppUpdate;
help.getAppUpdate#ae2de196 = help.AppUpdate;
help.saveAppLog#6f02f748 events:Vector<InputAppEvent> = Bool;
help.getInviteText#a4a95186 lang_code:string = help.InviteText;
help.getInviteText#4d392343 = help.InviteText;
help.getSupport#9cdf08cd = help.Support;
help.getAppChangelog#5bab7fb2 device_model:string system_version:string app_version:string lang_code:string = help.AppChangelog;
help.getTermsOfService#37d78f83 lang_code:string = help.TermsOfService;
help.getAppChangelog#b921197a = help.AppChangelog;
help.getTermsOfService#350170f3 = help.TermsOfService;
channels.getDialogs#a9d3d249 offset:int limit:int = messages.Dialogs;
channels.getImportantHistory#8f494bb2 channel:InputChannel offset_id:int offset_date:int add_offset:int limit:int max_id:int min_id:int = messages.Messages;
@ -879,4 +881,4 @@ channels.exportMessageLink#c846d22d channel:InputChannel id:int = ExportedMessag
channels.toggleSignatures#1f69b606 channel:InputChannel enabled:Bool = Updates;
channels.updatePinnedMessage#a72ded52 flags:# silent:flags.0?true channel:InputChannel id:int = Updates;
// LAYER 52
// LAYER 53

View file

@ -1360,25 +1360,24 @@ void _serialize_message(MTPStringLogger &to, int32 stage, int32 lev, Types &type
}
switch (stage) {
case 0: to.add(" flags: "); ++stages.back(); if (start >= end) throw Exception("start >= end in flags"); else flags.back() = *start; types.push_back(mtpc_flags); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 1: to.add(" unread: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_unread) { to.add("YES [ BY BIT 0 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 0 IN FIELD flags ]"); } break;
case 2: to.add(" out: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_out) { to.add("YES [ BY BIT 1 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 1 IN FIELD flags ]"); } break;
case 3: to.add(" mentioned: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_mentioned) { to.add("YES [ BY BIT 4 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 4 IN FIELD flags ]"); } break;
case 4: to.add(" media_unread: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_media_unread) { to.add("YES [ BY BIT 5 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 5 IN FIELD flags ]"); } break;
case 5: to.add(" silent: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_silent) { to.add("YES [ BY BIT 13 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 13 IN FIELD flags ]"); } break;
case 6: to.add(" post: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_post) { to.add("YES [ BY BIT 14 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 14 IN FIELD flags ]"); } break;
case 7: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 8: to.add(" from_id: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_from_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 8 IN FIELD flags ]"); } break;
case 9: to.add(" to_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 10: to.add(" fwd_from: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_fwd_from) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break;
case 11: to.add(" via_bot_id: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_via_bot_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 11 IN FIELD flags ]"); } break;
case 12: to.add(" reply_to_msg_id: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_reply_to_msg_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 3 IN FIELD flags ]"); } break;
case 13: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 14: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 15: to.add(" media: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_media) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 9 IN FIELD flags ]"); } break;
case 16: to.add(" reply_markup: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_reply_markup) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 6 IN FIELD flags ]"); } break;
case 17: to.add(" entities: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break;
case 18: to.add(" views: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_views) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 10 IN FIELD flags ]"); } break;
case 19: to.add(" edit_date: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_edit_date) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 15 IN FIELD flags ]"); } break;
case 1: to.add(" out: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_out) { to.add("YES [ BY BIT 1 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 1 IN FIELD flags ]"); } break;
case 2: to.add(" mentioned: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_mentioned) { to.add("YES [ BY BIT 4 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 4 IN FIELD flags ]"); } break;
case 3: to.add(" media_unread: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_media_unread) { to.add("YES [ BY BIT 5 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 5 IN FIELD flags ]"); } break;
case 4: to.add(" silent: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_silent) { to.add("YES [ BY BIT 13 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 13 IN FIELD flags ]"); } break;
case 5: to.add(" post: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_post) { to.add("YES [ BY BIT 14 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 14 IN FIELD flags ]"); } break;
case 6: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 7: to.add(" from_id: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_from_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 8 IN FIELD flags ]"); } break;
case 8: to.add(" to_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 9: to.add(" fwd_from: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_fwd_from) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break;
case 10: to.add(" via_bot_id: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_via_bot_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 11 IN FIELD flags ]"); } break;
case 11: to.add(" reply_to_msg_id: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_reply_to_msg_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 3 IN FIELD flags ]"); } break;
case 12: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 13: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 14: to.add(" media: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_media) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 9 IN FIELD flags ]"); } break;
case 15: to.add(" reply_markup: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_reply_markup) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 6 IN FIELD flags ]"); } break;
case 16: to.add(" entities: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break;
case 17: to.add(" views: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_views) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 10 IN FIELD flags ]"); } break;
case 18: to.add(" edit_date: "); ++stages.back(); if (flag & MTPDmessage::Flag::f_edit_date) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 15 IN FIELD flags ]"); } break;
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
}
}
@ -1394,18 +1393,17 @@ void _serialize_messageService(MTPStringLogger &to, int32 stage, int32 lev, Type
}
switch (stage) {
case 0: to.add(" flags: "); ++stages.back(); if (start >= end) throw Exception("start >= end in flags"); else flags.back() = *start; types.push_back(mtpc_flags); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 1: to.add(" unread: "); ++stages.back(); if (flag & MTPDmessageService::Flag::f_unread) { to.add("YES [ BY BIT 0 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 0 IN FIELD flags ]"); } break;
case 2: to.add(" out: "); ++stages.back(); if (flag & MTPDmessageService::Flag::f_out) { to.add("YES [ BY BIT 1 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 1 IN FIELD flags ]"); } break;
case 3: to.add(" mentioned: "); ++stages.back(); if (flag & MTPDmessageService::Flag::f_mentioned) { to.add("YES [ BY BIT 4 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 4 IN FIELD flags ]"); } break;
case 4: to.add(" media_unread: "); ++stages.back(); if (flag & MTPDmessageService::Flag::f_media_unread) { to.add("YES [ BY BIT 5 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 5 IN FIELD flags ]"); } break;
case 5: to.add(" silent: "); ++stages.back(); if (flag & MTPDmessageService::Flag::f_silent) { to.add("YES [ BY BIT 13 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 13 IN FIELD flags ]"); } break;
case 6: to.add(" post: "); ++stages.back(); if (flag & MTPDmessageService::Flag::f_post) { to.add("YES [ BY BIT 14 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 14 IN FIELD flags ]"); } break;
case 7: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 8: to.add(" from_id: "); ++stages.back(); if (flag & MTPDmessageService::Flag::f_from_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 8 IN FIELD flags ]"); } break;
case 9: to.add(" to_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 10: to.add(" reply_to_msg_id: "); ++stages.back(); if (flag & MTPDmessageService::Flag::f_reply_to_msg_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 3 IN FIELD flags ]"); } break;
case 11: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 12: to.add(" action: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 1: to.add(" out: "); ++stages.back(); if (flag & MTPDmessageService::Flag::f_out) { to.add("YES [ BY BIT 1 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 1 IN FIELD flags ]"); } break;
case 2: to.add(" mentioned: "); ++stages.back(); if (flag & MTPDmessageService::Flag::f_mentioned) { to.add("YES [ BY BIT 4 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 4 IN FIELD flags ]"); } break;
case 3: to.add(" media_unread: "); ++stages.back(); if (flag & MTPDmessageService::Flag::f_media_unread) { to.add("YES [ BY BIT 5 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 5 IN FIELD flags ]"); } break;
case 4: to.add(" silent: "); ++stages.back(); if (flag & MTPDmessageService::Flag::f_silent) { to.add("YES [ BY BIT 13 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 13 IN FIELD flags ]"); } break;
case 5: to.add(" post: "); ++stages.back(); if (flag & MTPDmessageService::Flag::f_post) { to.add("YES [ BY BIT 14 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 14 IN FIELD flags ]"); } break;
case 6: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 7: to.add(" from_id: "); ++stages.back(); if (flag & MTPDmessageService::Flag::f_from_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 8 IN FIELD flags ]"); } break;
case 8: to.add(" to_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 9: to.add(" reply_to_msg_id: "); ++stages.back(); if (flag & MTPDmessageService::Flag::f_reply_to_msg_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 3 IN FIELD flags ]"); } break;
case 10: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 11: to.add(" action: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
}
}
@ -1647,8 +1645,9 @@ void _serialize_dialog(MTPStringLogger &to, int32 stage, int32 lev, Types &types
case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 1: to.add(" top_message: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 2: to.add(" read_inbox_max_id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 3: to.add(" unread_count: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 4: to.add(" notify_settings: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 3: to.add(" read_outbox_max_id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 4: to.add(" unread_count: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 5: to.add(" notify_settings: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
}
}
@ -1665,10 +1664,11 @@ void _serialize_dialogChannel(MTPStringLogger &to, int32 stage, int32 lev, Types
case 1: to.add(" top_message: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 2: to.add(" top_important_message: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 3: to.add(" read_inbox_max_id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 4: to.add(" unread_count: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 5: to.add(" unread_important_count: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 6: to.add(" notify_settings: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 7: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 4: to.add(" read_outbox_max_id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 5: to.add(" unread_count: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 6: to.add(" unread_important_count: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 7: to.add(" notify_settings: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 8: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
}
}
@ -2306,6 +2306,10 @@ void _serialize_inputMessagesFilterMusic(MTPStringLogger &to, int32 stage, int32
to.add("{ inputMessagesFilterMusic }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back();
}
void _serialize_inputMessagesFilterChatPhotos(MTPStringLogger &to, int32 stage, int32 lev, Types &types, Types &vtypes, StagesFlags &stages, StagesFlags &flags, const mtpPrime *start, const mtpPrime *end, int32 iflag) {
to.add("{ inputMessagesFilterChatPhotos }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back();
}
void _serialize_updateNewMessage(MTPStringLogger &to, int32 stage, int32 lev, Types &types, Types &vtypes, StagesFlags &stages, StagesFlags &flags, const mtpPrime *start, const mtpPrime *end, int32 iflag) {
if (stage) {
to.add(",\n").addSpaces(lev);
@ -3004,6 +3008,20 @@ void _serialize_updateInlineBotCallbackQuery(MTPStringLogger &to, int32 stage, i
}
}
void _serialize_updateReadChannelOutbox(MTPStringLogger &to, int32 stage, int32 lev, Types &types, Types &vtypes, StagesFlags &stages, StagesFlags &flags, const mtpPrime *start, const mtpPrime *end, int32 iflag) {
if (stage) {
to.add(",\n").addSpaces(lev);
} else {
to.add("{ updateReadChannelOutbox");
to.add("\n").addSpaces(lev);
}
switch (stage) {
case 0: to.add(" channel_id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 1: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
}
}
void _serialize_updates_state(MTPStringLogger &to, int32 stage, int32 lev, Types &types, Types &vtypes, StagesFlags &stages, StagesFlags &flags, const mtpPrime *start, const mtpPrime *end, int32 iflag) {
if (stage) {
to.add(",\n").addSpaces(lev);
@ -3086,21 +3104,20 @@ void _serialize_updateShortMessage(MTPStringLogger &to, int32 stage, int32 lev,
}
switch (stage) {
case 0: to.add(" flags: "); ++stages.back(); if (start >= end) throw Exception("start >= end in flags"); else flags.back() = *start; types.push_back(mtpc_flags); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 1: to.add(" unread: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_unread) { to.add("YES [ BY BIT 0 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 0 IN FIELD flags ]"); } break;
case 2: to.add(" out: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_out) { to.add("YES [ BY BIT 1 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 1 IN FIELD flags ]"); } break;
case 3: to.add(" mentioned: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_mentioned) { to.add("YES [ BY BIT 4 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 4 IN FIELD flags ]"); } break;
case 4: to.add(" media_unread: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_media_unread) { to.add("YES [ BY BIT 5 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 5 IN FIELD flags ]"); } break;
case 5: to.add(" silent: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_silent) { to.add("YES [ BY BIT 13 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 13 IN FIELD flags ]"); } break;
case 6: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 7: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 8: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 9: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 10: to.add(" pts_count: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 11: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 12: to.add(" fwd_from: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_fwd_from) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break;
case 13: to.add(" via_bot_id: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_via_bot_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 11 IN FIELD flags ]"); } break;
case 14: to.add(" reply_to_msg_id: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_reply_to_msg_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 3 IN FIELD flags ]"); } break;
case 15: to.add(" entities: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break;
case 1: to.add(" out: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_out) { to.add("YES [ BY BIT 1 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 1 IN FIELD flags ]"); } break;
case 2: to.add(" mentioned: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_mentioned) { to.add("YES [ BY BIT 4 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 4 IN FIELD flags ]"); } break;
case 3: to.add(" media_unread: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_media_unread) { to.add("YES [ BY BIT 5 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 5 IN FIELD flags ]"); } break;
case 4: to.add(" silent: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_silent) { to.add("YES [ BY BIT 13 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 13 IN FIELD flags ]"); } break;
case 5: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 6: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 7: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 8: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 9: to.add(" pts_count: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 10: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 11: to.add(" fwd_from: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_fwd_from) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break;
case 12: to.add(" via_bot_id: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_via_bot_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 11 IN FIELD flags ]"); } break;
case 13: to.add(" reply_to_msg_id: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_reply_to_msg_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 3 IN FIELD flags ]"); } break;
case 14: to.add(" entities: "); ++stages.back(); if (flag & MTPDupdateShortMessage::Flag::f_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break;
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
}
}
@ -3116,22 +3133,21 @@ void _serialize_updateShortChatMessage(MTPStringLogger &to, int32 stage, int32 l
}
switch (stage) {
case 0: to.add(" flags: "); ++stages.back(); if (start >= end) throw Exception("start >= end in flags"); else flags.back() = *start; types.push_back(mtpc_flags); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 1: to.add(" unread: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_unread) { to.add("YES [ BY BIT 0 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 0 IN FIELD flags ]"); } break;
case 2: to.add(" out: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_out) { to.add("YES [ BY BIT 1 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 1 IN FIELD flags ]"); } break;
case 3: to.add(" mentioned: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_mentioned) { to.add("YES [ BY BIT 4 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 4 IN FIELD flags ]"); } break;
case 4: to.add(" media_unread: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_media_unread) { to.add("YES [ BY BIT 5 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 5 IN FIELD flags ]"); } break;
case 5: to.add(" silent: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_silent) { to.add("YES [ BY BIT 13 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 13 IN FIELD flags ]"); } break;
case 6: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 7: to.add(" from_id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 8: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 9: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 10: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 11: to.add(" pts_count: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 12: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 13: to.add(" fwd_from: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_fwd_from) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break;
case 14: to.add(" via_bot_id: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_via_bot_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 11 IN FIELD flags ]"); } break;
case 15: to.add(" reply_to_msg_id: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_reply_to_msg_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 3 IN FIELD flags ]"); } break;
case 16: to.add(" entities: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break;
case 1: to.add(" out: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_out) { to.add("YES [ BY BIT 1 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 1 IN FIELD flags ]"); } break;
case 2: to.add(" mentioned: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_mentioned) { to.add("YES [ BY BIT 4 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 4 IN FIELD flags ]"); } break;
case 3: to.add(" media_unread: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_media_unread) { to.add("YES [ BY BIT 5 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 5 IN FIELD flags ]"); } break;
case 4: to.add(" silent: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_silent) { to.add("YES [ BY BIT 13 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 13 IN FIELD flags ]"); } break;
case 5: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 6: to.add(" from_id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 7: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 8: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 9: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 10: to.add(" pts_count: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 11: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 12: to.add(" fwd_from: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_fwd_from) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break;
case 13: to.add(" via_bot_id: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_via_bot_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 11 IN FIELD flags ]"); } break;
case 14: to.add(" reply_to_msg_id: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_reply_to_msg_id) { types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 3 IN FIELD flags ]"); } break;
case 15: to.add(" entities: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::Flag::f_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break;
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
}
}
@ -3196,14 +3212,13 @@ void _serialize_updateShortSentMessage(MTPStringLogger &to, int32 stage, int32 l
}
switch (stage) {
case 0: to.add(" flags: "); ++stages.back(); if (start >= end) throw Exception("start >= end in flags"); else flags.back() = *start; types.push_back(mtpc_flags); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 1: to.add(" unread: "); ++stages.back(); if (flag & MTPDupdateShortSentMessage::Flag::f_unread) { to.add("YES [ BY BIT 0 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 0 IN FIELD flags ]"); } break;
case 2: to.add(" out: "); ++stages.back(); if (flag & MTPDupdateShortSentMessage::Flag::f_out) { to.add("YES [ BY BIT 1 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 1 IN FIELD flags ]"); } break;
case 3: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 4: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 5: to.add(" pts_count: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 6: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 7: to.add(" media: "); ++stages.back(); if (flag & MTPDupdateShortSentMessage::Flag::f_media) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 9 IN FIELD flags ]"); } break;
case 8: to.add(" entities: "); ++stages.back(); if (flag & MTPDupdateShortSentMessage::Flag::f_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break;
case 1: to.add(" out: "); ++stages.back(); if (flag & MTPDupdateShortSentMessage::Flag::f_out) { to.add("YES [ BY BIT 1 IN FIELD flags ]"); } else { to.add("[ SKIPPED BY BIT 1 IN FIELD flags ]"); } break;
case 2: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 3: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 4: to.add(" pts_count: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 5: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 6: to.add(" media: "); ++stages.back(); if (flag & MTPDupdateShortSentMessage::Flag::f_media) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 9 IN FIELD flags ]"); } break;
case 7: to.add(" entities: "); ++stages.back(); if (flag & MTPDupdateShortSentMessage::Flag::f_entities) { types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 7 IN FIELD flags ]"); } break;
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
}
}
@ -5929,11 +5944,6 @@ void _serialize_account_registerDevice(MTPStringLogger &to, int32 stage, int32 l
switch (stage) {
case 0: to.add(" token_type: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 1: to.add(" token: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 2: to.add(" device_model: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 3: to.add(" system_version: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 4: to.add(" app_version: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 5: to.add(" app_sandbox: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 6: to.add(" lang_code: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
}
}
@ -6556,7 +6566,6 @@ void _serialize_auth_sendCode(MTPStringLogger &to, int32 stage, int32 lev, Types
case 3: to.add(" current_number: "); ++stages.back(); if (flag & MTPauth_sendCode::Flag::f_current_number) { types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 0 IN FIELD flags ]"); } break;
case 4: to.add(" api_id: "); ++stages.back(); types.push_back(mtpc_int+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 5: to.add(" api_hash: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 6: to.add(" lang_code: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
}
}
@ -8044,7 +8053,7 @@ void _serialize_messages_getPeerDialogs(MTPStringLogger &to, int32 stage, int32
to.add("\n").addSpaces(lev);
}
switch (stage) {
case 0: to.add(" peer: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 0: to.add(" peers: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
}
}
@ -8154,32 +8163,11 @@ void _serialize_help_getNearestDc(MTPStringLogger &to, int32 stage, int32 lev, T
}
void _serialize_help_getAppUpdate(MTPStringLogger &to, int32 stage, int32 lev, Types &types, Types &vtypes, StagesFlags &stages, StagesFlags &flags, const mtpPrime *start, const mtpPrime *end, int32 iflag) {
if (stage) {
to.add(",\n").addSpaces(lev);
} else {
to.add("{ help_getAppUpdate");
to.add("\n").addSpaces(lev);
}
switch (stage) {
case 0: to.add(" device_model: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 1: to.add(" system_version: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 2: to.add(" app_version: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 3: to.add(" lang_code: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
}
to.add("{ help_getAppUpdate }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back();
}
void _serialize_help_getInviteText(MTPStringLogger &to, int32 stage, int32 lev, Types &types, Types &vtypes, StagesFlags &stages, StagesFlags &flags, const mtpPrime *start, const mtpPrime *end, int32 iflag) {
if (stage) {
to.add(",\n").addSpaces(lev);
} else {
to.add("{ help_getInviteText");
to.add("\n").addSpaces(lev);
}
switch (stage) {
case 0: to.add(" lang_code: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
}
to.add("{ help_getInviteText }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back();
}
void _serialize_help_getSupport(MTPStringLogger &to, int32 stage, int32 lev, Types &types, Types &vtypes, StagesFlags &stages, StagesFlags &flags, const mtpPrime *start, const mtpPrime *end, int32 iflag) {
@ -8187,32 +8175,11 @@ void _serialize_help_getSupport(MTPStringLogger &to, int32 stage, int32 lev, Typ
}
void _serialize_help_getAppChangelog(MTPStringLogger &to, int32 stage, int32 lev, Types &types, Types &vtypes, StagesFlags &stages, StagesFlags &flags, const mtpPrime *start, const mtpPrime *end, int32 iflag) {
if (stage) {
to.add(",\n").addSpaces(lev);
} else {
to.add("{ help_getAppChangelog");
to.add("\n").addSpaces(lev);
}
switch (stage) {
case 0: to.add(" device_model: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 1: to.add(" system_version: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 2: to.add(" app_version: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
case 3: to.add(" lang_code: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
}
to.add("{ help_getAppChangelog }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back();
}
void _serialize_help_getTermsOfService(MTPStringLogger &to, int32 stage, int32 lev, Types &types, Types &vtypes, StagesFlags &stages, StagesFlags &flags, const mtpPrime *start, const mtpPrime *end, int32 iflag) {
if (stage) {
to.add(",\n").addSpaces(lev);
} else {
to.add("{ help_getTermsOfService");
to.add("\n").addSpaces(lev);
}
switch (stage) {
case 0: to.add(" lang_code: "); ++stages.back(); types.push_back(mtpc_string+0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
}
to.add("{ help_getTermsOfService }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back();
}
void _serialize_channels_getParticipants(MTPStringLogger &to, int32 stage, int32 lev, Types &types, Types &vtypes, StagesFlags &stages, StagesFlags &flags, const mtpPrime *start, const mtpPrime *end, int32 iflag) {
@ -8498,6 +8465,7 @@ namespace {
_serializers.insert(mtpc_inputMessagesFilterGif, _serialize_inputMessagesFilterGif);
_serializers.insert(mtpc_inputMessagesFilterVoice, _serialize_inputMessagesFilterVoice);
_serializers.insert(mtpc_inputMessagesFilterMusic, _serialize_inputMessagesFilterMusic);
_serializers.insert(mtpc_inputMessagesFilterChatPhotos, _serialize_inputMessagesFilterChatPhotos);
_serializers.insert(mtpc_updateNewMessage, _serialize_updateNewMessage);
_serializers.insert(mtpc_updateMessageID, _serialize_updateMessageID);
_serializers.insert(mtpc_updateDeleteMessages, _serialize_updateDeleteMessages);
@ -8546,6 +8514,7 @@ namespace {
_serializers.insert(mtpc_updateBotCallbackQuery, _serialize_updateBotCallbackQuery);
_serializers.insert(mtpc_updateEditMessage, _serialize_updateEditMessage);
_serializers.insert(mtpc_updateInlineBotCallbackQuery, _serialize_updateInlineBotCallbackQuery);
_serializers.insert(mtpc_updateReadChannelOutbox, _serialize_updateReadChannelOutbox);
_serializers.insert(mtpc_updates_state, _serialize_updates_state);
_serializers.insert(mtpc_updates_differenceEmpty, _serialize_updates_differenceEmpty);
_serializers.insert(mtpc_updates_difference, _serialize_updates_difference);

View file

@ -30,7 +30,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
namespace MTP {
namespace internal {
static constexpr mtpPrime CurrentLayer = 52;
static constexpr mtpPrime CurrentLayer = 53;
class TypeCreator;
@ -178,8 +178,8 @@ enum {
mtpc_messageActionChatMigrateTo = 0x51bdb021,
mtpc_messageActionChannelMigrateFrom = 0xb055eaee,
mtpc_messageActionPinMessage = 0x94bd38ed,
mtpc_dialog = 0xc1dd804a,
mtpc_dialogChannel = 0x5b8496b2,
mtpc_dialog = 0x202de501,
mtpc_dialogChannel = 0xdb17c25,
mtpc_photoEmpty = 0x2331b22d,
mtpc_photo = 0xcded42fe,
mtpc_photoSizeEmpty = 0xe17e23c,
@ -238,6 +238,7 @@ enum {
mtpc_inputMessagesFilterGif = 0xffc86587,
mtpc_inputMessagesFilterVoice = 0x50f5c392,
mtpc_inputMessagesFilterMusic = 0x3751b49e,
mtpc_inputMessagesFilterChatPhotos = 0x3a20ecb8,
mtpc_updateNewMessage = 0x1f2b0afd,
mtpc_updateMessageID = 0x4e90bfd6,
mtpc_updateDeleteMessages = 0xa20db0e5,
@ -286,6 +287,7 @@ enum {
mtpc_updateBotCallbackQuery = 0xa68c688c,
mtpc_updateEditMessage = 0xe40370a3,
mtpc_updateInlineBotCallbackQuery = 0x2cbd95af,
mtpc_updateReadChannelOutbox = 0x25d6c9c7,
mtpc_updates_state = 0xa56c2a3e,
mtpc_updates_differenceEmpty = 0x5d75a138,
mtpc_updates_difference = 0xf49ca0,
@ -505,7 +507,7 @@ enum {
mtpc_invokeWithLayer = 0xda9b0d0d,
mtpc_invokeWithoutUpdates = 0xbf9459b7,
mtpc_auth_checkPhone = 0x6fe51dfb,
mtpc_auth_sendCode = 0xccfd70cf,
mtpc_auth_sendCode = 0x86aef0ec,
mtpc_auth_signUp = 0x1b067634,
mtpc_auth_signIn = 0xbcd51581,
mtpc_auth_logOut = 0x5717da40,
@ -520,7 +522,7 @@ enum {
mtpc_auth_recoverPassword = 0x4ea56e92,
mtpc_auth_resendCode = 0x3ef1a9bf,
mtpc_auth_cancelCode = 0x1f040578,
mtpc_account_registerDevice = 0x446c712c,
mtpc_account_registerDevice = 0x637ea878,
mtpc_account_unregisterDevice = 0x65c55b40,
mtpc_account_updateNotifySettings = 0x84be5b93,
mtpc_account_getNotifySettings = 0x12b3ad31,
@ -623,7 +625,7 @@ enum {
mtpc_messages_editInlineBotMessage = 0x130c2c85,
mtpc_messages_getBotCallbackAnswer = 0xa6e94f04,
mtpc_messages_setBotCallbackAnswer = 0x481c591a,
mtpc_messages_getPeerDialogs = 0x19250887,
mtpc_messages_getPeerDialogs = 0x2d9776b9,
mtpc_updates_getState = 0xedd4882a,
mtpc_updates_getDifference = 0xa041495,
mtpc_updates_getChannelDifference = 0xbb32d7c0,
@ -636,12 +638,12 @@ enum {
mtpc_upload_saveBigFilePart = 0xde7b673d,
mtpc_help_getConfig = 0xc4f9186b,
mtpc_help_getNearestDc = 0x1fb33026,
mtpc_help_getAppUpdate = 0xc812ac7e,
mtpc_help_getAppUpdate = 0xae2de196,
mtpc_help_saveAppLog = 0x6f02f748,
mtpc_help_getInviteText = 0xa4a95186,
mtpc_help_getInviteText = 0x4d392343,
mtpc_help_getSupport = 0x9cdf08cd,
mtpc_help_getAppChangelog = 0x5bab7fb2,
mtpc_help_getTermsOfService = 0x37d78f83,
mtpc_help_getAppChangelog = 0xb921197a,
mtpc_help_getTermsOfService = 0x350170f3,
mtpc_channels_getDialogs = 0xa9d3d249,
mtpc_channels_getImportantHistory = 0x8f494bb2,
mtpc_channels_readHistory = 0xcc104937,
@ -1014,6 +1016,7 @@ class MTPDupdateChannelPinnedMessage;
class MTPDupdateBotCallbackQuery;
class MTPDupdateEditMessage;
class MTPDupdateInlineBotCallbackQuery;
class MTPDupdateReadChannelOutbox;
class MTPupdates_state;
class MTPDupdates_state;
@ -5526,6 +5529,18 @@ public:
return *(const MTPDupdateInlineBotCallbackQuery*)data;
}
MTPDupdateReadChannelOutbox &_updateReadChannelOutbox() {
if (!data) throw mtpErrorUninitialized();
if (_type != mtpc_updateReadChannelOutbox) throw mtpErrorWrongTypeId(_type, mtpc_updateReadChannelOutbox);
split();
return *(MTPDupdateReadChannelOutbox*)data;
}
const MTPDupdateReadChannelOutbox &c_updateReadChannelOutbox() const {
if (!data) throw mtpErrorUninitialized();
if (_type != mtpc_updateReadChannelOutbox) throw mtpErrorWrongTypeId(_type, mtpc_updateReadChannelOutbox);
return *(const MTPDupdateReadChannelOutbox*)data;
}
uint32 innerLength() const;
mtpTypeId type() const;
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons);
@ -5581,6 +5596,7 @@ private:
explicit MTPupdate(MTPDupdateBotCallbackQuery *_data);
explicit MTPupdate(MTPDupdateEditMessage *_data);
explicit MTPupdate(MTPDupdateInlineBotCallbackQuery *_data);
explicit MTPupdate(MTPDupdateReadChannelOutbox *_data);
friend class MTP::internal::TypeCreator;
@ -10606,7 +10622,6 @@ public:
class MTPDmessage : public mtpDataImpl<MTPDmessage> {
public:
enum class Flag : int32 {
f_unread = (1 << 0),
f_out = (1 << 1),
f_mentioned = (1 << 4),
f_media_unread = (1 << 5),
@ -10627,7 +10642,6 @@ public:
Q_DECLARE_FLAGS(Flags, Flag);
friend inline Flags operator~(Flag v) { return QFlag(~static_cast<int32>(v)); }
bool is_unread() const { return vflags.v & Flag::f_unread; }
bool is_out() const { return vflags.v & Flag::f_out; }
bool is_mentioned() const { return vflags.v & Flag::f_mentioned; }
bool is_media_unread() const { return vflags.v & Flag::f_media_unread; }
@ -10667,7 +10681,6 @@ public:
class MTPDmessageService : public mtpDataImpl<MTPDmessageService> {
public:
enum class Flag : int32 {
f_unread = (1 << 0),
f_out = (1 << 1),
f_mentioned = (1 << 4),
f_media_unread = (1 << 5),
@ -10681,7 +10694,6 @@ public:
Q_DECLARE_FLAGS(Flags, Flag);
friend inline Flags operator~(Flag v) { return QFlag(~static_cast<int32>(v)); }
bool is_unread() const { return vflags.v & Flag::f_unread; }
bool is_out() const { return vflags.v & Flag::f_out; }
bool is_mentioned() const { return vflags.v & Flag::f_mentioned; }
bool is_media_unread() const { return vflags.v & Flag::f_media_unread; }
@ -10869,12 +10881,13 @@ class MTPDdialog : public mtpDataImpl<MTPDdialog> {
public:
MTPDdialog() {
}
MTPDdialog(const MTPPeer &_peer, MTPint _top_message, MTPint _read_inbox_max_id, MTPint _unread_count, const MTPPeerNotifySettings &_notify_settings) : vpeer(_peer), vtop_message(_top_message), vread_inbox_max_id(_read_inbox_max_id), vunread_count(_unread_count), vnotify_settings(_notify_settings) {
MTPDdialog(const MTPPeer &_peer, MTPint _top_message, MTPint _read_inbox_max_id, MTPint _read_outbox_max_id, MTPint _unread_count, const MTPPeerNotifySettings &_notify_settings) : vpeer(_peer), vtop_message(_top_message), vread_inbox_max_id(_read_inbox_max_id), vread_outbox_max_id(_read_outbox_max_id), vunread_count(_unread_count), vnotify_settings(_notify_settings) {
}
MTPPeer vpeer;
MTPint vtop_message;
MTPint vread_inbox_max_id;
MTPint vread_outbox_max_id;
MTPint vunread_count;
MTPPeerNotifySettings vnotify_settings;
};
@ -10883,13 +10896,14 @@ class MTPDdialogChannel : public mtpDataImpl<MTPDdialogChannel> {
public:
MTPDdialogChannel() {
}
MTPDdialogChannel(const MTPPeer &_peer, MTPint _top_message, MTPint _top_important_message, MTPint _read_inbox_max_id, MTPint _unread_count, MTPint _unread_important_count, const MTPPeerNotifySettings &_notify_settings, MTPint _pts) : vpeer(_peer), vtop_message(_top_message), vtop_important_message(_top_important_message), vread_inbox_max_id(_read_inbox_max_id), vunread_count(_unread_count), vunread_important_count(_unread_important_count), vnotify_settings(_notify_settings), vpts(_pts) {
MTPDdialogChannel(const MTPPeer &_peer, MTPint _top_message, MTPint _top_important_message, MTPint _read_inbox_max_id, MTPint _read_outbox_max_id, MTPint _unread_count, MTPint _unread_important_count, const MTPPeerNotifySettings &_notify_settings, MTPint _pts) : vpeer(_peer), vtop_message(_top_message), vtop_important_message(_top_important_message), vread_inbox_max_id(_read_inbox_max_id), vread_outbox_max_id(_read_outbox_max_id), vunread_count(_unread_count), vunread_important_count(_unread_important_count), vnotify_settings(_notify_settings), vpts(_pts) {
}
MTPPeer vpeer;
MTPint vtop_message;
MTPint vtop_important_message;
MTPint vread_inbox_max_id;
MTPint vread_outbox_max_id;
MTPint vunread_count;
MTPint vunread_important_count;
MTPPeerNotifySettings vnotify_settings;
@ -11961,6 +11975,17 @@ public:
MTPbytes vdata;
};
class MTPDupdateReadChannelOutbox : public mtpDataImpl<MTPDupdateReadChannelOutbox> {
public:
MTPDupdateReadChannelOutbox() {
}
MTPDupdateReadChannelOutbox(MTPint _channel_id, MTPint _max_id) : vchannel_id(_channel_id), vmax_id(_max_id) {
}
MTPint vchannel_id;
MTPint vmax_id;
};
class MTPDupdates_state : public mtpDataImpl<MTPDupdates_state> {
public:
MTPDupdates_state() {
@ -12019,7 +12044,6 @@ public:
class MTPDupdateShortMessage : public mtpDataImpl<MTPDupdateShortMessage> {
public:
enum class Flag : int32 {
f_unread = (1 << 0),
f_out = (1 << 1),
f_mentioned = (1 << 4),
f_media_unread = (1 << 5),
@ -12034,7 +12058,6 @@ public:
Q_DECLARE_FLAGS(Flags, Flag);
friend inline Flags operator~(Flag v) { return QFlag(~static_cast<int32>(v)); }
bool is_unread() const { return vflags.v & Flag::f_unread; }
bool is_out() const { return vflags.v & Flag::f_out; }
bool is_mentioned() const { return vflags.v & Flag::f_mentioned; }
bool is_media_unread() const { return vflags.v & Flag::f_media_unread; }
@ -12065,7 +12088,6 @@ public:
class MTPDupdateShortChatMessage : public mtpDataImpl<MTPDupdateShortChatMessage> {
public:
enum class Flag : int32 {
f_unread = (1 << 0),
f_out = (1 << 1),
f_mentioned = (1 << 4),
f_media_unread = (1 << 5),
@ -12080,7 +12102,6 @@ public:
Q_DECLARE_FLAGS(Flags, Flag);
friend inline Flags operator~(Flag v) { return QFlag(~static_cast<int32>(v)); }
bool is_unread() const { return vflags.v & Flag::f_unread; }
bool is_out() const { return vflags.v & Flag::f_out; }
bool is_mentioned() const { return vflags.v & Flag::f_mentioned; }
bool is_media_unread() const { return vflags.v & Flag::f_media_unread; }
@ -12152,7 +12173,6 @@ public:
class MTPDupdateShortSentMessage : public mtpDataImpl<MTPDupdateShortSentMessage> {
public:
enum class Flag : int32 {
f_unread = (1 << 0),
f_out = (1 << 1),
f_media = (1 << 9),
f_entities = (1 << 7),
@ -12162,7 +12182,6 @@ public:
Q_DECLARE_FLAGS(Flags, Flag);
friend inline Flags operator~(Flag v) { return QFlag(~static_cast<int32>(v)); }
bool is_unread() const { return vflags.v & Flag::f_unread; }
bool is_out() const { return vflags.v & Flag::f_out; }
bool has_media() const { return vflags.v & Flag::f_media; }
bool has_entities() const { return vflags.v & Flag::f_entities; }
@ -15056,18 +15075,17 @@ public:
MTPBool vcurrent_number;
MTPint vapi_id;
MTPstring vapi_hash;
MTPstring vlang_code;
MTPauth_sendCode() {
}
MTPauth_sendCode(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_sendCode) {
read(from, end, cons);
}
MTPauth_sendCode(const MTPflags<MTPauth_sendCode::Flags> &_flags, const MTPstring &_phone_number, MTPBool _current_number, MTPint _api_id, const MTPstring &_api_hash, const MTPstring &_lang_code) : vflags(_flags), vphone_number(_phone_number), vcurrent_number(_current_number), vapi_id(_api_id), vapi_hash(_api_hash), vlang_code(_lang_code) {
MTPauth_sendCode(const MTPflags<MTPauth_sendCode::Flags> &_flags, const MTPstring &_phone_number, MTPBool _current_number, MTPint _api_id, const MTPstring &_api_hash) : vflags(_flags), vphone_number(_phone_number), vcurrent_number(_current_number), vapi_id(_api_id), vapi_hash(_api_hash) {
}
uint32 innerLength() const {
return vflags.innerLength() + vphone_number.innerLength() + (has_current_number() ? vcurrent_number.innerLength() : 0) + vapi_id.innerLength() + vapi_hash.innerLength() + vlang_code.innerLength();
return vflags.innerLength() + vphone_number.innerLength() + (has_current_number() ? vcurrent_number.innerLength() : 0) + vapi_id.innerLength() + vapi_hash.innerLength();
}
mtpTypeId type() const {
return mtpc_auth_sendCode;
@ -15078,7 +15096,6 @@ public:
if (has_current_number()) { vcurrent_number.read(from, end); } else { vcurrent_number = MTPBool(); }
vapi_id.read(from, end);
vapi_hash.read(from, end);
vlang_code.read(from, end);
}
void write(mtpBuffer &to) const {
vflags.write(to);
@ -15086,7 +15103,6 @@ public:
if (has_current_number()) vcurrent_number.write(to);
vapi_id.write(to);
vapi_hash.write(to);
vlang_code.write(to);
}
typedef MTPauth_SentCode ResponseType;
@ -15101,7 +15117,7 @@ public:
}
MTPauth_SendCode(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed<MTPauth_sendCode>(from, end, cons) {
}
MTPauth_SendCode(const MTPflags<MTPauth_sendCode::Flags> &_flags, const MTPstring &_phone_number, MTPBool _current_number, MTPint _api_id, const MTPstring &_api_hash, const MTPstring &_lang_code) : MTPBoxed<MTPauth_sendCode>(MTPauth_sendCode(_flags, _phone_number, _current_number, _api_id, _api_hash, _lang_code)) {
MTPauth_SendCode(const MTPflags<MTPauth_sendCode::Flags> &_flags, const MTPstring &_phone_number, MTPBool _current_number, MTPint _api_id, const MTPstring &_api_hash) : MTPBoxed<MTPauth_sendCode>(MTPauth_sendCode(_flags, _phone_number, _current_number, _api_id, _api_hash)) {
}
};
@ -15679,22 +15695,17 @@ class MTPaccount_registerDevice { // RPC method 'account.registerDevice'
public:
MTPint vtoken_type;
MTPstring vtoken;
MTPstring vdevice_model;
MTPstring vsystem_version;
MTPstring vapp_version;
MTPBool vapp_sandbox;
MTPstring vlang_code;
MTPaccount_registerDevice() {
}
MTPaccount_registerDevice(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_registerDevice) {
read(from, end, cons);
}
MTPaccount_registerDevice(MTPint _token_type, const MTPstring &_token, const MTPstring &_device_model, const MTPstring &_system_version, const MTPstring &_app_version, MTPBool _app_sandbox, const MTPstring &_lang_code) : vtoken_type(_token_type), vtoken(_token), vdevice_model(_device_model), vsystem_version(_system_version), vapp_version(_app_version), vapp_sandbox(_app_sandbox), vlang_code(_lang_code) {
MTPaccount_registerDevice(MTPint _token_type, const MTPstring &_token) : vtoken_type(_token_type), vtoken(_token) {
}
uint32 innerLength() const {
return vtoken_type.innerLength() + vtoken.innerLength() + vdevice_model.innerLength() + vsystem_version.innerLength() + vapp_version.innerLength() + vapp_sandbox.innerLength() + vlang_code.innerLength();
return vtoken_type.innerLength() + vtoken.innerLength();
}
mtpTypeId type() const {
return mtpc_account_registerDevice;
@ -15702,20 +15713,10 @@ public:
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_registerDevice) {
vtoken_type.read(from, end);
vtoken.read(from, end);
vdevice_model.read(from, end);
vsystem_version.read(from, end);
vapp_version.read(from, end);
vapp_sandbox.read(from, end);
vlang_code.read(from, end);
}
void write(mtpBuffer &to) const {
vtoken_type.write(to);
vtoken.write(to);
vdevice_model.write(to);
vsystem_version.write(to);
vapp_version.write(to);
vapp_sandbox.write(to);
vlang_code.write(to);
}
typedef MTPBool ResponseType;
@ -15728,7 +15729,7 @@ public:
}
MTPaccount_RegisterDevice(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed<MTPaccount_registerDevice>(from, end, cons) {
}
MTPaccount_RegisterDevice(MTPint _token_type, const MTPstring &_token, const MTPstring &_device_model, const MTPstring &_system_version, const MTPstring &_app_version, MTPBool _app_sandbox, const MTPstring &_lang_code) : MTPBoxed<MTPaccount_registerDevice>(MTPaccount_registerDevice(_token_type, _token, _device_model, _system_version, _app_version, _app_sandbox, _lang_code)) {
MTPaccount_RegisterDevice(MTPint _token_type, const MTPstring &_token) : MTPBoxed<MTPaccount_registerDevice>(MTPaccount_registerDevice(_token_type, _token)) {
}
};
@ -20264,27 +20265,27 @@ public:
class MTPmessages_getPeerDialogs { // RPC method 'messages.getPeerDialogs'
public:
MTPVector<MTPInputPeer> vpeer;
MTPVector<MTPInputPeer> vpeers;
MTPmessages_getPeerDialogs() {
}
MTPmessages_getPeerDialogs(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getPeerDialogs) {
read(from, end, cons);
}
MTPmessages_getPeerDialogs(const MTPVector<MTPInputPeer> &_peer) : vpeer(_peer) {
MTPmessages_getPeerDialogs(const MTPVector<MTPInputPeer> &_peers) : vpeers(_peers) {
}
uint32 innerLength() const {
return vpeer.innerLength();
return vpeers.innerLength();
}
mtpTypeId type() const {
return mtpc_messages_getPeerDialogs;
}
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getPeerDialogs) {
vpeer.read(from, end);
vpeers.read(from, end);
}
void write(mtpBuffer &to) const {
vpeer.write(to);
vpeers.write(to);
}
typedef MTPmessages_PeerDialogs ResponseType;
@ -20297,7 +20298,7 @@ public:
}
MTPmessages_GetPeerDialogs(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed<MTPmessages_getPeerDialogs>(from, end, cons) {
}
MTPmessages_GetPeerDialogs(const MTPVector<MTPInputPeer> &_peer) : MTPBoxed<MTPmessages_getPeerDialogs>(MTPmessages_getPeerDialogs(_peer)) {
MTPmessages_GetPeerDialogs(const MTPVector<MTPInputPeer> &_peers) : MTPBoxed<MTPmessages_getPeerDialogs>(MTPmessages_getPeerDialogs(_peers)) {
}
};
@ -20804,36 +20805,21 @@ public:
class MTPhelp_getAppUpdate { // RPC method 'help.getAppUpdate'
public:
MTPstring vdevice_model;
MTPstring vsystem_version;
MTPstring vapp_version;
MTPstring vlang_code;
MTPhelp_getAppUpdate() {
}
MTPhelp_getAppUpdate(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getAppUpdate) {
read(from, end, cons);
}
MTPhelp_getAppUpdate(const MTPstring &_device_model, const MTPstring &_system_version, const MTPstring &_app_version, const MTPstring &_lang_code) : vdevice_model(_device_model), vsystem_version(_system_version), vapp_version(_app_version), vlang_code(_lang_code) {
}
uint32 innerLength() const {
return vdevice_model.innerLength() + vsystem_version.innerLength() + vapp_version.innerLength() + vlang_code.innerLength();
return 0;
}
mtpTypeId type() const {
return mtpc_help_getAppUpdate;
}
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getAppUpdate) {
vdevice_model.read(from, end);
vsystem_version.read(from, end);
vapp_version.read(from, end);
vlang_code.read(from, end);
}
void write(mtpBuffer &to) const {
vdevice_model.write(to);
vsystem_version.write(to);
vapp_version.write(to);
vlang_code.write(to);
}
typedef MTPhelp_AppUpdate ResponseType;
@ -20846,8 +20832,6 @@ public:
}
MTPhelp_GetAppUpdate(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed<MTPhelp_getAppUpdate>(from, end, cons) {
}
MTPhelp_GetAppUpdate(const MTPstring &_device_model, const MTPstring &_system_version, const MTPstring &_app_version, const MTPstring &_lang_code) : MTPBoxed<MTPhelp_getAppUpdate>(MTPhelp_getAppUpdate(_device_model, _system_version, _app_version, _lang_code)) {
}
};
class MTPhelp_saveAppLog { // RPC method 'help.saveAppLog'
@ -20891,27 +20875,21 @@ public:
class MTPhelp_getInviteText { // RPC method 'help.getInviteText'
public:
MTPstring vlang_code;
MTPhelp_getInviteText() {
}
MTPhelp_getInviteText(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getInviteText) {
read(from, end, cons);
}
MTPhelp_getInviteText(const MTPstring &_lang_code) : vlang_code(_lang_code) {
}
uint32 innerLength() const {
return vlang_code.innerLength();
return 0;
}
mtpTypeId type() const {
return mtpc_help_getInviteText;
}
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getInviteText) {
vlang_code.read(from, end);
}
void write(mtpBuffer &to) const {
vlang_code.write(to);
}
typedef MTPhelp_InviteText ResponseType;
@ -20924,8 +20902,6 @@ public:
}
MTPhelp_GetInviteText(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed<MTPhelp_getInviteText>(from, end, cons) {
}
MTPhelp_GetInviteText(const MTPstring &_lang_code) : MTPBoxed<MTPhelp_getInviteText>(MTPhelp_getInviteText(_lang_code)) {
}
};
class MTPhelp_getSupport { // RPC method 'help.getSupport'
@ -20961,36 +20937,21 @@ public:
class MTPhelp_getAppChangelog { // RPC method 'help.getAppChangelog'
public:
MTPstring vdevice_model;
MTPstring vsystem_version;
MTPstring vapp_version;
MTPstring vlang_code;
MTPhelp_getAppChangelog() {
}
MTPhelp_getAppChangelog(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getAppChangelog) {
read(from, end, cons);
}
MTPhelp_getAppChangelog(const MTPstring &_device_model, const MTPstring &_system_version, const MTPstring &_app_version, const MTPstring &_lang_code) : vdevice_model(_device_model), vsystem_version(_system_version), vapp_version(_app_version), vlang_code(_lang_code) {
}
uint32 innerLength() const {
return vdevice_model.innerLength() + vsystem_version.innerLength() + vapp_version.innerLength() + vlang_code.innerLength();
return 0;
}
mtpTypeId type() const {
return mtpc_help_getAppChangelog;
}
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getAppChangelog) {
vdevice_model.read(from, end);
vsystem_version.read(from, end);
vapp_version.read(from, end);
vlang_code.read(from, end);
}
void write(mtpBuffer &to) const {
vdevice_model.write(to);
vsystem_version.write(to);
vapp_version.write(to);
vlang_code.write(to);
}
typedef MTPhelp_AppChangelog ResponseType;
@ -21003,33 +20964,25 @@ public:
}
MTPhelp_GetAppChangelog(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed<MTPhelp_getAppChangelog>(from, end, cons) {
}
MTPhelp_GetAppChangelog(const MTPstring &_device_model, const MTPstring &_system_version, const MTPstring &_app_version, const MTPstring &_lang_code) : MTPBoxed<MTPhelp_getAppChangelog>(MTPhelp_getAppChangelog(_device_model, _system_version, _app_version, _lang_code)) {
}
};
class MTPhelp_getTermsOfService { // RPC method 'help.getTermsOfService'
public:
MTPstring vlang_code;
MTPhelp_getTermsOfService() {
}
MTPhelp_getTermsOfService(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getTermsOfService) {
read(from, end, cons);
}
MTPhelp_getTermsOfService(const MTPstring &_lang_code) : vlang_code(_lang_code) {
}
uint32 innerLength() const {
return vlang_code.innerLength();
return 0;
}
mtpTypeId type() const {
return mtpc_help_getTermsOfService;
}
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_getTermsOfService) {
vlang_code.read(from, end);
}
void write(mtpBuffer &to) const {
vlang_code.write(to);
}
typedef MTPhelp_TermsOfService ResponseType;
@ -21042,8 +20995,6 @@ public:
}
MTPhelp_GetTermsOfService(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed<MTPhelp_getTermsOfService>(from, end, cons) {
}
MTPhelp_GetTermsOfService(const MTPstring &_lang_code) : MTPBoxed<MTPhelp_getTermsOfService>(MTPhelp_getTermsOfService(_lang_code)) {
}
};
class MTPchannels_getDialogs { // RPC method 'channels.getDialogs'
@ -22705,11 +22656,11 @@ public:
inline static MTPmessageAction new_messageActionPinMessage() {
return MTPmessageAction(mtpc_messageActionPinMessage);
}
inline static MTPdialog new_dialog(const MTPPeer &_peer, MTPint _top_message, MTPint _read_inbox_max_id, MTPint _unread_count, const MTPPeerNotifySettings &_notify_settings) {
return MTPdialog(new MTPDdialog(_peer, _top_message, _read_inbox_max_id, _unread_count, _notify_settings));
inline static MTPdialog new_dialog(const MTPPeer &_peer, MTPint _top_message, MTPint _read_inbox_max_id, MTPint _read_outbox_max_id, MTPint _unread_count, const MTPPeerNotifySettings &_notify_settings) {
return MTPdialog(new MTPDdialog(_peer, _top_message, _read_inbox_max_id, _read_outbox_max_id, _unread_count, _notify_settings));
}
inline static MTPdialog new_dialogChannel(const MTPPeer &_peer, MTPint _top_message, MTPint _top_important_message, MTPint _read_inbox_max_id, MTPint _unread_count, MTPint _unread_important_count, const MTPPeerNotifySettings &_notify_settings, MTPint _pts) {
return MTPdialog(new MTPDdialogChannel(_peer, _top_message, _top_important_message, _read_inbox_max_id, _unread_count, _unread_important_count, _notify_settings, _pts));
inline static MTPdialog new_dialogChannel(const MTPPeer &_peer, MTPint _top_message, MTPint _top_important_message, MTPint _read_inbox_max_id, MTPint _read_outbox_max_id, MTPint _unread_count, MTPint _unread_important_count, const MTPPeerNotifySettings &_notify_settings, MTPint _pts) {
return MTPdialog(new MTPDdialogChannel(_peer, _top_message, _top_important_message, _read_inbox_max_id, _read_outbox_max_id, _unread_count, _unread_important_count, _notify_settings, _pts));
}
inline static MTPphoto new_photoEmpty(const MTPlong &_id) {
return MTPphoto(new MTPDphotoEmpty(_id));
@ -22885,6 +22836,9 @@ public:
inline static MTPmessagesFilter new_inputMessagesFilterMusic() {
return MTPmessagesFilter(mtpc_inputMessagesFilterMusic);
}
inline static MTPmessagesFilter new_inputMessagesFilterChatPhotos() {
return MTPmessagesFilter(mtpc_inputMessagesFilterChatPhotos);
}
inline static MTPupdate new_updateNewMessage(const MTPMessage &_message, MTPint _pts, MTPint _pts_count) {
return MTPupdate(new MTPDupdateNewMessage(_message, _pts, _pts_count));
}
@ -23029,6 +22983,9 @@ public:
inline static MTPupdate new_updateInlineBotCallbackQuery(const MTPlong &_query_id, MTPint _user_id, const MTPInputBotInlineMessageID &_msg_id, const MTPbytes &_data) {
return MTPupdate(new MTPDupdateInlineBotCallbackQuery(_query_id, _user_id, _msg_id, _data));
}
inline static MTPupdate new_updateReadChannelOutbox(MTPint _channel_id, MTPint _max_id) {
return MTPupdate(new MTPDupdateReadChannelOutbox(_channel_id, _max_id));
}
inline static MTPupdates_state new_updates_state(MTPint _pts, MTPint _qts, MTPint _date, MTPint _seq, MTPint _unread_count) {
return MTPupdates_state(new MTPDupdates_state(_pts, _qts, _date, _seq, _unread_count));
}
@ -26928,11 +26885,11 @@ inline uint32 MTPdialog::innerLength() const {
switch (_type) {
case mtpc_dialog: {
const MTPDdialog &v(c_dialog());
return v.vpeer.innerLength() + v.vtop_message.innerLength() + v.vread_inbox_max_id.innerLength() + v.vunread_count.innerLength() + v.vnotify_settings.innerLength();
return v.vpeer.innerLength() + v.vtop_message.innerLength() + v.vread_inbox_max_id.innerLength() + v.vread_outbox_max_id.innerLength() + v.vunread_count.innerLength() + v.vnotify_settings.innerLength();
}
case mtpc_dialogChannel: {
const MTPDdialogChannel &v(c_dialogChannel());
return v.vpeer.innerLength() + v.vtop_message.innerLength() + v.vtop_important_message.innerLength() + v.vread_inbox_max_id.innerLength() + v.vunread_count.innerLength() + v.vunread_important_count.innerLength() + v.vnotify_settings.innerLength() + v.vpts.innerLength();
return v.vpeer.innerLength() + v.vtop_message.innerLength() + v.vtop_important_message.innerLength() + v.vread_inbox_max_id.innerLength() + v.vread_outbox_max_id.innerLength() + v.vunread_count.innerLength() + v.vunread_important_count.innerLength() + v.vnotify_settings.innerLength() + v.vpts.innerLength();
}
}
return 0;
@ -26950,6 +26907,7 @@ inline void MTPdialog::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeI
v.vpeer.read(from, end);
v.vtop_message.read(from, end);
v.vread_inbox_max_id.read(from, end);
v.vread_outbox_max_id.read(from, end);
v.vunread_count.read(from, end);
v.vnotify_settings.read(from, end);
} break;
@ -26960,6 +26918,7 @@ inline void MTPdialog::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeI
v.vtop_message.read(from, end);
v.vtop_important_message.read(from, end);
v.vread_inbox_max_id.read(from, end);
v.vread_outbox_max_id.read(from, end);
v.vunread_count.read(from, end);
v.vunread_important_count.read(from, end);
v.vnotify_settings.read(from, end);
@ -26975,6 +26934,7 @@ inline void MTPdialog::write(mtpBuffer &to) const {
v.vpeer.write(to);
v.vtop_message.write(to);
v.vread_inbox_max_id.write(to);
v.vread_outbox_max_id.write(to);
v.vunread_count.write(to);
v.vnotify_settings.write(to);
} break;
@ -26984,6 +26944,7 @@ inline void MTPdialog::write(mtpBuffer &to) const {
v.vtop_message.write(to);
v.vtop_important_message.write(to);
v.vread_inbox_max_id.write(to);
v.vread_outbox_max_id.write(to);
v.vunread_count.write(to);
v.vunread_important_count.write(to);
v.vnotify_settings.write(to);
@ -27002,11 +26963,11 @@ inline MTPdialog::MTPdialog(MTPDdialog *_data) : mtpDataOwner(_data), _type(mtpc
}
inline MTPdialog::MTPdialog(MTPDdialogChannel *_data) : mtpDataOwner(_data), _type(mtpc_dialogChannel) {
}
inline MTPdialog MTP_dialog(const MTPPeer &_peer, MTPint _top_message, MTPint _read_inbox_max_id, MTPint _unread_count, const MTPPeerNotifySettings &_notify_settings) {
return MTP::internal::TypeCreator::new_dialog(_peer, _top_message, _read_inbox_max_id, _unread_count, _notify_settings);
inline MTPdialog MTP_dialog(const MTPPeer &_peer, MTPint _top_message, MTPint _read_inbox_max_id, MTPint _read_outbox_max_id, MTPint _unread_count, const MTPPeerNotifySettings &_notify_settings) {
return MTP::internal::TypeCreator::new_dialog(_peer, _top_message, _read_inbox_max_id, _read_outbox_max_id, _unread_count, _notify_settings);
}
inline MTPdialog MTP_dialogChannel(const MTPPeer &_peer, MTPint _top_message, MTPint _top_important_message, MTPint _read_inbox_max_id, MTPint _unread_count, MTPint _unread_important_count, const MTPPeerNotifySettings &_notify_settings, MTPint _pts) {
return MTP::internal::TypeCreator::new_dialogChannel(_peer, _top_message, _top_important_message, _read_inbox_max_id, _unread_count, _unread_important_count, _notify_settings, _pts);
inline MTPdialog MTP_dialogChannel(const MTPPeer &_peer, MTPint _top_message, MTPint _top_important_message, MTPint _read_inbox_max_id, MTPint _read_outbox_max_id, MTPint _unread_count, MTPint _unread_important_count, const MTPPeerNotifySettings &_notify_settings, MTPint _pts) {
return MTP::internal::TypeCreator::new_dialogChannel(_peer, _top_message, _top_important_message, _read_inbox_max_id, _read_outbox_max_id, _unread_count, _unread_important_count, _notify_settings, _pts);
}
inline uint32 MTPphoto::innerLength() const {
@ -28341,6 +28302,7 @@ inline void MTPmessagesFilter::read(const mtpPrime *&from, const mtpPrime *end,
case mtpc_inputMessagesFilterGif: _type = cons; break;
case mtpc_inputMessagesFilterVoice: _type = cons; break;
case mtpc_inputMessagesFilterMusic: _type = cons; break;
case mtpc_inputMessagesFilterChatPhotos: _type = cons; break;
default: throw mtpErrorUnexpected(cons, "MTPmessagesFilter");
}
}
@ -28358,6 +28320,7 @@ inline MTPmessagesFilter::MTPmessagesFilter(mtpTypeId type) : _type(type) {
case mtpc_inputMessagesFilterGif: break;
case mtpc_inputMessagesFilterVoice: break;
case mtpc_inputMessagesFilterMusic: break;
case mtpc_inputMessagesFilterChatPhotos: break;
default: throw mtpErrorBadTypeId(type, "MTPmessagesFilter");
}
}
@ -28391,6 +28354,9 @@ inline MTPmessagesFilter MTP_inputMessagesFilterVoice() {
inline MTPmessagesFilter MTP_inputMessagesFilterMusic() {
return MTP::internal::TypeCreator::new_inputMessagesFilterMusic();
}
inline MTPmessagesFilter MTP_inputMessagesFilterChatPhotos() {
return MTP::internal::TypeCreator::new_inputMessagesFilterChatPhotos();
}
inline uint32 MTPupdate::innerLength() const {
switch (_type) {
@ -28578,6 +28544,10 @@ inline uint32 MTPupdate::innerLength() const {
const MTPDupdateInlineBotCallbackQuery &v(c_updateInlineBotCallbackQuery());
return v.vquery_id.innerLength() + v.vuser_id.innerLength() + v.vmsg_id.innerLength() + v.vdata.innerLength();
}
case mtpc_updateReadChannelOutbox: {
const MTPDupdateReadChannelOutbox &v(c_updateReadChannelOutbox());
return v.vchannel_id.innerLength() + v.vmax_id.innerLength();
}
}
return 0;
}
@ -28906,6 +28876,12 @@ inline void MTPupdate::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeI
v.vmsg_id.read(from, end);
v.vdata.read(from, end);
} break;
case mtpc_updateReadChannelOutbox: _type = cons; {
if (!data) setData(new MTPDupdateReadChannelOutbox());
MTPDupdateReadChannelOutbox &v(_updateReadChannelOutbox());
v.vchannel_id.read(from, end);
v.vmax_id.read(from, end);
} break;
default: throw mtpErrorUnexpected(cons, "MTPupdate");
}
}
@ -29181,6 +29157,11 @@ inline void MTPupdate::write(mtpBuffer &to) const {
v.vmsg_id.write(to);
v.vdata.write(to);
} break;
case mtpc_updateReadChannelOutbox: {
const MTPDupdateReadChannelOutbox &v(c_updateReadChannelOutbox());
v.vchannel_id.write(to);
v.vmax_id.write(to);
} break;
}
}
inline MTPupdate::MTPupdate(mtpTypeId type) : mtpDataOwner(0), _type(type) {
@ -29233,6 +29214,7 @@ inline MTPupdate::MTPupdate(mtpTypeId type) : mtpDataOwner(0), _type(type) {
case mtpc_updateBotCallbackQuery: setData(new MTPDupdateBotCallbackQuery()); break;
case mtpc_updateEditMessage: setData(new MTPDupdateEditMessage()); break;
case mtpc_updateInlineBotCallbackQuery: setData(new MTPDupdateInlineBotCallbackQuery()); break;
case mtpc_updateReadChannelOutbox: setData(new MTPDupdateReadChannelOutbox()); break;
default: throw mtpErrorBadTypeId(type, "MTPupdate");
}
}
@ -29328,6 +29310,8 @@ inline MTPupdate::MTPupdate(MTPDupdateEditMessage *_data) : mtpDataOwner(_data),
}
inline MTPupdate::MTPupdate(MTPDupdateInlineBotCallbackQuery *_data) : mtpDataOwner(_data), _type(mtpc_updateInlineBotCallbackQuery) {
}
inline MTPupdate::MTPupdate(MTPDupdateReadChannelOutbox *_data) : mtpDataOwner(_data), _type(mtpc_updateReadChannelOutbox) {
}
inline MTPupdate MTP_updateNewMessage(const MTPMessage &_message, MTPint _pts, MTPint _pts_count) {
return MTP::internal::TypeCreator::new_updateNewMessage(_message, _pts, _pts_count);
}
@ -29475,6 +29459,9 @@ inline MTPupdate MTP_updateEditMessage(const MTPMessage &_message, MTPint _pts,
inline MTPupdate MTP_updateInlineBotCallbackQuery(const MTPlong &_query_id, MTPint _user_id, const MTPInputBotInlineMessageID &_msg_id, const MTPbytes &_data) {
return MTP::internal::TypeCreator::new_updateInlineBotCallbackQuery(_query_id, _user_id, _msg_id, _data);
}
inline MTPupdate MTP_updateReadChannelOutbox(MTPint _channel_id, MTPint _max_id) {
return MTP::internal::TypeCreator::new_updateReadChannelOutbox(_channel_id, _max_id);
}
inline MTPupdates_state::MTPupdates_state() : mtpDataOwner(new MTPDupdates_state()) {
}

View file

@ -954,6 +954,8 @@ void ProfileInner::paintEvent(QPaintEvent *e) {
p.setPen(st::black->p);
bool mediaFound = false;
for (int i = 0; i < OverviewCount; ++i) {
if (!_mediaButtons[i]) continue;
if (!_mediaButtons[i]->isHidden()) {
mediaFound = true;
top += _mediaButtons[i]->height() + st::setLittleSkip;
@ -1258,6 +1260,8 @@ bool ProfileInner::updateMediaLinks(int32 *addToScroll) {
QPoint p(addToScroll ? mapFromGlobal(QCursor::pos()) : QPoint(0, 0));
bool oneWasShown = false;
for (int i = 0; i < OverviewCount; ++i) {
if (!_mediaButtons[i]) continue;
if (!_mediaButtons[i]->isHidden()) {
oneWasShown = true;
break;
@ -1271,6 +1275,8 @@ bool ProfileInner::updateMediaLinks(int32 *addToScroll) {
int32 y = _mediaButtons[OverviewPhotos]->y();
if (addToScroll) *addToScroll = 0;
for (int i = 0; i < OverviewCount; ++i) {
if (!_mediaButtons[i]) continue;
int32 addToY = _mediaButtons[i]->height() + st::setLittleSkip;
int32 count = _history->overviewCount(i), additional = _migrated ? _migrated->overviewCount(i) : 0;
@ -1465,6 +1471,8 @@ void ProfileInner::resizeEvent(QResizeEvent *e) {
bool mediaFound = false;
for (int i = 0; i < OverviewCount; ++i) {
if (!_mediaButtons[i]) continue;
_mediaButtons[i]->move(_left, top);
if (!_mediaButtons[i]->isHidden()) {
mediaFound = true;

View file

@ -188,7 +188,7 @@ private:
// shared media
bool _notAllMediaLoaded;
LinkButton *_mediaButtons[OverviewCount];
LinkButton *_mediaButtons[OverviewCount] = { nullptr };
QString overviewLinkText(int32 type, int32 count);
// actions