mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-01-03 21:32:16 +00:00
channel icon added, views count display done
This commit is contained in:
parent
eaacc1b7e2
commit
77a92c62f7
@ -156,9 +156,9 @@ sysUnlock: sysButton(sysUpd) {
|
||||
img: sprite(207px, 22px, 19px, 19px);
|
||||
}
|
||||
titleBackButton: iconedButton(btnDefIconed) {
|
||||
icon: sprite(113px, 108px, 13px, 20px);
|
||||
icon: sprite(9px, 104px, 13px, 20px);
|
||||
iconPos: point(5px, 9px);
|
||||
downIcon: sprite(113px, 108px, 13px, 20px);
|
||||
downIcon: sprite(9px, 104px, 13px, 20px);
|
||||
downIconPos: point(5px, 10px);
|
||||
|
||||
bgColor: #c4d8e9;
|
||||
@ -259,12 +259,12 @@ cbDefFlat: flatCheckbox {
|
||||
|
||||
disabledCursor: cursor(default);
|
||||
|
||||
imageRect: sprite(140px, 68px, 22px, 22px);
|
||||
chkImageRect: sprite(115px, 68px, 22px, 22px);
|
||||
overImageRect: sprite(190px, 68px, 22px, 22px);
|
||||
chkOverImageRect: sprite(115px, 68px, 22px, 22px);
|
||||
disImageRect: sprite(140px, 43px, 22px, 22px);
|
||||
chkDisImageRect: sprite(115px, 43px, 22px, 22px);
|
||||
imageRect: sprite(142px, 43px, 22px, 22px);
|
||||
chkImageRect: sprite(120px, 68px, 22px, 22px);
|
||||
overImageRect: sprite(142px, 68px, 22px, 22px);
|
||||
chkOverImageRect: sprite(120px, 68px, 22px, 22px);
|
||||
disImageRect: sprite(142px, 43px, 22px, 22px);
|
||||
chkDisImageRect: sprite(120px, 43px, 22px, 22px);
|
||||
|
||||
imagePos: point(0px, 0px);
|
||||
}
|
||||
@ -715,12 +715,14 @@ dlgActiveDblCheckImg: sprite(302px, 36px, 17px, 11px);
|
||||
dlgActiveCheckImg: sprite(320px, 36px, 17px, 11px);
|
||||
dlgSendImg: sprite(122px, 25px, 17px, 11px);
|
||||
dlgActiveSendImg: sprite(142px, 25px, 17px, 11px);
|
||||
dlgChatImg: sprite(302px, 51px, 16px, 11px);
|
||||
dlgActiveChatImg: sprite(322px, 51px, 16px, 11px);
|
||||
|
||||
dlgChatImgLeft: 1px;
|
||||
dlgChatImgTop: 4px;
|
||||
dlgChatImgSkip: 22px;
|
||||
dlgChatImgPos: point(1px, 4px);
|
||||
dlgChatImg: sprite(104px, 26px, 16px, 11px);
|
||||
dlgActiveChatImg: sprite(104px, 37px, 16px, 11px);
|
||||
dlgChannelImgPos: point(2px, 3px);
|
||||
dlgChannelImg: sprite(104px, 0px, 14px, 13px);
|
||||
dlgActiveChannelImg: sprite(104px, 13px, 14px, 13px);
|
||||
dlgImgSkip: 22px;
|
||||
|
||||
dlgCheckLeft: 5px;
|
||||
dlgCheckTop: 4px;
|
||||
@ -757,8 +759,8 @@ topBarBG: white;
|
||||
topBarDuration: 200;
|
||||
topBarForwardPadding: margins(17px, 8px, 39px, 8px);
|
||||
topBarForwardAlpha: 0.6;
|
||||
topBarForwardImg: sprite(45px, 112px, 9px, 16px);
|
||||
topBarBackwardImg: sprite(35px, 112px, 9px, 16px);
|
||||
topBarForwardImg: sprite(31px, 104px, 9px, 16px);
|
||||
topBarBackwardImg: sprite(22px, 104px, 9px, 16px);
|
||||
topBarBackPadding: margins(15px, 7px, 9px, 7px);
|
||||
topBarBackAlpha: 0.8;
|
||||
topBarBackImg: sprite(65px, 112px, 9px, 16px);
|
||||
@ -873,19 +875,30 @@ msgPtr: 8px;
|
||||
msgBG: ':/gui/art/bg.jpg';
|
||||
msgBG0: ':/gui/art/bg0.png';
|
||||
|
||||
msgSendingRect: sprite(260px, 20px, 20px, 20px);
|
||||
msgCheckRect: sprite(320px, 0px, 20px, 20px);
|
||||
msgCheckPos: point(5px, 1px);
|
||||
msgDblCheckRect: sprite(300px, 0px, 20px, 20px);
|
||||
msgSelectCheckRect: sprite(160px, 0px, 20px, 20px);
|
||||
msgSelectDblCheckRect: sprite(140px, 0px, 20px, 20px);
|
||||
msgCheckPos: point(3px, 1px);
|
||||
msgSendingImg: sprite(260px, 20px, 20px, 20px);
|
||||
msgCheckImg: sprite(320px, 0px, 20px, 20px);
|
||||
msgDblCheckImg: sprite(300px, 0px, 20px, 20px);
|
||||
msgSelectCheckImg: sprite(162px, 0px, 20px, 20px);
|
||||
msgSelectDblCheckImg: sprite(142px, 0px, 20px, 20px);
|
||||
msgViewsPos: point(0px, -4px);
|
||||
msgViewsImg: sprite(104px, 48px, 16px, 11px);
|
||||
msgSelectViewsImg: sprite(104px, 70px, 16px, 11px);
|
||||
msgOutViewsImg: sprite(104px, 81px, 16px, 11px);
|
||||
msgSelectOutViewsImg: sprite(104px, 92px, 16px, 11px);
|
||||
msgSendingViewsImg: sprite(104px, 103px, 16px, 11px);
|
||||
msgSendingOutViewsImg: sprite(104px, 125px, 16px, 11px);
|
||||
msgInvSendingImg: sprite(320px, 65px, 20px, 20px);
|
||||
msgInvCheckImg: sprite(280px, 20px, 20px, 20px);
|
||||
msgInvDblCheckImg: sprite(300px, 65px, 20px, 20px);
|
||||
msgInvViewsImg: sprite(104px, 59px, 16px, 11px);
|
||||
msgInvSendingViewsImg: sprite(104px, 114px, 16px, 11px);
|
||||
|
||||
msgDateSpace: 19px;
|
||||
msgDateCheckSpace: 4px;
|
||||
msgDateViewsSpace: 11px;
|
||||
msgDateDelta: point(2px, 5px);
|
||||
|
||||
msgImgSendingRect: sprite(320px, 65px, 20px, 20px);
|
||||
msgImgCheckRect: sprite(280px, 20px, 20px, 20px);
|
||||
msgImgDblCheckRect: sprite(300px, 65px, 20px, 20px);
|
||||
msgDateImgDelta: 4px;
|
||||
msgDateImgColor: #fff;
|
||||
msgDateImgBg: #00000054;
|
||||
@ -1027,8 +1040,8 @@ btnAttachDocument: iconedButton(btnDefIconed) {
|
||||
height: 46px;
|
||||
}
|
||||
btnAttachPhoto: iconedButton(btnAttachDocument) {
|
||||
icon: sprite(113px, 0px, 24px, 24px);
|
||||
downIcon: sprite(113px, 0px, 24px, 24px);
|
||||
icon: sprite(118px, 0px, 24px, 24px);
|
||||
downIcon: sprite(118px, 0px, 24px, 24px);
|
||||
}
|
||||
btnAttachEmoji: iconedButton(btnAttachDocument) {
|
||||
overBgColor: white;
|
||||
@ -1057,6 +1070,8 @@ btnBotKbHide: iconedButton(btnAttachEmoji) {
|
||||
downIcon: sprite(373px, 95px, 23px, 14px);
|
||||
downIconPos: point(5px, 17px);
|
||||
}
|
||||
broadcastToggle: sprite(40px, 104px, 22px, 21px);
|
||||
broadcastToggleOn: sprite(40px, 125px, 22px, 21px);
|
||||
btnRecordAudio: sprite(379px, 390px, 16px, 24px);
|
||||
btnRecordAudioActive: sprite(379px, 366px, 16px, 24px);
|
||||
recordSignalColor: #f17077;
|
||||
@ -1258,7 +1273,7 @@ profileListStatusBottom: 6px;
|
||||
profileHoverBG: #f5f5f5;
|
||||
profileActiveBG: #6294b9;
|
||||
profileSubFont: font(fsize);
|
||||
profileCheckRect: sprite(88px, 108px, 24px, 24px);
|
||||
profileCheckRect: sprite(78px, 114px, 24px, 24px);
|
||||
profileCheckActiveRect: sprite(128px, 108px, 24px, 24px);
|
||||
profileCheckDeltaX: 18px;
|
||||
profileCheckDeltaY: 1px;
|
||||
@ -1419,7 +1434,7 @@ contactsClose: flatButton {
|
||||
font: font(16px);
|
||||
overFont: font(16px);
|
||||
}
|
||||
contactsImg: sprite(45px, 112px, 9px, 16px);
|
||||
contactsImg: sprite(31px, 104px, 9px, 16px);
|
||||
contactsAdd: flatButton(topBarButton) {
|
||||
width: -40px;
|
||||
height: 52px;
|
||||
@ -1429,7 +1444,7 @@ contactsAdd: flatButton(topBarButton) {
|
||||
downTextTop: 19px;
|
||||
}
|
||||
|
||||
aboutIcon: sprite(2px, 2px, 104px, 104px);
|
||||
aboutIcon: sprite(0px, 0px, 104px, 104px);
|
||||
aboutIconTop: 28px;
|
||||
aboutWidth: 448px;
|
||||
aboutHeight: 441px;
|
||||
@ -1499,8 +1514,8 @@ dropdownAttachDocument: iconedButton(btnAttachDocument) {
|
||||
downTextPos: point(50px, 14px);
|
||||
}
|
||||
dropdownAttachPhoto: iconedButton(dropdownAttachDocument) {
|
||||
icon: sprite(113px, 0px, 24px, 24px);
|
||||
downIcon: sprite(113px, 0px, 24px, 24px);
|
||||
icon: sprite(118px, 0px, 24px, 24px);
|
||||
downIcon: sprite(118px, 0px, 24px, 24px);
|
||||
}
|
||||
dropdownMediaPhotos: iconedButton(dropdownAttachPhoto) {
|
||||
width: 200px;
|
||||
@ -1552,7 +1567,7 @@ dpiSlider: slider {
|
||||
thikness: 2px;
|
||||
|
||||
width: 260px;
|
||||
bar: sprite(6px, 110px, 9px, 22px);
|
||||
bar: sprite(0px, 104px, 9px, 22px);
|
||||
}
|
||||
dpiActive: black;
|
||||
dpiInactive: #999;
|
||||
@ -1738,7 +1753,7 @@ emojiSwitchColor: #42a8db;
|
||||
|
||||
stickerPanSize: size(64px, 64px);
|
||||
stickerPanPadding: 11px;
|
||||
stickerPanDelete: sprite(123px, 132px, 12px, 12px);
|
||||
stickerPanDelete: sprite(128px, 132px, 12px, 12px);
|
||||
stickerPanDeleteOpacity: 0.5;
|
||||
stickerIconPadding: 3px;
|
||||
stickerIconOpacity: 0.7;
|
||||
@ -1880,7 +1895,7 @@ medviewSaveMsgShown: 2000;
|
||||
medviewSaveMsgHiding: 2500;
|
||||
medviewSaveMsg: #000000b2;
|
||||
|
||||
mvTransparentBrush: sprite(113px, 128px, 8px, 8px);
|
||||
mvTransparentBrush: sprite(9px, 124px, 8px, 8px);
|
||||
|
||||
overviewPhotoSkip: 10px;
|
||||
overviewPhotoMinSize: 100px;
|
||||
|
@ -746,7 +746,7 @@ namespace App {
|
||||
}
|
||||
}
|
||||
|
||||
void checkEntitiesUpdate(const MTPDmessage &m) {
|
||||
void checkEntitiesAndViewsUpdate(const MTPDmessage &m) {
|
||||
PeerId peerId = peerFromMTP(m.vto_id);
|
||||
if (m.has_from_id() && peerToUser(peerId) == MTP::authedId()) {
|
||||
peerId = peerFromUser(m.vfrom_id);
|
||||
@ -761,6 +761,8 @@ namespace App {
|
||||
existing->history()->addToOverview(existing, OverviewLinks);
|
||||
}
|
||||
}
|
||||
|
||||
existing->setViewsCount(m.has_views() ? m.vviews.v : -1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -774,7 +776,7 @@ namespace App {
|
||||
const MTPDmessage &d(msg.c_message());
|
||||
msgsIds.insert((uint64(uint32(d.vid.v)) << 32) | uint64(i), i);
|
||||
if (msgsState == 1) { // new message, index my forwarded messages to links overview
|
||||
checkEntitiesUpdate(d);
|
||||
checkEntitiesAndViewsUpdate(d);
|
||||
}
|
||||
} break;
|
||||
case mtpc_messageEmpty: msgsIds.insert((uint64(uint32(msg.c_messageEmpty().vid.v)) << 32) | uint64(i), i); break;
|
||||
|
@ -102,7 +102,7 @@ namespace App {
|
||||
void feedParticipants(const MTPChatParticipants &p, bool requestBotInfos, bool emitPeerUpdated = true);
|
||||
void feedParticipantAdd(const MTPDupdateChatParticipantAdd &d, bool emitPeerUpdated = true);
|
||||
void feedParticipantDelete(const MTPDupdateChatParticipantDelete &d, bool emitPeerUpdated = true);
|
||||
void checkEntitiesUpdate(const MTPDmessage &m);
|
||||
void checkEntitiesAndViewsUpdate(const MTPDmessage &m);
|
||||
void feedMsgs(const MTPVector<MTPMessage> &msgs, int msgsState = 0); // 2 - new read message, 1 - new unread message, 0 - not new message, -1 - searched message
|
||||
void feedInboxRead(const PeerId &peer, MsgId upTo);
|
||||
void feedOutboxRead(const PeerId &peer, MsgId upTo);
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 172 KiB |
Binary file not shown.
Before Width: | Height: | Size: 222 KiB After Width: | Height: | Size: 229 KiB |
@ -1285,7 +1285,7 @@ void CreateGroupBox::onCreate() {
|
||||
_create.setDisabled(true);
|
||||
_name.setDisabled(true);
|
||||
if (_creatingChannel) {
|
||||
_createRequestId = MTP::send(MTPmessages_CreateChannel(MTP_int(MTPmessages_CreateChannel_flag_broadcast), MTP_string(_name.text()), _users), rpcDone(&CreateGroupBox::created), rpcFail(&CreateGroupBox::failed));
|
||||
_createRequestId = MTP::send(MTPmessages_CreateChannel(MTP_int(MTPmessages_CreateChannel_flag_broadcast), MTP_string(_name.text()), MTP_string(""), _users), rpcDone(&CreateGroupBox::created), rpcFail(&CreateGroupBox::failed));
|
||||
} else {
|
||||
_createRequestId = MTP::send(MTPmessages_CreateChat(_users, MTP_string(_name.text())), rpcDone(&CreateGroupBox::created), rpcFail(&CreateGroupBox::failed));
|
||||
}
|
||||
|
@ -241,9 +241,12 @@ void DialogsListWidget::peopleResultPaint(PeerData *peer, QPainter &p, int32 w,
|
||||
QRect rectForName(nameleft, st::dlgPaddingVer + st::dlgNameTop, namewidth, st::msgNameFont->height);
|
||||
|
||||
// draw chat icon
|
||||
if (history->peer->isChat()) { // CHANNELS_UI
|
||||
p.drawPixmap(QPoint(rectForName.left() + st::dlgChatImgLeft, rectForName.top() + st::dlgChatImgTop), App::sprite(), (act ? st::dlgActiveChatImg : st::dlgChatImg));
|
||||
rectForName.setLeft(rectForName.left() + st::dlgChatImgSkip);
|
||||
if (history->peer->isChat()) {
|
||||
p.drawPixmap(QPoint(rectForName.left() + st::dlgChatImgPos.x(), rectForName.top() + st::dlgChatImgPos.y()), App::sprite(), (act ? st::dlgActiveChatImg : st::dlgChatImg));
|
||||
rectForName.setLeft(rectForName.left() + st::dlgImgSkip);
|
||||
} else if (history->peer->isChannel()) {
|
||||
p.drawPixmap(QPoint(rectForName.left() + st::dlgChannelImgPos.x(), rectForName.top() + st::dlgChannelImgPos.y()), App::sprite(), (act ? st::dlgActiveChannelImg : st::dlgChannelImg));
|
||||
rectForName.setLeft(rectForName.left() + st::dlgImgSkip);
|
||||
}
|
||||
|
||||
QRect tr(nameleft, st::dlgPaddingVer + st::dlgFont->height + st::dlgSep, namewidth, st::dlgFont->height);
|
||||
@ -281,9 +284,12 @@ void DialogsListWidget::searchInPeerPaint(QPainter &p, int32 w) const {
|
||||
QRect rectForName(nameleft, st::dlgPaddingVer + st::dlgNameTop, namewidth, st::msgNameFont->height);
|
||||
|
||||
// draw chat icon
|
||||
if (_searchInPeer->isChat()) { // CHANNELS_UI
|
||||
p.drawPixmap(QPoint(rectForName.left() + st::dlgChatImgLeft, rectForName.top() + st::dlgChatImgTop), App::sprite(), st::dlgChatImg);
|
||||
rectForName.setLeft(rectForName.left() + st::dlgChatImgSkip);
|
||||
if (_searchInPeer->isChat()) {
|
||||
p.drawPixmap(QPoint(rectForName.left() + st::dlgChatImgPos.x(), rectForName.top() + st::dlgChatImgPos.y()), App::sprite(), st::dlgChatImg);
|
||||
rectForName.setLeft(rectForName.left() + st::dlgImgSkip);
|
||||
} else if (_searchInPeer->isChannel()) {
|
||||
p.drawPixmap(QPoint(rectForName.left() + st::dlgChannelImgPos.x(), rectForName.top() + st::dlgChannelImgPos.y()), App::sprite(), st::dlgChannelImg);
|
||||
rectForName.setLeft(rectForName.left() + st::dlgImgSkip);
|
||||
}
|
||||
|
||||
QRect tr(nameleft, st::dlgPaddingVer + st::dlgFont->height + st::dlgSep, namewidth, st::dlgFont->height);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -68,7 +68,7 @@ struct DialogRow {
|
||||
DialogRow(History *history = 0, DialogRow *prev = 0, DialogRow *next = 0, int32 pos = 0) : prev(prev), next(next), history(history), pos(pos), attached(0) {
|
||||
}
|
||||
|
||||
void paint(QPainter &p, int32 w, bool act, bool sel) const;
|
||||
void paint(Painter &p, int32 w, bool act, bool sel) const;
|
||||
|
||||
DialogRow *prev, *next;
|
||||
History *history;
|
||||
@ -80,7 +80,7 @@ struct FakeDialogRow {
|
||||
FakeDialogRow(HistoryItem *item) : _item(item), _cacheFor(0), _cache(st::dlgRichMinWidth) {
|
||||
}
|
||||
|
||||
void paint(QPainter &p, int32 w, bool act, bool sel) const;
|
||||
void paint(Painter &p, int32 w, bool act, bool sel) const;
|
||||
|
||||
HistoryItem *_item;
|
||||
mutable const HistoryItem *_cacheFor;
|
||||
@ -293,7 +293,7 @@ struct History : public QList<HistoryBlock*> {
|
||||
mutable const HistoryItem *textCachedFor; // cache
|
||||
mutable Text lastItemTextCache;
|
||||
|
||||
void paintDialog(QPainter &p, int32 w, bool sel) const;
|
||||
void paintDialog(Painter &p, int32 w, bool sel) const;
|
||||
|
||||
typedef QMap<QChar, DialogRow*> DialogLinks;
|
||||
DialogLinks dialogs;
|
||||
@ -341,7 +341,7 @@ struct DialogsList {
|
||||
}
|
||||
}
|
||||
|
||||
void paint(QPainter &p, int32 w, int32 hFrom, int32 hTo, PeerData *act, PeerData *sel) const {
|
||||
void paint(Painter &p, int32 w, int32 hFrom, int32 hTo, PeerData *act, PeerData *sel) const {
|
||||
adjustCurrent(hFrom, st::dlgHeight);
|
||||
|
||||
DialogRow *drawFrom = current;
|
||||
@ -662,6 +662,11 @@ enum HistoryCursorState {
|
||||
HistoryInDateCursorState
|
||||
};
|
||||
|
||||
enum InfoDisplayType {
|
||||
InfoDisplayDefault,
|
||||
InfoDisplayOverImage,
|
||||
};
|
||||
|
||||
class HistoryMedia;
|
||||
class HistoryItem : public HistoryElem {
|
||||
public:
|
||||
@ -676,7 +681,7 @@ public:
|
||||
|
||||
virtual void initDimensions() = 0;
|
||||
virtual int32 resize(int32 width) = 0; // return new height
|
||||
virtual void draw(QPainter &p, uint32 selection) const = 0;
|
||||
virtual void draw(Painter &p, uint32 selection) const = 0;
|
||||
|
||||
History *history() {
|
||||
return _history;
|
||||
@ -728,7 +733,7 @@ public:
|
||||
return _from->isChannel();
|
||||
}
|
||||
virtual bool needCheck() const {
|
||||
return out() && !fromChannel();
|
||||
return out() && (!fromChannel() || id <= 0);
|
||||
}
|
||||
virtual bool hasPoint(int32 x, int32 y) const {
|
||||
return false;
|
||||
@ -764,7 +769,11 @@ public:
|
||||
return inDialogsText();
|
||||
}
|
||||
|
||||
virtual void drawInDialog(QPainter &p, const QRect &r, bool act, const HistoryItem *&cacheFor, Text &cache) const = 0;
|
||||
virtual void drawInfo(Painter &p, int32 right, int32 bottom, bool selected, InfoDisplayType type) const {
|
||||
}
|
||||
virtual void setViewsCount(int32 count) {
|
||||
}
|
||||
virtual void drawInDialog(Painter &p, const QRect &r, bool act, const HistoryItem *&cacheFor, Text &cache) const = 0;
|
||||
virtual QString notificationHeader() const {
|
||||
return QString();
|
||||
}
|
||||
@ -793,12 +802,39 @@ public:
|
||||
virtual bool textHasLinks() {
|
||||
return false;
|
||||
}
|
||||
virtual QString time() const {
|
||||
return QString();
|
||||
}
|
||||
virtual int32 timeWidth(bool forText) const {
|
||||
|
||||
virtual int32 infoWidth() const {
|
||||
return 0;
|
||||
}
|
||||
virtual int32 timeLeft() const {
|
||||
return 0;
|
||||
}
|
||||
virtual QString timeText() const {
|
||||
return QString();
|
||||
}
|
||||
virtual int32 timeWidth() const {
|
||||
return 0;
|
||||
}
|
||||
virtual QString viewsText() const {
|
||||
return QString();
|
||||
}
|
||||
virtual int32 viewsWidth() const {
|
||||
return 0;
|
||||
}
|
||||
virtual bool pointInTime(int32 right, int32 bottom, int32 x, int32 y, InfoDisplayType type) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
int32 skipBlockWidth() const {
|
||||
return st::msgDateSpace + infoWidth() - st::msgDateDelta.x();
|
||||
}
|
||||
int32 skipBlockHeight() const {
|
||||
return st::msgDateFont->height - st::msgDateDelta.y();
|
||||
}
|
||||
QString skipBlock() const {
|
||||
return textcmdSkipBlock(skipBlockWidth(), skipBlockHeight());
|
||||
}
|
||||
|
||||
virtual bool animating() const {
|
||||
return false;
|
||||
}
|
||||
@ -886,7 +922,7 @@ public:
|
||||
return _height;
|
||||
}
|
||||
virtual void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const HistoryItem *parent, int32 width = -1) const = 0;
|
||||
virtual void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const = 0;
|
||||
virtual void draw(Painter &p, const HistoryItem *parent, bool selected, int32 width = -1) const = 0;
|
||||
virtual bool uploading() const {
|
||||
return false;
|
||||
}
|
||||
@ -935,7 +971,7 @@ public:
|
||||
void init();
|
||||
void initDimensions(const HistoryItem *parent);
|
||||
|
||||
void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
void draw(Painter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
int32 resize(int32 width, const HistoryItem *parent);
|
||||
HistoryMediaType type() const {
|
||||
return MediaTypePhoto;
|
||||
@ -985,7 +1021,7 @@ public:
|
||||
HistoryVideo(const MTPDvideo &video, const QString &caption, HistoryItem *parent);
|
||||
void initDimensions(const HistoryItem *parent);
|
||||
|
||||
void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
void draw(Painter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
int32 resize(int32 width, const HistoryItem *parent);
|
||||
HistoryMediaType type() const {
|
||||
return MediaTypeVideo;
|
||||
@ -1027,7 +1063,7 @@ public:
|
||||
HistoryAudio(const MTPDaudio &audio);
|
||||
void initDimensions(const HistoryItem *parent);
|
||||
|
||||
void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
void draw(Painter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
HistoryMediaType type() const {
|
||||
return MediaTypeAudio;
|
||||
}
|
||||
@ -1065,7 +1101,7 @@ public:
|
||||
HistoryDocument(DocumentData *document);
|
||||
void initDimensions(const HistoryItem *parent);
|
||||
|
||||
void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
void draw(Painter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
int32 resize(int32 width, const HistoryItem *parent);
|
||||
HistoryMediaType type() const {
|
||||
return MediaTypeDocument;
|
||||
@ -1094,7 +1130,7 @@ public:
|
||||
}
|
||||
ImagePtr replyPreview();
|
||||
|
||||
void drawInPlaylist(QPainter &p, const HistoryItem *parent, bool selected, bool over, int32 width) const;
|
||||
void drawInPlaylist(Painter &p, const HistoryItem *parent, bool selected, bool over, int32 width) const;
|
||||
TextLinkPtr linkInPlaylist();
|
||||
|
||||
private:
|
||||
@ -1116,7 +1152,7 @@ public:
|
||||
HistorySticker(DocumentData *document);
|
||||
void initDimensions(const HistoryItem *parent);
|
||||
|
||||
void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
void draw(Painter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
int32 resize(int32 width, const HistoryItem *parent);
|
||||
HistoryMediaType type() const {
|
||||
return MediaTypeSticker;
|
||||
@ -1152,7 +1188,7 @@ public:
|
||||
HistoryContact(int32 userId, const QString &first, const QString &last, const QString &phone);
|
||||
void initDimensions(const HistoryItem *parent);
|
||||
|
||||
void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width) const;
|
||||
void draw(Painter &p, const HistoryItem *parent, bool selected, int32 width) const;
|
||||
HistoryMediaType type() const {
|
||||
return MediaTypeContact;
|
||||
}
|
||||
@ -1178,7 +1214,7 @@ public:
|
||||
HistoryWebPage(WebPageData *data);
|
||||
void initDimensions(const HistoryItem *parent);
|
||||
|
||||
void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
void draw(Painter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
bool isDisplayed() const {
|
||||
return !data->pendingTill;
|
||||
}
|
||||
@ -1285,7 +1321,7 @@ public:
|
||||
int32 fullHeight() const;
|
||||
void initDimensions(const HistoryItem *parent);
|
||||
|
||||
void draw(QPainter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
void draw(Painter &p, const HistoryItem *parent, bool selected, int32 width = -1) const;
|
||||
int32 resize(int32 width, const HistoryItem *parent);
|
||||
HistoryMediaType type() const {
|
||||
return MediaTypeImageLink;
|
||||
@ -1311,9 +1347,8 @@ class HistoryMessage : public HistoryItem {
|
||||
public:
|
||||
|
||||
HistoryMessage(History *history, HistoryBlock *block, const MTPDmessage &msg);
|
||||
HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, const LinksInText &links, const MTPMessageMedia *media);
|
||||
HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, const LinksInText &links, HistoryMedia *media);
|
||||
HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, DocumentData *doc);
|
||||
HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, const QString &msg, const LinksInText &links, HistoryMedia *media); // local forwarded
|
||||
HistoryMessage(History *history, HistoryBlock *block, MsgId msgId, int32 flags, QDateTime date, int32 from, DocumentData *doc); // local sticker and reply sticker
|
||||
|
||||
void initTime();
|
||||
void initMedia(const MTPMessageMedia *media, QString ¤tText);
|
||||
@ -1328,11 +1363,14 @@ public:
|
||||
|
||||
bool uploading() const;
|
||||
|
||||
void draw(QPainter &p, uint32 selection) const;
|
||||
virtual void drawMessageText(QPainter &p, const QRect &trect, uint32 selection) const;
|
||||
void drawInfo(Painter &p, int32 right, int32 bottom, bool selected, InfoDisplayType type) const;
|
||||
void setViewsCount(int32 count);
|
||||
void draw(Painter &p, uint32 selection) const;
|
||||
virtual void drawMessageText(Painter &p, const QRect &trect, uint32 selection) const;
|
||||
|
||||
int32 resize(int32 width);
|
||||
bool hasPoint(int32 x, int32 y) const;
|
||||
bool pointInTime(int32 right, int32 bottom, int32 x, int32 y, InfoDisplayType type) const;
|
||||
|
||||
void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const;
|
||||
virtual void getStateFromMessageText(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y, const QRect &r) const;
|
||||
@ -1342,7 +1380,7 @@ public:
|
||||
return _text.adjustSelection(from, to, type);
|
||||
}
|
||||
|
||||
void drawInDialog(QPainter &p, const QRect &r, bool act, const HistoryItem *&cacheFor, Text &cache) const;
|
||||
void drawInDialog(Painter &p, const QRect &r, bool act, const HistoryItem *&cacheFor, Text &cache) const;
|
||||
QString notificationHeader() const;
|
||||
QString notificationText() const;
|
||||
|
||||
@ -1361,20 +1399,35 @@ public:
|
||||
void getTextWithLinks(QString &text, LinksInText &links);
|
||||
bool textHasLinks();
|
||||
|
||||
QString time() const {
|
||||
return _time;
|
||||
}
|
||||
int32 timeWidth(bool forText) const {
|
||||
int32 infoWidth() const {
|
||||
int32 result = _timeWidth;
|
||||
if (forText) {
|
||||
result += st::msgDateSpace - st::msgDateDelta.x();
|
||||
if (fromChannel()) {
|
||||
} else if (out()) {
|
||||
result += st::msgDateCheckSpace + st::msgCheckRect.pxWidth();
|
||||
}
|
||||
if (!_viewsText.isEmpty()) {
|
||||
result += st::msgDateViewsSpace + _viewsWidth + st::msgDateCheckSpace + st::msgViewsImg.pxWidth();
|
||||
}
|
||||
if (out() && !fromChannel()) {
|
||||
result += st::msgDateCheckSpace + st::msgCheckImg.pxWidth();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
int32 timeLeft() const {
|
||||
int32 result = 0;
|
||||
if (!_viewsText.isEmpty()) {
|
||||
result += st::msgDateViewsSpace + _viewsWidth + st::msgDateCheckSpace + st::msgViewsImg.pxWidth();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
QString timeText() const {
|
||||
return _timeText;
|
||||
}
|
||||
int32 timeWidth() const {
|
||||
return _timeWidth;
|
||||
}
|
||||
QString viewsText() const {
|
||||
return _viewsText;
|
||||
}
|
||||
int32 viewsWidth() const {
|
||||
return _viewsWidth;
|
||||
}
|
||||
virtual bool animating() const {
|
||||
return _media ? _media->animating() : false;
|
||||
}
|
||||
@ -1402,8 +1455,11 @@ protected:
|
||||
int32 _textWidth, _textHeight;
|
||||
|
||||
HistoryMedia *_media;
|
||||
QString _time;
|
||||
QString _timeText;
|
||||
int32 _timeWidth;
|
||||
|
||||
QString _viewsText;
|
||||
int32 _views, _viewsWidth;
|
||||
|
||||
};
|
||||
|
||||
@ -1416,9 +1472,9 @@ public:
|
||||
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;
|
||||
void draw(Painter &p, uint32 selection) const;
|
||||
void drawForwardedFrom(Painter &p, int32 x, int32 y, int32 w, bool selected) const;
|
||||
void drawMessageText(Painter &p, const QRect &trect, uint32 selection) const;
|
||||
int32 resize(int32 width);
|
||||
bool hasPoint(int32 x, int32 y) const;
|
||||
void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const;
|
||||
@ -1469,9 +1525,9 @@ public:
|
||||
HistoryItem *replyToMessage() const;
|
||||
void replyToReplaced(HistoryItem *oldItem, HistoryItem *newItem);
|
||||
|
||||
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;
|
||||
void draw(Painter &p, uint32 selection) const;
|
||||
void drawReplyTo(Painter &p, int32 x, int32 y, int32 w, bool selected, bool likeService = false) const;
|
||||
void drawMessageText(Painter &p, const QRect &trect, uint32 selection) const;
|
||||
int32 resize(int32 width);
|
||||
bool hasPoint(int32 x, int32 y) const;
|
||||
void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const;
|
||||
@ -1512,7 +1568,7 @@ public:
|
||||
|
||||
void initDimensions();
|
||||
|
||||
void draw(QPainter &p, uint32 selection) const;
|
||||
void draw(Painter &p, uint32 selection) const;
|
||||
int32 resize(int32 width);
|
||||
bool hasPoint(int32 x, int32 y) const;
|
||||
void getState(TextLinkPtr &lnk, HistoryCursorState &state, int32 x, int32 y) const;
|
||||
@ -1521,7 +1577,7 @@ public:
|
||||
return _text.adjustSelection(from, to, type);
|
||||
}
|
||||
|
||||
void drawInDialog(QPainter &p, const QRect &r, bool act, const HistoryItem *&cacheFor, Text &cache) const;
|
||||
void drawInDialog(Painter &p, const QRect &r, bool act, const HistoryItem *&cacheFor, Text &cache) const;
|
||||
QString notificationText() const;
|
||||
|
||||
bool needCheck() const {
|
||||
@ -1584,10 +1640,10 @@ public:
|
||||
|
||||
void setCount(int32 count);
|
||||
|
||||
void draw(QPainter &p, uint32 selection) const;
|
||||
void draw(Painter &p, uint32 selection) const;
|
||||
int32 resize(int32 width);
|
||||
|
||||
void drawInDialog(QPainter &p, const QRect &r, bool act, const HistoryItem *&cacheFor, Text &cache) const;
|
||||
void drawInDialog(Painter &p, const QRect &r, bool act, const HistoryItem *&cacheFor, Text &cache) const;
|
||||
QString notificationText() const;
|
||||
|
||||
QString selectedText(uint32 selection) const {
|
||||
|
@ -99,7 +99,7 @@ void HistoryList::paintEvent(QPaintEvent *e) {
|
||||
QRect r(e->rect());
|
||||
bool trivial = (rect() == r);
|
||||
|
||||
QPainter p(this);
|
||||
Painter p(this);
|
||||
if (!trivial) {
|
||||
p.setClipRect(r);
|
||||
}
|
||||
@ -809,14 +809,18 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
|
||||
}
|
||||
if (isUponSelected > 1) {
|
||||
_menu->addAction(lang(lng_context_forward_selected), historyWidget, SLOT(onForwardSelected()));
|
||||
_menu->addAction(lang(lng_context_delete_selected), historyWidget, SLOT(onDeleteSelected()));
|
||||
if ((!hist->peer->isChannel() || hist->peer->asChannel()->adminned)) {
|
||||
_menu->addAction(lang(lng_context_delete_selected), historyWidget, SLOT(onDeleteSelected()));
|
||||
}
|
||||
_menu->addAction(lang(lng_context_clear_selection), historyWidget, SLOT(onClearSelected()));
|
||||
} else if (App::hoveredLinkItem()) {
|
||||
if (isUponSelected != -2 && (!hist->peer->isChannel() || hist->peer->asChannel()->adminned)) {
|
||||
if (isUponSelected != -2) {
|
||||
if (dynamic_cast<HistoryMessage*>(App::hoveredLinkItem()) && App::hoveredLinkItem()->id > 0) {
|
||||
_menu->addAction(lang(lng_context_forward_msg), historyWidget, SLOT(forwardMessage()))->setEnabled(true);
|
||||
}
|
||||
_menu->addAction(lang(lng_context_delete_msg), historyWidget, SLOT(deleteMessage()))->setEnabled(true);
|
||||
if ((!hist->peer->isChannel() || hist->peer->asChannel()->adminned)) {
|
||||
_menu->addAction(lang(lng_context_delete_msg), historyWidget, SLOT(deleteMessage()))->setEnabled(true);
|
||||
}
|
||||
}
|
||||
if (App::hoveredLinkItem()->id > 0 && (!hist->peer->isChannel() || hist->peer->asChannel()->adminned)) {
|
||||
_menu->addAction(lang(lng_context_select_msg), historyWidget, SLOT(selectMessage()))->setEnabled(true);
|
||||
@ -825,7 +829,7 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
|
||||
}
|
||||
} else { // maybe cursor on some text history item?
|
||||
bool canDelete = (item && item->itemType() == HistoryItem::MsgType) && (!hist->peer->isChannel() || hist->peer->asChannel()->adminned);
|
||||
bool canForward = canDelete && (item->id > 0) && !item->serviceMsg();
|
||||
bool canForward = (item && item->itemType() == HistoryItem::MsgType) && (item->id > 0) && !item->serviceMsg();
|
||||
|
||||
HistoryMessage *msg = dynamic_cast<HistoryMessage*>(item);
|
||||
HistoryServiceMsg *srv = dynamic_cast<HistoryServiceMsg*>(item);
|
||||
@ -878,7 +882,9 @@ void HistoryList::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
|
||||
if (isUponSelected > 1) {
|
||||
if (!_menu) _menu = new ContextMenu(this);
|
||||
_menu->addAction(lang(lng_context_forward_selected), historyWidget, SLOT(onForwardSelected()));
|
||||
_menu->addAction(lang(lng_context_delete_selected), historyWidget, SLOT(onDeleteSelected()));
|
||||
if ((!hist->peer->isChannel() || hist->peer->asChannel()->adminned)) {
|
||||
_menu->addAction(lang(lng_context_delete_selected), historyWidget, SLOT(onDeleteSelected()));
|
||||
}
|
||||
_menu->addAction(lang(lng_context_clear_selection), historyWidget, SLOT(onClearSelected()));
|
||||
} else if (item && ((isUponSelected != -2 && (canForward || canDelete)) || item->id > 0)) {
|
||||
if (!_menu) _menu = new ContextMenu(this);
|
||||
@ -3647,10 +3653,11 @@ void HistoryWidget::shareContact(const PeerId &peer, const QString &phone, const
|
||||
bool fromChannelName = p->isChannel();
|
||||
if (fromChannelName) {
|
||||
sendFlags |= MTPmessages_SendMessage_flag_broadcast;
|
||||
flags |= MTPDmessage::flag_views;
|
||||
} 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), 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->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, MTP_int(1)));
|
||||
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);
|
||||
@ -4552,16 +4559,17 @@ void HistoryWidget::confirmSendImage(const ReadyLocalMedia &img) {
|
||||
if (img.replyTo) flags |= MTPDmessage::flag_reply_to_msg_id;
|
||||
bool fromChannelName = h->peer->isChannel();
|
||||
if (fromChannelName) {
|
||||
flags |= MTPDmessage::flag_views;
|
||||
} else {
|
||||
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), MTPPeer(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaPhoto(img.photo, MTP_string("")), MTPnullMarkup, MTPnullEntities, MTPint()));
|
||||
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, MTP_int(1)));
|
||||
} 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), MTPPeer(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaDocument(img.document), MTPnullMarkup, MTPnullEntities, MTPint()));
|
||||
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, MTP_int(1)));
|
||||
} 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), MTPPeer(), MTPint(), MTP_int(img.replyTo), MTP_int(unixtime()), MTP_string(""), MTP_messageMediaAudio(img.audio), MTPnullMarkup, MTPnullEntities, MTPint()));
|
||||
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, MTP_int(1)));
|
||||
}
|
||||
|
||||
if (_peer && img.peer == _peer->id) {
|
||||
@ -5557,7 +5565,7 @@ void HistoryWidget::onForwardSelected() {
|
||||
}
|
||||
|
||||
void HistoryWidget::onDeleteSelected() {
|
||||
if (!_list) return;
|
||||
if (!_list || (peer()->isChannel() && !peer()->asChannel()->adminned)) return;
|
||||
|
||||
SelectedItemSet sel;
|
||||
_list->fillSelectedItems(sel);
|
||||
|
@ -1123,11 +1123,12 @@ void MainWidget::sendPreparedText(History *hist, const QString &text, MsgId repl
|
||||
bool fromChannelName = hist->peer->isChannel();
|
||||
if (fromChannelName) {
|
||||
sendFlags |= MTPmessages_SendMessage_flag_broadcast;
|
||||
flags |= MTPDmessage::flag_views;
|
||||
} else {
|
||||
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), MTPPeer(), MTPint(), MTP_int(replyTo), MTP_int(unixtime()), msgText, media, MTPnullMarkup, localEntities, MTPint()));
|
||||
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, MTP_int(1)));
|
||||
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);
|
||||
}
|
||||
|
||||
@ -3801,7 +3802,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) {
|
||||
return;
|
||||
}
|
||||
if (d.vmessage.type() == mtpc_message) { // index forwarded messages to links overview
|
||||
App::checkEntitiesUpdate(d.vmessage.c_message());
|
||||
App::checkEntitiesAndViewsUpdate(d.vmessage.c_message());
|
||||
}
|
||||
|
||||
HistoryItem *item = App::histories().addToBack(d.vmessage);
|
||||
@ -4102,7 +4103,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) {
|
||||
}
|
||||
}
|
||||
if (d.vmessage.type() == mtpc_message) { // index forwarded messages to links overview
|
||||
App::checkEntitiesUpdate(d.vmessage.c_message());
|
||||
App::checkEntitiesAndViewsUpdate(d.vmessage.c_message());
|
||||
}
|
||||
|
||||
HistoryItem *item = App::histories().addToBack(d.vmessage);
|
||||
@ -4149,7 +4150,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) {
|
||||
const MTPDupdateChannelMessageViews &d(update.c_updateChannelMessageViews());
|
||||
if (HistoryItem *item = App::histItemById(peerToChannel(peerFromMTP(d.vpeer)), d.vid.v)) {
|
||||
if (item->from()->id == peerFromMTP(d.vpeer) && item->channelId() != NoChannel) {
|
||||
// CHANNELS_TODO
|
||||
item->setViewsCount(d.vviews.v);
|
||||
}
|
||||
}
|
||||
} break;
|
||||
|
@ -2784,6 +2784,19 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP
|
||||
}
|
||||
break;
|
||||
|
||||
case mtpc_updateChannel:
|
||||
if (stage) {
|
||||
to.add(",\n").addSpaces(lev);
|
||||
} else {
|
||||
to.add("{ updateChannel");
|
||||
to.add("\n").addSpaces(lev);
|
||||
}
|
||||
switch (stage) {
|
||||
case 0: to.add(" channel_id: "); ++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_updateChannelGroup:
|
||||
if (stage) {
|
||||
to.add(",\n").addSpaces(lev);
|
||||
@ -6192,7 +6205,8 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP
|
||||
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(" 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(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 2: to.add(" about: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); flags.push_back(0); break;
|
||||
case 3: 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;
|
||||
|
@ -255,6 +255,7 @@ enum {
|
||||
mtpc_updateWebPage = 0x7f891213,
|
||||
mtpc_updateReadMessagesContents = 0x68c13933,
|
||||
mtpc_updateChannelTooLong = 0x60946422,
|
||||
mtpc_updateChannel = 0xb6d45656,
|
||||
mtpc_updateChannelGroup = 0xc36c1e3c,
|
||||
mtpc_updateNewChannelMessage = 0x62ba04d9,
|
||||
mtpc_updateReadChannelInbox = 0x87b87b7d,
|
||||
@ -517,7 +518,7 @@ enum {
|
||||
mtpc_messages_getChannelDialogs = 0x92689583,
|
||||
mtpc_messages_getImportantHistory = 0x24af43a5,
|
||||
mtpc_messages_readChannelHistory = 0x36a1210e,
|
||||
mtpc_messages_createChannel = 0xe830f8cb,
|
||||
mtpc_messages_createChannel = 0x7f44d2c3,
|
||||
mtpc_messages_deleteChannelMessages = 0x9995a84f,
|
||||
mtpc_messages_getChannelMessages = 0x5f46b265,
|
||||
mtpc_messages_incrementMessagesViews = 0x91ffd479,
|
||||
@ -878,6 +879,7 @@ class MTPDupdateReadHistoryOutbox;
|
||||
class MTPDupdateWebPage;
|
||||
class MTPDupdateReadMessagesContents;
|
||||
class MTPDupdateChannelTooLong;
|
||||
class MTPDupdateChannel;
|
||||
class MTPDupdateChannelGroup;
|
||||
class MTPDupdateNewChannelMessage;
|
||||
class MTPDupdateReadChannelInbox;
|
||||
@ -5306,6 +5308,18 @@ public:
|
||||
return *(const MTPDupdateChannelTooLong*)data;
|
||||
}
|
||||
|
||||
MTPDupdateChannel &_updateChannel() {
|
||||
if (!data) throw mtpErrorUninitialized();
|
||||
if (_type != mtpc_updateChannel) throw mtpErrorWrongTypeId(_type, mtpc_updateChannel);
|
||||
split();
|
||||
return *(MTPDupdateChannel*)data;
|
||||
}
|
||||
const MTPDupdateChannel &c_updateChannel() const {
|
||||
if (!data) throw mtpErrorUninitialized();
|
||||
if (_type != mtpc_updateChannel) throw mtpErrorWrongTypeId(_type, mtpc_updateChannel);
|
||||
return *(const MTPDupdateChannel*)data;
|
||||
}
|
||||
|
||||
MTPDupdateChannelGroup &_updateChannelGroup() {
|
||||
if (!data) throw mtpErrorUninitialized();
|
||||
if (_type != mtpc_updateChannelGroup) throw mtpErrorWrongTypeId(_type, mtpc_updateChannelGroup);
|
||||
@ -5404,6 +5418,7 @@ private:
|
||||
explicit MTPupdate(MTPDupdateWebPage *_data);
|
||||
explicit MTPupdate(MTPDupdateReadMessagesContents *_data);
|
||||
explicit MTPupdate(MTPDupdateChannelTooLong *_data);
|
||||
explicit MTPupdate(MTPDupdateChannel *_data);
|
||||
explicit MTPupdate(MTPDupdateChannelGroup *_data);
|
||||
explicit MTPupdate(MTPDupdateNewChannelMessage *_data);
|
||||
explicit MTPupdate(MTPDupdateReadChannelInbox *_data);
|
||||
@ -5439,6 +5454,7 @@ private:
|
||||
friend MTPupdate MTP_updateWebPage(const MTPWebPage &_webpage, MTPint _pts, MTPint _pts_count);
|
||||
friend MTPupdate MTP_updateReadMessagesContents(const MTPVector<MTPint> &_messages, MTPint _pts, MTPint _pts_count);
|
||||
friend MTPupdate MTP_updateChannelTooLong(MTPint _channel_id);
|
||||
friend MTPupdate MTP_updateChannel(MTPint _channel_id);
|
||||
friend MTPupdate MTP_updateChannelGroup(MTPint _channel_id, const MTPMessageGroup &_group);
|
||||
friend MTPupdate MTP_updateNewChannelMessage(const MTPMessage &_message, MTPint _pts, MTPint _pts_count);
|
||||
friend MTPupdate MTP_updateReadChannelInbox(const MTPPeer &_peer, MTPint _max_id);
|
||||
@ -10525,6 +10541,16 @@ public:
|
||||
MTPint vchannel_id;
|
||||
};
|
||||
|
||||
class MTPDupdateChannel : public mtpDataImpl<MTPDupdateChannel> {
|
||||
public:
|
||||
MTPDupdateChannel() {
|
||||
}
|
||||
MTPDupdateChannel(MTPint _channel_id) : vchannel_id(_channel_id) {
|
||||
}
|
||||
|
||||
MTPint vchannel_id;
|
||||
};
|
||||
|
||||
class MTPDupdateChannelGroup : public mtpDataImpl<MTPDupdateChannelGroup> {
|
||||
public:
|
||||
MTPDupdateChannelGroup() {
|
||||
@ -16819,6 +16845,7 @@ class MTPmessages_createChannel { // RPC method 'messages.createChannel'
|
||||
public:
|
||||
MTPint vflags;
|
||||
MTPstring vtitle;
|
||||
MTPstring vabout;
|
||||
MTPVector<MTPInputUser> vusers;
|
||||
|
||||
MTPmessages_createChannel() {
|
||||
@ -16826,11 +16853,11 @@ public:
|
||||
MTPmessages_createChannel(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_createChannel) {
|
||||
read(from, end, cons);
|
||||
}
|
||||
MTPmessages_createChannel(MTPint _flags, const MTPstring &_title, const MTPVector<MTPInputUser> &_users) : vflags(_flags), vtitle(_title), vusers(_users) {
|
||||
MTPmessages_createChannel(MTPint _flags, const MTPstring &_title, const MTPstring &_about, const MTPVector<MTPInputUser> &_users) : vflags(_flags), vtitle(_title), vabout(_about), vusers(_users) {
|
||||
}
|
||||
|
||||
uint32 innerLength() const {
|
||||
return vflags.innerLength() + vtitle.innerLength() + vusers.innerLength();
|
||||
return vflags.innerLength() + vtitle.innerLength() + vabout.innerLength() + vusers.innerLength();
|
||||
}
|
||||
mtpTypeId type() const {
|
||||
return mtpc_messages_createChannel;
|
||||
@ -16838,11 +16865,13 @@ public:
|
||||
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_createChannel) {
|
||||
vflags.read(from, end);
|
||||
vtitle.read(from, end);
|
||||
vabout.read(from, end);
|
||||
vusers.read(from, end);
|
||||
}
|
||||
void write(mtpBuffer &to) const {
|
||||
vflags.write(to);
|
||||
vtitle.write(to);
|
||||
vabout.write(to);
|
||||
vusers.write(to);
|
||||
}
|
||||
|
||||
@ -16856,7 +16885,7 @@ public:
|
||||
}
|
||||
MTPmessages_CreateChannel(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed<MTPmessages_createChannel>(from, end, cons) {
|
||||
}
|
||||
MTPmessages_CreateChannel(MTPint _flags, const MTPstring &_title, const MTPVector<MTPInputUser> &_users) : MTPBoxed<MTPmessages_createChannel>(MTPmessages_createChannel(_flags, _title, _users)) {
|
||||
MTPmessages_CreateChannel(MTPint _flags, const MTPstring &_title, const MTPstring &_about, const MTPVector<MTPInputUser> &_users) : MTPBoxed<MTPmessages_createChannel>(MTPmessages_createChannel(_flags, _title, _about, _users)) {
|
||||
}
|
||||
};
|
||||
|
||||
@ -22905,6 +22934,10 @@ inline uint32 MTPupdate::innerLength() const {
|
||||
const MTPDupdateChannelTooLong &v(c_updateChannelTooLong());
|
||||
return v.vchannel_id.innerLength();
|
||||
}
|
||||
case mtpc_updateChannel: {
|
||||
const MTPDupdateChannel &v(c_updateChannel());
|
||||
return v.vchannel_id.innerLength();
|
||||
}
|
||||
case mtpc_updateChannelGroup: {
|
||||
const MTPDupdateChannelGroup &v(c_updateChannelGroup());
|
||||
return v.vchannel_id.innerLength() + v.vgroup.innerLength();
|
||||
@ -23128,6 +23161,11 @@ inline void MTPupdate::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeI
|
||||
MTPDupdateChannelTooLong &v(_updateChannelTooLong());
|
||||
v.vchannel_id.read(from, end);
|
||||
} break;
|
||||
case mtpc_updateChannel: _type = cons; {
|
||||
if (!data) setData(new MTPDupdateChannel());
|
||||
MTPDupdateChannel &v(_updateChannel());
|
||||
v.vchannel_id.read(from, end);
|
||||
} break;
|
||||
case mtpc_updateChannelGroup: _type = cons; {
|
||||
if (!data) setData(new MTPDupdateChannelGroup());
|
||||
MTPDupdateChannelGroup &v(_updateChannelGroup());
|
||||
@ -23331,6 +23369,10 @@ inline void MTPupdate::write(mtpBuffer &to) const {
|
||||
const MTPDupdateChannelTooLong &v(c_updateChannelTooLong());
|
||||
v.vchannel_id.write(to);
|
||||
} break;
|
||||
case mtpc_updateChannel: {
|
||||
const MTPDupdateChannel &v(c_updateChannel());
|
||||
v.vchannel_id.write(to);
|
||||
} break;
|
||||
case mtpc_updateChannelGroup: {
|
||||
const MTPDupdateChannelGroup &v(c_updateChannelGroup());
|
||||
v.vchannel_id.write(to);
|
||||
@ -23393,6 +23435,7 @@ inline MTPupdate::MTPupdate(mtpTypeId type) : mtpDataOwner(0), _type(type) {
|
||||
case mtpc_updateWebPage: setData(new MTPDupdateWebPage()); break;
|
||||
case mtpc_updateReadMessagesContents: setData(new MTPDupdateReadMessagesContents()); break;
|
||||
case mtpc_updateChannelTooLong: setData(new MTPDupdateChannelTooLong()); break;
|
||||
case mtpc_updateChannel: setData(new MTPDupdateChannel()); break;
|
||||
case mtpc_updateChannelGroup: setData(new MTPDupdateChannelGroup()); break;
|
||||
case mtpc_updateNewChannelMessage: setData(new MTPDupdateNewChannelMessage()); break;
|
||||
case mtpc_updateReadChannelInbox: setData(new MTPDupdateReadChannelInbox()); break;
|
||||
@ -23459,6 +23502,8 @@ inline MTPupdate::MTPupdate(MTPDupdateReadMessagesContents *_data) : mtpDataOwne
|
||||
}
|
||||
inline MTPupdate::MTPupdate(MTPDupdateChannelTooLong *_data) : mtpDataOwner(_data), _type(mtpc_updateChannelTooLong) {
|
||||
}
|
||||
inline MTPupdate::MTPupdate(MTPDupdateChannel *_data) : mtpDataOwner(_data), _type(mtpc_updateChannel) {
|
||||
}
|
||||
inline MTPupdate::MTPupdate(MTPDupdateChannelGroup *_data) : mtpDataOwner(_data), _type(mtpc_updateChannelGroup) {
|
||||
}
|
||||
inline MTPupdate::MTPupdate(MTPDupdateNewChannelMessage *_data) : mtpDataOwner(_data), _type(mtpc_updateNewChannelMessage) {
|
||||
@ -23556,6 +23601,9 @@ inline MTPupdate MTP_updateReadMessagesContents(const MTPVector<MTPint> &_messag
|
||||
inline MTPupdate MTP_updateChannelTooLong(MTPint _channel_id) {
|
||||
return MTPupdate(new MTPDupdateChannelTooLong(_channel_id));
|
||||
}
|
||||
inline MTPupdate MTP_updateChannel(MTPint _channel_id) {
|
||||
return MTPupdate(new MTPDupdateChannel(_channel_id));
|
||||
}
|
||||
inline MTPupdate MTP_updateChannelGroup(MTPint _channel_id, const MTPMessageGroup &_group) {
|
||||
return MTPupdate(new MTPDupdateChannelGroup(_channel_id, _group));
|
||||
}
|
||||
|
@ -378,6 +378,7 @@ updateReadHistoryOutbox#2f2f21bf peer:Peer max_id:int pts:int pts_count:int = Up
|
||||
updateWebPage#7f891213 webpage:WebPage pts:int pts_count:int = Update;
|
||||
updateReadMessagesContents#68c13933 messages:Vector<int> pts:int pts_count:int = Update;
|
||||
updateChannelTooLong#60946422 channel_id:int = Update;
|
||||
updateChannel#b6d45656 channel_id:int = Update;
|
||||
updateChannelGroup#c36c1e3c channel_id:int group:MessageGroup = Update;
|
||||
updateNewChannelMessage#62ba04d9 message:Message pts:int pts_count:int = Update;
|
||||
updateReadChannelInbox#87b87b7d peer:Peer max_id:int = Update;
|
||||
@ -716,7 +717,7 @@ messages.startBot#f4cc052d bot:InputUser chat_id:InputChat random_id:long start_
|
||||
messages.getChannelDialogs#92689583 offset:int limit:int = messages.Dialogs;
|
||||
messages.getImportantHistory#24af43a5 peer:InputPeer offset_id:int add_offset:int limit:int max_id:int min_id:int = messages.Messages;
|
||||
messages.readChannelHistory#36a1210e peer:InputPeer max_id:int = Bool;
|
||||
messages.createChannel#e830f8cb flags:# title:string users:Vector<InputUser> = Updates;
|
||||
messages.createChannel#7f44d2c3 flags:# title:string about: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;
|
||||
|
@ -985,7 +985,7 @@ QPixmap OverviewInner::genPix(PhotoData *photo, int32 size) {
|
||||
}
|
||||
|
||||
void OverviewInner::paintEvent(QPaintEvent *e) {
|
||||
QPainter p(this);
|
||||
Painter p(this);
|
||||
|
||||
QRect r(e->rect());
|
||||
p.setClipRect(r);
|
||||
@ -1784,7 +1784,9 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
|
||||
}
|
||||
if (isUponSelected > 1) {
|
||||
_menu->addAction(lang(lng_context_forward_selected), _overview, SLOT(onForwardSelected()));
|
||||
_menu->addAction(lang(lng_context_delete_selected), _overview, SLOT(onDeleteSelected()));
|
||||
if (!_peer->isChannel() || _peer->asChannel()->adminned) {
|
||||
_menu->addAction(lang(lng_context_delete_selected), _overview, SLOT(onDeleteSelected()));
|
||||
}
|
||||
_menu->addAction(lang(lng_context_clear_selection), _overview, SLOT(onClearSelected()));
|
||||
} else if (App::hoveredLinkItem()) {
|
||||
if (isUponSelected != -2) {
|
||||
@ -1822,7 +1824,9 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) {
|
||||
_menu->addAction(lang(lng_context_to_msg), this, SLOT(goToMessage()))->setEnabled(true);
|
||||
if (isUponSelected > 1) {
|
||||
_menu->addAction(lang(lng_context_forward_selected), _overview, SLOT(onForwardSelected()));
|
||||
_menu->addAction(lang(lng_context_delete_selected), _overview, SLOT(onDeleteSelected()));
|
||||
if (!_peer->isChannel() || _peer->asChannel()->adminned) {
|
||||
_menu->addAction(lang(lng_context_delete_selected), _overview, SLOT(onDeleteSelected()));
|
||||
}
|
||||
_menu->addAction(lang(lng_context_clear_selection), _overview, SLOT(onClearSelected()));
|
||||
} else {
|
||||
if (isUponSelected != -2) {
|
||||
|
@ -151,7 +151,7 @@ void NotifyWindow::updateNotifyDisplay() {
|
||||
img.fill(st::notifyBG->c);
|
||||
|
||||
{
|
||||
QPainter p(&img);
|
||||
Painter p(&img);
|
||||
p.fillRect(0, 0, w - st::notifyBorderWidth, st::notifyBorderWidth, st::notifyBorder->b);
|
||||
p.fillRect(w - st::notifyBorderWidth, 0, st::notifyBorderWidth, h - st::notifyBorderWidth, st::notifyBorder->b);
|
||||
p.fillRect(st::notifyBorderWidth, h - st::notifyBorderWidth, w - st::notifyBorderWidth, st::notifyBorderWidth, st::notifyBorder->b);
|
||||
@ -174,9 +174,12 @@ void NotifyWindow::updateNotifyDisplay() {
|
||||
|
||||
QRect rectForName(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyTextTop, itemWidth, st::msgNameFont->height);
|
||||
if (!App::passcoded() && cNotifyView() <= dbinvShowName) {
|
||||
if (history->peer->isChat()) { // CHANNELS_UI
|
||||
p.drawPixmap(QPoint(rectForName.left() + st::dlgChatImgLeft, rectForName.top() + st::dlgChatImgTop), App::sprite(), st::dlgChatImg);
|
||||
rectForName.setLeft(rectForName.left() + st::dlgChatImgSkip);
|
||||
if (history->peer->isChat()) {
|
||||
p.drawPixmap(QPoint(rectForName.left() + st::dlgChatImgPos.x(), rectForName.top() + st::dlgChatImgPos.y()), App::sprite(), st::dlgChatImg);
|
||||
rectForName.setLeft(rectForName.left() + st::dlgImgSkip);
|
||||
} else if (history->peer->isChannel()) {
|
||||
p.drawPixmap(QPoint(rectForName.left() + st::dlgChannelImgPos.x(), rectForName.top() + st::dlgChannelImgPos.y()), App::sprite(), st::dlgChannelImg);
|
||||
rectForName.setLeft(rectForName.left() + st::dlgImgSkip);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user