mirror of https://github.com/procxx/kepka.git
merged with master spam report buttons, 40 layer not compiling!
This commit is contained in:
commit
659c52347c
|
@ -1,10 +1,10 @@
|
|||
@echo OFF
|
||||
|
||||
set "AppVersionStrMajor=0.8"
|
||||
set "AppVersion=8055"
|
||||
set "AppVersionStrSmall=0.8.55"
|
||||
set "AppVersionStr=0.8.55"
|
||||
set "AppVersionStrFull=0.8.55.0"
|
||||
set "AppVersion=8056"
|
||||
set "AppVersionStrSmall=0.8.56"
|
||||
set "AppVersionStr=0.8.56"
|
||||
set "AppVersionStrFull=0.8.56.0"
|
||||
set "DevChannel=0"
|
||||
|
||||
if %DevChannel% neq 0 goto preparedev
|
||||
|
|
|
@ -491,6 +491,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_in_dlg_sticker" = "Sticker";
|
||||
"lng_in_dlg_sticker_emoji" = "{emoji} (sticker)";
|
||||
|
||||
"lng_report_spam" = "Report Spam";
|
||||
"lng_report_spam_hide" = "Hide";
|
||||
"lng_report_spam_thanks" = "Thank you for your report!";
|
||||
"lng_cant_send_to_not_contact" = "Sorry, you can only send messages to\nmutual contacts at the moment. {more_info}";
|
||||
"lng_cant_invite_not_contact" = "Sorry, you can only add mutual contacts\nto groups at the moment. {more_info}";
|
||||
"lng_cant_more_info" = "More info »";
|
||||
|
||||
"lng_send_button" = "Send";
|
||||
"lng_message_ph" = "Write a message..";
|
||||
"lng_record_cancel" = "Release outside this field to cancel";
|
||||
|
@ -501,6 +508,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_bot_description" = "What can this bot do?";
|
||||
"lng_unblock_button" = "Unblock";
|
||||
|
||||
"lng_open_this_link" = "Open this link?";
|
||||
"lng_open_link" = "Open";
|
||||
|
||||
"lng_bot_start" = "Start";
|
||||
"lng_bot_choose_group" = "Choose Group";
|
||||
"lng_bot_no_groups" = "You have no groups";
|
||||
|
@ -657,7 +667,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
|
||||
"lng_new_version_wrap" = "Telegram Desktop was updated to version {version}\n\n{changes}\n\nFull version history is available here:\n{link}";
|
||||
"lng_new_version_minor" = "— Bug fixes and other minor improvements";
|
||||
"lng_new_version_text" = "— Include muted chats in unread count in Settings\n— Shared links overview and search in shared media\n— Preview when sending links to GIF animations and PDF files";
|
||||
"lng_new_version_text" = "— Spam report buttons in new chats\n— Other fixes and improvements\n— OS X 10.8 notifications fixed";
|
||||
|
||||
"lng_menu_insert_unicode" = "Insert Unicode control character";
|
||||
|
||||
|
|
|
@ -1106,7 +1106,34 @@ textRectMargins: margins(-2px, -1px, -2px, -1px);
|
|||
taMsgField: flatTextarea(taDefFlat) {
|
||||
font: msgFont;
|
||||
}
|
||||
maxFieldHeight: 243px;
|
||||
maxFieldHeight: 220px;
|
||||
// historyMinHeight: 56px;
|
||||
|
||||
reportSpamHide: flatButton(topBarButton) {
|
||||
height: 46px;
|
||||
|
||||
textTop: 15px;
|
||||
overTextTop: 15px;
|
||||
downTextTop: 16px;
|
||||
|
||||
bgColor: transparent;
|
||||
overBgColor: transparent;
|
||||
downBgColor: transparent;
|
||||
}
|
||||
reportSpamButton: flatButton(reportSpamHide) {
|
||||
textTop: 6px;
|
||||
overTextTop: 6px;
|
||||
downTextTop: 7px;
|
||||
|
||||
width: -50px;
|
||||
height: 30px;
|
||||
|
||||
bgColor: #888;
|
||||
overBgColor: #7b7b7b;
|
||||
downBgColor: #7b7b7b;
|
||||
}
|
||||
reportSpamSeparator: 30px;
|
||||
reportSpamBg: #fffffff0;
|
||||
|
||||
newMsgSound: ':/gui/art/newmsg.wav';
|
||||
|
||||
|
|
|
@ -423,6 +423,10 @@ namespace App {
|
|||
data->setBotInfoVersion(-1);
|
||||
}
|
||||
data->contact = (flags & (MTPDuser_flag_contact | MTPDuser_flag_mutual_contact)) ? 1 : (data->phone.isEmpty() ? -1 : 0);
|
||||
if (data->contact == 1 && cReportSpamStatuses().value(data->id, dbiprsNoButton) != dbiprsNoButton) {
|
||||
cRefReportSpamStatuses().insert(data->id, dbiprsNoButton);
|
||||
Local::writeReportSpamStatuses();
|
||||
}
|
||||
if ((flags & MTPDuser_flag_self) && ::self != data) {
|
||||
::self = data;
|
||||
if (App::wnd()) App::wnd()->updateGlobalMenu();
|
||||
|
@ -568,10 +572,17 @@ namespace App {
|
|||
int32 pversion = chat->participants.isEmpty() ? 1 : (chat->participants.begin().value() + 1);
|
||||
chat->cankick = ChatData::CanKick();
|
||||
for (QVector<MTPChatParticipant>::const_iterator i = v.cbegin(), e = v.cend(); i != e; ++i) {
|
||||
UserData *user = App::userLoaded(i->c_chatParticipant().vuser_id.v);
|
||||
if (i->type() != mtpc_chatParticipant) continue;
|
||||
|
||||
const MTPDchatParticipant &p(i->c_chatParticipant());
|
||||
//if (p.vuser_id.v == MTP::authedId()) {
|
||||
// chat->inviter = p.vinviter_id.v; // we use inviter only from service msgs
|
||||
// chat->inviteDate = p.vdate.v;
|
||||
//}
|
||||
UserData *user = App::userLoaded(p.vuser_id.v);
|
||||
if (user) {
|
||||
chat->participants[user] = pversion;
|
||||
if (i->c_chatParticipant().vinviter_id.v == MTP::authedId()) {
|
||||
if (p.vinviter_id.v == MTP::authedId()) {
|
||||
chat->cankick[user] = true;
|
||||
}
|
||||
} else {
|
||||
|
@ -621,6 +632,10 @@ namespace App {
|
|||
ChatData *chat = App::chat(d.vchat_id.v);
|
||||
if (chat->version <= d.vversion.v && chat->count >= 0) {
|
||||
chat->version = d.vversion.v;
|
||||
//if (d.vuser_id.v == MTP::authedId()) {
|
||||
// chat->inviter = d.vinviter_id.v; // we use inviter only from service msgs
|
||||
// chat->inviteDate = unixtime(); // no event date here :(
|
||||
//}
|
||||
UserData *user = App::userLoaded(d.vuser_id.v);
|
||||
if (user) {
|
||||
if (chat->participants.isEmpty() && chat->count) {
|
||||
|
@ -713,7 +728,7 @@ namespace App {
|
|||
bool hasLinks = m.has_entities() && !m.ventities.c_vector().v.isEmpty();
|
||||
if ((hasLinks && !existing->hasTextLinks()) || (!hasLinks && existing->textHasLinks())) {
|
||||
existing->setText(qs(m.vmessage), m.has_entities() ? linksFromMTP(m.ventities.c_vector().v) : LinksInText());
|
||||
existing->initDimensions(0);
|
||||
existing->initDimensions();
|
||||
if (App::main()) App::main()->itemResized(existing);
|
||||
if (existing->hasTextLinks()) {
|
||||
existing->history()->addToOverview(existing, OverviewLinks);
|
||||
|
@ -873,6 +888,10 @@ namespace App {
|
|||
switch (myLink.type()) {
|
||||
case mtpc_contactLinkContact:
|
||||
user->contact = 1;
|
||||
if (user->contact == 1 && cReportSpamStatuses().value(user->id, dbiprsNoButton) != dbiprsNoButton) {
|
||||
cRefReportSpamStatuses().insert(user->id, dbiprsNoButton);
|
||||
Local::writeReportSpamStatuses();
|
||||
}
|
||||
break;
|
||||
case mtpc_contactLinkHasPhone:
|
||||
user->contact = 0;
|
||||
|
@ -1768,6 +1787,7 @@ namespace App {
|
|||
cSetStickerSets(StickerSets());
|
||||
cSetStickerSetsOrder(StickerSetsOrder());
|
||||
cSetLastStickersUpdate(0);
|
||||
cSetReportSpamStatuses(ReportSpamStatuses());
|
||||
::videoItems.clear();
|
||||
::audioItems.clear();
|
||||
::documentItems.clear();
|
||||
|
|
|
@ -679,8 +679,10 @@ void Application::checkMapVersion() {
|
|||
QString versionFeatures;
|
||||
if (cDevVersion() && Local::oldMapVersion() < 8054) {
|
||||
versionFeatures = QString::fromUtf8("\xe2\x80\x94 Preview when sending links to GIF animations and PDF files\n\xe2\x80\x94 Full date and time shown when mouse over message timestamp");// .replace('@', qsl("@") + QChar(0x200D));
|
||||
} else if (!cDevVersion() && Local::oldMapVersion() < 8055) {
|
||||
} else if (Local::oldMapVersion() < 8056) {
|
||||
versionFeatures = lang(lng_new_version_text).trimmed();
|
||||
} else {
|
||||
versionFeatures = lang(lng_new_version_minor).trimmed();
|
||||
}
|
||||
if (!versionFeatures.isEmpty()) {
|
||||
versionFeatures = lng_new_version_wrap(lt_version, QString::fromStdWString(AppVersionStr), lt_changes, versionFeatures, lt_link, qsl("https://desktop.telegram.org/#changelog"));
|
||||
|
|
|
@ -49,7 +49,7 @@ void ConfirmBox::init(const QString &text) {
|
|||
_text.setText(st::boxFont, text, (_infoMsg ? _confirmBoxTextOptions : _textPlainOptions));
|
||||
|
||||
_textWidth = st::boxWidth - st::boxPadding.left() - st::boxPadding.right();
|
||||
_textHeight = _text.countHeight(_textWidth);
|
||||
_textHeight = qMin(_text.countHeight(_textWidth), 16 * st::boxFont->height);
|
||||
setMaxHeight(st::boxPadding.top() + _textHeight + st::boxPadding.bottom() + (_infoMsg ? _close.height() : _confirm.height()));
|
||||
|
||||
if (_infoMsg) {
|
||||
|
@ -171,7 +171,7 @@ void ConfirmBox::paintEvent(QPaintEvent *e) {
|
|||
// draw box title / text
|
||||
p.setFont(st::boxFont->f);
|
||||
p.setPen(st::black->p);
|
||||
_text.draw(p, st::boxPadding.left(), st::boxPadding.top(), _textWidth, (_text.maxWidth() < width()) ? style::al_center : style::al_left);
|
||||
_text.drawElided(p, st::boxPadding.left(), st::boxPadding.top(), _textWidth, 16, (_text.maxWidth() < width()) ? style::al_center : style::al_left);
|
||||
}
|
||||
|
||||
void ConfirmBox::resizeEvent(QResizeEvent *e) {
|
||||
|
@ -182,3 +182,16 @@ void ConfirmBox::resizeEvent(QResizeEvent *e) {
|
|||
_cancel.move(0, st::boxPadding.top() + _textHeight + st::boxPadding.bottom());
|
||||
}
|
||||
}
|
||||
|
||||
ConfirmLinkBox::ConfirmLinkBox(const QString &url) : ConfirmBox(lang(lng_open_this_link) + qsl("\n\n") + url, lang(lng_open_link)), _url(url) {
|
||||
connect(this, SIGNAL(confirmed()), this, SLOT(onOpenLink()));
|
||||
}
|
||||
|
||||
void ConfirmLinkBox::onOpenLink() {
|
||||
if (reMailStart().match(_url).hasMatch()) {
|
||||
EmailLink(_url).onClick(Qt::LeftButton);
|
||||
} else {
|
||||
TextLink(_url).onClick(Qt::LeftButton);
|
||||
}
|
||||
App::wnd()->hideLayer();
|
||||
}
|
||||
|
|
|
@ -67,3 +67,20 @@ private:
|
|||
QPoint _lastMousePos;
|
||||
TextLinkPtr _myLink;
|
||||
};
|
||||
|
||||
class ConfirmLinkBox : public ConfirmBox {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
ConfirmLinkBox(const QString &url);
|
||||
|
||||
public slots:
|
||||
|
||||
void onOpenLink();
|
||||
|
||||
private:
|
||||
|
||||
QString _url;
|
||||
|
||||
};
|
||||
|
|
|
@ -1318,7 +1318,7 @@ void CreateGroupBox::created(const MTPUpdates &updates) {
|
|||
}
|
||||
|
||||
bool CreateGroupBox::failed(const RPCError &error) {
|
||||
if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false;
|
||||
if (mtpIsFlood(error)) return false;
|
||||
|
||||
_createRequestId = 0;
|
||||
if (error.type() == "NO_CHAT_TITLE") {
|
||||
|
@ -1327,6 +1327,10 @@ bool CreateGroupBox::failed(const RPCError &error) {
|
|||
} else if (error.type() == "USERS_TOO_FEW") {
|
||||
emit closed();
|
||||
return true;
|
||||
} else if (error.type() == "PEER_FLOOD") {
|
||||
emit closed();
|
||||
App::wnd()->showLayer(new ConfirmBox(lng_cant_invite_not_contact(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info)))), true);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -17,8 +17,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
*/
|
||||
#pragma once
|
||||
|
||||
static const int32 AppVersion = 8055;
|
||||
static const wchar_t *AppVersionStr = L"0.8.55";
|
||||
static const int32 AppVersion = 8056;
|
||||
static const wchar_t *AppVersionStr = L"0.8.56";
|
||||
static const bool DevVersion = false;
|
||||
|
||||
static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)";
|
||||
|
|
|
@ -838,7 +838,6 @@ void DialogsListWidget::peopleReceived(const QString &query, const QVector<MTPPe
|
|||
}
|
||||
|
||||
void DialogsListWidget::contactsReceived(const QVector<MTPContact> &contacts) {
|
||||
cSetContactsReceived(true);
|
||||
for (QVector<MTPContact>::const_iterator i = contacts.cbegin(), e = contacts.cend(); i != e; ++i) {
|
||||
int32 uid = i->c_contact().vuser_id.v;
|
||||
addNewContact(uid);
|
||||
|
@ -1811,11 +1810,13 @@ void DialogsWidget::loadDialogs() {
|
|||
}
|
||||
|
||||
void DialogsWidget::contactsReceived(const MTPcontacts_Contacts &contacts) {
|
||||
cSetContactsReceived(true);
|
||||
if (contacts.type() == mtpc_contacts_contacts) {
|
||||
const MTPDcontacts_contacts &d(contacts.c_contacts_contacts());
|
||||
App::feedUsers(d.vusers);
|
||||
list.contactsReceived(d.vcontacts.c_vector().v);
|
||||
}
|
||||
if (App::main()) App::main()->contactsReceived();
|
||||
}
|
||||
|
||||
bool DialogsWidget::contactsFailed(const RPCError &error) {
|
||||
|
|
|
@ -21,6 +21,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
#include "lang.h"
|
||||
|
||||
#include "pspecific.h"
|
||||
#include "boxes/confirmbox.h"
|
||||
#include "window.h"
|
||||
|
||||
#include <private/qharfbuzz_p.h>
|
||||
|
||||
|
@ -60,6 +62,10 @@ const QRegularExpression &reMailName() {
|
|||
return _reMailName;
|
||||
}
|
||||
|
||||
const QRegularExpression &reMailStart() {
|
||||
return _reMailStart;
|
||||
}
|
||||
|
||||
const QRegularExpression &reHashtag() {
|
||||
return _reHashtag;
|
||||
}
|
||||
|
@ -336,9 +342,16 @@ public:
|
|||
|
||||
createBlock();
|
||||
|
||||
QString lnkUrl = QString(start + waitingLink->offset, waitingLink->length), lnkText;
|
||||
int32 fullDisplayed;
|
||||
getLinkData(lnkUrl, lnkText, fullDisplayed);
|
||||
QString lnkUrl, lnkText;
|
||||
if (waitingLink->type == LinkInTextCustomUrl) {
|
||||
lnkUrl = waitingLink->text;
|
||||
lnkText = QString(start + waitingLink->offset, waitingLink->length);
|
||||
fullDisplayed = -5;
|
||||
} else {
|
||||
lnkUrl = QString(start + waitingLink->offset, waitingLink->length);
|
||||
getLinkData(lnkUrl, lnkText, fullDisplayed);
|
||||
}
|
||||
|
||||
links.push_back(TextLinkData(lnkUrl, fullDisplayed));
|
||||
lnkIndex = 0x8000 + links.size();
|
||||
|
@ -617,7 +630,9 @@ public:
|
|||
_t->_links.resize(lnkIndex);
|
||||
const TextLinkData &data(links[lnkIndex - maxLnkIndex - 1]);
|
||||
TextLinkPtr lnk;
|
||||
if (data.fullDisplayed < -3) { // bot command
|
||||
if (data.fullDisplayed < -4) { // hidden link
|
||||
lnk = TextLinkPtr(new CustomTextLink(data.url));
|
||||
} else if (data.fullDisplayed < -3) { // bot command
|
||||
lnk = TextLinkPtr(new BotCommandLink(data.url));
|
||||
} else if (data.fullDisplayed < -2) { // mention
|
||||
if (options.flags & TextTwitterMentions) {
|
||||
|
@ -664,7 +679,7 @@ private:
|
|||
TextLinkData(const QString &url = QString(), int32 fullDisplayed = 1) : url(url), fullDisplayed(fullDisplayed) {
|
||||
}
|
||||
QString url;
|
||||
int32 fullDisplayed; // -4 - bot command, -3 - mention, -2 - hashtag, -1 - email
|
||||
int32 fullDisplayed; // -5 - custom text link, -4 - bot command, -3 - mention, -2 - hashtag, -1 - email
|
||||
};
|
||||
typedef QVector<TextLinkData> TextLinks;
|
||||
TextLinks links;
|
||||
|
@ -820,6 +835,10 @@ void EmailLink::onClick(Qt::MouseButton button) const {
|
|||
}
|
||||
}
|
||||
|
||||
void CustomTextLink::onClick(Qt::MouseButton button) const {
|
||||
App::wnd()->showLayer(new ConfirmLinkBox(text()));
|
||||
}
|
||||
|
||||
void MentionLink::onClick(Qt::MouseButton button) const {
|
||||
if (button == Qt::LeftButton || button == Qt::MiddleButton) {
|
||||
App::openPeerByName(_tag.mid(1), true);
|
||||
|
|
|
@ -357,6 +357,14 @@ private:
|
|||
|
||||
};
|
||||
|
||||
class CustomTextLink : public TextLink {
|
||||
public:
|
||||
|
||||
CustomTextLink(const QString &url) : TextLink(url, false) {
|
||||
}
|
||||
void onClick(Qt::MouseButton button) const;
|
||||
};
|
||||
|
||||
class EmailLink : public ITextLink {
|
||||
TEXT_LINK_CLASS(EmailLink)
|
||||
|
||||
|
@ -603,6 +611,7 @@ const QSet<int32> &validProtocols();
|
|||
const QSet<int32> &validTopDomains();
|
||||
const QRegularExpression &reDomain();
|
||||
const QRegularExpression &reMailName();
|
||||
const QRegularExpression &reMailStart();
|
||||
const QRegularExpression &reHashtag();
|
||||
const QRegularExpression &reBotCommand();
|
||||
|
||||
|
|
|
@ -1547,8 +1547,9 @@ MsgId History::msgIdForRead() const {
|
|||
return result;
|
||||
}
|
||||
|
||||
int32 History::geomResize(int32 newWidth, int32 *ytransform, bool dontRecountText) {
|
||||
if (width != newWidth || dontRecountText) {
|
||||
int32 History::geomResize(int32 newWidth, int32 *ytransform, HistoryItem *resizedItem) {
|
||||
if (width != newWidth) resizedItem = 0; // recount all items
|
||||
if (width != newWidth || resizedItem) {
|
||||
int32 y = 0;
|
||||
for (iterator i = begin(), e = end(); i != e; ++i) {
|
||||
HistoryBlock *block = *i;
|
||||
|
@ -1557,7 +1558,7 @@ int32 History::geomResize(int32 newWidth, int32 *ytransform, bool dontRecountTex
|
|||
if (block->y != y) {
|
||||
block->y = y;
|
||||
}
|
||||
y += block->geomResize(newWidth, ytransform, dontRecountText);
|
||||
y += block->geomResize(newWidth, ytransform, resizedItem);
|
||||
if (updTransform) {
|
||||
*ytransform += block->y;
|
||||
ytransform = 0;
|
||||
|
@ -1646,14 +1647,18 @@ void History::removeBlock(HistoryBlock *block) {
|
|||
delete block;
|
||||
}
|
||||
|
||||
int32 HistoryBlock::geomResize(int32 newWidth, int32 *ytransform, bool dontRecountText) {
|
||||
int32 HistoryBlock::geomResize(int32 newWidth, int32 *ytransform, HistoryItem *resizedItem) {
|
||||
int32 y = 0;
|
||||
for (iterator i = begin(), e = end(); i != e; ++i) {
|
||||
HistoryItem *item = *i;
|
||||
bool updTransform = ytransform && (*ytransform >= item->y) && (*ytransform < item->y + item->height());
|
||||
if (updTransform) *ytransform -= item->y;
|
||||
item->y = y;
|
||||
y += item->resize(newWidth, dontRecountText);
|
||||
if (!resizedItem || resizedItem == item) {
|
||||
y += item->resize(newWidth);
|
||||
} else {
|
||||
y += item->height();
|
||||
}
|
||||
if (updTransform) {
|
||||
*ytransform += item->y;
|
||||
ytransform = 0;
|
||||
|
@ -1939,7 +1944,7 @@ void HistoryPhoto::initDimensions(const HistoryItem *parent) {
|
|||
}
|
||||
}
|
||||
|
||||
int32 HistoryPhoto::resize(int32 width, bool dontRecountText, const HistoryItem *parent) {
|
||||
int32 HistoryPhoto::resize(int32 width, const HistoryItem *parent) {
|
||||
const HistoryReply *reply = toHistoryReply(parent);
|
||||
const HistoryForwarded *fwd = reply ? 0 : toHistoryForwarded(parent);
|
||||
|
||||
|
@ -2264,8 +2269,11 @@ QString formatSizeText(qint64 size) {
|
|||
qint64 sizeTenthMb = (size * 10 / (1024 * 1024));
|
||||
return QString::number(sizeTenthMb / 10) + '.' + QString::number(sizeTenthMb % 10) + qsl(" MB");
|
||||
}
|
||||
qint64 sizeTenthKb = (size * 10 / 1024);
|
||||
return QString::number(sizeTenthKb / 10) + '.' + QString::number(sizeTenthKb % 10) + qsl(" KB");
|
||||
if (size >= 1024) {
|
||||
qint64 sizeTenthKb = (size * 10 / 1024);
|
||||
return QString::number(sizeTenthKb / 10) + '.' + QString::number(sizeTenthKb % 10) + qsl(" KB");
|
||||
}
|
||||
return QString::number(size) + qsl(" B");
|
||||
}
|
||||
|
||||
QString formatDownloadText(qint64 ready, qint64 total) {
|
||||
|
@ -2275,11 +2283,15 @@ QString formatDownloadText(qint64 ready, qint64 total) {
|
|||
readyStr = QString::number(readyTenthMb / 10) + '.' + QString::number(readyTenthMb % 10);
|
||||
totalStr = QString::number(totalTenthMb / 10) + '.' + QString::number(totalTenthMb % 10);
|
||||
mb = qsl("MB");
|
||||
} else {
|
||||
} else if (total >= 1024) {
|
||||
qint64 readyKb = (ready / 1024), totalKb = (total / 1024);
|
||||
readyStr = QString::number(readyKb);
|
||||
totalStr = QString::number(totalKb);
|
||||
mb = qsl("KB");
|
||||
} else {
|
||||
readyStr = QString::number(ready);
|
||||
totalStr = QString::number(total);
|
||||
mb = qsl("B");
|
||||
}
|
||||
return lng_save_downloaded(lt_ready, readyStr, lt_total, totalStr, lt_mb, mb);
|
||||
}
|
||||
|
@ -2652,7 +2664,7 @@ void HistoryVideo::draw(QPainter &p, const HistoryItem *parent, bool selected, i
|
|||
}
|
||||
}
|
||||
|
||||
int32 HistoryVideo::resize(int32 width, bool dontRecountText, const HistoryItem *parent) {
|
||||
int32 HistoryVideo::resize(int32 width, const HistoryItem *parent) {
|
||||
w = qMin(width, _maxw);
|
||||
if (_caption.isEmpty()) return _height;
|
||||
|
||||
|
@ -3386,7 +3398,7 @@ void HistoryDocument::updateFrom(const MTPMessageMedia &media) {
|
|||
}
|
||||
}
|
||||
|
||||
int32 HistoryDocument::resize(int32 width, bool dontRecountText, const HistoryItem *parent) {
|
||||
int32 HistoryDocument::resize(int32 width, const HistoryItem *parent) {
|
||||
w = qMin(width, _maxw);
|
||||
if (parent == animated.msg) {
|
||||
if (w > st::maxMediaSize) {
|
||||
|
@ -3628,7 +3640,7 @@ void HistorySticker::draw(QPainter &p, const HistoryItem *parent, bool selected,
|
|||
}
|
||||
}
|
||||
|
||||
int32 HistorySticker::resize(int32 width, bool dontRecountText, const HistoryItem *parent) {
|
||||
int32 HistorySticker::resize(int32 width, const HistoryItem *parent) {
|
||||
w = qMin(width, _maxw);
|
||||
lastw = width;
|
||||
return _height;
|
||||
|
@ -4325,7 +4337,7 @@ void HistoryWebPage::draw(QPainter &p, const HistoryItem *parent, bool selected,
|
|||
p.restore();
|
||||
}
|
||||
|
||||
int32 HistoryWebPage::resize(int32 width, bool dontRecountText, const HistoryItem *parent) {
|
||||
int32 HistoryWebPage::resize(int32 width, const HistoryItem *parent) {
|
||||
if (data->pendingTill) {
|
||||
w = width;
|
||||
_height = _minh;
|
||||
|
@ -5124,7 +5136,7 @@ void HistoryImageLink::draw(QPainter &p, const HistoryItem *parent, bool selecte
|
|||
}
|
||||
}
|
||||
|
||||
int32 HistoryImageLink::resize(int32 width, bool dontRecountText, const HistoryItem *parent) {
|
||||
int32 HistoryImageLink::resize(int32 width, const HistoryItem *parent) {
|
||||
const HistoryReply *reply = toHistoryReply(parent);
|
||||
const HistoryForwarded *fwd = toHistoryForwarded(parent);
|
||||
|
||||
|
@ -5410,7 +5422,7 @@ void HistoryMessage::initMediaFromDocument(DocumentData *doc) {
|
|||
_media->regItem(this);
|
||||
}
|
||||
|
||||
void HistoryMessage::initDimensions(const HistoryItem *parent) {
|
||||
void HistoryMessage::initDimensions() {
|
||||
if (justMedia()) {
|
||||
_media->initDimensions(this);
|
||||
_maxw = _media->maxWidth();
|
||||
|
@ -5493,7 +5505,7 @@ void HistoryMessage::setMedia(const MTPMessageMedia *media) {
|
|||
_textWidth = 0;
|
||||
_textHeight = 0;
|
||||
}
|
||||
initDimensions(0);
|
||||
initDimensions();
|
||||
if (App::main()) App::main()->itemResized(this);
|
||||
}
|
||||
|
||||
|
@ -5630,15 +5642,13 @@ void HistoryMessage::drawMessageText(QPainter &p, const QRect &trect, uint32 sel
|
|||
textstyleRestore();
|
||||
}
|
||||
|
||||
int32 HistoryMessage::resize(int32 width, bool dontRecountText, const HistoryItem *parent) {
|
||||
int32 HistoryMessage::resize(int32 width) {
|
||||
if (width < st::msgMinWidth) return _height;
|
||||
|
||||
width -= st::msgMargin.left() + st::msgMargin.right();
|
||||
if (justMedia()) {
|
||||
_height = _media->resize(width, dontRecountText, this);
|
||||
_height = _media->resize(width, this);
|
||||
} else {
|
||||
if (dontRecountText && !_media) return _height;
|
||||
|
||||
if (width < st::msgPadding.left() + st::msgPadding.right() + 1) {
|
||||
width = st::msgPadding.left() + st::msgPadding.right() + 1;
|
||||
} else if (width > st::msgMaxWidth) {
|
||||
|
@ -5651,10 +5661,10 @@ int32 HistoryMessage::resize(int32 width, bool dontRecountText, const HistoryIte
|
|||
}
|
||||
if (width >= _maxw) {
|
||||
_height = _minh;
|
||||
if (_media) _media->resize(_maxw - st::msgPadding.left() - st::msgPadding.right(), dontRecountText, this);
|
||||
if (_media) _media->resize(_maxw - st::msgPadding.left() - st::msgPadding.right(), this);
|
||||
} else {
|
||||
_height = _textHeight;
|
||||
if (_media && _media->isDisplayed()) _height += st::msgPadding.bottom() + _media->resize(nwidth, dontRecountText, this);
|
||||
if (_media && _media->isDisplayed()) _height += st::msgPadding.bottom() + _media->resize(nwidth, this);
|
||||
}
|
||||
if (displayFromName()) {
|
||||
_height += st::msgNameFont->height;
|
||||
|
@ -5864,8 +5874,8 @@ QString HistoryForwarded::selectedText(uint32 selection) const {
|
|||
return result;
|
||||
}
|
||||
|
||||
void HistoryForwarded::initDimensions(const HistoryItem *parent) {
|
||||
HistoryMessage::initDimensions(parent);
|
||||
void HistoryForwarded::initDimensions() {
|
||||
HistoryMessage::initDimensions();
|
||||
fwdNameUpdated();
|
||||
}
|
||||
|
||||
|
@ -5908,11 +5918,10 @@ void HistoryForwarded::drawMessageText(QPainter &p, const QRect &trect, uint32 s
|
|||
HistoryMessage::drawMessageText(p, realtrect, selection);
|
||||
}
|
||||
|
||||
int32 HistoryForwarded::resize(int32 width, bool dontRecountText, const HistoryItem *parent) {
|
||||
HistoryMessage::resize(width, dontRecountText, parent);
|
||||
if (!justMedia() && (_media || !dontRecountText)) {
|
||||
_height += st::msgServiceNameFont->height;
|
||||
}
|
||||
int32 HistoryForwarded::resize(int32 width) {
|
||||
HistoryMessage::resize(width);
|
||||
|
||||
_height += st::msgServiceNameFont->height;
|
||||
return _height;
|
||||
}
|
||||
|
||||
|
@ -6064,11 +6073,11 @@ QString HistoryReply::selectedText(uint32 selection) const {
|
|||
return result;
|
||||
}
|
||||
|
||||
void HistoryReply::initDimensions(const HistoryItem *parent) {
|
||||
void HistoryReply::initDimensions() {
|
||||
if (!replyToMsg) {
|
||||
_maxReplyWidth = st::msgReplyBarSkip + st::msgDateFont->m.width(lang(replyToMsgId ? lng_profile_loading : lng_deleted_message)) + st::msgPadding.left() + st::msgPadding.right();
|
||||
}
|
||||
HistoryMessage::initDimensions(parent);
|
||||
HistoryMessage::initDimensions();
|
||||
if (replyToMsg) {
|
||||
replyToNameUpdated();
|
||||
} else if (!justMedia()) {
|
||||
|
@ -6211,11 +6220,10 @@ void HistoryReply::drawMessageText(QPainter &p, const QRect &trect, uint32 selec
|
|||
HistoryMessage::drawMessageText(p, realtrect, selection);
|
||||
}
|
||||
|
||||
int32 HistoryReply::resize(int32 width, bool dontRecountText, const HistoryItem *parent) {
|
||||
HistoryMessage::resize(width, dontRecountText, parent);
|
||||
if (!justMedia() && (_media || !dontRecountText)) {
|
||||
_height += st::msgReplyPadding.top() + st::msgReplyBarSize.height() + st::msgReplyPadding.bottom();
|
||||
}
|
||||
int32 HistoryReply::resize(int32 width) {
|
||||
HistoryMessage::resize(width);
|
||||
|
||||
_height += st::msgReplyPadding.top() + st::msgReplyBarSize.height() + st::msgReplyPadding.bottom();
|
||||
return _height;
|
||||
}
|
||||
|
||||
|
@ -6357,6 +6365,11 @@ void HistoryServiceMsg::setMessageByAction(const MTPmessageAction &action) {
|
|||
UserData *u = App::user(peerFromUser(d.vuser_id));
|
||||
second = TextLinkPtr(new PeerLink(u));
|
||||
text = lng_action_add_user(lt_from, from, lt_user, textcmdLink(2, u->name));
|
||||
if (d.vuser_id.v == MTP::authedId() && unread()) {
|
||||
if (history()->peer->chat && !history()->peer->asChat()->inviterForSpamReport && !_from->chat) {
|
||||
history()->peer->asChat()->inviterForSpamReport = App::userFromPeer(_from->id);
|
||||
}
|
||||
}
|
||||
}
|
||||
} break;
|
||||
|
||||
|
@ -6374,6 +6387,11 @@ void HistoryServiceMsg::setMessageByAction(const MTPmessageAction &action) {
|
|||
case mtpc_messageActionChatCreate: {
|
||||
const MTPDmessageActionChatCreate &d(action.c_messageActionChatCreate());
|
||||
text = lng_action_created_chat(lt_from, from, lt_title, textClean(qs(d.vtitle)));
|
||||
if (unread()) {
|
||||
if (history()->peer->chat && !history()->peer->asChat()->inviterForSpamReport && !_from->chat && App::userFromPeer(_from->id) != MTP::authedId()) {
|
||||
history()->peer->asChat()->inviterForSpamReport = App::userFromPeer(_from->id);
|
||||
}
|
||||
}
|
||||
} break;
|
||||
|
||||
case mtpc_messageActionChannelCreate: {
|
||||
|
@ -6437,10 +6455,10 @@ HistoryServiceMsg::HistoryServiceMsg(History *history, HistoryBlock *block, MsgI
|
|||
{
|
||||
}
|
||||
|
||||
void HistoryServiceMsg::initDimensions(const HistoryItem *parent) {
|
||||
void HistoryServiceMsg::initDimensions() {
|
||||
_maxw = _text.maxWidth() + st::msgServicePadding.left() + st::msgServicePadding.right();
|
||||
_minh = _text.minHeight();
|
||||
if (_media) _media->initDimensions();
|
||||
if (_media) _media->initDimensions(this);
|
||||
}
|
||||
|
||||
QString HistoryServiceMsg::selectedText(uint32 selection) const {
|
||||
|
@ -6503,9 +6521,7 @@ void HistoryServiceMsg::draw(QPainter &p, uint32 selection) const {
|
|||
textstyleRestore();
|
||||
}
|
||||
|
||||
int32 HistoryServiceMsg::resize(int32 width, bool dontRecountText, const HistoryItem *parent) {
|
||||
if (dontRecountText) return _height;
|
||||
|
||||
int32 HistoryServiceMsg::resize(int32 width) {
|
||||
width -= st::msgServiceMargin.left() + st::msgServiceMargin.left(); // two small margins
|
||||
if (width < st::msgServicePadding.left() + st::msgServicePadding.right() + 1) width = st::msgServicePadding.left() + st::msgServicePadding.right() + 1;
|
||||
|
||||
|
@ -6521,7 +6537,7 @@ int32 HistoryServiceMsg::resize(int32 width, bool dontRecountText, const History
|
|||
}
|
||||
_height += st::msgServicePadding.top() + st::msgServicePadding.bottom() + st::msgServiceMargin.top() + st::msgServiceMargin.bottom();
|
||||
if (_media) {
|
||||
_height += st::msgServiceMargin.top() + _media->resize(_media->currentWidth());
|
||||
_height += st::msgServiceMargin.top() + _media->resize(_media->currentWidth(), this);
|
||||
}
|
||||
return _height;
|
||||
}
|
||||
|
@ -6607,7 +6623,7 @@ HistoryUnreadBar::HistoryUnreadBar(History *history, HistoryBlock *block, int32
|
|||
initDimensions();
|
||||
}
|
||||
|
||||
void HistoryUnreadBar::initDimensions(const HistoryItem *parent) {
|
||||
void HistoryUnreadBar::initDimensions() {
|
||||
_maxw = st::msgPadding.left() + st::msgPadding.right() + 1;
|
||||
_minh = st::unreadBarHeight;
|
||||
}
|
||||
|
@ -6626,7 +6642,7 @@ void HistoryUnreadBar::draw(QPainter &p, uint32 selection) const {
|
|||
p.drawText(QRect(0, 0, _history->width, st::unreadBarHeight - st::lineWidth), text, style::al_center);
|
||||
}
|
||||
|
||||
int32 HistoryUnreadBar::resize(int32 width, bool dontRecountText, const HistoryItem *parent) {
|
||||
int32 HistoryUnreadBar::resize(int32 width) {
|
||||
_height = st::unreadBarHeight;
|
||||
return _height;
|
||||
}
|
||||
|
|
|
@ -220,7 +220,7 @@ struct History : public QList<HistoryBlock*> {
|
|||
MsgId maxMsgId() const;
|
||||
MsgId msgIdForRead() const;
|
||||
|
||||
int32 geomResize(int32 newWidth, int32 *ytransform = 0, bool dontRecountText = false); // return new size
|
||||
int32 geomResize(int32 newWidth, int32 *ytransform = 0, HistoryItem *resizedItem = 0); // return new size
|
||||
int32 width, height, msgCount, unreadCount;
|
||||
int32 inboxReadBefore, outboxReadBefore;
|
||||
HistoryItem *showFrom;
|
||||
|
@ -607,7 +607,7 @@ struct HistoryBlock : public QVector<HistoryItem*> {
|
|||
}
|
||||
void removeItem(HistoryItem *item);
|
||||
|
||||
int32 geomResize(int32 newWidth, int32 *ytransform, bool dontRecountText); // return new size
|
||||
int32 geomResize(int32 newWidth, int32 *ytransform, HistoryItem *resizedItem); // return new size
|
||||
int32 y, height;
|
||||
History *history;
|
||||
};
|
||||
|
@ -618,9 +618,6 @@ public:
|
|||
HistoryElem() : _height(0), _maxw(0) {
|
||||
}
|
||||
|
||||
virtual void initDimensions(const HistoryItem *parent = 0) = 0;
|
||||
virtual int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0) = 0; // return new height
|
||||
|
||||
int32 height() const {
|
||||
return _height;
|
||||
}
|
||||
|
@ -676,7 +673,10 @@ public:
|
|||
UnreadBarType
|
||||
};
|
||||
|
||||
virtual void initDimensions() = 0;
|
||||
virtual int32 resize(int32 width) = 0; // return new height
|
||||
virtual void draw(QPainter &p, uint32 selection) const = 0;
|
||||
|
||||
History *history() {
|
||||
return _history;
|
||||
}
|
||||
|
@ -873,7 +873,8 @@ public:
|
|||
virtual int32 countHeight(const HistoryItem *parent, int32 width = -1) const {
|
||||
return height();
|
||||
}
|
||||
virtual int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0) {
|
||||
virtual void initDimensions(const HistoryItem *parent) = 0;
|
||||
virtual int32 resize(int32 width, const HistoryItem *parent) { // return new height
|
||||
w = qMin(width, _maxw);
|
||||
return _height;
|
||||
}
|
||||
|
@ -928,7 +929,7 @@ public:
|
|||
void initDimensions(const HistoryItem *parent);
|
||||
|
||||
void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0);
|
||||
int32 resize(int32 width, const HistoryItem *parent);
|
||||
HistoryMediaType type() const {
|
||||
return MediaTypePhoto;
|
||||
}
|
||||
|
@ -978,7 +979,7 @@ public:
|
|||
void initDimensions(const HistoryItem *parent);
|
||||
|
||||
void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0);
|
||||
int32 resize(int32 width, const HistoryItem *parent);
|
||||
HistoryMediaType type() const {
|
||||
return MediaTypeVideo;
|
||||
}
|
||||
|
@ -1058,7 +1059,7 @@ public:
|
|||
void initDimensions(const HistoryItem *parent);
|
||||
|
||||
void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0);
|
||||
int32 resize(int32 width, const HistoryItem *parent);
|
||||
HistoryMediaType type() const {
|
||||
return MediaTypeDocument;
|
||||
}
|
||||
|
@ -1109,7 +1110,7 @@ public:
|
|||
void initDimensions(const HistoryItem *parent);
|
||||
|
||||
void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0);
|
||||
int32 resize(int32 width, const HistoryItem *parent);
|
||||
HistoryMediaType type() const {
|
||||
return MediaTypeSticker;
|
||||
}
|
||||
|
@ -1174,7 +1175,7 @@ public:
|
|||
bool isDisplayed() const {
|
||||
return !data->pendingTill;
|
||||
}
|
||||
int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0);
|
||||
int32 resize(int32 width, const HistoryItem *parent);
|
||||
HistoryMediaType type() const {
|
||||
return MediaTypeWebPage;
|
||||
}
|
||||
|
@ -1278,7 +1279,7 @@ public:
|
|||
void initDimensions(const HistoryItem *parent);
|
||||
|
||||
void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0);
|
||||
int32 resize(int32 width, const HistoryItem *parent);
|
||||
HistoryMediaType type() const {
|
||||
return MediaTypeImageLink;
|
||||
}
|
||||
|
@ -1311,7 +1312,7 @@ public:
|
|||
void initMedia(const MTPMessageMedia *media, QString ¤tText);
|
||||
void initMediaFromText(QString ¤tText);
|
||||
void initMediaFromDocument(DocumentData *doc);
|
||||
void initDimensions(const HistoryItem *parent = 0);
|
||||
void initDimensions();
|
||||
void fromNameUpdated() const;
|
||||
|
||||
bool justMedia() const {
|
||||
|
@ -1323,7 +1324,7 @@ public:
|
|||
void draw(QPainter &p, uint32 selection) const;
|
||||
virtual void drawMessageText(QPainter &p, const QRect &trect, uint32 selection) const;
|
||||
|
||||
int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0);
|
||||
int32 resize(int32 width);
|
||||
bool hasPoint(int32 x, int32 y) const;
|
||||
|
||||
void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const;
|
||||
|
@ -1397,13 +1398,13 @@ public:
|
|||
HistoryForwarded(History *history, HistoryBlock *block, const MTPDmessage &msg);
|
||||
HistoryForwarded(History *history, HistoryBlock *block, MsgId id, HistoryMessage *msg);
|
||||
|
||||
void initDimensions(const HistoryItem *parent = 0);
|
||||
void initDimensions();
|
||||
void fwdNameUpdated() const;
|
||||
|
||||
void draw(QPainter &p, uint32 selection) const;
|
||||
void drawForwardedFrom(QPainter &p, int32 x, int32 y, int32 w, bool selected) const;
|
||||
void drawMessageText(QPainter &p, const QRect &trect, uint32 selection) const;
|
||||
int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0);
|
||||
int32 resize(int32 width);
|
||||
bool hasPoint(int32 x, int32 y) const;
|
||||
void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const;
|
||||
void getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const;
|
||||
|
@ -1441,7 +1442,7 @@ public:
|
|||
HistoryReply(History *history, HistoryBlock *block, const MTPDmessage &msg);
|
||||
HistoryReply(History *history, HistoryBlock *block, MsgId msgId, int32 flags, MsgId replyTo, QDateTime date, int32 from, DocumentData *doc);
|
||||
|
||||
void initDimensions(const HistoryItem *parent = 0);
|
||||
void initDimensions();
|
||||
|
||||
bool updateReplyTo(bool force = false);
|
||||
void replyToNameUpdated() const;
|
||||
|
@ -1456,7 +1457,7 @@ public:
|
|||
void draw(QPainter &p, uint32 selection) const;
|
||||
void drawReplyTo(QPainter &p, int32 x, int32 y, int32 w, bool selected, bool likeService = false) const;
|
||||
void drawMessageText(QPainter &p, const QRect &trect, uint32 selection) const;
|
||||
int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0);
|
||||
int32 resize(int32 width);
|
||||
bool hasPoint(int32 x, int32 y) const;
|
||||
void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const;
|
||||
void getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const;
|
||||
|
@ -1494,10 +1495,10 @@ public:
|
|||
HistoryServiceMsg(History *history, HistoryBlock *block, const MTPDmessageService &msg);
|
||||
HistoryServiceMsg(History *history, HistoryBlock *block, MsgId msgId, QDateTime date, const QString &msg, int32 flags = 0, HistoryMedia *media = 0, int32 from = 0);
|
||||
|
||||
void initDimensions(const HistoryItem *parent = 0);
|
||||
void initDimensions();
|
||||
|
||||
void draw(QPainter &p, uint32 selection) const;
|
||||
int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0);
|
||||
int32 resize(int32 width);
|
||||
bool hasPoint(int32 x, int32 y) const;
|
||||
void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const;
|
||||
void getSymbol(uint16 &symbol, bool &after, bool &upon, int32 x, int32 y) const;
|
||||
|
@ -1564,12 +1565,12 @@ public:
|
|||
|
||||
HistoryUnreadBar(History *history, HistoryBlock *block, int32 count, const QDateTime &date);
|
||||
|
||||
void initDimensions(const HistoryItem *parent = 0);
|
||||
void initDimensions();
|
||||
|
||||
void setCount(int32 count);
|
||||
|
||||
void draw(QPainter &p, uint32 selection) const;
|
||||
int32 resize(int32 width, bool dontRecountText = false, const HistoryItem *parent = 0);
|
||||
int32 resize(int32 width);
|
||||
|
||||
void drawInDialog(QPainter &p, const QRect &r, bool act, const HistoryItem *&cacheFor, Text &cache) const;
|
||||
QString notificationText() const;
|
||||
|
|
|
@ -1065,7 +1065,7 @@ void HistoryList::keyPressEvent(QKeyEvent *e) {
|
|||
}
|
||||
}
|
||||
|
||||
int32 HistoryList::recountHeight(bool dontRecountText) {
|
||||
int32 HistoryList::recountHeight(HistoryItem *resizedItem) {
|
||||
int32 st = hist->lastScrollTop;
|
||||
|
||||
int32 ph = scrollArea->height(), minadd = 0;
|
||||
|
@ -1075,7 +1075,7 @@ int32 HistoryList::recountHeight(bool dontRecountText) {
|
|||
}
|
||||
if (wasYSkip < minadd) wasYSkip = minadd;
|
||||
|
||||
hist->geomResize(scrollArea->width(), &st, dontRecountText);
|
||||
hist->geomResize(scrollArea->width(), &st, resizedItem);
|
||||
updateBotInfo(false);
|
||||
if (botInfo && !botInfo->text.isEmpty()) {
|
||||
int32 tw = scrollArea->width() - st::msgMargin.left() - st::msgMargin.right();
|
||||
|
@ -1654,6 +1654,52 @@ void MessageField::focusInEvent(QFocusEvent *e) {
|
|||
emit focused();
|
||||
}
|
||||
|
||||
ReportSpamPanel::ReportSpamPanel(HistoryWidget *parent) : TWidget(parent),
|
||||
_report(this, lang(lng_report_spam), st::reportSpamHide),
|
||||
_hide(this, lang(lng_report_spam_hide), st::reportSpamHide),
|
||||
_clear(this, lang(lng_profile_delete_conversation)) {
|
||||
resize(parent->width(), _hide.height() + st::titleShadow);
|
||||
|
||||
connect(&_report, SIGNAL(clicked()), this, SIGNAL(reportClicked()));
|
||||
connect(&_hide, SIGNAL(clicked()), this, SIGNAL(hideClicked()));
|
||||
connect(&_clear, SIGNAL(clicked()), this, SIGNAL(clearClicked()));
|
||||
|
||||
_clear.hide();
|
||||
}
|
||||
|
||||
void ReportSpamPanel::resizeEvent(QResizeEvent *e) {
|
||||
_report.resize(width() - (_hide.width() + st::reportSpamSeparator) * 2, _report.height());
|
||||
_report.moveToLeft(_hide.width() + st::reportSpamSeparator, 0, width());
|
||||
_hide.moveToRight(0, 0, width());
|
||||
_clear.move((width() - _clear.width()) / 2, height() - _clear.height() - ((height() - st::msgFont->height - _clear.height()) / 2));
|
||||
}
|
||||
|
||||
void ReportSpamPanel::paintEvent(QPaintEvent *e) {
|
||||
Painter p(this);
|
||||
p.fillRect(QRect(0, 0, width(), height() - st::titleShadow), st::reportSpamBg->b);
|
||||
if (cWideMode()) {
|
||||
p.fillRect(st::titleShadow, height() - st::titleShadow, width() - st::titleShadow, st::titleShadow, st::titleShadowColor->b);
|
||||
} else {
|
||||
p.fillRect(0, height() - st::titleShadow, width(), st::titleShadow, st::titleShadowColor->b);
|
||||
}
|
||||
if (!_clear.isHidden()) {
|
||||
p.setPen(st::black->p);
|
||||
p.setFont(st::msgFont->f);
|
||||
p.drawText(QRect(_report.x(), (_clear.y() - st::msgFont->height) / 2, _report.width(), st::msgFont->height), lang(lng_report_spam_thanks), style::al_top);
|
||||
}
|
||||
}
|
||||
|
||||
void ReportSpamPanel::setReported(bool reported) {
|
||||
if (reported) {
|
||||
_report.hide();
|
||||
_clear.show();
|
||||
} else {
|
||||
_report.show();
|
||||
_clear.hide();
|
||||
}
|
||||
update();
|
||||
}
|
||||
|
||||
BotKeyboard::BotKeyboard() : _height(0), _maxOuterHeight(0), _maximizeSize(false), _singleUse(false), _forceReply(false),
|
||||
_sel(-1), _down(-1), _hoverAnim(animFunc(this, &BotKeyboard::hoverStep)), _st(&st::botKbButton) {
|
||||
setGeometry(0, 0, _st->margin, _st->margin);
|
||||
|
@ -2217,6 +2263,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent)
|
|||
, _replyTo(0)
|
||||
, _replyToNameVersion(0)
|
||||
, _replyForwardPreviewCancel(this, st::replyCancel)
|
||||
, _reportSpamStatus(dbiprsUnknown)
|
||||
, _previewData(0)
|
||||
, _previewRequest(0)
|
||||
, _previewCancelled(false)
|
||||
|
@ -2225,6 +2272,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent)
|
|||
, _stickersUpdateRequest(0)
|
||||
, _peer(0)
|
||||
, _channel(NoChannel)
|
||||
, _clearPeer(0)
|
||||
, _showAtMsgId(0)
|
||||
, _preloadRequest(0), _preloadDownRequest(0)
|
||||
, _delayedShowAtMsgId(-1)
|
||||
|
@ -2236,10 +2284,12 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent)
|
|||
, _histInited(false)
|
||||
, _toHistoryEnd(this, st::historyToEnd)
|
||||
, _attachMention(this)
|
||||
, _reportSpamPanel(this)
|
||||
, _send(this, lang(lng_send_button), st::btnSend)
|
||||
, _unblock(this, lang(lng_unblock_button), st::btnUnblock)
|
||||
, _botStart(this, lang(lng_bot_start), st::btnSend)
|
||||
, _unblockRequest(0)
|
||||
, _reportSpamRequest(0)
|
||||
, _attachDocument(this, st::btnAttachDocument)
|
||||
, _attachPhoto(this, st::btnAttachPhoto)
|
||||
, _attachEmoji(this, st::btnAttachEmoji)
|
||||
|
@ -2279,6 +2329,9 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent)
|
|||
setAcceptDrops(true);
|
||||
|
||||
connect(&_scroll, SIGNAL(scrolled()), this, SLOT(onListScroll()));
|
||||
connect(&_reportSpamPanel, SIGNAL(reportClicked()), this, SLOT(onReportSpamClicked()));
|
||||
connect(&_reportSpamPanel, SIGNAL(hideClicked()), this, SLOT(onReportSpamHide()));
|
||||
connect(&_reportSpamPanel, SIGNAL(clearClicked()), this, SLOT(onReportSpamClear()));
|
||||
connect(&_toHistoryEnd, SIGNAL(clicked()), this, SLOT(onHistoryToEnd()));
|
||||
connect(&_replyForwardPreviewCancel, SIGNAL(clicked()), this, SLOT(onReplyForwardPreviewCancel()));
|
||||
connect(&_send, SIGNAL(clicked()), this, SLOT(onSend()));
|
||||
|
@ -2348,6 +2401,9 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent)
|
|||
_unblock.hide();
|
||||
_botStart.hide();
|
||||
|
||||
_reportSpamPanel.move(0, 0);
|
||||
_reportSpamPanel.hide();
|
||||
|
||||
_attachDocument.hide();
|
||||
_attachPhoto.hide();
|
||||
_attachEmoji.hide();
|
||||
|
@ -2818,7 +2874,7 @@ void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) {
|
|||
_channel = _peer ? peerToChannel(_peer->id) : NoChannel;
|
||||
_canSendMessages = canSendMessages(_peer);
|
||||
|
||||
_unblockRequest = 0;
|
||||
_unblockRequest = _reportSpamRequest = 0;
|
||||
|
||||
_titlePeerText = QString();
|
||||
_titlePeerTextWidth = 0;
|
||||
|
@ -2928,8 +2984,74 @@ void HistoryWidget::clearAllLoadRequests() {
|
|||
_preloadRequest = _preloadDownRequest = _firstLoadRequest = 0;
|
||||
}
|
||||
|
||||
void HistoryWidget::contactsReceived() {
|
||||
if (!_peer) return;
|
||||
updateReportSpamStatus();
|
||||
updateControlsVisibility();
|
||||
}
|
||||
|
||||
void HistoryWidget::updateReportSpamStatus() {
|
||||
if (!_peer || (_peer->isUser() && (peerToUser(_peer->id) == MTP::authedId() || isNotificationsUser(_peer->id) || isServiceUser(_peer->id) || _peer->asUser()->botInfo))) {
|
||||
_reportSpamStatus = dbiprsNoButton;
|
||||
return;
|
||||
} else {
|
||||
ReportSpamStatuses::const_iterator i = cReportSpamStatuses().constFind(_peer->id);
|
||||
if (i != cReportSpamStatuses().cend()) {
|
||||
_reportSpamStatus = i.value();
|
||||
_reportSpamPanel.setReported(_reportSpamStatus == dbiprsReportSent);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if ((!_history->loadedAtTop() && (_history->size() < 2 || (_history->size() == 2 && _history->at(1)->size() < 2))) || !cContactsReceived() || _firstLoadRequest) {
|
||||
_reportSpamStatus = dbiprsUnknown;
|
||||
} else if (_peer->isUser()) {
|
||||
if (_peer->asUser()->contact > 0) {
|
||||
_reportSpamStatus = dbiprsNoButton;
|
||||
} else {
|
||||
bool anyFound = false, outFound = false;
|
||||
for (int32 i = 0, l = _history->size(); i < l; ++i) {
|
||||
for (int32 j = 0, c = _history->at(i)->size(); j < c; ++j) {
|
||||
anyFound = true;
|
||||
if (_history->at(i)->at(j)->out()) {
|
||||
outFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (anyFound) {
|
||||
if (outFound) {
|
||||
_reportSpamStatus = dbiprsNoButton;
|
||||
} else {
|
||||
_reportSpamStatus = dbiprsShowButton;
|
||||
}
|
||||
} else {
|
||||
_reportSpamStatus = dbiprsUnknown;
|
||||
}
|
||||
}
|
||||
} else if (_peer->isChat()) {
|
||||
if (_peer->asChat()->inviterForSpamReport > 0) {
|
||||
UserData *user = App::userLoaded(_peer->asChat()->inviterForSpamReport);
|
||||
if (user && user->contact > 0) {
|
||||
_reportSpamStatus = dbiprsNoButton;
|
||||
} else {
|
||||
_reportSpamStatus = dbiprsShowButton;
|
||||
}
|
||||
} else {
|
||||
_reportSpamStatus = dbiprsNoButton;
|
||||
}
|
||||
} else if (_peer->isChannel()) {
|
||||
_reportSpamStatus = dbiprsUnknown;
|
||||
}
|
||||
if (_reportSpamStatus == dbiprsShowButton || _reportSpamStatus == dbiprsNoButton) {
|
||||
_reportSpamPanel.setReported(false);
|
||||
cRefReportSpamStatuses().insert(_peer->id, _reportSpamStatus);
|
||||
Local::writeReportSpamStatuses();
|
||||
}
|
||||
}
|
||||
|
||||
void HistoryWidget::updateControlsVisibility() {
|
||||
if (!_history || _showAnim.animating()) {
|
||||
_reportSpamPanel.hide();
|
||||
_scroll.hide();
|
||||
_kbScroll.hide();
|
||||
_send.hide();
|
||||
|
@ -2956,6 +3078,11 @@ void HistoryWidget::updateControlsVisibility() {
|
|||
} else {
|
||||
_scroll.show();
|
||||
}
|
||||
if (_reportSpamStatus == dbiprsShowButton || _reportSpamStatus == dbiprsReportSent) {
|
||||
_reportSpamPanel.show();
|
||||
} else {
|
||||
_reportSpamPanel.hide();
|
||||
}
|
||||
if (_canSendMessages) {
|
||||
checkMentionDropdown();
|
||||
if (isBlocked()) {
|
||||
|
@ -3184,6 +3311,10 @@ void HistoryWidget::messagesReceived(const MTPmessages_Messages &messages, mtpRe
|
|||
addMessagesToFront(*histList);
|
||||
_preloadRequest = 0;
|
||||
onListScroll();
|
||||
if (_reportSpamStatus == dbiprsUnknown) {
|
||||
updateReportSpamStatus();
|
||||
if (_reportSpamStatus != dbiprsUnknown) updateControlsVisibility();
|
||||
}
|
||||
} else if (_preloadDownRequest == requestId) {
|
||||
addMessagesToBack(*histList);
|
||||
_preloadDownRequest = 0;
|
||||
|
@ -3437,10 +3568,18 @@ void HistoryWidget::unblockDone(PeerData *peer, const MTPBool &result) {
|
|||
|
||||
bool HistoryWidget::unblockFail(const RPCError &error) {
|
||||
if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false;
|
||||
// _unblockRequest = 0;
|
||||
|
||||
_unblockRequest = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
void HistoryWidget::blockDone(PeerData *peer, const MTPBool &result) {
|
||||
if (!peer->isUser()) return;
|
||||
|
||||
peer->asUser()->blocked = UserIsBlocked;
|
||||
emit App::main()->peerUpdated(peer);
|
||||
}
|
||||
|
||||
void HistoryWidget::onBotStart() {
|
||||
if (!_peer || !_peer->isUser() || !_peer->asUser()->botInfo) {
|
||||
updateControlsVisibility();
|
||||
|
@ -3494,14 +3633,15 @@ void HistoryWidget::shareContact(const PeerId &peer, const QString &phone, const
|
|||
flags |= MTPDmessage::flag_reply_to_msg_id;
|
||||
sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id;
|
||||
}
|
||||
|
||||
bool fromChannelName = p->isChannel();
|
||||
if (fromChannelName) {
|
||||
sendFlags |= MTPmessages_SendMessage_flag_broadcast;
|
||||
} else {
|
||||
flags |= MTPDmessage::flag_from_id;
|
||||
}
|
||||
h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(peer), MTPint(), MTPint(), MTP_int(replyToId()), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname), MTP_int(userId)), MTPnullMarkup, MTPnullEntities));
|
||||
h->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), p->input, MTP_int(replyTo), MTP_inputMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, h->sendRequestId);
|
||||
h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(peer), MTPPeer(), MTPint(), MTP_int(replyToId()), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname), MTP_int(userId)), MTPnullMarkup, MTPnullEntities, MTPint()));
|
||||
h->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), p->input, MTP_int(replyTo), MTP_inputMediaContact(MTP_string(phone), MTP_string(fname), MTP_string(lname)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::sendMessageFail), 0, 0, h->sendRequestId);
|
||||
|
||||
App::historyRegRandom(randomId, newId);
|
||||
|
||||
|
@ -3533,6 +3673,7 @@ void HistoryWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimTo
|
|||
App::main()->topBar()->startAnim();
|
||||
_scroll.hide();
|
||||
_kbScroll.hide();
|
||||
_reportSpamPanel.hide();
|
||||
_toHistoryEnd.hide();
|
||||
_attachDocument.hide();
|
||||
_attachPhoto.hide();
|
||||
|
@ -3581,6 +3722,7 @@ bool HistoryWidget::showStep(float64 ms) {
|
|||
}
|
||||
|
||||
void HistoryWidget::doneShow() {
|
||||
updateReportSpamStatus();
|
||||
updateBotKeyboard();
|
||||
updateControlsVisibility();
|
||||
updateListSize(0, true);
|
||||
|
@ -4403,12 +4545,12 @@ void HistoryWidget::confirmSendImage(const ReadyLocalMedia &img) {
|
|||
flags |= MTPDmessage::flag_from_id;
|
||||
}
|
||||
if (img.type == ToPreparePhoto) {
|
||||
h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaPhoto(img.photo, MTP_string("")), MTPnullMarkup, MTPnullEntities));
|
||||
h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(img.peer), MTPPeer(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaPhoto(img.photo, MTP_string("")), MTPnullMarkup, MTPnullEntities, MTPint()));
|
||||
} else if (img.type == ToPrepareDocument) {
|
||||
h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaDocument(img.document), MTPnullMarkup, MTPnullEntities));
|
||||
h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(img.peer), MTPPeer(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaDocument(img.document), MTPnullMarkup, MTPnullEntities, MTPint()));
|
||||
} else if (img.type == ToPrepareAudio) {
|
||||
flags |= MTPDmessage_flag_media_unread;
|
||||
h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(img.peer), MTPint(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaAudio(img.audio), MTPnullMarkup, MTPnullEntities));
|
||||
h->addToBack(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(img.peer), MTPPeer(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaAudio(img.audio), MTPnullMarkup, MTPnullEntities, MTPint()));
|
||||
}
|
||||
|
||||
if (_peer && img.peer == _peer->id) {
|
||||
|
@ -4437,11 +4579,12 @@ void HistoryWidget::onPhotoUploaded(const FullMsgId &newId, const MTPInputFile &
|
|||
if (replyTo) {
|
||||
sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id;
|
||||
}
|
||||
|
||||
bool fromChannelName = hist->peer->isChannel();
|
||||
if (fromChannelName) {
|
||||
sendFlags |= MTPmessages_SendMessage_flag_broadcast;
|
||||
}
|
||||
hist->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), item->history()->peer->input, MTP_int(replyTo), MTP_inputMediaUploadedPhoto(file, MTP_string("")), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::sendPhotoFailed, randomId), 0, 0, hist->sendRequestId);
|
||||
hist->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), item->history()->peer->input, MTP_int(replyTo), MTP_inputMediaUploadedPhoto(file, MTP_string("")), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::sendPhotoFail, randomId), 0, 0, hist->sendRequestId);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4481,11 +4624,12 @@ void HistoryWidget::onDocumentUploaded(const FullMsgId &newId, const MTPInputFil
|
|||
if (replyTo) {
|
||||
sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id;
|
||||
}
|
||||
|
||||
bool fromChannelName = hist->peer->isChannel();
|
||||
if (fromChannelName) {
|
||||
sendFlags |= MTPmessages_SendMessage_flag_broadcast;
|
||||
}
|
||||
hist->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), item->history()->peer->input, MTP_int(replyTo), MTP_inputMediaUploadedDocument(file, MTP_string(document->mime), _composeDocumentAttributes(document)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId);
|
||||
hist->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), item->history()->peer->input, MTP_int(replyTo), MTP_inputMediaUploadedDocument(file, MTP_string(document->mime), _composeDocumentAttributes(document)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::sendMessageFail), 0, 0, hist->sendRequestId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4509,11 +4653,12 @@ void HistoryWidget::onThumbDocumentUploaded(const FullMsgId &newId, const MTPInp
|
|||
if (replyTo) {
|
||||
sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id;
|
||||
}
|
||||
|
||||
bool fromChannelName = hist->peer->isChannel();
|
||||
if (fromChannelName) {
|
||||
sendFlags |= MTPmessages_SendMessage_flag_broadcast;
|
||||
}
|
||||
hist->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), item->history()->peer->input, MTP_int(replyTo), MTP_inputMediaUploadedThumbDocument(file, thumb, MTP_string(document->mime), _composeDocumentAttributes(document)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId);
|
||||
hist->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), item->history()->peer->input, MTP_int(replyTo), MTP_inputMediaUploadedThumbDocument(file, thumb, MTP_string(document->mime), _composeDocumentAttributes(document)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::sendMessageFail), 0, 0, hist->sendRequestId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4535,11 +4680,12 @@ void HistoryWidget::onAudioUploaded(const FullMsgId &newId, const MTPInputFile &
|
|||
if (replyTo) {
|
||||
sendFlags |= MTPmessages_SendMedia::flag_reply_to_msg_id;
|
||||
}
|
||||
|
||||
bool fromChannelName = hist->peer->isChannel();
|
||||
if (fromChannelName) {
|
||||
sendFlags |= MTPmessages_SendMessage_flag_broadcast;
|
||||
}
|
||||
hist->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), item->history()->peer->input, MTP_int(replyTo), MTP_inputMediaUploadedAudio(file, MTP_int(audio->duration), MTP_string(audio->mime)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId);
|
||||
hist->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), item->history()->peer->input, MTP_int(replyTo), MTP_inputMediaUploadedAudio(file, MTP_int(audio->duration), MTP_string(audio->mime)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::sendMessageFail), 0, 0, hist->sendRequestId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4601,6 +4747,62 @@ void HistoryWidget::onAudioFailed(const FullMsgId &newId) {
|
|||
}
|
||||
}
|
||||
|
||||
void HistoryWidget::onReportSpamClicked() {
|
||||
if (_reportSpamRequest) return;
|
||||
|
||||
if (_peer->isUser()) MTP::send(MTPcontacts_Block(_peer->asUser()->inputUser), rpcDone(&HistoryWidget::blockDone, _peer), RPCFailHandlerPtr(), 0, 5);
|
||||
_reportSpamRequest = MTP::send(MTPmessages_ReportSpam(_peer->input), rpcDone(&HistoryWidget::reportSpamDone, _peer), rpcFail(&HistoryWidget::reportSpamFail));
|
||||
}
|
||||
|
||||
void HistoryWidget::reportSpamDone(PeerData *peer, const MTPBool &result, mtpRequestId req) {
|
||||
if (req == _reportSpamRequest) {
|
||||
_reportSpamRequest = 0;
|
||||
}
|
||||
if (peer) {
|
||||
cRefReportSpamStatuses().insert(peer->id, dbiprsReportSent);
|
||||
Local::writeReportSpamStatuses();
|
||||
}
|
||||
_reportSpamStatus = dbiprsReportSent;
|
||||
_reportSpamPanel.setReported(_reportSpamStatus == dbiprsReportSent);
|
||||
}
|
||||
|
||||
bool HistoryWidget::reportSpamFail(const RPCError &error, mtpRequestId req) {
|
||||
if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false;
|
||||
|
||||
if (req == _reportSpamRequest) {
|
||||
_reportSpamRequest = 0;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void HistoryWidget::onReportSpamHide() {
|
||||
if (_peer) {
|
||||
cRefReportSpamStatuses().insert(_peer->id, dbiprsNoButton);
|
||||
Local::writeReportSpamStatuses();
|
||||
}
|
||||
_reportSpamStatus = dbiprsNoButton;
|
||||
updateControlsVisibility();
|
||||
}
|
||||
|
||||
void HistoryWidget::onReportSpamClear() {
|
||||
ConfirmBox *box = new ConfirmBox(_peer->isUser() ? lng_sure_delete_history(lt_contact, _peer->name) : lng_sure_delete_and_exit(lt_group, _peer->name));
|
||||
connect(box, SIGNAL(confirmed()), this, SLOT(onReportSpamClearSure()));
|
||||
App::wnd()->showLayer(box);
|
||||
_clearPeer = _peer;
|
||||
}
|
||||
|
||||
void HistoryWidget::onReportSpamClearSure() {
|
||||
if (_clearPeer->isUser()) {
|
||||
App::main()->deleteConversation(_clearPeer);
|
||||
} else if (_clearPeer->isChat()) {
|
||||
App::wnd()->hideLayer();
|
||||
App::main()->showDialogs();
|
||||
MTP::send(MTPmessages_DeleteChatUser(_clearPeer->asChat()->inputChat, App::self()->inputUser), App::main()->rpcDone(&MainWidget::deleteHistoryAfterLeave, _clearPeer), App::main()->rpcFail(&MainWidget::leaveChatFailed, _clearPeer));
|
||||
} else if (_clearPeer->isChannel()) { // CHANNELS_UX
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void HistoryWidget::peerMessagesUpdated(PeerId peer) {
|
||||
if (_peer && _list && peer == _peer->id) {
|
||||
updateListSize();
|
||||
|
@ -4623,6 +4825,8 @@ void HistoryWidget::msgUpdated(PeerId peer, const HistoryItem *msg) {
|
|||
}
|
||||
|
||||
void HistoryWidget::resizeEvent(QResizeEvent *e) {
|
||||
_reportSpamPanel.resize(width(), _reportSpamPanel.height());
|
||||
|
||||
int32 maxKeyboardHeight = int(st::maxFieldHeight) - _field.height();
|
||||
_keyboard.resizeToWidth(width(), maxKeyboardHeight);
|
||||
|
||||
|
@ -4711,7 +4915,7 @@ MsgId HistoryWidget::replyToId() const {
|
|||
void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, HistoryItem *resizedItem, bool scrollToIt) {
|
||||
if (!_history || (initial && _histInited) || (!initial && !_histInited)) return;
|
||||
if (_firstLoadRequest) {
|
||||
if (resizedItem) _list->recountHeight(true);
|
||||
if (resizedItem) _list->recountHeight(resizedItem);
|
||||
return; // scrollTopMax etc are not working after recountHeight()
|
||||
}
|
||||
|
||||
|
@ -4741,7 +4945,7 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown,
|
|||
if (!initial) {
|
||||
_history->lastScrollTop = _scroll.scrollTop();
|
||||
}
|
||||
int32 newSt = _list->recountHeight(!!resizedItem);
|
||||
int32 newSt = _list->recountHeight(resizedItem);
|
||||
bool washidden = _scroll.isHidden();
|
||||
if (washidden) {
|
||||
_scroll.show();
|
||||
|
@ -5036,7 +5240,7 @@ void HistoryWidget::onStickerSend(DocumentData *sticker) {
|
|||
}
|
||||
_history->addToBackDocument(newId.msg, flags, replyToId(), date(MTP_int(unixtime())), fromChannelName ? 0 : MTP::authedId(), sticker);
|
||||
|
||||
_history->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), _peer->input, MTP_int(replyToId()), MTP_inputMediaDocument(MTP_inputDocument(MTP_long(sticker->id), MTP_long(sticker->access))), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), RPCFailHandlerPtr(), 0, 0, _history->sendRequestId);
|
||||
_history->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_int(sendFlags), _peer->input, MTP_int(replyToId()), MTP_inputMediaDocument(MTP_inputDocument(MTP_long(sticker->id), MTP_long(sticker->access))), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::sendMessageFail), 0, 0, _history->sendRequestId);
|
||||
App::main()->finishForwarding(_history);
|
||||
cancelReply(lastKeyboardUsed);
|
||||
|
||||
|
@ -5288,6 +5492,7 @@ void HistoryWidget::onFullPeerUpdated(PeerData *data) {
|
|||
updateControlsVisibility();
|
||||
}
|
||||
checkMentionDropdown();
|
||||
updateReportSpamStatus();
|
||||
int32 lh = _list->height(), st = _scroll.scrollTop();
|
||||
_list->updateBotInfo();
|
||||
newScrollTop = st + _list->height() - lh;
|
||||
|
|
|
@ -63,7 +63,7 @@ public:
|
|||
void touchScrollUpdated(const QPoint &screenPos);
|
||||
QPoint mapMouseToItem(QPoint p, HistoryItem *item);
|
||||
|
||||
int32 recountHeight(bool dontRecountText);
|
||||
int32 recountHeight(HistoryItem *resizedItem);
|
||||
void updateSize();
|
||||
|
||||
void updateMsg(const HistoryItem *msg);
|
||||
|
@ -220,6 +220,32 @@ private:
|
|||
|
||||
};
|
||||
|
||||
class HistoryWidget;
|
||||
class ReportSpamPanel : public TWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
ReportSpamPanel(HistoryWidget *parent);
|
||||
|
||||
void resizeEvent(QResizeEvent *e);
|
||||
void paintEvent(QPaintEvent *e);
|
||||
|
||||
void setReported(bool reported);
|
||||
|
||||
signals:
|
||||
|
||||
void hideClicked();
|
||||
void reportClicked();
|
||||
void clearClicked();
|
||||
|
||||
private:
|
||||
|
||||
FlatButton _report, _hide;
|
||||
LinkButton _clear;
|
||||
|
||||
};
|
||||
|
||||
class BotKeyboard : public QWidget {
|
||||
Q_OBJECT
|
||||
|
||||
|
@ -490,6 +516,8 @@ public:
|
|||
void clearDelayedShowAt();
|
||||
void clearAllLoadRequests();
|
||||
|
||||
void contactsReceived();
|
||||
|
||||
~HistoryWidget();
|
||||
|
||||
signals:
|
||||
|
@ -527,6 +555,11 @@ public slots:
|
|||
void onDocumentFailed(const FullMsgId &msgId);
|
||||
void onAudioFailed(const FullMsgId &msgId);
|
||||
|
||||
void onReportSpamClicked();
|
||||
void onReportSpamHide();
|
||||
void onReportSpamClear();
|
||||
void onReportSpamClearSure();
|
||||
|
||||
void onListScroll();
|
||||
void onHistoryToEnd();
|
||||
void onSend(bool ctrlShiftEnter = false, MsgId replyTo = -1);
|
||||
|
@ -597,6 +630,9 @@ private:
|
|||
void drawRecording(Painter &p);
|
||||
void updateField();
|
||||
|
||||
DBIPeerReportSpamStatus _reportSpamStatus;
|
||||
void updateReportSpamStatus();
|
||||
|
||||
QString _previewLinks;
|
||||
WebPageData *_previewData;
|
||||
typedef QMap<QString, WebPageId> PreviewCache;
|
||||
|
@ -617,8 +653,12 @@ private:
|
|||
void addMessagesToFront(const QVector<MTPMessage> &messages);
|
||||
void addMessagesToBack(const QVector<MTPMessage> &messages);
|
||||
|
||||
void reportSpamDone(PeerData *peer, const MTPBool &result, mtpRequestId request);
|
||||
bool reportSpamFail(const RPCError &error, mtpRequestId request);
|
||||
|
||||
void unblockDone(PeerData *peer, const MTPBool &result);
|
||||
bool unblockFail(const RPCError &error);
|
||||
void blockDone(PeerData *peer, const MTPBool &result);
|
||||
|
||||
void countHistoryShowFrom();
|
||||
|
||||
|
@ -639,7 +679,7 @@ private:
|
|||
bool canSendMessages(PeerData *peer);
|
||||
bool readyToForward();
|
||||
|
||||
PeerData *_peer;
|
||||
PeerData *_peer, *_clearPeer; // cache _peer in _clearPeer when showing clear history box
|
||||
ChannelId _channel;
|
||||
bool _canSendMessages;
|
||||
MsgId _showAtMsgId;
|
||||
|
@ -664,8 +704,10 @@ private:
|
|||
bool isBlocked() const;
|
||||
bool updateCmdStartShown();
|
||||
|
||||
ReportSpamPanel _reportSpamPanel;
|
||||
|
||||
FlatButton _send, _unblock, _botStart;
|
||||
mtpRequestId _unblockRequest;
|
||||
mtpRequestId _unblockRequest, _reportSpamRequest;
|
||||
IconedButton _attachDocument, _attachPhoto, _attachEmoji, _kbShow, _kbHide, _cmdStart;
|
||||
bool _cmdStartShown;
|
||||
MessageField _field;
|
||||
|
|
|
@ -485,6 +485,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_in_dlg_sticker" = "Sticker";
|
||||
"lng_in_dlg_sticker_emoji" = "{emoji} (Sticker)";
|
||||
|
||||
"lng_report_spam" = "Spam melden";
|
||||
"lng_report_spam_hide" = "Schließen";
|
||||
"lng_report_spam_thanks" = "Danke für die Meldung!";
|
||||
"lng_cant_send_to_not_contact" = "Derzeit kannst du nur Personen schreiben, wenn ihr eure Nummern ausgetauscht habt. {more_info}";
|
||||
"lng_cant_invite_not_contact" = "Du kannst nur Personen hinzufügen, wenn ihr eure Nummern ausgetauscht habt. {more_info}";
|
||||
"lng_cant_more_info" = "Weitere Infos »";
|
||||
|
||||
"lng_send_button" = "Senden";
|
||||
"lng_message_ph" = "Schreibe deine Nachricht..";
|
||||
"lng_record_cancel" = "Zum Abbrechen rausbewegen";
|
||||
|
@ -495,6 +502,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_bot_description" = "Was kann dieser Bot?";
|
||||
"lng_unblock_button" = "Freigeben";
|
||||
|
||||
"lng_open_this_link" = "Diesen Link öffnen?";
|
||||
"lng_open_link" = "Öffnen";
|
||||
|
||||
"lng_bot_start" = "Starten";
|
||||
"lng_bot_choose_group" = "Gruppe auswählen";
|
||||
"lng_bot_no_groups" = "Du hast keine Gruppen";
|
||||
|
@ -648,7 +658,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
|
||||
"lng_new_version_wrap" = "Telegram Desktop wurde aktualisiert auf Version {version}\n\n{changes}\n\nGesamter Versionsverlauf:\n{link}";
|
||||
"lng_new_version_minor" = "— Fehlerbehebungen und Softwareoptimierungen";
|
||||
"lng_new_version_text" = "— Stummgeschaltete Chats können ab sofort optional mitgezählt werden (Einstellungen > Stummgeschaltete Chats mitzählen)\n— Übersicht der im Chat geteilten Links im Bereich 'Geteilte Medien'\n— GIF-Vorschau und PDF-Vorschau von Direktlinks (.pdf und .gif)";
|
||||
"lng_new_version_text" = "— Unerwünschte Nachrichten (Spam) in neuen Chats melden\n— Sonstige Fehlerbehungen und Verbesserungen\n— OS X 10.8 Benachrichtigungen funktionieren wieder";
|
||||
|
||||
"lng_menu_insert_unicode" = "Unicode-Steuerzeichen einfügen";
|
||||
|
||||
|
|
|
@ -457,7 +457,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_media_video" = "Vídeo";
|
||||
"lng_media_audio" = "Mensaje de voz";
|
||||
|
||||
"lng_emoji_category0" = "Usados con frecuencia";
|
||||
"lng_emoji_category0" = "Uso frecuente";
|
||||
"lng_emoji_category1" = "Personas";
|
||||
"lng_emoji_category2" = "Naturaleza";
|
||||
"lng_emoji_category3" = "Comida y bebida";
|
||||
|
@ -485,6 +485,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_in_dlg_sticker" = "Sticker";
|
||||
"lng_in_dlg_sticker_emoji" = "{emoji} (sticker)";
|
||||
|
||||
"lng_report_spam" = "Reportar spam";
|
||||
"lng_report_spam_hide" = "Ocultar";
|
||||
"lng_report_spam_thanks" = "¡Gracias por tu reporte!";
|
||||
"lng_cant_send_to_not_contact" = "Por ahora, sólo puedes enviar mensajes\na contactos mutuos. {more_info}";
|
||||
"lng_cant_invite_not_contact" = "Por ahora, sólo puedes añadir contactos \nmutuos a grupos. {more_info}";
|
||||
"lng_cant_more_info" = "Más información »";
|
||||
|
||||
"lng_send_button" = "Enviar";
|
||||
"lng_message_ph" = "Escribir un mensaje...";
|
||||
"lng_record_cancel" = "Suelta fuera de aquí para cancelar";
|
||||
|
@ -495,6 +502,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_bot_description" = "¿Qué puede hacer este bot?";
|
||||
"lng_unblock_button" = "Desbloquear";
|
||||
|
||||
"lng_open_this_link" = "¿Abrir este enlace?";
|
||||
"lng_open_link" = "Abrir";
|
||||
|
||||
"lng_bot_start" = "Iniciar";
|
||||
"lng_bot_choose_group" = "Elegir grupo";
|
||||
"lng_bot_no_groups" = "No tienes grupos";
|
||||
|
@ -648,7 +658,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
|
||||
"lng_new_version_wrap" = "Telegram Desktop fue actualizada a la versión {version}\n\n{changes}\n\nEl historial completo está disponible aquí:\n{link}";
|
||||
"lng_new_version_minor" = "— Corrección de errores y otras mejoras menores";
|
||||
"lng_new_version_text" = "— Incluye los chats silenciados en el conteo de 'no leídos', en Ajustes\n— Vista y búsqueda de los enlaces compartidos, en 'Todos los archivos'\n— Vista previa al enviar enlaces a GIF animados o archivos PDF";
|
||||
"lng_new_version_text" = "— Botones para reportar spam en los nuevos chats\n— Otras mejoras y correcciones\n— Notificaciones en OS X 10.8 arregladas";
|
||||
|
||||
"lng_menu_insert_unicode" = "Insertar caracteres de control Unicode";
|
||||
|
||||
|
|
|
@ -403,7 +403,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_create_group_title" = "Nuovo gruppo";
|
||||
|
||||
"lng_failed_add_participant" = "Impossibile aggiungere l'utente. Riprova più tardi.";
|
||||
"lng_failed_add_not_mutual" = "Se una persona lascia un gruppo, solo\nun contatto in comune può reinvitarla\n(chi ti invita deve avere il tuo\ncontatto su Telegram, e viceversa).";
|
||||
"lng_failed_add_not_mutual" = "Spiacenti, se una persona lascia un gruppo,\nsolo un contatto in comune può reinvitarla\n(chi ti invita deve avere il tuo\ncontatto su Telegram, e viceversa).";
|
||||
|
||||
"lng_sure_delete_contact" = "Sicuro di volere eliminare {contact} dalla tua lista dei contatti?";
|
||||
"lng_sure_delete_history" = "Sicuro di voler eliminare tutta la cronologia dei messaggi con {contact}?\n\nQuesta azione non può essere annullata.";
|
||||
|
@ -485,6 +485,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_in_dlg_sticker" = "Sticker";
|
||||
"lng_in_dlg_sticker_emoji" = "{emoji} (sticker)";
|
||||
|
||||
"lng_report_spam" = "Segnala spam";
|
||||
"lng_report_spam_hide" = "Nascondi";
|
||||
"lng_report_spam_thanks" = "Grazie per la tua segnalazione!";
|
||||
"lng_cant_send_to_not_contact" = "Spiacenti, ma al momento puoi scrivere\nsolo a contatti in comune. {more_info}";
|
||||
"lng_cant_invite_not_contact" = "Spiacenti, ma al momento puoi aggiungere\nai gruppi solo a contatti in comune. {more_info}";
|
||||
"lng_cant_more_info" = "Più info »";
|
||||
|
||||
"lng_send_button" = "Invia";
|
||||
"lng_message_ph" = "Scrivi un messaggio..";
|
||||
"lng_record_cancel" = "Rilascia fuori da qui per annullare";
|
||||
|
@ -495,6 +502,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_bot_description" = "Cosa può fare questo bot?";
|
||||
"lng_unblock_button" = "Sblocca";
|
||||
|
||||
"lng_open_this_link" = "Aprire questo link?";
|
||||
"lng_open_link" = "Apri";
|
||||
|
||||
"lng_bot_start" = "Avvia";
|
||||
"lng_bot_choose_group" = "Scegli gruppo";
|
||||
"lng_bot_no_groups" = "Non hai gruppi";
|
||||
|
@ -648,7 +658,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
|
||||
"lng_new_version_wrap" = "Telegram Desktop si è aggiornato alla versione {version}\n\n{changes}\n\nLa cronologia degli aggiornamenti è disponibile qui:\n{link}";
|
||||
"lng_new_version_minor" = "— Bug fix e altri miglioramenti minori";
|
||||
"lng_new_version_text" = "— Includi chat silenziate nel badge nelle Impostazioni\n— Panoramica dei link condivisi e ricerca nei media condivisi\n— Anteprima quando invii una GIF o un file PDF.";
|
||||
"lng_new_version_text" = "— Pulsante per segnalare lo spam nelle nuove chat\n— Altri fix e miglioramenti\n— Risoluzione problema alle notifiche in OS X 10.8";
|
||||
|
||||
"lng_menu_insert_unicode" = "Inserisci carattere di controllo Unicode";
|
||||
|
||||
|
|
|
@ -485,6 +485,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_in_dlg_sticker" = "스티커";
|
||||
"lng_in_dlg_sticker_emoji" = "{emoji} (스티커)";
|
||||
|
||||
"lng_report_spam" = "스팸 신고";
|
||||
"lng_report_spam_hide" = "숨기기";
|
||||
"lng_report_spam_thanks" = "신고해주셔서 감사합니다!";
|
||||
"lng_cant_send_to_not_contact" = "죄송하지만, 현재 서로 연락처가 추가된\n회원들끼리만 전송이 가능합니다. {more_info}";
|
||||
"lng_cant_invite_not_contact" = "죄송하지만, 현재 서로 연락처가 추가된\n회원들끼리만 추가 가능합니다. {more_info}";
|
||||
"lng_cant_more_info" = "자세한 정보 »";
|
||||
|
||||
"lng_send_button" = "보내기";
|
||||
"lng_message_ph" = "메시지 쓰기";
|
||||
"lng_record_cancel" = "이 영역 밖에서 마우스 클릭을 해제하시면 취소가 됩니다.";
|
||||
|
@ -495,6 +502,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_bot_description" = "봇이 할 수 있는 일은 무엇일까요?";
|
||||
"lng_unblock_button" = "차단해제";
|
||||
|
||||
"lng_open_this_link" = "이 링크로 이동하시겠나요?";
|
||||
"lng_open_link" = "열기";
|
||||
|
||||
"lng_bot_start" = "시작";
|
||||
"lng_bot_choose_group" = "그룹 선택";
|
||||
"lng_bot_no_groups" = "그룹이 존재하지 않습니다.";
|
||||
|
@ -648,7 +658,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
|
||||
"lng_new_version_wrap" = "텔레그램 데스크탑은 {version} 버전으로 업데이트 되었습니다.\n\n{changes}\n\n전체 버전 히스토리는 아래에서 확인 가능합니다:\n{link}";
|
||||
"lng_new_version_minor" = "— 버그 수정 및 일부 기능 향상";
|
||||
"lng_new_version_text" = "— 설정에서 안 읽은 메시지 수에 음소거된 채팅방 포함\n— 공유된 링크 현황과 공유된 미디어 검색 기능\n— GIF 링크 및 PDF 파일 전송시 프리뷰 기능";
|
||||
"lng_new_version_text" = "— 스팸 신고 버튼 추가\n— 기타 오류 수정 및 기능 향상\n— OS X 10.8 알림 수정";
|
||||
|
||||
"lng_menu_insert_unicode" = "유니코드 문자를 입력하세요.";
|
||||
|
||||
|
|
|
@ -485,6 +485,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_in_dlg_sticker" = "Sticker";
|
||||
"lng_in_dlg_sticker_emoji" = "{emoji} (sticker)";
|
||||
|
||||
"lng_report_spam" = "Spam melden";
|
||||
"lng_report_spam_hide" = "Verbergen";
|
||||
"lng_report_spam_thanks" = "Bedankt voor je melding!";
|
||||
"lng_cant_send_to_not_contact" = "Op dit moment kun je alleen berichten\nversturen naar onderlinge contacten. {more_info}";
|
||||
"lng_cant_invite_not_contact" = "Op dit moment kun je alleen onderlinge\ncontacten aan groepen toevoegen. {more_info}";
|
||||
"lng_cant_more_info" = "Meer informatie »";
|
||||
|
||||
"lng_send_button" = "Stuur";
|
||||
"lng_message_ph" = "Bericht schrijven";
|
||||
"lng_record_cancel" = "Annuleren: uit het vak loslaten";
|
||||
|
@ -495,6 +502,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_bot_description" = "Wat kan deze bot? ";
|
||||
"lng_unblock_button" = "Deblokkeer";
|
||||
|
||||
"lng_open_this_link" = "Link openen?";
|
||||
"lng_open_link" = "Openen";
|
||||
|
||||
"lng_bot_start" = "Begin";
|
||||
"lng_bot_choose_group" = "Groep kiezen";
|
||||
"lng_bot_no_groups" = "Je hebt geen groepen";
|
||||
|
@ -648,7 +658,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
|
||||
"lng_new_version_wrap" = "Telegram is bijgewerkt naar versie {version}\n\n{changes} \n\nVolledige versiegeschiedenis is hier te vinden:\n{link}";
|
||||
"lng_new_version_minor" = "— Probleemoplossing en andere kleine verbeteringen";
|
||||
"lng_new_version_text" = "— Stille chats meetellen in ongelezen teller via instellingen\n— Gedeelde links-overzicht en zoeken in gedeelde media\n— Voorvertoning voor links naar GIF-animaties en PDF-bestanden";
|
||||
"lng_new_version_text" = "— 'Spam melden'-optie in nieuwe chats\n— Probleemoplossing en kleine verbeteringen\n— Problemen met OS X 10.8 berichtmeldingen opgelost";
|
||||
|
||||
"lng_menu_insert_unicode" = "Unicode-besturingsteken invoegen";
|
||||
|
||||
|
|
|
@ -454,7 +454,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_media_open_with" = "Abrir Com";
|
||||
"lng_media_download" = "Download";
|
||||
"lng_media_cancel" = "Cancelar";
|
||||
"lng_media_video" = "Vídeos";
|
||||
"lng_media_video" = "Vídeo";
|
||||
"lng_media_audio" = "Mensagem de voz";
|
||||
|
||||
"lng_emoji_category0" = "Frequentemente usado";
|
||||
|
@ -485,6 +485,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_in_dlg_sticker" = "Sticker";
|
||||
"lng_in_dlg_sticker_emoji" = "{emoji} (sticker)";
|
||||
|
||||
"lng_report_spam" = "Reportar Spam";
|
||||
"lng_report_spam_hide" = "Ocultar";
|
||||
"lng_report_spam_thanks" = "Obrigado por reportar!";
|
||||
"lng_cant_send_to_not_contact" = "Você só pode enviar mensagens para\ncontatos mútuos no momento. {more_info}";
|
||||
"lng_cant_invite_not_contact" = "Você só pode adicionar contatos\nmútuos ao grupo no momento. {more_info}";
|
||||
"lng_cant_more_info" = "Informações »";
|
||||
|
||||
"lng_send_button" = "Enviar";
|
||||
"lng_message_ph" = "Escrever a mensagem..";
|
||||
"lng_record_cancel" = "Solte fora desse campo para cancelar";
|
||||
|
@ -495,6 +502,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
"lng_bot_description" = "O que esse bot pode fazer?";
|
||||
"lng_unblock_button" = "Desbloquear";
|
||||
|
||||
"lng_open_this_link" = "Abrir este link?";
|
||||
"lng_open_link" = "Abrir";
|
||||
|
||||
"lng_bot_start" = "Iniciar";
|
||||
"lng_bot_choose_group" = "Escolher Grupo";
|
||||
"lng_bot_no_groups" = "Você não possui grupos";
|
||||
|
@ -648,7 +658,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
|||
|
||||
"lng_new_version_wrap" = "Telegram Desktop foi atualizado para a versão {version}\n\n{changes}\n\nHistórico completo de mudanças disponível aqui:\n{link}";
|
||||
"lng_new_version_minor" = "— Resolução de bugs e outras menores melhorias";
|
||||
"lng_new_version_text" = "— Incluir chats silenciados no contador de notificações em Configurações\n— Visão geral dos links compartilhados e busca nas mídias compartilhadas\n— Pré-visualização em links com GIF e arquivos em PDF";
|
||||
"lng_new_version_text" = "— Botões para reportar spam em novos chats\n— Outras melhorias e resoluções de erros\n— OS X 10.8 problemas com notificações solucionadas";
|
||||
|
||||
"lng_menu_insert_unicode" = "Inserir caractere de controle Unicode";
|
||||
|
||||
|
|
|
@ -495,19 +495,20 @@ namespace {
|
|||
FileKey _dataNameKey = 0;
|
||||
|
||||
enum { // Local Storage Keys
|
||||
lskUserMap = 0x00,
|
||||
lskDraft = 0x01, // data: PeerId peer
|
||||
lskDraftPosition = 0x02, // data: PeerId peer
|
||||
lskImages = 0x03, // data: StorageKey location
|
||||
lskLocations = 0x04, // no data
|
||||
lskStickerImages = 0x05, // data: StorageKey location
|
||||
lskAudios = 0x06, // data: StorageKey location
|
||||
lskRecentStickersOld = 0x07, // no data
|
||||
lskBackground = 0x08, // no data
|
||||
lskUserSettings = 0x09, // no data
|
||||
lskRecentHashtags = 0x0a, // no data
|
||||
lskStickers = 0x0b, // no data
|
||||
lskSavedPeers = 0x0c, // no data
|
||||
lskUserMap = 0x00,
|
||||
lskDraft = 0x01, // data: PeerId peer
|
||||
lskDraftPosition = 0x02, // data: PeerId peer
|
||||
lskImages = 0x03, // data: StorageKey location
|
||||
lskLocations = 0x04, // no data
|
||||
lskStickerImages = 0x05, // data: StorageKey location
|
||||
lskAudios = 0x06, // data: StorageKey location
|
||||
lskRecentStickersOld = 0x07, // no data
|
||||
lskBackground = 0x08, // no data
|
||||
lskUserSettings = 0x09, // no data
|
||||
lskRecentHashtags = 0x0a, // no data
|
||||
lskStickers = 0x0b, // no data
|
||||
lskSavedPeers = 0x0c, // no data
|
||||
lskReportSpamStatuses = 0x0d, // no data
|
||||
};
|
||||
|
||||
typedef QMap<PeerId, FileKey> DraftsMap;
|
||||
|
@ -522,7 +523,7 @@ namespace {
|
|||
FileLocationPairs _fileLocationPairs;
|
||||
typedef QMap<MediaKey, MediaKey> FileLocationAliases;
|
||||
FileLocationAliases _fileLocationAliases;
|
||||
FileKey _locationsKey = 0;
|
||||
FileKey _locationsKey = 0, _reportSpamStatusesKey = 0;
|
||||
|
||||
FileKey _recentStickersKeyOld = 0, _stickersKey = 0;
|
||||
|
||||
|
@ -550,7 +551,7 @@ namespace {
|
|||
};
|
||||
|
||||
void _writeMap(WriteMapWhen when = WriteMapSoon);
|
||||
|
||||
|
||||
void _writeLocations(WriteMapWhen when = WriteMapSoon) {
|
||||
if (when != WriteMapNow) {
|
||||
_manager->writeLocations(when == WriteMapFast);
|
||||
|
@ -643,6 +644,63 @@ namespace {
|
|||
}
|
||||
}
|
||||
|
||||
void _writeReportSpamStatuses() {
|
||||
if (!_working()) return;
|
||||
|
||||
if (cReportSpamStatuses().isEmpty()) {
|
||||
if (_reportSpamStatusesKey) {
|
||||
clearKey(_reportSpamStatusesKey);
|
||||
_reportSpamStatusesKey = 0;
|
||||
_mapChanged = true;
|
||||
_writeMap();
|
||||
}
|
||||
} else {
|
||||
if (!_reportSpamStatusesKey) {
|
||||
_reportSpamStatusesKey = genKey();
|
||||
_mapChanged = true;
|
||||
_writeMap(WriteMapFast);
|
||||
}
|
||||
const ReportSpamStatuses &statuses(cReportSpamStatuses());
|
||||
|
||||
quint32 size = sizeof(qint32);
|
||||
for (ReportSpamStatuses::const_iterator i = statuses.cbegin(), e = statuses.cend(); i != e; ++i) {
|
||||
// peer + status
|
||||
size += sizeof(quint64) + sizeof(qint32);
|
||||
}
|
||||
|
||||
EncryptedDescriptor data(size);
|
||||
data.stream << qint32(statuses.size());
|
||||
for (ReportSpamStatuses::const_iterator i = statuses.cbegin(), e = statuses.cend(); i != e; ++i) {
|
||||
data.stream << quint64(i.key()) << qint32(i.value());
|
||||
}
|
||||
|
||||
FileWriteDescriptor file(_reportSpamStatusesKey);
|
||||
file.writeEncrypted(data);
|
||||
}
|
||||
}
|
||||
|
||||
void _readReportSpamStatuses() {
|
||||
FileReadDescriptor statuses;
|
||||
if (!readEncryptedFile(statuses, _reportSpamStatusesKey)) {
|
||||
clearKey(_reportSpamStatusesKey);
|
||||
_reportSpamStatusesKey = 0;
|
||||
_writeMap();
|
||||
return;
|
||||
}
|
||||
|
||||
ReportSpamStatuses &map(cRefReportSpamStatuses());
|
||||
map.clear();
|
||||
|
||||
qint32 size = 0;
|
||||
statuses.stream >> size;
|
||||
for (int32 i = 0; i < size; ++i) {
|
||||
quint64 peer = 0;
|
||||
qint32 status = 0;
|
||||
statuses.stream >> peer >> status;
|
||||
map.insert(peer, DBIPeerReportSpamStatus(status));
|
||||
}
|
||||
}
|
||||
|
||||
mtpDcOptions *_dcOpts = 0;
|
||||
bool _readSetting(quint32 blockId, QDataStream &stream, int version) {
|
||||
switch (blockId) {
|
||||
|
@ -1458,7 +1516,7 @@ namespace {
|
|||
DraftsNotReadMap draftsNotReadMap;
|
||||
StorageMap imagesMap, stickerImagesMap, audiosMap;
|
||||
qint64 storageImagesSize = 0, storageStickersSize = 0, storageAudiosSize = 0;
|
||||
quint64 locationsKey = 0, recentStickersKeyOld = 0, stickersKey = 0, backgroundKey = 0, userSettingsKey = 0, recentHashtagsKey = 0, savedPeersKey = 0;
|
||||
quint64 locationsKey = 0, reportSpamStatusesKey = 0, recentStickersKeyOld = 0, stickersKey = 0, backgroundKey = 0, userSettingsKey = 0, recentHashtagsKey = 0, savedPeersKey = 0;
|
||||
while (!map.stream.atEnd()) {
|
||||
quint32 keyType;
|
||||
map.stream >> keyType;
|
||||
|
@ -1523,6 +1581,9 @@ namespace {
|
|||
case lskLocations: {
|
||||
map.stream >> locationsKey;
|
||||
} break;
|
||||
case lskReportSpamStatuses: {
|
||||
map.stream >> reportSpamStatusesKey;
|
||||
} break;
|
||||
case lskRecentStickersOld: {
|
||||
map.stream >> recentStickersKeyOld;
|
||||
} break;
|
||||
|
@ -1562,6 +1623,7 @@ namespace {
|
|||
_storageAudiosSize = storageAudiosSize;
|
||||
|
||||
_locationsKey = locationsKey;
|
||||
_reportSpamStatusesKey = reportSpamStatusesKey;
|
||||
_recentStickersKeyOld = recentStickersKeyOld;
|
||||
_stickersKey = stickersKey;
|
||||
_savedPeersKey = savedPeersKey;
|
||||
|
@ -1579,6 +1641,9 @@ namespace {
|
|||
if (_locationsKey) {
|
||||
_readLocations();
|
||||
}
|
||||
if (_reportSpamStatusesKey) {
|
||||
_readReportSpamStatuses();
|
||||
}
|
||||
|
||||
_readUserSettings();
|
||||
_readMtpData();
|
||||
|
@ -1630,6 +1695,7 @@ namespace {
|
|||
if (!_stickerImagesMap.isEmpty()) mapSize += sizeof(quint32) * 2 + _stickerImagesMap.size() * (sizeof(quint64) * 3 + sizeof(qint32));
|
||||
if (!_audiosMap.isEmpty()) mapSize += sizeof(quint32) * 2 + _audiosMap.size() * (sizeof(quint64) * 3 + sizeof(qint32));
|
||||
if (_locationsKey) mapSize += sizeof(quint32) + sizeof(quint64);
|
||||
if (_reportSpamStatusesKey) mapSize += sizeof(quint32) + sizeof(quint64);
|
||||
if (_recentStickersKeyOld) mapSize += sizeof(quint32) + sizeof(quint64);
|
||||
if (_stickersKey) mapSize += sizeof(quint32) + sizeof(quint64);
|
||||
if (_savedPeersKey) mapSize += sizeof(quint32) + sizeof(quint64);
|
||||
|
@ -1670,6 +1736,9 @@ namespace {
|
|||
if (_locationsKey) {
|
||||
mapData.stream << quint32(lskLocations) << quint64(_locationsKey);
|
||||
}
|
||||
if (_reportSpamStatusesKey) {
|
||||
mapData.stream << quint32(lskReportSpamStatuses) << quint64(_reportSpamStatusesKey);
|
||||
}
|
||||
if (_recentStickersKeyOld) {
|
||||
mapData.stream << quint32(lskRecentStickersOld) << quint64(_recentStickersKeyOld);
|
||||
}
|
||||
|
@ -1938,7 +2007,7 @@ namespace Local {
|
|||
_draftsNotReadMap.clear();
|
||||
_stickerImagesMap.clear();
|
||||
_audiosMap.clear();
|
||||
_locationsKey = _recentStickersKeyOld = _stickersKey = _backgroundKey = _userSettingsKey = _recentHashtagsKey = _savedPeersKey = 0;
|
||||
_locationsKey = _reportSpamStatusesKey = _recentStickersKeyOld = _stickersKey = _backgroundKey = _userSettingsKey = _recentHashtagsKey = _savedPeersKey = 0;
|
||||
_mapChanged = true;
|
||||
_writeMap(WriteMapNow);
|
||||
|
||||
|
@ -2976,6 +3045,10 @@ namespace Local {
|
|||
}
|
||||
}
|
||||
|
||||
void writeReportSpamStatuses() {
|
||||
_writeReportSpamStatuses();
|
||||
}
|
||||
|
||||
struct ClearManagerData {
|
||||
QThread *thread;
|
||||
StorageMap images, stickers, audios;
|
||||
|
@ -3023,6 +3096,10 @@ namespace Local {
|
|||
_locationsKey = 0;
|
||||
_mapChanged = true;
|
||||
}
|
||||
if (_reportSpamStatusesKey) {
|
||||
_reportSpamStatusesKey = 0;
|
||||
_mapChanged = true;
|
||||
}
|
||||
if (_recentStickersKeyOld) {
|
||||
_recentStickersKeyOld = 0;
|
||||
_mapChanged = true;
|
||||
|
|
|
@ -147,4 +147,6 @@ namespace Local {
|
|||
void removeSavedPeer(PeerData *peer);
|
||||
void readSavedPeers();
|
||||
|
||||
void writeReportSpamStatuses();
|
||||
|
||||
};
|
||||
|
|
|
@ -781,7 +781,12 @@ void MainWidget::deleteHistoryPart(PeerData *peer, const MTPmessages_AffectedHis
|
|||
updPtsUpdated(d.vpts.v, d.vpts_count.v);
|
||||
|
||||
int32 offset = d.voffset.v;
|
||||
if (!MTP::authedId() || offset <= 0) return;
|
||||
if (!MTP::authedId()) return;
|
||||
if (offset <= 0) {
|
||||
cRefReportSpamStatuses().remove(peer->id);
|
||||
Local::writeReportSpamStatuses();
|
||||
return;
|
||||
}
|
||||
|
||||
MTP::send(MTPmessages_DeleteHistory(peer->input, d.voffset), rpcDone(&MainWidget::deleteHistoryPart, peer));
|
||||
}
|
||||
|
@ -842,6 +847,8 @@ bool MainWidget::addParticipantFail(UserData *user, const RPCError &error) {
|
|||
text = lang(lng_failed_add_not_mutual);
|
||||
} else if (error.type() == "USER_ALREADY_PARTICIPANT" && user->botInfo) {
|
||||
text = lang(lng_bot_already_in_group);
|
||||
} else if (error.type() == "PEER_FLOOD") {
|
||||
text = lng_cant_invite_not_contact(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info)));
|
||||
}
|
||||
App::wnd()->showLayer(new ConfirmBox(text, true));
|
||||
return false;
|
||||
|
@ -912,7 +919,7 @@ void MainWidget::checkedHistory(PeerData *peer, const MTPmessages_Messages &resu
|
|||
}
|
||||
}
|
||||
|
||||
bool MainWidget::sendPhotoFailed(uint64 randomId, const RPCError &error) {
|
||||
bool MainWidget::sendPhotoFail(uint64 randomId, const RPCError &error) {
|
||||
if (mtpIsFlood(error)) return false;
|
||||
|
||||
if (error.type() == qsl("PHOTO_INVALID_DIMENSIONS")) {
|
||||
|
@ -926,6 +933,16 @@ bool MainWidget::sendPhotoFailed(uint64 randomId, const RPCError &error) {
|
|||
_resendImgRandomIds.push_back(randomId);
|
||||
return true;
|
||||
}
|
||||
return sendMessageFail(error);
|
||||
}
|
||||
|
||||
bool MainWidget::sendMessageFail(const RPCError &error) {
|
||||
if (mtpIsFlood(error)) return false;
|
||||
|
||||
if (error.type() == qsl("PEER_FLOOD")) {
|
||||
App::wnd()->showLayer(new ConfirmBox(lng_cant_send_to_not_contact(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))), true));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1103,8 +1120,8 @@ void MainWidget::sendPreparedText(History *hist, const QString &text, MsgId repl
|
|||
flags |= MTPDmessage::flag_from_id;
|
||||
}
|
||||
MTPVector<MTPMessageEntity> localEntities = linksToMTP(textParseLinks(sendingText, itemTextParseOptions(hist, App::self()).flags));
|
||||
hist->addToBack(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(hist->peer->id), MTPint(), MTPint(), MTP_int(replyTo), MTP_int(unixtime()), msgText, media, MTPnullMarkup, localEntities));
|
||||
hist->sendRequestId = MTP::send(MTPmessages_SendMessage(MTP_int(sendFlags), hist->peer->input, MTP_int(replyTo), msgText, MTP_long(randomId), MTPnullMarkup, localEntities), App::main()->rpcDone(&MainWidget::sentUpdatesReceived, randomId), RPCFailHandlerPtr(), 0, 0, hist->sendRequestId);
|
||||
hist->addToBack(MTP_message(MTP_int(flags), MTP_int(newId.msg), MTP_int(fromChannelName ? 0 : MTP::authedId()), peerToMTP(hist->peer->id), MTPPeer(), MTPint(), MTP_int(replyTo), MTP_int(unixtime()), msgText, media, MTPnullMarkup, localEntities, MTPint()));
|
||||
hist->sendRequestId = MTP::send(MTPmessages_SendMessage(MTP_int(sendFlags), hist->peer->input, MTP_int(replyTo), msgText, MTP_long(randomId), MTPnullMarkup, localEntities), rpcDone(&MainWidget::sentUpdatesReceived, randomId), rpcFail(&MainWidget::sendMessageFail), 0, 0, hist->sendRequestId);
|
||||
}
|
||||
|
||||
finishForwarding(hist);
|
||||
|
@ -1891,7 +1908,7 @@ void MainWidget::serviceNotification(const QString &msg, const MTPMessageMedia &
|
|||
HistoryItem *item = 0;
|
||||
while (textSplit(sendingText, leftText, MaxMessageSize)) {
|
||||
MTPVector<MTPMessageEntity> localEntities = linksToMTP(textParseLinks(sendingText, _historyTextOptions.flags));
|
||||
item = App::histories().addToBack(MTP_message(MTP_int(flags), MTP_int(clientMsgId()), MTP_int(ServiceUserId), MTP_peerUser(MTP_int(MTP::authedId())), MTPint(), MTPint(), MTPint(), MTP_int(unixtime()), MTP_string(sendingText), media, MTPnullMarkup, localEntities), unread ? 1 : 2);
|
||||
item = App::histories().addToBack(MTP_message(MTP_int(flags), MTP_int(clientMsgId()), MTP_int(ServiceUserId), MTP_peerUser(MTP_int(MTP::authedId())), MTPPeer(), MTPint(), MTPint(), MTP_int(unixtime()), MTP_string(sendingText), media, MTPnullMarkup, localEntities, MTPint()), unread ? 1 : 2);
|
||||
}
|
||||
if (item) {
|
||||
history.peerMessagesUpdated(item->history()->peer->id);
|
||||
|
@ -2067,6 +2084,10 @@ void MainWidget::clearBotStartToken(PeerData *peer) {
|
|||
}
|
||||
}
|
||||
|
||||
void MainWidget::contactsReceived() {
|
||||
history.contactsReceived();
|
||||
}
|
||||
|
||||
void MainWidget::showPeerHistory(quint64 peerId, qint32 showAtMsgId, bool back) {
|
||||
if (!back && (!peerId || (_stack.size() == 1 && _stack[0]->type() == HistoryStackItem && _stack[0]->peer->id == peerId))) {
|
||||
back = true;
|
||||
|
@ -3481,7 +3502,7 @@ void MainWidget::handleUpdates(const MTPUpdates &updates, uint64 randomId) {
|
|||
|
||||
case mtpc_updateShortMessage: {
|
||||
const MTPDupdateShortMessage &d(updates.c_updateShortMessage());
|
||||
if (!App::userLoaded(d.vuser_id.v) || (d.has_fwd_from_id() && !App::userLoaded(d.vfwd_from_id.v))) {
|
||||
if (!App::userLoaded(d.vuser_id.v) || (d.has_fwd_from_id() && !App::peerLoaded(peerFromMTP(d.vfwd_from_id)))) {
|
||||
MTP_LOG(0, ("getDifference { good - getting user for updateShortMessage }%1").arg(cTestMode() ? " TESTMODE" : ""));
|
||||
return getDifference();
|
||||
}
|
||||
|
@ -3490,7 +3511,7 @@ void MainWidget::handleUpdates(const MTPUpdates &updates, uint64 randomId) {
|
|||
return;
|
||||
}
|
||||
bool out = (d.vflags.v & MTPDmessage_flag_out);
|
||||
HistoryItem *item = App::histories().addToBack(MTP_message(d.vflags, d.vid, out ? MTP_int(MTP::authedId()) : d.vuser_id, MTP_peerUser(out ? d.vuser_id : MTP_int(MTP::authedId())), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup, d.has_entities() ? d.ventities : MTPnullEntities));
|
||||
HistoryItem *item = App::histories().addToBack(MTP_message(d.vflags, d.vid, out ? MTP_int(MTP::authedId()) : d.vuser_id, MTP_peerUser(out ? d.vuser_id : MTP_int(MTP::authedId())), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup, d.has_entities() ? d.ventities : MTPnullEntities, MTPint()));
|
||||
if (item) {
|
||||
history.peerMessagesUpdated(item->history()->peer->id);
|
||||
}
|
||||
|
@ -3501,7 +3522,7 @@ void MainWidget::handleUpdates(const MTPUpdates &updates, uint64 randomId) {
|
|||
case mtpc_updateShortChatMessage: {
|
||||
const MTPDupdateShortChatMessage &d(updates.c_updateShortChatMessage());
|
||||
bool noFrom = !App::userLoaded(d.vfrom_id.v);
|
||||
if (!App::chatLoaded(d.vchat_id.v) || noFrom || (d.has_fwd_from_id() && !App::userLoaded(d.vfwd_from_id.v))) {
|
||||
if (!App::chatLoaded(d.vchat_id.v) || noFrom || (d.has_fwd_from_id() && !App::peerLoaded(peerFromMTP(d.vfwd_from_id)))) {
|
||||
MTP_LOG(0, ("getDifference { good - getting user for updateShortChatMessage }%1").arg(cTestMode() ? " TESTMODE" : ""));
|
||||
if (noFrom) App::api()->requestFullPeer(App::chatLoaded(d.vchat_id.v));
|
||||
return getDifference();
|
||||
|
@ -3510,7 +3531,7 @@ void MainWidget::handleUpdates(const MTPUpdates &updates, uint64 randomId) {
|
|||
_byPtsUpdates.insert(ptsKey(SkippedUpdates), updates);
|
||||
return;
|
||||
}
|
||||
HistoryItem *item = App::histories().addToBack(MTP_message(d.vflags, d.vid, d.vfrom_id, MTP_peerChat(d.vchat_id), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup, d.has_entities() ? d.ventities : MTPnullEntities));
|
||||
HistoryItem *item = App::histories().addToBack(MTP_message(d.vflags, d.vid, d.vfrom_id, MTP_peerChat(d.vchat_id), d.vfwd_from_id, d.vfwd_date, d.vreply_to_msg_id, d.vdate, d.vmessage, MTP_messageMediaEmpty(), MTPnullMarkup, d.has_entities() ? d.ventities : MTPnullEntities, MTPint()));
|
||||
if (item) {
|
||||
history.peerMessagesUpdated(item->history()->peer->id);
|
||||
}
|
||||
|
@ -3526,7 +3547,6 @@ void MainWidget::handleUpdates(const MTPUpdates &updates, uint64 randomId) {
|
|||
App::histSentDataByItem(randomId, peerId, text);
|
||||
|
||||
feedUpdate(MTP_updateMessageID(d.vid, MTP_long(randomId))); // ignore real date
|
||||
|
||||
if (peerId) {
|
||||
HistoryItem *item = App::histItemById(peerToChannel(peerId), d.vid.v);
|
||||
if (!text.isEmpty()) {
|
||||
|
@ -3534,7 +3554,7 @@ void MainWidget::handleUpdates(const MTPUpdates &updates, uint64 randomId) {
|
|||
if (item && ((hasLinks && !item->hasTextLinks()) || (!hasLinks && item->textHasLinks()))) {
|
||||
bool was = item->hasTextLinks();
|
||||
item->setText(text, d.has_entities() ? linksFromMTP(d.ventities.c_vector().v) : LinksInText());
|
||||
item->initDimensions(0);
|
||||
item->initDimensions();
|
||||
itemResized(item);
|
||||
if (!was && item->hasTextLinks()) {
|
||||
item->history()->addToOverview(item, OverviewLinks);
|
||||
|
@ -3661,6 +3681,10 @@ void MainWidget::feedUpdate(const MTPUpdate &update) {
|
|||
|
||||
case mtpc_updateWebPage: {
|
||||
const MTPDupdateWebPage &d(update.c_updateWebPage());
|
||||
if (!updPtsUpdated(d.vpts.v, d.vpts_count.v)) {
|
||||
_byPtsUpdate.insert(ptsKey(SkippedUpdate), update);
|
||||
return;
|
||||
}
|
||||
App::feedWebPage(d.vwebpage);
|
||||
history.updatePreview();
|
||||
webPagesUpdate();
|
||||
|
|
|
@ -300,7 +300,8 @@ public:
|
|||
void checkPeerHistory(PeerData *peer);
|
||||
void checkedHistory(PeerData *peer, const MTPmessages_Messages &result);
|
||||
|
||||
bool sendPhotoFailed(uint64 randomId, const RPCError &e);
|
||||
bool sendPhotoFail(uint64 randomId, const RPCError &e);
|
||||
bool sendMessageFail(const RPCError &error);
|
||||
|
||||
void forwardSelectedItems();
|
||||
void deleteSelectedItems();
|
||||
|
@ -377,6 +378,8 @@ public:
|
|||
void choosePeer(PeerId peerId, MsgId showAtMsgId); // does offerPeer or showPeerHistory
|
||||
void clearBotStartToken(PeerData *peer);
|
||||
|
||||
void contactsReceived();
|
||||
|
||||
~MainWidget();
|
||||
|
||||
signals:
|
||||
|
|
|
@ -206,11 +206,15 @@ void MediaView::updateDocSize() {
|
|||
readyStr = QString::number(readyTenthMb / 10) + '.' + QString::number(readyTenthMb % 10);
|
||||
totalStr = QString::number(totalTenthMb / 10) + '.' + QString::number(totalTenthMb % 10);
|
||||
mb = qsl("MB");
|
||||
} else {
|
||||
} else if (total >= 1024) {
|
||||
qint64 readyKb = (ready / 1024), totalKb = (total / 1024);
|
||||
readyStr = QString::number(readyKb);
|
||||
totalStr = QString::number(totalKb);
|
||||
mb = qsl("KB");
|
||||
} else {
|
||||
readyStr = QString::number(ready);
|
||||
totalStr = QString::number(total);
|
||||
mb = qsl("B");
|
||||
}
|
||||
_docSize = lng_media_save_progress(lt_ready, readyStr, lt_total, totalStr, lt_mb, mb);
|
||||
} else {
|
||||
|
|
|
@ -1216,12 +1216,13 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP
|
|||
to.add("\n").addSpaces(lev);
|
||||
}
|
||||
switch (stage) {
|
||||
case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 1: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 2: to.add(" photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 3: to.add(" participants_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 4: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 5: to.add(" version: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 0: to.add(" flags: "); ++stages.back(); if (start >= end) throw Exception("start >= end in flags"); else flags.back() = *start; types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 2: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 3: to.add(" photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 4: to.add(" participants_count: "); ++stages.back(); types.push_back(mtpc_int); 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); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 6: to.add(" version: "); ++stages.back(); types.push_back(mtpc_int); 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;
|
||||
}
|
||||
break;
|
||||
|
@ -1360,6 +1361,21 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP
|
|||
}
|
||||
break;
|
||||
|
||||
case mtpc_channelParticipants:
|
||||
if (stage) {
|
||||
to.add(",\n").addSpaces(lev);
|
||||
} else {
|
||||
to.add("{ channelParticipants");
|
||||
to.add("\n").addSpaces(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_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 1: to.add(" channel_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 2: to.add(" self_participant: "); ++stages.back(); if (flag & MTPDchannelParticipants::flag_self_participant) { 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;
|
||||
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
|
||||
}
|
||||
break;
|
||||
|
||||
case mtpc_chatPhotoEmpty:
|
||||
to.add("{ chatPhotoEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back();
|
||||
break;
|
||||
|
@ -1403,7 +1419,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP
|
|||
case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 2: to.add(" from_id: "); ++stages.back(); if (flag & MTPDmessage::flag_from_id) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 8 IN FIELD flags ]"); } break;
|
||||
case 3: to.add(" to_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 4: to.add(" fwd_from_id: "); ++stages.back(); if (flag & MTPDmessage::flag_fwd_from_id) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break;
|
||||
case 4: to.add(" fwd_from_id: "); ++stages.back(); if (flag & MTPDmessage::flag_fwd_from_id) { 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 5: to.add(" fwd_date: "); ++stages.back(); if (flag & MTPDmessage::flag_fwd_date) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break;
|
||||
case 6: to.add(" reply_to_msg_id: "); ++stages.back(); if (flag & MTPDmessage::flag_reply_to_msg_id) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 3 IN FIELD flags ]"); } break;
|
||||
case 7: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
|
@ -1411,6 +1427,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP
|
|||
case 9: to.add(" media: "); ++stages.back(); if (flag & MTPDmessage::flag_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 10: to.add(" reply_markup: "); ++stages.back(); if (flag & MTPDmessage::flag_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 11: to.add(" entities: "); ++stages.back(); if (flag & MTPDmessage::flag_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 12: to.add(" views: "); ++stages.back(); if (flag & MTPDmessage::flag_views) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 10 IN FIELD flags ]"); } break;
|
||||
default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); break;
|
||||
}
|
||||
break;
|
||||
|
@ -2912,7 +2929,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP
|
|||
case 4: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); 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); 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); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 7: to.add(" fwd_from_id: "); ++stages.back(); if (flag & MTPDupdateShortMessage::flag_fwd_from_id) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break;
|
||||
case 7: to.add(" fwd_from_id: "); ++stages.back(); if (flag & MTPDupdateShortMessage::flag_fwd_from_id) { 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 8: to.add(" fwd_date: "); ++stages.back(); if (flag & MTPDupdateShortMessage::flag_fwd_date) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break;
|
||||
case 9: to.add(" reply_to_msg_id: "); ++stages.back(); if (flag & MTPDupdateShortMessage::flag_reply_to_msg_id) { types.push_back(mtpc_int); 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(" entities: "); ++stages.back(); if (flag & MTPDupdateShortMessage::flag_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;
|
||||
|
@ -2936,7 +2953,7 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP
|
|||
case 5: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 6: to.add(" pts_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 7: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 8: to.add(" fwd_from_id: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::flag_fwd_from_id) { types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); } else { to.add("[ SKIPPED BY BIT 2 IN FIELD flags ]"); } break;
|
||||
case 8: to.add(" fwd_from_id: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::flag_fwd_from_id) { 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 9: to.add(" fwd_date: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::flag_fwd_date) { types.push_back(mtpc_int); 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(" reply_to_msg_id: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::flag_reply_to_msg_id) { types.push_back(mtpc_int); 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(" entities: "); ++stages.back(); if (flag & MTPDupdateShortChatMessage::flag_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;
|
||||
|
@ -4668,6 +4685,36 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP
|
|||
}
|
||||
break;
|
||||
|
||||
case mtpc_channelParticipant:
|
||||
if (stage) {
|
||||
to.add(",\n").addSpaces(lev);
|
||||
} else {
|
||||
to.add("{ channelParticipant");
|
||||
to.add("\n").addSpaces(lev);
|
||||
}
|
||||
switch (stage) {
|
||||
case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 1: to.add(" inviter_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); 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;
|
||||
}
|
||||
break;
|
||||
|
||||
case mtpc_messages_channelParticipants:
|
||||
if (stage) {
|
||||
to.add(",\n").addSpaces(lev);
|
||||
} else {
|
||||
to.add("{ messages_channelParticipants");
|
||||
to.add("\n").addSpaces(lev);
|
||||
}
|
||||
switch (stage) {
|
||||
case 0: to.add(" count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 1: to.add(" participants: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 2: to.add(" users: "); ++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;
|
||||
}
|
||||
break;
|
||||
|
||||
case mtpc_req_pq:
|
||||
if (stage) {
|
||||
to.add(",\n").addSpaces(lev);
|
||||
|
@ -5154,6 +5201,20 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP
|
|||
}
|
||||
break;
|
||||
|
||||
case mtpc_messages_incrementMessagesViews:
|
||||
if (stage) {
|
||||
to.add(",\n").addSpaces(lev);
|
||||
} else {
|
||||
to.add("{ messages_incrementMessagesViews");
|
||||
to.add("\n").addSpaces(lev);
|
||||
}
|
||||
switch (stage) {
|
||||
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(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_int); 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;
|
||||
}
|
||||
break;
|
||||
|
||||
case mtpc_messages_editChatAbout:
|
||||
if (stage) {
|
||||
to.add(",\n").addSpaces(lev);
|
||||
|
@ -5782,6 +5843,20 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP
|
|||
}
|
||||
break;
|
||||
|
||||
case mtpc_messages_getChannelMessages:
|
||||
if (stage) {
|
||||
to.add(",\n").addSpaces(lev);
|
||||
} else {
|
||||
to.add("{ messages_getChannelMessages");
|
||||
to.add("\n").addSpaces(lev);
|
||||
}
|
||||
switch (stage) {
|
||||
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(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_int); 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;
|
||||
}
|
||||
break;
|
||||
|
||||
case mtpc_messages_getDialogs:
|
||||
if (stage) {
|
||||
to.add(",\n").addSpaces(lev);
|
||||
|
@ -5937,9 +6012,10 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP
|
|||
to.add("\n").addSpaces(lev);
|
||||
}
|
||||
switch (stage) {
|
||||
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 0: to.add(" from_peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 1: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_int); stages.push_back(0); flags.push_back(0); break;
|
||||
case 2: to.add(" random_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_long); stages.push_back(0); flags.push_back(0); break;
|
||||
case 3: to.add(" to_peer: "); ++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;
|
||||
}
|
||||
break;
|
||||
|
@ -6311,6 +6387,21 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP
|
|||
}
|
||||
break;
|
||||
|
||||
case mtpc_messages_getChannelParticipants:
|
||||
if (stage) {
|
||||
to.add(",\n").addSpaces(lev);
|
||||
} else {
|
||||
to.add("{ messages_getChannelParticipants");
|
||||
to.add("\n").addSpaces(lev);
|
||||
}
|
||||
switch (stage) {
|
||||
case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 1: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 2: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); 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;
|
||||
}
|
||||
break;
|
||||
|
||||
case mtpc_updates_getState:
|
||||
to.add("{ updates_getState }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back();
|
||||
break;
|
||||
|
|
|
@ -133,7 +133,7 @@ enum {
|
|||
mtpc_userStatusLastWeek = 0x7bf09fc,
|
||||
mtpc_userStatusLastMonth = 0x77ebc742,
|
||||
mtpc_chatEmpty = 0x9ba2d800,
|
||||
mtpc_chat = 0xc7c02794,
|
||||
mtpc_chat = 0x7312bc48,
|
||||
mtpc_chatForbidden = 0x7328bdb,
|
||||
mtpc_channel = 0x1bcc63f2,
|
||||
mtpc_channelForbidden = 0x2d85832c,
|
||||
|
@ -142,10 +142,11 @@ enum {
|
|||
mtpc_chatParticipant = 0xc8d7493e,
|
||||
mtpc_chatParticipantsForbidden = 0xfc900c2b,
|
||||
mtpc_chatParticipants = 0x7841b415,
|
||||
mtpc_channelParticipants = 0xb561ad0c,
|
||||
mtpc_chatPhotoEmpty = 0x37c1011c,
|
||||
mtpc_chatPhoto = 0x6153276a,
|
||||
mtpc_messageEmpty = 0x83e5de54,
|
||||
mtpc_message = 0xab406723,
|
||||
mtpc_message = 0x5ba66c13,
|
||||
mtpc_messageService = 0xc06b9607,
|
||||
mtpc_messageMediaEmpty = 0x3ded6320,
|
||||
mtpc_messageMediaPhoto = 0x3d8ce53d,
|
||||
|
@ -263,8 +264,8 @@ enum {
|
|||
mtpc_updates_difference = 0xf49ca0,
|
||||
mtpc_updates_differenceSlice = 0xa8fb1981,
|
||||
mtpc_updatesTooLong = 0xe317af7e,
|
||||
mtpc_updateShortMessage = 0x3f32d858,
|
||||
mtpc_updateShortChatMessage = 0xf9409b3d,
|
||||
mtpc_updateShortMessage = 0xf7d91a46,
|
||||
mtpc_updateShortChatMessage = 0xcac7fdd2,
|
||||
mtpc_updateShort = 0x78d4dec1,
|
||||
mtpc_updatesCombined = 0x725b04c3,
|
||||
mtpc_updates = 0x74ae4240,
|
||||
|
@ -408,6 +409,8 @@ enum {
|
|||
mtpc_channelMessagesFilter = 0xcd77d957,
|
||||
mtpc_channelMessagesFilterCollapsed = 0xfa01232e,
|
||||
mtpc_contacts_resolvedPeer = 0x7f077ad9,
|
||||
mtpc_channelParticipant = 0x506116ea,
|
||||
mtpc_messages_channelParticipants = 0xd6891de1,
|
||||
mtpc_invokeAfterMsg = 0xcb9f372d,
|
||||
mtpc_invokeAfterMsgs = 0x3dc4b4f0,
|
||||
mtpc_initConnection = 0x69796de9,
|
||||
|
@ -478,7 +481,7 @@ enum {
|
|||
mtpc_messages_setTyping = 0xa3825e50,
|
||||
mtpc_messages_sendMessage = 0xfa88427a,
|
||||
mtpc_messages_sendMedia = 0xc8f16791,
|
||||
mtpc_messages_forwardMessages = 0x55e1728d,
|
||||
mtpc_messages_forwardMessages = 0xf9adea76,
|
||||
mtpc_messages_reportSpam = 0xcf1592db,
|
||||
mtpc_messages_getChats = 0x27ae65b,
|
||||
mtpc_messages_getFullChat = 0x36a4dfe,
|
||||
|
@ -515,7 +518,10 @@ enum {
|
|||
mtpc_messages_readChannelHistory = 0x36a1210e,
|
||||
mtpc_messages_createChannel = 0xe830f8cb,
|
||||
mtpc_messages_deleteChannelMessages = 0x9995a84f,
|
||||
mtpc_messages_getChannelMessages = 0x5f46b265,
|
||||
mtpc_messages_incrementMessagesViews = 0x91ffd479,
|
||||
mtpc_messages_editChatAbout = 0x8a969b93,
|
||||
mtpc_messages_getChannelParticipants = 0x4a771976,
|
||||
mtpc_messages_checkChannelUsername = 0xe6d2d8f4,
|
||||
mtpc_messages_updateChannelUsername = 0xce2e9587,
|
||||
mtpc_updates_getState = 0xedd4882a,
|
||||
|
@ -707,6 +713,7 @@ class MTPDchatParticipant;
|
|||
class MTPchatParticipants;
|
||||
class MTPDchatParticipantsForbidden;
|
||||
class MTPDchatParticipants;
|
||||
class MTPDchannelParticipants;
|
||||
|
||||
class MTPchatPhoto;
|
||||
class MTPDchatPhoto;
|
||||
|
@ -1117,6 +1124,12 @@ class MTPDchannelMessagesFilter;
|
|||
class MTPcontacts_resolvedPeer;
|
||||
class MTPDcontacts_resolvedPeer;
|
||||
|
||||
class MTPchannelParticipant;
|
||||
class MTPDchannelParticipant;
|
||||
|
||||
class MTPmessages_channelParticipants;
|
||||
class MTPDmessages_channelParticipants;
|
||||
|
||||
|
||||
// Boxed types definitions
|
||||
typedef MTPBoxed<MTPresPQ> MTPResPQ;
|
||||
|
@ -1267,6 +1280,8 @@ typedef MTPBoxed<MTPmessageGroup> MTPMessageGroup;
|
|||
typedef MTPBoxed<MTPupdates_channelDifference> MTPupdates_ChannelDifference;
|
||||
typedef MTPBoxed<MTPchannelMessagesFilter> MTPChannelMessagesFilter;
|
||||
typedef MTPBoxed<MTPcontacts_resolvedPeer> MTPcontacts_ResolvedPeer;
|
||||
typedef MTPBoxed<MTPchannelParticipant> MTPChannelParticipant;
|
||||
typedef MTPBoxed<MTPmessages_channelParticipants> MTPmessages_ChannelParticipants;
|
||||
|
||||
// Type classes definitions
|
||||
|
||||
|
@ -3194,7 +3209,7 @@ private:
|
|||
explicit MTPchat(MTPDchannelForbidden *_data);
|
||||
|
||||
friend MTPchat MTP_chatEmpty(MTPint _id);
|
||||
friend MTPchat MTP_chat(MTPint _id, const MTPstring &_title, const MTPChatPhoto &_photo, MTPint _participants_count, MTPint _date, MTPint _version);
|
||||
friend MTPchat MTP_chat(MTPint _flags, MTPint _id, const MTPstring &_title, const MTPChatPhoto &_photo, MTPint _participants_count, MTPint _date, MTPint _version);
|
||||
friend MTPchat MTP_chatForbidden(MTPint _id, const MTPstring &_title);
|
||||
friend MTPchat MTP_channel(MTPint _flags, MTPint _id, const MTPlong &_access_hash, const MTPstring &_title, const MTPstring &_username, const MTPChatPhoto &_photo, MTPint _date, MTPint _version);
|
||||
friend MTPchat MTP_channelForbidden(MTPint _id, const MTPlong &_access_hash, const MTPstring &_title);
|
||||
|
@ -3317,6 +3332,18 @@ public:
|
|||
return *(const MTPDchatParticipants*)data;
|
||||
}
|
||||
|
||||
MTPDchannelParticipants &_channelParticipants() {
|
||||
if (!data) throw mtpErrorUninitialized();
|
||||
if (_type != mtpc_channelParticipants) throw mtpErrorWrongTypeId(_type, mtpc_channelParticipants);
|
||||
split();
|
||||
return *(MTPDchannelParticipants*)data;
|
||||
}
|
||||
const MTPDchannelParticipants &c_channelParticipants() const {
|
||||
if (!data) throw mtpErrorUninitialized();
|
||||
if (_type != mtpc_channelParticipants) throw mtpErrorWrongTypeId(_type, mtpc_channelParticipants);
|
||||
return *(const MTPDchannelParticipants*)data;
|
||||
}
|
||||
|
||||
uint32 innerLength() const;
|
||||
mtpTypeId type() const;
|
||||
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons);
|
||||
|
@ -3328,9 +3355,11 @@ private:
|
|||
explicit MTPchatParticipants(mtpTypeId type);
|
||||
explicit MTPchatParticipants(MTPDchatParticipantsForbidden *_data);
|
||||
explicit MTPchatParticipants(MTPDchatParticipants *_data);
|
||||
explicit MTPchatParticipants(MTPDchannelParticipants *_data);
|
||||
|
||||
friend MTPchatParticipants MTP_chatParticipantsForbidden(MTPint _flags, MTPint _chat_id, const MTPChatParticipant &_self_participant);
|
||||
friend MTPchatParticipants MTP_chatParticipants(MTPint _chat_id, MTPint _admin_id, const MTPVector<MTPChatParticipant> &_participants, MTPint _version);
|
||||
friend MTPchatParticipants MTP_channelParticipants(MTPint _flags, MTPint _channel_id, const MTPChatParticipant &_self_participant);
|
||||
|
||||
mtpTypeId _type;
|
||||
};
|
||||
|
@ -3432,7 +3461,7 @@ private:
|
|||
explicit MTPmessage(MTPDmessageService *_data);
|
||||
|
||||
friend MTPmessage MTP_messageEmpty(MTPint _id);
|
||||
friend MTPmessage MTP_message(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup, const MTPVector<MTPMessageEntity> &_entities);
|
||||
friend MTPmessage MTP_message(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, const MTPPeer &_fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup, const MTPVector<MTPMessageEntity> &_entities, MTPint _views);
|
||||
friend MTPmessage MTP_messageService(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _date, const MTPMessageAction &_action);
|
||||
|
||||
mtpTypeId _type;
|
||||
|
@ -5596,8 +5625,8 @@ private:
|
|||
explicit MTPupdates(MTPDupdateShortSentMessage *_data);
|
||||
|
||||
friend MTPupdates MTP_updatesTooLong();
|
||||
friend MTPupdates MTP_updateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector<MTPMessageEntity> &_entities);
|
||||
friend MTPupdates MTP_updateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector<MTPMessageEntity> &_entities);
|
||||
friend MTPupdates MTP_updateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, const MTPPeer &_fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector<MTPMessageEntity> &_entities);
|
||||
friend MTPupdates MTP_updateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, const MTPPeer &_fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector<MTPMessageEntity> &_entities);
|
||||
friend MTPupdates MTP_updateShort(const MTPUpdate &_update, MTPint _date);
|
||||
friend MTPupdates MTP_updatesCombined(const MTPVector<MTPUpdate> &_updates, const MTPVector<MTPUser> &_users, const MTPVector<MTPChat> &_chats, MTPint _date, MTPint _seq_start, MTPint _seq);
|
||||
friend MTPupdates MTP_updates(const MTPVector<MTPUpdate> &_updates, const MTPVector<MTPUser> &_users, const MTPVector<MTPChat> &_chats, MTPint _date, MTPint _seq);
|
||||
|
@ -8328,6 +8357,68 @@ private:
|
|||
};
|
||||
typedef MTPBoxed<MTPcontacts_resolvedPeer> MTPcontacts_ResolvedPeer;
|
||||
|
||||
class MTPchannelParticipant : private mtpDataOwner {
|
||||
public:
|
||||
MTPchannelParticipant();
|
||||
MTPchannelParticipant(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_channelParticipant) : mtpDataOwner(0) {
|
||||
read(from, end, cons);
|
||||
}
|
||||
|
||||
MTPDchannelParticipant &_channelParticipant() {
|
||||
if (!data) throw mtpErrorUninitialized();
|
||||
split();
|
||||
return *(MTPDchannelParticipant*)data;
|
||||
}
|
||||
const MTPDchannelParticipant &c_channelParticipant() const {
|
||||
if (!data) throw mtpErrorUninitialized();
|
||||
return *(const MTPDchannelParticipant*)data;
|
||||
}
|
||||
|
||||
uint32 innerLength() const;
|
||||
mtpTypeId type() const;
|
||||
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_channelParticipant);
|
||||
void write(mtpBuffer &to) const;
|
||||
|
||||
typedef void ResponseType;
|
||||
|
||||
private:
|
||||
explicit MTPchannelParticipant(MTPDchannelParticipant *_data);
|
||||
|
||||
friend MTPchannelParticipant MTP_channelParticipant(MTPint _user_id, MTPint _inviter_id, MTPint _date);
|
||||
};
|
||||
typedef MTPBoxed<MTPchannelParticipant> MTPChannelParticipant;
|
||||
|
||||
class MTPmessages_channelParticipants : private mtpDataOwner {
|
||||
public:
|
||||
MTPmessages_channelParticipants();
|
||||
MTPmessages_channelParticipants(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_channelParticipants) : mtpDataOwner(0) {
|
||||
read(from, end, cons);
|
||||
}
|
||||
|
||||
MTPDmessages_channelParticipants &_messages_channelParticipants() {
|
||||
if (!data) throw mtpErrorUninitialized();
|
||||
split();
|
||||
return *(MTPDmessages_channelParticipants*)data;
|
||||
}
|
||||
const MTPDmessages_channelParticipants &c_messages_channelParticipants() const {
|
||||
if (!data) throw mtpErrorUninitialized();
|
||||
return *(const MTPDmessages_channelParticipants*)data;
|
||||
}
|
||||
|
||||
uint32 innerLength() const;
|
||||
mtpTypeId type() const;
|
||||
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_channelParticipants);
|
||||
void write(mtpBuffer &to) const;
|
||||
|
||||
typedef void ResponseType;
|
||||
|
||||
private:
|
||||
explicit MTPmessages_channelParticipants(MTPDmessages_channelParticipants *_data);
|
||||
|
||||
friend MTPmessages_channelParticipants MTP_messages_channelParticipants(MTPint _count, const MTPVector<MTPChannelParticipant> &_participants, const MTPVector<MTPUser> &_users);
|
||||
};
|
||||
typedef MTPBoxed<MTPmessages_channelParticipants> MTPmessages_ChannelParticipants;
|
||||
|
||||
// Type constructors with data
|
||||
|
||||
class MTPDresPQ : public mtpDataImpl<MTPDresPQ> {
|
||||
|
@ -9185,9 +9276,10 @@ class MTPDchat : public mtpDataImpl<MTPDchat> {
|
|||
public:
|
||||
MTPDchat() {
|
||||
}
|
||||
MTPDchat(MTPint _id, const MTPstring &_title, const MTPChatPhoto &_photo, MTPint _participants_count, MTPint _date, MTPint _version) : vid(_id), vtitle(_title), vphoto(_photo), vparticipants_count(_participants_count), vdate(_date), vversion(_version) {
|
||||
MTPDchat(MTPint _flags, MTPint _id, const MTPstring &_title, const MTPChatPhoto &_photo, MTPint _participants_count, MTPint _date, MTPint _version) : vflags(_flags), vid(_id), vtitle(_title), vphoto(_photo), vparticipants_count(_participants_count), vdate(_date), vversion(_version) {
|
||||
}
|
||||
|
||||
MTPint vflags;
|
||||
MTPint vid;
|
||||
MTPstring vtitle;
|
||||
MTPChatPhoto vphoto;
|
||||
|
@ -9318,6 +9410,24 @@ public:
|
|||
MTPint vversion;
|
||||
};
|
||||
|
||||
class MTPDchannelParticipants : public mtpDataImpl<MTPDchannelParticipants> {
|
||||
public:
|
||||
MTPDchannelParticipants() {
|
||||
}
|
||||
MTPDchannelParticipants(MTPint _flags, MTPint _channel_id, const MTPChatParticipant &_self_participant) : vflags(_flags), vchannel_id(_channel_id), vself_participant(_self_participant) {
|
||||
}
|
||||
|
||||
MTPint vflags;
|
||||
MTPint vchannel_id;
|
||||
MTPChatParticipant vself_participant;
|
||||
|
||||
enum {
|
||||
flag_self_participant = (1 << 0),
|
||||
};
|
||||
|
||||
bool has_self_participant() const { return vflags.v & flag_self_participant; }
|
||||
};
|
||||
|
||||
class MTPDchatPhoto : public mtpDataImpl<MTPDchatPhoto> {
|
||||
public:
|
||||
MTPDchatPhoto() {
|
||||
|
@ -9343,14 +9453,14 @@ class MTPDmessage : public mtpDataImpl<MTPDmessage> {
|
|||
public:
|
||||
MTPDmessage() {
|
||||
}
|
||||
MTPDmessage(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup, const MTPVector<MTPMessageEntity> &_entities) : vflags(_flags), vid(_id), vfrom_id(_from_id), vto_id(_to_id), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id), vdate(_date), vmessage(_message), vmedia(_media), vreply_markup(_reply_markup), ventities(_entities) {
|
||||
MTPDmessage(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, const MTPPeer &_fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup, const MTPVector<MTPMessageEntity> &_entities, MTPint _views) : vflags(_flags), vid(_id), vfrom_id(_from_id), vto_id(_to_id), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id), vdate(_date), vmessage(_message), vmedia(_media), vreply_markup(_reply_markup), ventities(_entities), vviews(_views) {
|
||||
}
|
||||
|
||||
MTPint vflags;
|
||||
MTPint vid;
|
||||
MTPint vfrom_id;
|
||||
MTPPeer vto_id;
|
||||
MTPint vfwd_from_id;
|
||||
MTPPeer vfwd_from_id;
|
||||
MTPint vfwd_date;
|
||||
MTPint vreply_to_msg_id;
|
||||
MTPint vdate;
|
||||
|
@ -9358,6 +9468,7 @@ public:
|
|||
MTPMessageMedia vmedia;
|
||||
MTPReplyMarkup vreply_markup;
|
||||
MTPVector<MTPMessageEntity> ventities;
|
||||
MTPint vviews;
|
||||
|
||||
enum {
|
||||
flag_from_id = (1 << 8),
|
||||
|
@ -9367,6 +9478,7 @@ public:
|
|||
flag_media = (1 << 9),
|
||||
flag_reply_markup = (1 << 6),
|
||||
flag_entities = (1 << 7),
|
||||
flag_views = (1 << 10),
|
||||
};
|
||||
|
||||
bool has_from_id() const { return vflags.v & flag_from_id; }
|
||||
|
@ -9376,6 +9488,7 @@ public:
|
|||
bool has_media() const { return vflags.v & flag_media; }
|
||||
bool has_reply_markup() const { return vflags.v & flag_reply_markup; }
|
||||
bool has_entities() const { return vflags.v & flag_entities; }
|
||||
bool has_views() const { return vflags.v & flag_views; }
|
||||
};
|
||||
|
||||
class MTPDmessageService : public mtpDataImpl<MTPDmessageService> {
|
||||
|
@ -10501,7 +10614,7 @@ class MTPDupdateShortMessage : public mtpDataImpl<MTPDupdateShortMessage> {
|
|||
public:
|
||||
MTPDupdateShortMessage() {
|
||||
}
|
||||
MTPDupdateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector<MTPMessageEntity> &_entities) : vflags(_flags), vid(_id), vuser_id(_user_id), vmessage(_message), vpts(_pts), vpts_count(_pts_count), vdate(_date), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id), ventities(_entities) {
|
||||
MTPDupdateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, const MTPPeer &_fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector<MTPMessageEntity> &_entities) : vflags(_flags), vid(_id), vuser_id(_user_id), vmessage(_message), vpts(_pts), vpts_count(_pts_count), vdate(_date), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id), ventities(_entities) {
|
||||
}
|
||||
|
||||
MTPint vflags;
|
||||
|
@ -10511,7 +10624,7 @@ public:
|
|||
MTPint vpts;
|
||||
MTPint vpts_count;
|
||||
MTPint vdate;
|
||||
MTPint vfwd_from_id;
|
||||
MTPPeer vfwd_from_id;
|
||||
MTPint vfwd_date;
|
||||
MTPint vreply_to_msg_id;
|
||||
MTPVector<MTPMessageEntity> ventities;
|
||||
|
@ -10533,7 +10646,7 @@ class MTPDupdateShortChatMessage : public mtpDataImpl<MTPDupdateShortChatMessage
|
|||
public:
|
||||
MTPDupdateShortChatMessage() {
|
||||
}
|
||||
MTPDupdateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector<MTPMessageEntity> &_entities) : vflags(_flags), vid(_id), vfrom_id(_from_id), vchat_id(_chat_id), vmessage(_message), vpts(_pts), vpts_count(_pts_count), vdate(_date), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id), ventities(_entities) {
|
||||
MTPDupdateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, const MTPPeer &_fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector<MTPMessageEntity> &_entities) : vflags(_flags), vid(_id), vfrom_id(_from_id), vchat_id(_chat_id), vmessage(_message), vpts(_pts), vpts_count(_pts_count), vdate(_date), vfwd_from_id(_fwd_from_id), vfwd_date(_fwd_date), vreply_to_msg_id(_reply_to_msg_id), ventities(_entities) {
|
||||
}
|
||||
|
||||
MTPint vflags;
|
||||
|
@ -10544,7 +10657,7 @@ public:
|
|||
MTPint vpts;
|
||||
MTPint vpts_count;
|
||||
MTPint vdate;
|
||||
MTPint vfwd_from_id;
|
||||
MTPPeer vfwd_from_id;
|
||||
MTPint vfwd_date;
|
||||
MTPint vreply_to_msg_id;
|
||||
MTPVector<MTPMessageEntity> ventities;
|
||||
|
@ -11885,6 +11998,30 @@ public:
|
|||
MTPVector<MTPUser> vusers;
|
||||
};
|
||||
|
||||
class MTPDchannelParticipant : public mtpDataImpl<MTPDchannelParticipant> {
|
||||
public:
|
||||
MTPDchannelParticipant() {
|
||||
}
|
||||
MTPDchannelParticipant(MTPint _user_id, MTPint _inviter_id, MTPint _date) : vuser_id(_user_id), vinviter_id(_inviter_id), vdate(_date) {
|
||||
}
|
||||
|
||||
MTPint vuser_id;
|
||||
MTPint vinviter_id;
|
||||
MTPint vdate;
|
||||
};
|
||||
|
||||
class MTPDmessages_channelParticipants : public mtpDataImpl<MTPDmessages_channelParticipants> {
|
||||
public:
|
||||
MTPDmessages_channelParticipants() {
|
||||
}
|
||||
MTPDmessages_channelParticipants(MTPint _count, const MTPVector<MTPChannelParticipant> &_participants, const MTPVector<MTPUser> &_users) : vcount(_count), vparticipants(_participants), vusers(_users) {
|
||||
}
|
||||
|
||||
MTPint vcount;
|
||||
MTPVector<MTPChannelParticipant> vparticipants;
|
||||
MTPVector<MTPUser> vusers;
|
||||
};
|
||||
|
||||
// RPC methods
|
||||
|
||||
class MTPreq_pq { // RPC method 'req_pq'
|
||||
|
@ -15160,33 +15297,36 @@ public:
|
|||
|
||||
class MTPmessages_forwardMessages { // RPC method 'messages.forwardMessages'
|
||||
public:
|
||||
MTPInputPeer vpeer;
|
||||
MTPInputPeer vfrom_peer;
|
||||
MTPVector<MTPint> vid;
|
||||
MTPVector<MTPlong> vrandom_id;
|
||||
MTPInputPeer vto_peer;
|
||||
|
||||
MTPmessages_forwardMessages() {
|
||||
}
|
||||
MTPmessages_forwardMessages(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_forwardMessages) {
|
||||
read(from, end, cons);
|
||||
}
|
||||
MTPmessages_forwardMessages(const MTPInputPeer &_peer, const MTPVector<MTPint> &_id, const MTPVector<MTPlong> &_random_id) : vpeer(_peer), vid(_id), vrandom_id(_random_id) {
|
||||
MTPmessages_forwardMessages(const MTPInputPeer &_from_peer, const MTPVector<MTPint> &_id, const MTPVector<MTPlong> &_random_id, const MTPInputPeer &_to_peer) : vfrom_peer(_from_peer), vid(_id), vrandom_id(_random_id), vto_peer(_to_peer) {
|
||||
}
|
||||
|
||||
uint32 innerLength() const {
|
||||
return vpeer.innerLength() + vid.innerLength() + vrandom_id.innerLength();
|
||||
return vfrom_peer.innerLength() + vid.innerLength() + vrandom_id.innerLength() + vto_peer.innerLength();
|
||||
}
|
||||
mtpTypeId type() const {
|
||||
return mtpc_messages_forwardMessages;
|
||||
}
|
||||
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_forwardMessages) {
|
||||
vpeer.read(from, end);
|
||||
vfrom_peer.read(from, end);
|
||||
vid.read(from, end);
|
||||
vrandom_id.read(from, end);
|
||||
vto_peer.read(from, end);
|
||||
}
|
||||
void write(mtpBuffer &to) const {
|
||||
vpeer.write(to);
|
||||
vfrom_peer.write(to);
|
||||
vid.write(to);
|
||||
vrandom_id.write(to);
|
||||
vto_peer.write(to);
|
||||
}
|
||||
|
||||
typedef MTPUpdates ResponseType;
|
||||
|
@ -15199,7 +15339,7 @@ public:
|
|||
}
|
||||
MTPmessages_ForwardMessages(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed<MTPmessages_forwardMessages>(from, end, cons) {
|
||||
}
|
||||
MTPmessages_ForwardMessages(const MTPInputPeer &_peer, const MTPVector<MTPint> &_id, const MTPVector<MTPlong> &_random_id) : MTPBoxed<MTPmessages_forwardMessages>(MTPmessages_forwardMessages(_peer, _id, _random_id)) {
|
||||
MTPmessages_ForwardMessages(const MTPInputPeer &_from_peer, const MTPVector<MTPint> &_id, const MTPVector<MTPlong> &_random_id, const MTPInputPeer &_to_peer) : MTPBoxed<MTPmessages_forwardMessages>(MTPmessages_forwardMessages(_from_peer, _id, _random_id, _to_peer)) {
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -16727,6 +16867,90 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
class MTPmessages_getChannelMessages { // RPC method 'messages.getChannelMessages'
|
||||
public:
|
||||
MTPInputPeer vpeer;
|
||||
MTPVector<MTPint> vid;
|
||||
|
||||
MTPmessages_getChannelMessages() {
|
||||
}
|
||||
MTPmessages_getChannelMessages(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getChannelMessages) {
|
||||
read(from, end, cons);
|
||||
}
|
||||
MTPmessages_getChannelMessages(const MTPInputPeer &_peer, const MTPVector<MTPint> &_id) : vpeer(_peer), vid(_id) {
|
||||
}
|
||||
|
||||
uint32 innerLength() const {
|
||||
return vpeer.innerLength() + vid.innerLength();
|
||||
}
|
||||
mtpTypeId type() const {
|
||||
return mtpc_messages_getChannelMessages;
|
||||
}
|
||||
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getChannelMessages) {
|
||||
vpeer.read(from, end);
|
||||
vid.read(from, end);
|
||||
}
|
||||
void write(mtpBuffer &to) const {
|
||||
vpeer.write(to);
|
||||
vid.write(to);
|
||||
}
|
||||
|
||||
typedef MTPmessages_Messages ResponseType;
|
||||
};
|
||||
class MTPmessages_GetChannelMessages : public MTPBoxed<MTPmessages_getChannelMessages> {
|
||||
public:
|
||||
MTPmessages_GetChannelMessages() {
|
||||
}
|
||||
MTPmessages_GetChannelMessages(const MTPmessages_getChannelMessages &v) : MTPBoxed<MTPmessages_getChannelMessages>(v) {
|
||||
}
|
||||
MTPmessages_GetChannelMessages(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed<MTPmessages_getChannelMessages>(from, end, cons) {
|
||||
}
|
||||
MTPmessages_GetChannelMessages(const MTPInputPeer &_peer, const MTPVector<MTPint> &_id) : MTPBoxed<MTPmessages_getChannelMessages>(MTPmessages_getChannelMessages(_peer, _id)) {
|
||||
}
|
||||
};
|
||||
|
||||
class MTPmessages_incrementMessagesViews { // RPC method 'messages.incrementMessagesViews'
|
||||
public:
|
||||
MTPInputPeer vpeer;
|
||||
MTPVector<MTPint> vid;
|
||||
|
||||
MTPmessages_incrementMessagesViews() {
|
||||
}
|
||||
MTPmessages_incrementMessagesViews(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_incrementMessagesViews) {
|
||||
read(from, end, cons);
|
||||
}
|
||||
MTPmessages_incrementMessagesViews(const MTPInputPeer &_peer, const MTPVector<MTPint> &_id) : vpeer(_peer), vid(_id) {
|
||||
}
|
||||
|
||||
uint32 innerLength() const {
|
||||
return vpeer.innerLength() + vid.innerLength();
|
||||
}
|
||||
mtpTypeId type() const {
|
||||
return mtpc_messages_incrementMessagesViews;
|
||||
}
|
||||
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_incrementMessagesViews) {
|
||||
vpeer.read(from, end);
|
||||
vid.read(from, end);
|
||||
}
|
||||
void write(mtpBuffer &to) const {
|
||||
vpeer.write(to);
|
||||
vid.write(to);
|
||||
}
|
||||
|
||||
typedef MTPBool ResponseType;
|
||||
};
|
||||
class MTPmessages_IncrementMessagesViews : public MTPBoxed<MTPmessages_incrementMessagesViews> {
|
||||
public:
|
||||
MTPmessages_IncrementMessagesViews() {
|
||||
}
|
||||
MTPmessages_IncrementMessagesViews(const MTPmessages_incrementMessagesViews &v) : MTPBoxed<MTPmessages_incrementMessagesViews>(v) {
|
||||
}
|
||||
MTPmessages_IncrementMessagesViews(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed<MTPmessages_incrementMessagesViews>(from, end, cons) {
|
||||
}
|
||||
MTPmessages_IncrementMessagesViews(const MTPInputPeer &_peer, const MTPVector<MTPint> &_id) : MTPBoxed<MTPmessages_incrementMessagesViews>(MTPmessages_incrementMessagesViews(_peer, _id)) {
|
||||
}
|
||||
};
|
||||
|
||||
class MTPmessages_editChatAbout { // RPC method 'messages.editChatAbout'
|
||||
public:
|
||||
MTPInputChat vchat_id;
|
||||
|
@ -16769,6 +16993,51 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
class MTPmessages_getChannelParticipants { // RPC method 'messages.getChannelParticipants'
|
||||
public:
|
||||
MTPInputChat vchat_id;
|
||||
MTPint voffset;
|
||||
MTPint vlimit;
|
||||
|
||||
MTPmessages_getChannelParticipants() {
|
||||
}
|
||||
MTPmessages_getChannelParticipants(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getChannelParticipants) {
|
||||
read(from, end, cons);
|
||||
}
|
||||
MTPmessages_getChannelParticipants(const MTPInputChat &_chat_id, MTPint _offset, MTPint _limit) : vchat_id(_chat_id), voffset(_offset), vlimit(_limit) {
|
||||
}
|
||||
|
||||
uint32 innerLength() const {
|
||||
return vchat_id.innerLength() + voffset.innerLength() + vlimit.innerLength();
|
||||
}
|
||||
mtpTypeId type() const {
|
||||
return mtpc_messages_getChannelParticipants;
|
||||
}
|
||||
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_getChannelParticipants) {
|
||||
vchat_id.read(from, end);
|
||||
voffset.read(from, end);
|
||||
vlimit.read(from, end);
|
||||
}
|
||||
void write(mtpBuffer &to) const {
|
||||
vchat_id.write(to);
|
||||
voffset.write(to);
|
||||
vlimit.write(to);
|
||||
}
|
||||
|
||||
typedef MTPmessages_ChannelParticipants ResponseType;
|
||||
};
|
||||
class MTPmessages_GetChannelParticipants : public MTPBoxed<MTPmessages_getChannelParticipants> {
|
||||
public:
|
||||
MTPmessages_GetChannelParticipants() {
|
||||
}
|
||||
MTPmessages_GetChannelParticipants(const MTPmessages_getChannelParticipants &v) : MTPBoxed<MTPmessages_getChannelParticipants>(v) {
|
||||
}
|
||||
MTPmessages_GetChannelParticipants(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed<MTPmessages_getChannelParticipants>(from, end, cons) {
|
||||
}
|
||||
MTPmessages_GetChannelParticipants(const MTPInputChat &_chat_id, MTPint _offset, MTPint _limit) : MTPBoxed<MTPmessages_getChannelParticipants>(MTPmessages_getChannelParticipants(_chat_id, _offset, _limit)) {
|
||||
}
|
||||
};
|
||||
|
||||
class MTPmessages_checkChannelUsername { // RPC method 'messages.checkChannelUsername'
|
||||
public:
|
||||
MTPInputChat vchat_id;
|
||||
|
@ -19981,7 +20250,7 @@ inline uint32 MTPchat::innerLength() const {
|
|||
}
|
||||
case mtpc_chat: {
|
||||
const MTPDchat &v(c_chat());
|
||||
return v.vid.innerLength() + v.vtitle.innerLength() + v.vphoto.innerLength() + v.vparticipants_count.innerLength() + v.vdate.innerLength() + v.vversion.innerLength();
|
||||
return v.vflags.innerLength() + v.vid.innerLength() + v.vtitle.innerLength() + v.vphoto.innerLength() + v.vparticipants_count.innerLength() + v.vdate.innerLength() + v.vversion.innerLength();
|
||||
}
|
||||
case mtpc_chatForbidden: {
|
||||
const MTPDchatForbidden &v(c_chatForbidden());
|
||||
|
@ -20013,6 +20282,7 @@ inline void MTPchat::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId
|
|||
case mtpc_chat: _type = cons; {
|
||||
if (!data) setData(new MTPDchat());
|
||||
MTPDchat &v(_chat());
|
||||
v.vflags.read(from, end);
|
||||
v.vid.read(from, end);
|
||||
v.vtitle.read(from, end);
|
||||
v.vphoto.read(from, end);
|
||||
|
@ -20056,6 +20326,7 @@ inline void MTPchat::write(mtpBuffer &to) const {
|
|||
} break;
|
||||
case mtpc_chat: {
|
||||
const MTPDchat &v(c_chat());
|
||||
v.vflags.write(to);
|
||||
v.vid.write(to);
|
||||
v.vtitle.write(to);
|
||||
v.vphoto.write(to);
|
||||
|
@ -20110,8 +20381,8 @@ inline MTPchat::MTPchat(MTPDchannelForbidden *_data) : mtpDataOwner(_data), _typ
|
|||
inline MTPchat MTP_chatEmpty(MTPint _id) {
|
||||
return MTPchat(new MTPDchatEmpty(_id));
|
||||
}
|
||||
inline MTPchat MTP_chat(MTPint _id, const MTPstring &_title, const MTPChatPhoto &_photo, MTPint _participants_count, MTPint _date, MTPint _version) {
|
||||
return MTPchat(new MTPDchat(_id, _title, _photo, _participants_count, _date, _version));
|
||||
inline MTPchat MTP_chat(MTPint _flags, MTPint _id, const MTPstring &_title, const MTPChatPhoto &_photo, MTPint _participants_count, MTPint _date, MTPint _version) {
|
||||
return MTPchat(new MTPDchat(_flags, _id, _title, _photo, _participants_count, _date, _version));
|
||||
}
|
||||
inline MTPchat MTP_chatForbidden(MTPint _id, const MTPstring &_title) {
|
||||
return MTPchat(new MTPDchatForbidden(_id, _title));
|
||||
|
@ -20253,6 +20524,10 @@ inline uint32 MTPchatParticipants::innerLength() const {
|
|||
const MTPDchatParticipants &v(c_chatParticipants());
|
||||
return v.vchat_id.innerLength() + v.vadmin_id.innerLength() + v.vparticipants.innerLength() + v.vversion.innerLength();
|
||||
}
|
||||
case mtpc_channelParticipants: {
|
||||
const MTPDchannelParticipants &v(c_channelParticipants());
|
||||
return v.vflags.innerLength() + v.vchannel_id.innerLength() + (v.has_self_participant() ? v.vself_participant.innerLength() : 0);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -20278,6 +20553,13 @@ inline void MTPchatParticipants::read(const mtpPrime *&from, const mtpPrime *end
|
|||
v.vparticipants.read(from, end);
|
||||
v.vversion.read(from, end);
|
||||
} break;
|
||||
case mtpc_channelParticipants: _type = cons; {
|
||||
if (!data) setData(new MTPDchannelParticipants());
|
||||
MTPDchannelParticipants &v(_channelParticipants());
|
||||
v.vflags.read(from, end);
|
||||
v.vchannel_id.read(from, end);
|
||||
if (v.has_self_participant()) { v.vself_participant.read(from, end); } else { v.vself_participant = MTPChatParticipant(); }
|
||||
} break;
|
||||
default: throw mtpErrorUnexpected(cons, "MTPchatParticipants");
|
||||
}
|
||||
}
|
||||
|
@ -20296,12 +20578,19 @@ inline void MTPchatParticipants::write(mtpBuffer &to) const {
|
|||
v.vparticipants.write(to);
|
||||
v.vversion.write(to);
|
||||
} break;
|
||||
case mtpc_channelParticipants: {
|
||||
const MTPDchannelParticipants &v(c_channelParticipants());
|
||||
v.vflags.write(to);
|
||||
v.vchannel_id.write(to);
|
||||
if (v.has_self_participant()) v.vself_participant.write(to);
|
||||
} break;
|
||||
}
|
||||
}
|
||||
inline MTPchatParticipants::MTPchatParticipants(mtpTypeId type) : mtpDataOwner(0), _type(type) {
|
||||
switch (type) {
|
||||
case mtpc_chatParticipantsForbidden: setData(new MTPDchatParticipantsForbidden()); break;
|
||||
case mtpc_chatParticipants: setData(new MTPDchatParticipants()); break;
|
||||
case mtpc_channelParticipants: setData(new MTPDchannelParticipants()); break;
|
||||
default: throw mtpErrorBadTypeId(type, "MTPchatParticipants");
|
||||
}
|
||||
}
|
||||
|
@ -20309,12 +20598,17 @@ inline MTPchatParticipants::MTPchatParticipants(MTPDchatParticipantsForbidden *_
|
|||
}
|
||||
inline MTPchatParticipants::MTPchatParticipants(MTPDchatParticipants *_data) : mtpDataOwner(_data), _type(mtpc_chatParticipants) {
|
||||
}
|
||||
inline MTPchatParticipants::MTPchatParticipants(MTPDchannelParticipants *_data) : mtpDataOwner(_data), _type(mtpc_channelParticipants) {
|
||||
}
|
||||
inline MTPchatParticipants MTP_chatParticipantsForbidden(MTPint _flags, MTPint _chat_id, const MTPChatParticipant &_self_participant) {
|
||||
return MTPchatParticipants(new MTPDchatParticipantsForbidden(_flags, _chat_id, _self_participant));
|
||||
}
|
||||
inline MTPchatParticipants MTP_chatParticipants(MTPint _chat_id, MTPint _admin_id, const MTPVector<MTPChatParticipant> &_participants, MTPint _version) {
|
||||
return MTPchatParticipants(new MTPDchatParticipants(_chat_id, _admin_id, _participants, _version));
|
||||
}
|
||||
inline MTPchatParticipants MTP_channelParticipants(MTPint _flags, MTPint _channel_id, const MTPChatParticipant &_self_participant) {
|
||||
return MTPchatParticipants(new MTPDchannelParticipants(_flags, _channel_id, _self_participant));
|
||||
}
|
||||
|
||||
inline uint32 MTPchatPhoto::innerLength() const {
|
||||
switch (_type) {
|
||||
|
@ -20375,7 +20669,7 @@ inline uint32 MTPmessage::innerLength() const {
|
|||
}
|
||||
case mtpc_message: {
|
||||
const MTPDmessage &v(c_message());
|
||||
return v.vflags.innerLength() + v.vid.innerLength() + (v.has_from_id() ? v.vfrom_id.innerLength() : 0) + v.vto_id.innerLength() + (v.has_fwd_from_id() ? v.vfwd_from_id.innerLength() : 0) + (v.has_fwd_date() ? v.vfwd_date.innerLength() : 0) + (v.has_reply_to_msg_id() ? v.vreply_to_msg_id.innerLength() : 0) + v.vdate.innerLength() + v.vmessage.innerLength() + (v.has_media() ? v.vmedia.innerLength() : 0) + (v.has_reply_markup() ? v.vreply_markup.innerLength() : 0) + (v.has_entities() ? v.ventities.innerLength() : 0);
|
||||
return v.vflags.innerLength() + v.vid.innerLength() + (v.has_from_id() ? v.vfrom_id.innerLength() : 0) + v.vto_id.innerLength() + (v.has_fwd_from_id() ? v.vfwd_from_id.innerLength() : 0) + (v.has_fwd_date() ? v.vfwd_date.innerLength() : 0) + (v.has_reply_to_msg_id() ? v.vreply_to_msg_id.innerLength() : 0) + v.vdate.innerLength() + v.vmessage.innerLength() + (v.has_media() ? v.vmedia.innerLength() : 0) + (v.has_reply_markup() ? v.vreply_markup.innerLength() : 0) + (v.has_entities() ? v.ventities.innerLength() : 0) + (v.has_views() ? v.vviews.innerLength() : 0);
|
||||
}
|
||||
case mtpc_messageService: {
|
||||
const MTPDmessageService &v(c_messageService());
|
||||
|
@ -20403,7 +20697,7 @@ inline void MTPmessage::read(const mtpPrime *&from, const mtpPrime *end, mtpType
|
|||
v.vid.read(from, end);
|
||||
if (v.has_from_id()) { v.vfrom_id.read(from, end); } else { v.vfrom_id = MTPint(); }
|
||||
v.vto_id.read(from, end);
|
||||
if (v.has_fwd_from_id()) { v.vfwd_from_id.read(from, end); } else { v.vfwd_from_id = MTPint(); }
|
||||
if (v.has_fwd_from_id()) { v.vfwd_from_id.read(from, end); } else { v.vfwd_from_id = MTPPeer(); }
|
||||
if (v.has_fwd_date()) { v.vfwd_date.read(from, end); } else { v.vfwd_date = MTPint(); }
|
||||
if (v.has_reply_to_msg_id()) { v.vreply_to_msg_id.read(from, end); } else { v.vreply_to_msg_id = MTPint(); }
|
||||
v.vdate.read(from, end);
|
||||
|
@ -20411,6 +20705,7 @@ inline void MTPmessage::read(const mtpPrime *&from, const mtpPrime *end, mtpType
|
|||
if (v.has_media()) { v.vmedia.read(from, end); } else { v.vmedia = MTPMessageMedia(); }
|
||||
if (v.has_reply_markup()) { v.vreply_markup.read(from, end); } else { v.vreply_markup = MTPReplyMarkup(); }
|
||||
if (v.has_entities()) { v.ventities.read(from, end); } else { v.ventities = MTPVector<MTPMessageEntity>(); }
|
||||
if (v.has_views()) { v.vviews.read(from, end); } else { v.vviews = MTPint(); }
|
||||
} break;
|
||||
case mtpc_messageService: _type = cons; {
|
||||
if (!data) setData(new MTPDmessageService());
|
||||
|
@ -20445,6 +20740,7 @@ inline void MTPmessage::write(mtpBuffer &to) const {
|
|||
if (v.has_media()) v.vmedia.write(to);
|
||||
if (v.has_reply_markup()) v.vreply_markup.write(to);
|
||||
if (v.has_entities()) v.ventities.write(to);
|
||||
if (v.has_views()) v.vviews.write(to);
|
||||
} break;
|
||||
case mtpc_messageService: {
|
||||
const MTPDmessageService &v(c_messageService());
|
||||
|
@ -20474,8 +20770,8 @@ inline MTPmessage::MTPmessage(MTPDmessageService *_data) : mtpDataOwner(_data),
|
|||
inline MTPmessage MTP_messageEmpty(MTPint _id) {
|
||||
return MTPmessage(new MTPDmessageEmpty(_id));
|
||||
}
|
||||
inline MTPmessage MTP_message(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup, const MTPVector<MTPMessageEntity> &_entities) {
|
||||
return MTPmessage(new MTPDmessage(_flags, _id, _from_id, _to_id, _fwd_from_id, _fwd_date, _reply_to_msg_id, _date, _message, _media, _reply_markup, _entities));
|
||||
inline MTPmessage MTP_message(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, const MTPPeer &_fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, MTPint _date, const MTPstring &_message, const MTPMessageMedia &_media, const MTPReplyMarkup &_reply_markup, const MTPVector<MTPMessageEntity> &_entities, MTPint _views) {
|
||||
return MTPmessage(new MTPDmessage(_flags, _id, _from_id, _to_id, _fwd_from_id, _fwd_date, _reply_to_msg_id, _date, _message, _media, _reply_markup, _entities, _views));
|
||||
}
|
||||
inline MTPmessage MTP_messageService(MTPint _flags, MTPint _id, MTPint _from_id, const MTPPeer &_to_id, MTPint _date, const MTPMessageAction &_action) {
|
||||
return MTPmessage(new MTPDmessageService(_flags, _id, _from_id, _to_id, _date, _action));
|
||||
|
@ -23362,7 +23658,7 @@ inline void MTPupdates::read(const mtpPrime *&from, const mtpPrime *end, mtpType
|
|||
v.vpts.read(from, end);
|
||||
v.vpts_count.read(from, end);
|
||||
v.vdate.read(from, end);
|
||||
if (v.has_fwd_from_id()) { v.vfwd_from_id.read(from, end); } else { v.vfwd_from_id = MTPint(); }
|
||||
if (v.has_fwd_from_id()) { v.vfwd_from_id.read(from, end); } else { v.vfwd_from_id = MTPPeer(); }
|
||||
if (v.has_fwd_date()) { v.vfwd_date.read(from, end); } else { v.vfwd_date = MTPint(); }
|
||||
if (v.has_reply_to_msg_id()) { v.vreply_to_msg_id.read(from, end); } else { v.vreply_to_msg_id = MTPint(); }
|
||||
if (v.has_entities()) { v.ventities.read(from, end); } else { v.ventities = MTPVector<MTPMessageEntity>(); }
|
||||
|
@ -23378,7 +23674,7 @@ inline void MTPupdates::read(const mtpPrime *&from, const mtpPrime *end, mtpType
|
|||
v.vpts.read(from, end);
|
||||
v.vpts_count.read(from, end);
|
||||
v.vdate.read(from, end);
|
||||
if (v.has_fwd_from_id()) { v.vfwd_from_id.read(from, end); } else { v.vfwd_from_id = MTPint(); }
|
||||
if (v.has_fwd_from_id()) { v.vfwd_from_id.read(from, end); } else { v.vfwd_from_id = MTPPeer(); }
|
||||
if (v.has_fwd_date()) { v.vfwd_date.read(from, end); } else { v.vfwd_date = MTPint(); }
|
||||
if (v.has_reply_to_msg_id()) { v.vreply_to_msg_id.read(from, end); } else { v.vreply_to_msg_id = MTPint(); }
|
||||
if (v.has_entities()) { v.ventities.read(from, end); } else { v.ventities = MTPVector<MTPMessageEntity>(); }
|
||||
|
@ -23514,10 +23810,10 @@ inline MTPupdates::MTPupdates(MTPDupdateShortSentMessage *_data) : mtpDataOwner(
|
|||
inline MTPupdates MTP_updatesTooLong() {
|
||||
return MTPupdates(mtpc_updatesTooLong);
|
||||
}
|
||||
inline MTPupdates MTP_updateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector<MTPMessageEntity> &_entities) {
|
||||
inline MTPupdates MTP_updateShortMessage(MTPint _flags, MTPint _id, MTPint _user_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, const MTPPeer &_fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector<MTPMessageEntity> &_entities) {
|
||||
return MTPupdates(new MTPDupdateShortMessage(_flags, _id, _user_id, _message, _pts, _pts_count, _date, _fwd_from_id, _fwd_date, _reply_to_msg_id, _entities));
|
||||
}
|
||||
inline MTPupdates MTP_updateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, MTPint _fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector<MTPMessageEntity> &_entities) {
|
||||
inline MTPupdates MTP_updateShortChatMessage(MTPint _flags, MTPint _id, MTPint _from_id, MTPint _chat_id, const MTPstring &_message, MTPint _pts, MTPint _pts_count, MTPint _date, const MTPPeer &_fwd_from_id, MTPint _fwd_date, MTPint _reply_to_msg_id, const MTPVector<MTPMessageEntity> &_entities) {
|
||||
return MTPupdates(new MTPDupdateShortChatMessage(_flags, _id, _from_id, _chat_id, _message, _pts, _pts_count, _date, _fwd_from_id, _fwd_date, _reply_to_msg_id, _entities));
|
||||
}
|
||||
inline MTPupdates MTP_updateShort(const MTPUpdate &_update, MTPint _date) {
|
||||
|
@ -27071,6 +27367,68 @@ inline MTPcontacts_resolvedPeer MTP_contacts_resolvedPeer(const MTPPeer &_peer,
|
|||
return MTPcontacts_resolvedPeer(new MTPDcontacts_resolvedPeer(_peer, _chats, _users));
|
||||
}
|
||||
|
||||
inline MTPchannelParticipant::MTPchannelParticipant() : mtpDataOwner(new MTPDchannelParticipant()) {
|
||||
}
|
||||
|
||||
inline uint32 MTPchannelParticipant::innerLength() const {
|
||||
const MTPDchannelParticipant &v(c_channelParticipant());
|
||||
return v.vuser_id.innerLength() + v.vinviter_id.innerLength() + v.vdate.innerLength();
|
||||
}
|
||||
inline mtpTypeId MTPchannelParticipant::type() const {
|
||||
return mtpc_channelParticipant;
|
||||
}
|
||||
inline void MTPchannelParticipant::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) {
|
||||
if (cons != mtpc_channelParticipant) throw mtpErrorUnexpected(cons, "MTPchannelParticipant");
|
||||
|
||||
if (!data) setData(new MTPDchannelParticipant());
|
||||
MTPDchannelParticipant &v(_channelParticipant());
|
||||
v.vuser_id.read(from, end);
|
||||
v.vinviter_id.read(from, end);
|
||||
v.vdate.read(from, end);
|
||||
}
|
||||
inline void MTPchannelParticipant::write(mtpBuffer &to) const {
|
||||
const MTPDchannelParticipant &v(c_channelParticipant());
|
||||
v.vuser_id.write(to);
|
||||
v.vinviter_id.write(to);
|
||||
v.vdate.write(to);
|
||||
}
|
||||
inline MTPchannelParticipant::MTPchannelParticipant(MTPDchannelParticipant *_data) : mtpDataOwner(_data) {
|
||||
}
|
||||
inline MTPchannelParticipant MTP_channelParticipant(MTPint _user_id, MTPint _inviter_id, MTPint _date) {
|
||||
return MTPchannelParticipant(new MTPDchannelParticipant(_user_id, _inviter_id, _date));
|
||||
}
|
||||
|
||||
inline MTPmessages_channelParticipants::MTPmessages_channelParticipants() : mtpDataOwner(new MTPDmessages_channelParticipants()) {
|
||||
}
|
||||
|
||||
inline uint32 MTPmessages_channelParticipants::innerLength() const {
|
||||
const MTPDmessages_channelParticipants &v(c_messages_channelParticipants());
|
||||
return v.vcount.innerLength() + v.vparticipants.innerLength() + v.vusers.innerLength();
|
||||
}
|
||||
inline mtpTypeId MTPmessages_channelParticipants::type() const {
|
||||
return mtpc_messages_channelParticipants;
|
||||
}
|
||||
inline void MTPmessages_channelParticipants::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) {
|
||||
if (cons != mtpc_messages_channelParticipants) throw mtpErrorUnexpected(cons, "MTPmessages_channelParticipants");
|
||||
|
||||
if (!data) setData(new MTPDmessages_channelParticipants());
|
||||
MTPDmessages_channelParticipants &v(_messages_channelParticipants());
|
||||
v.vcount.read(from, end);
|
||||
v.vparticipants.read(from, end);
|
||||
v.vusers.read(from, end);
|
||||
}
|
||||
inline void MTPmessages_channelParticipants::write(mtpBuffer &to) const {
|
||||
const MTPDmessages_channelParticipants &v(c_messages_channelParticipants());
|
||||
v.vcount.write(to);
|
||||
v.vparticipants.write(to);
|
||||
v.vusers.write(to);
|
||||
}
|
||||
inline MTPmessages_channelParticipants::MTPmessages_channelParticipants(MTPDmessages_channelParticipants *_data) : mtpDataOwner(_data) {
|
||||
}
|
||||
inline MTPmessages_channelParticipants MTP_messages_channelParticipants(MTPint _count, const MTPVector<MTPChannelParticipant> &_participants, const MTPVector<MTPUser> &_users) {
|
||||
return MTPmessages_channelParticipants(new MTPDmessages_channelParticipants(_count, _participants, _users));
|
||||
}
|
||||
|
||||
// Human-readable text serialization
|
||||
#if (defined _DEBUG || defined _WITH_DEBUG)
|
||||
|
||||
|
|
|
@ -216,7 +216,7 @@ userStatusLastWeek#7bf09fc = UserStatus;
|
|||
userStatusLastMonth#77ebc742 = UserStatus;
|
||||
|
||||
chatEmpty#9ba2d800 id:int = Chat;
|
||||
chat#c7c02794 id:int title:string photo:ChatPhoto participants_count:int date:int version:int = Chat;
|
||||
chat#7312bc48 flags:# id:int title:string photo:ChatPhoto participants_count:int date:int version:int = Chat;
|
||||
chatForbidden#7328bdb id:int title:string = Chat;
|
||||
channel#1bcc63f2 flags:# id:int access_hash:long title:string username:flags.2?string photo:ChatPhoto date:int version:int = Chat;
|
||||
channelForbidden#2d85832c id:int access_hash:long title:string = Chat;
|
||||
|
@ -228,12 +228,13 @@ chatParticipant#c8d7493e user_id:int inviter_id:int date:int = ChatParticipant;
|
|||
|
||||
chatParticipantsForbidden#fc900c2b flags:# chat_id:int self_participant:flags.0?ChatParticipant = ChatParticipants;
|
||||
chatParticipants#7841b415 chat_id:int admin_id:int participants:Vector<ChatParticipant> version:int = ChatParticipants;
|
||||
channelParticipants#b561ad0c flags:# channel_id:int self_participant:flags.0?ChatParticipant = ChatParticipants;
|
||||
|
||||
chatPhotoEmpty#37c1011c = ChatPhoto;
|
||||
chatPhoto#6153276a photo_small:FileLocation photo_big:FileLocation = ChatPhoto;
|
||||
|
||||
messageEmpty#83e5de54 id:int = Message;
|
||||
message#ab406723 flags:# id:int from_id:flags.8?int to_id:Peer fwd_from_id:flags.2?int fwd_date:flags.2?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> = Message;
|
||||
message#5ba66c13 flags:# id:int from_id:flags.8?int to_id:Peer fwd_from_id:flags.2?Peer fwd_date:flags.2?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 = Message;
|
||||
messageService#c06b9607 flags:# id:int from_id:flags.8?int to_id:Peer date:int action:MessageAction = Message;
|
||||
|
||||
messageMediaEmpty#3ded6320 = MessageMedia;
|
||||
|
@ -389,8 +390,8 @@ 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#3f32d858 flags:# id:int user_id:int message:string pts:int pts_count:int date:int fwd_from_id:flags.2?int fwd_date:flags.2?int reply_to_msg_id:flags.3?int entities:flags.7?Vector<MessageEntity> = Updates;
|
||||
updateShortChatMessage#f9409b3d flags:# id:int from_id:int chat_id:int message:string pts:int pts_count:int date:int fwd_from_id:flags.2?int fwd_date:flags.2?int reply_to_msg_id:flags.3?int entities:flags.7?Vector<MessageEntity> = Updates;
|
||||
updateShortMessage#f7d91a46 flags:# id:int user_id:int message:string pts:int pts_count:int date:int fwd_from_id:flags.2?Peer fwd_date:flags.2?int reply_to_msg_id:flags.3?int entities:flags.7?Vector<MessageEntity> = Updates;
|
||||
updateShortChatMessage#cac7fdd2 flags:# id:int from_id:int chat_id:int message:string pts:int pts_count:int date:int fwd_from_id:flags.2?Peer fwd_date:flags.2?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;
|
||||
|
@ -598,6 +599,10 @@ channelMessagesFilterCollapsed#fa01232e = ChannelMessagesFilter;
|
|||
|
||||
contacts.resolvedPeer#7f077ad9 peer:Peer chats:Vector<Chat> users:Vector<User> = contacts.ResolvedPeer;
|
||||
|
||||
channelParticipant#506116ea user_id:int inviter_id:int date:int = ChannelParticipant;
|
||||
|
||||
messages.channelParticipants#d6891de1 count:int participants:Vector<ChannelParticipant> users:Vector<User> = messages.ChannelParticipants;
|
||||
|
||||
---functions---
|
||||
|
||||
invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X;
|
||||
|
@ -675,7 +680,7 @@ messages.receivedMessages#5a954c0 max_id:int = Vector<ReceivedNotifyMessage>;
|
|||
messages.setTyping#a3825e50 peer:InputPeer action:SendMessageAction = Bool;
|
||||
messages.sendMessage#fa88427a flags:# peer:InputPeer reply_to_msg_id:flags.0?int message:string random_id:long reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector<MessageEntity> = Updates;
|
||||
messages.sendMedia#c8f16791 flags:# peer:InputPeer reply_to_msg_id:flags.0?int media:InputMedia random_id:long reply_markup:flags.2?ReplyMarkup = Updates;
|
||||
messages.forwardMessages#55e1728d peer:InputPeer id:Vector<int> random_id:Vector<long> = Updates;
|
||||
messages.forwardMessages#f9adea76 from_peer:InputPeer id:Vector<int> random_id:Vector<long> to_peer:InputPeer = Updates;
|
||||
messages.reportSpam#cf1592db peer:InputPeer = Bool;
|
||||
messages.getChats#27ae65b id:Vector<InputChat> = messages.Chats;
|
||||
messages.getFullChat#36a4dfe chat_id:InputChat = messages.ChatFull;
|
||||
|
@ -712,7 +717,10 @@ messages.getImportantHistory#24af43a5 peer:InputPeer offset_id:int add_offset:in
|
|||
messages.readChannelHistory#36a1210e peer:InputPeer max_id:int = Bool;
|
||||
messages.createChannel#e830f8cb flags:# title:string users:Vector<InputUser> = Updates;
|
||||
messages.deleteChannelMessages#9995a84f peer:InputPeer id:Vector<int> = messages.AffectedMessages;
|
||||
messages.getChannelMessages#5f46b265 peer:InputPeer id:Vector<int> = messages.Messages;
|
||||
messages.incrementMessagesViews#91ffd479 peer:InputPeer id:Vector<int> = Bool;
|
||||
messages.editChatAbout#8a969b93 chat_id:InputChat about:string = Bool;
|
||||
messages.getChannelParticipants#4a771976 chat_id:InputChat offset:int limit:int = messages.ChannelParticipants;
|
||||
messages.checkChannelUsername#e6d2d8f4 chat_id:InputChat username:string = Bool;
|
||||
messages.updateChannelUsername#ce2e9587 chat_id:InputChat username:string = Bool;
|
||||
|
||||
|
@ -735,4 +743,4 @@ help.getAppUpdate#c812ac7e device_model:string system_version:string app_version
|
|||
help.saveAppLog#6f02f748 events:Vector<InputAppEvent> = Bool;
|
||||
help.getInviteText#a4a95186 lang_code:string = 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.getAppChangelog#5bab7fb2 device_model:string system_version:string app_version:string lang_code:string = help.AppChangelog;
|
||||
|
|
|
@ -309,7 +309,8 @@ void ProfileInner::blockDone(bool blocked, const MTPBool &result) {
|
|||
|
||||
bool ProfileInner::blockFail(const RPCError &error) {
|
||||
if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false;
|
||||
//_blockRequest = 0;
|
||||
|
||||
_blockRequest = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -289,12 +289,16 @@ void PsMacWindowPrivate::showNotify(uint64 peer, int32 msgId, const QPixmap &pix
|
|||
[notification setTitle:QNSString(title).s()];
|
||||
[notification setSubtitle:QNSString(subtitle).s()];
|
||||
[notification setInformativeText:QNSString(msg).s()];
|
||||
[notification setContentImage:img];
|
||||
if ([notification respondsToSelector:@selector(setContentImage:)]) {
|
||||
[notification setContentImage:img];
|
||||
}
|
||||
|
||||
if (withReply) [notification setHasReplyButton:YES];
|
||||
if (withReply && [notification respondsToSelector:@selector(setHasReplyButton:)]) {
|
||||
[notification setHasReplyButton:YES];
|
||||
}
|
||||
|
||||
[notification setSoundName:nil];
|
||||
|
||||
|
||||
NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter];
|
||||
[center deliverNotification:notification];
|
||||
|
||||
|
|
|
@ -160,6 +160,8 @@ float64 gSongVolume = 0.9;
|
|||
SavedPeers gSavedPeers;
|
||||
SavedPeersByTime gSavedPeersByTime;
|
||||
|
||||
ReportSpamStatuses gReportSpamStatuses;
|
||||
|
||||
void settingsParseArgs(int argc, char *argv[]) {
|
||||
#ifdef Q_OS_MAC
|
||||
if (QSysInfo::macVersion() < QSysInfo::MV_10_8) {
|
||||
|
|
|
@ -317,4 +317,7 @@ typedef QMultiMap<QDateTime, PeerData*> SavedPeersByTime;
|
|||
DeclareRefSetting(SavedPeers, SavedPeers);
|
||||
DeclareRefSetting(SavedPeersByTime, SavedPeersByTime);
|
||||
|
||||
typedef QMap<uint64, DBIPeerReportSpamStatus> ReportSpamStatuses;
|
||||
DeclareRefSetting(ReportSpamStatuses, ReportSpamStatuses);
|
||||
|
||||
void settingsParseArgs(int argc, char *argv[]);
|
||||
|
|
|
@ -329,7 +329,7 @@ public:
|
|||
class ChatData : public PeerData {
|
||||
public:
|
||||
|
||||
ChatData(const PeerId &id) : PeerData(id), inputChat(MTP_inputChat(MTP_int(bareId()))), count(0), date(0), version(0), admin(0), left(false), forbidden(true), botStatus(0) {
|
||||
ChatData(const PeerId &id) : PeerData(id), inputChat(MTP_inputChat(MTP_int(bareId()))), count(0), date(0), version(0), admin(0), inviterForSpamReport(0), left(false), forbidden(true), botStatus(0) {
|
||||
}
|
||||
void setPhoto(const MTPChatPhoto &photo, const PhotoId &phId = UnknownPeerPhotoId);
|
||||
|
||||
|
@ -339,6 +339,7 @@ public:
|
|||
int32 date;
|
||||
int32 version;
|
||||
int32 admin;
|
||||
int32 inviterForSpamReport; // > 0 - user who invited me to chat in unread service msg, < 0 - have outgoing message
|
||||
bool left;
|
||||
bool forbidden;
|
||||
typedef QMap<UserData*, int32> Participants;
|
||||
|
|
|
@ -357,6 +357,13 @@ enum DBIPlatform {
|
|||
dbipLinux32 = 3,
|
||||
};
|
||||
|
||||
enum DBIPeerReportSpamStatus {
|
||||
dbiprsNoButton,
|
||||
dbiprsUnknown,
|
||||
dbiprsShowButton,
|
||||
dbiprsReportSent,
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
HitTestNone = 0,
|
||||
HitTestClient,
|
||||
|
|
|
@ -1418,7 +1418,7 @@ void Window::notifyShowNext(NotifyWindow *remove) {
|
|||
HistoryItem *notifyItem = 0;
|
||||
History *notifyHistory = 0;
|
||||
NotifyWaiters::iterator notifyWaiter = notifyWaiters.end();
|
||||
for (NotifyWaiters::iterator i = notifyWaiters.begin(); i != notifyWaiters.end(); ++i) {
|
||||
for (NotifyWaiters::iterator i = notifyWaiters.begin(); i != notifyWaiters.end();) {
|
||||
History *history = i.key();
|
||||
if (history->currentNotification() && history->currentNotification()->id != i.value().msg) {
|
||||
NotifyWhenMaps::iterator j = notifyWhenMaps.find(history);
|
||||
|
@ -1451,6 +1451,7 @@ void Window::notifyShowNext(NotifyWindow *remove) {
|
|||
notifyHistory = history;
|
||||
notifyWaiter = i;
|
||||
}
|
||||
++i;
|
||||
}
|
||||
if (notifyItem) {
|
||||
if (next > ms) {
|
||||
|
@ -1467,8 +1468,7 @@ void Window::notifyShowNext(NotifyWindow *remove) {
|
|||
uint64 ms = getms(true);
|
||||
History *history = notifyItem->history();
|
||||
NotifyWhenMaps::iterator j = notifyWhenMaps.find(history);
|
||||
bool notifyWhenFound = (j != notifyWhenMaps.cend());
|
||||
if (!notifyWhenFound) {
|
||||
if (j == notifyWhenMaps.cend()) {
|
||||
history->clearNotifications();
|
||||
} else {
|
||||
HistoryItem *nextNotify = 0;
|
||||
|
@ -1516,7 +1516,7 @@ void Window::notifyShowNext(NotifyWindow *remove) {
|
|||
|
||||
if (!history->hasNotification()) {
|
||||
if (notifyWaiter != notifyWaiters.cend()) notifyWaiters.erase(notifyWaiter);
|
||||
if (notifyWhenFound) notifyWhenMaps.erase(j);
|
||||
notifyWhenMaps.remove(history);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>0.8.55</string>
|
||||
<string>0.8.56</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||
<key>CFBundleSignature</key>
|
||||
|
|
Binary file not shown.
|
@ -1697,7 +1697,7 @@
|
|||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 0.8.55;
|
||||
CURRENT_PROJECT_VERSION = 0.8.56;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
|
@ -1715,7 +1715,7 @@
|
|||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
COPY_PHASE_STRIP = YES;
|
||||
CURRENT_PROJECT_VERSION = 0.8.55;
|
||||
CURRENT_PROJECT_VERSION = 0.8.56;
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = fast;
|
||||
GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h;
|
||||
|
@ -1741,10 +1741,10 @@
|
|||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 0.8.55;
|
||||
CURRENT_PROJECT_VERSION = 0.8.56;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DYLIB_COMPATIBILITY_VERSION = 0.8;
|
||||
DYLIB_CURRENT_VERSION = 0.8.55;
|
||||
DYLIB_CURRENT_VERSION = 0.8.56;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = "";
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
|
||||
|
@ -1875,10 +1875,10 @@
|
|||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 0.8.55;
|
||||
CURRENT_PROJECT_VERSION = 0.8.56;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
DYLIB_COMPATIBILITY_VERSION = 0.8;
|
||||
DYLIB_CURRENT_VERSION = 0.8.55;
|
||||
DYLIB_CURRENT_VERSION = 0.8.56;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
FRAMEWORK_SEARCH_PATHS = "";
|
||||
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
echo 0.8 8055 0.8.55 0
|
||||
echo 0.8 8056 0.8.56 0
|
||||
# AppVersionStrMajor AppVersion AppVersionStr DevChannel
|
||||
|
|
|
@ -12,7 +12,7 @@ index cfd12d8..8a6f9fb 100644
|
|||
return ALC_FALSE;
|
||||
}
|
||||
diff --git a/Alc/backends/winmm.c b/Alc/backends/winmm.c
|
||||
index 03805ab..77212c2 100644
|
||||
index 03805ab..5035a36 100644
|
||||
--- a/Alc/backends/winmm.c
|
||||
+++ b/Alc/backends/winmm.c
|
||||
@@ -220,7 +220,7 @@ FORCE_ALIGN static int ALCwinmmPlayback_mixerProc(void *arg)
|
||||
|
@ -20,7 +20,7 @@ index 03805ab..77212c2 100644
|
|||
althrd_setname(althrd_current(), MIXER_THREAD_NAME);
|
||||
|
||||
- while(GetMessage(&msg, NULL, 0, 0))
|
||||
+ if (!self->killNow) while (GetMessage(&msg, NULL, 0, 0))
|
||||
+ if (!self->killNow) while(GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
if(msg.message != WOM_DONE)
|
||||
continue;
|
||||
|
@ -29,7 +29,7 @@ index 03805ab..77212c2 100644
|
|||
althrd_setname(althrd_current(), RECORD_THREAD_NAME);
|
||||
|
||||
- while(GetMessage(&msg, NULL, 0, 0))
|
||||
+ if (!self->killNow) while(GetMessage(&msg, NULL, 0, 0))
|
||||
+ if (!self->killNow) while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
if(msg.message != WIM_DATA)
|
||||
continue;
|
||||
|
|
Loading…
Reference in New Issue