Merge remote-tracking branch 'tdesktop/dev' into dev

This commit is contained in:
Eric Kotato 2020-06-06 04:21:21 +03:00
commit 34e2d309cf
17 changed files with 115 additions and 89 deletions

View file

@ -9,7 +9,7 @@
<Identity Name="TelegramMessengerLLP.TelegramDesktop" <Identity Name="TelegramMessengerLLP.TelegramDesktop"
ProcessorArchitecture="ARCHITECTURE" ProcessorArchitecture="ARCHITECTURE"
Publisher="CN=536BC709-8EE1-4478-AF22-F0F0F26FF64A" Publisher="CN=536BC709-8EE1-4478-AF22-F0F0F26FF64A"
Version="2.1.9.0" /> Version="2.1.10.0" />
<Properties> <Properties>
<DisplayName>Telegram Desktop</DisplayName> <DisplayName>Telegram Desktop</DisplayName>
<PublisherDisplayName>Telegram FZ-LLC</PublisherDisplayName> <PublisherDisplayName>Telegram FZ-LLC</PublisherDisplayName>

View file

@ -44,8 +44,8 @@ IDI_ICON1 ICON "..\\art\\icon256.ico"
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 2,1,9,0 FILEVERSION 2,1,10,0
PRODUCTVERSION 2,1,9,0 PRODUCTVERSION 2,1,10,0
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x1L FILEFLAGS 0x1L
@ -62,10 +62,10 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "Telegram FZ-LLC" VALUE "CompanyName", "Telegram FZ-LLC"
VALUE "FileDescription", "Telegram Desktop" VALUE "FileDescription", "Telegram Desktop"
VALUE "FileVersion", "2.1.9.0" VALUE "FileVersion", "2.1.10.0"
VALUE "LegalCopyright", "Copyright (C) 2014-2020" VALUE "LegalCopyright", "Copyright (C) 2014-2020"
VALUE "ProductName", "Telegram Desktop" VALUE "ProductName", "Telegram Desktop"
VALUE "ProductVersion", "2.1.9.0" VALUE "ProductVersion", "2.1.10.0"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"

View file

@ -35,8 +35,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 2,1,9,0 FILEVERSION 2,1,10,0
PRODUCTVERSION 2,1,9,0 PRODUCTVERSION 2,1,10,0
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x1L FILEFLAGS 0x1L
@ -53,10 +53,10 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "Telegram FZ-LLC" VALUE "CompanyName", "Telegram FZ-LLC"
VALUE "FileDescription", "Telegram Desktop Updater" VALUE "FileDescription", "Telegram Desktop Updater"
VALUE "FileVersion", "2.1.9.0" VALUE "FileVersion", "2.1.10.0"
VALUE "LegalCopyright", "Copyright (C) 2014-2020" VALUE "LegalCopyright", "Copyright (C) 2014-2020"
VALUE "ProductName", "Telegram Desktop" VALUE "ProductName", "Telegram Desktop"
VALUE "ProductVersion", "2.1.9.0" VALUE "ProductVersion", "2.1.10.0"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"

View file

@ -2633,7 +2633,9 @@ void ApiWrap::resolveWebPages() {
if (!ids.isEmpty()) { if (!ids.isEmpty()) {
requestId = request(MTPmessages_GetMessages( requestId = request(MTPmessages_GetMessages(
MTP_vector<MTPInputMessage>(ids) MTP_vector<MTPInputMessage>(ids)
)).done([=](const MTPmessages_Messages &result, mtpRequestId requestId) { )).done([=](
const MTPmessages_Messages &result,
mtpRequestId requestId) {
gotWebPages(nullptr, result, requestId); gotWebPages(nullptr, result, requestId);
}).afterDelay(kSmallDelayMs).send(); }).afterDelay(kSmallDelayMs).send();
} }
@ -2642,7 +2644,9 @@ void ApiWrap::resolveWebPages() {
reqsByIndex[i.value().first] = request(MTPchannels_GetMessages( reqsByIndex[i.value().first] = request(MTPchannels_GetMessages(
i.key()->inputChannel, i.key()->inputChannel,
MTP_vector<MTPInputMessage>(i.value().second) MTP_vector<MTPInputMessage>(i.value().second)
)).done([=, channel = i.key()](const MTPmessages_Messages &result, mtpRequestId requestId) { )).done([=, channel = i.key()](
const MTPmessages_Messages &result,
mtpRequestId requestId) {
gotWebPages(channel, result, requestId); gotWebPages(channel, result, requestId);
}).afterDelay(kSmallDelayMs).send(); }).afterDelay(kSmallDelayMs).send();
} }
@ -2957,58 +2961,8 @@ void ApiWrap::refreshFileReference(
}); });
} }
void ApiWrap::gotWebPages(ChannelData *channel, const MTPmessages_Messages &msgs, mtpRequestId req) { void ApiWrap::gotWebPages(ChannelData *channel, const MTPmessages_Messages &result, mtpRequestId req) {
const QVector<MTPMessage> *v = 0; WebPageData::ApplyChanges(&session(), channel, result);
switch (msgs.type()) {
case mtpc_messages_messages: {
auto &d = msgs.c_messages_messages();
_session->data().processUsers(d.vusers());
_session->data().processChats(d.vchats());
v = &d.vmessages().v;
} break;
case mtpc_messages_messagesSlice: {
auto &d = msgs.c_messages_messagesSlice();
_session->data().processUsers(d.vusers());
_session->data().processChats(d.vchats());
v = &d.vmessages().v;
} break;
case mtpc_messages_channelMessages: {
auto &d = msgs.c_messages_channelMessages();
if (channel) {
channel->ptsReceived(d.vpts().v);
} else {
LOG(("API Error: received messages.channelMessages when no channel was passed! (ApiWrap::gotWebPages)"));
}
_session->data().processUsers(d.vusers());
_session->data().processChats(d.vchats());
v = &d.vmessages().v;
} break;
case mtpc_messages_messagesNotModified: {
LOG(("API Error: received messages.messagesNotModified! (ApiWrap::gotWebPages)"));
} break;
}
if (!v) return;
auto indices = base::flat_map<uint64, int>(); // copied from feedMsgs
for (auto i = 0, l = v->size(); i != l; ++i) {
const auto msgId = IdFromMessage(v->at(i));
indices.emplace((uint64(uint32(msgId)) << 32) | uint64(i), i);
}
for (const auto &[position, index] : indices) {
const auto item = _session->data().addNewMessage(
v->at(index),
MTPDmessage_ClientFlags(),
NewMessageType::Existing);
if (item) {
_session->data().requestItemResize(item);
}
}
for (auto i = _webPagesPending.begin(); i != _webPagesPending.cend();) { for (auto i = _webPagesPending.begin(); i != _webPagesPending.cend();) {
if (i.value() == req) { if (i.value() == req) {
if (i.key()->pendingTill > 0) { if (i.key()->pendingTill > 0) {

View file

@ -192,7 +192,6 @@ EditCaptionBox::EditCaptionBox(
maxH); maxH);
_thumbnailImageLoaded = true; _thumbnailImageLoaded = true;
}; };
prepareStreamedPreview();
} else { } else {
Assert(_photoMedia != nullptr); Assert(_photoMedia != nullptr);
@ -328,6 +327,10 @@ EditCaptionBox::EditCaptionBox(
) | rpl::start_with_next([&](bool checked) { ) | rpl::start_with_next([&](bool checked) {
_asFile = checked; _asFile = checked;
}, _wayWrap->lifetime()); }, _wayWrap->lifetime());
if (_animated) {
prepareStreamedPreview();
}
} }
EditCaptionBox::~EditCaptionBox() = default; EditCaptionBox::~EditCaptionBox() = default;

View file

@ -1831,11 +1831,7 @@ void SendFilesBox::setupShadows(
} }
void SendFilesBox::prepare() { void SendFilesBox::prepare() {
_send = addButton( _send = addButton(tr::lng_send_button(), [=] { send({}); });
(_sendType == Api::SendType::Normal
? tr::lng_send_button()
: tr::lng_schedule_button()),
[=] { send({}); });
if (_sendType == Api::SendType::Normal) { if (_sendType == Api::SendType::Normal) {
SetupSendMenuAndShortcuts( SetupSendMenuAndShortcuts(
_send, _send,
@ -1853,9 +1849,8 @@ void SendFilesBox::prepare() {
} }
}, lifetime()); }, lifetime());
const auto title = tr::lng_stickers_featured_add(tr::now) + qsl("...");
_addFileToAlbum = addLeftButton( _addFileToAlbum = addLeftButton(
rpl::single(title), tr::lng_stickers_featured_add(),
App::LambdaDelayed(st::historyAttach.ripple.hideDuration, this, [=] { App::LambdaDelayed(st::historyAttach.ripple.hideDuration, this, [=] {
openDialogToAddFileToAlbum(); openDialogToAddFileToAlbum();
})); }));

View file

@ -23,7 +23,7 @@ constexpr auto AppId = "{C4A4AE8F-B9F7-4CC7-8A6C-BF7EEE87ACA5}"_cs;
constexpr auto AppNameOld = "Telegram Win (Unofficial)"_cs; constexpr auto AppNameOld = "Telegram Win (Unofficial)"_cs;
constexpr auto AppName = "Kotatogram Desktop"_cs; constexpr auto AppName = "Kotatogram Desktop"_cs;
constexpr auto AppFile = "Kotatogram"_cs; constexpr auto AppFile = "Kotatogram"_cs;
constexpr auto AppVersion = 2001009; constexpr auto AppVersion = 2001010;
constexpr auto AppVersionStr = "2.1.9"; constexpr auto AppVersionStr = "2.1.10";
constexpr auto AppBetaVersion = true; constexpr auto AppBetaVersion = true;
constexpr auto AppAlphaVersion = TDESKTOP_ALPHA_VERSION; constexpr auto AppAlphaVersion = TDESKTOP_ALPHA_VERSION;

View file

@ -12,6 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "mainwidget.h" #include "mainwidget.h"
#include "data/data_session.h" #include "data/data_session.h"
#include "data/data_photo.h" #include "data/data_photo.h"
#include "data/data_channel.h"
#include "data/data_document.h" #include "data/data_document.h"
#include "ui/image/image.h" #include "ui/image/image.h"
#include "ui/text/text_entity.h" #include "ui/text/text_entity.h"
@ -240,3 +241,45 @@ void WebPageData::replaceDocumentGoodThumbnail() {
document->setGoodThumbnailPhoto(photo); document->setGoodThumbnailPhoto(photo);
} }
} }
void WebPageData::ApplyChanges(
not_null<Main::Session*> session,
ChannelData *channel,
const MTPmessages_Messages &result) {
result.match([&](
const MTPDmessages_channelMessages &data) {
if (channel) {
channel->ptsReceived(data.vpts().v);
} else {
LOG(("API Error: received messages.channelMessages "
"when no channel was passed! (WebPageData::ApplyChanges)"));
}
}, [&](const auto &) {
});
const auto list = result.match([](
const MTPDmessages_messagesNotModified &) {
LOG(("API Error: received messages.messagesNotModified! "
"(WebPageData::ApplyChanges)"));
return static_cast<const QVector<MTPMessage>*>(nullptr);
}, [&](const auto &data) {
session->data().processUsers(data.vusers());
session->data().processChats(data.vchats());
return &data.vmessages().v;
});
if (!list) {
return;
}
for (const auto &message : *list) {
message.match([&](const MTPDmessage &data) {
if (const auto media = data.vmedia()) {
media->match([&](const MTPDmessageMediaWebPage &data) {
session->data().processWebpage(data.vwebpage());
}, [&](const auto &) {
});
}
}, [&](const auto &) {
});
}
session->data().sendWebPageGamePollNotifications();
}

View file

@ -10,6 +10,12 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_photo.h" #include "data/data_photo.h"
#include "data/data_document.h" #include "data/data_document.h"
class ChannelData;
namespace Main {
class Session;
} // namespace Main
enum class WebPageType { enum class WebPageType {
Photo, Photo,
Video, Video,
@ -50,6 +56,11 @@ struct WebPageData {
const QString &newAuthor, const QString &newAuthor,
int newPendingTill); int newPendingTill);
static void ApplyChanges(
not_null<Main::Session*> session,
ChannelData *channel,
const MTPmessages_Messages &result);
WebPageId id = 0; WebPageId id = 0;
WebPageType type = WebPageType::Article; WebPageType type = WebPageType::Article;
QString url; QString url;

View file

@ -5626,7 +5626,15 @@ void HistoryWidget::updateUnreadMentionsVisibility() {
} }
void HistoryWidget::mousePressEvent(QMouseEvent *e) { void HistoryWidget::mousePressEvent(QMouseEvent *e) {
_replyForwardPressed = QRect(0, _field->y() - st::historySendPadding - st::historyReplyHeight, st::historyReplySkip, st::historyReplyHeight).contains(e->pos()); const auto hasSecondLayer = (_editMsgId
|| _replyToId
|| readyToForward()
|| _kbReplyTo);
_replyForwardPressed = hasSecondLayer && QRect(
0,
_field->y() - st::historySendPadding - st::historyReplyHeight,
st::historyReplySkip,
st::historyReplyHeight).contains(e->pos());
if (_replyForwardPressed && !_fieldBarCancel->isHidden()) { if (_replyForwardPressed && !_fieldBarCancel->isHidden()) {
updateField(); updateField();
} else if (_inReplyEditForward) { } else if (_inReplyEditForward) {

View file

@ -1152,7 +1152,7 @@ void Pip::paint(QPainter &p, FrameRequest request) {
} else { } else {
p.drawImage(rect, RotateFrameImage(image, _rotation)); p.drawImage(rect, RotateFrameImage(image, _rotation));
} }
if (_instance.player().ready()) { if (canUseVideoFrame()) {
_instance.markFrameShown(); _instance.markFrameShown();
} }
paintRadialLoading(p); paintRadialLoading(p);
@ -1377,8 +1377,13 @@ void Pip::restartAtSeekPosition(crl::time position) {
updatePlaybackState(); updatePlaybackState();
} }
bool Pip::canUseVideoFrame() const {
return _instance.player().ready()
&& !_instance.info().video.cover.isNull();
}
QImage Pip::videoFrame(const FrameRequest &request) const { QImage Pip::videoFrame(const FrameRequest &request) const {
if (_instance.player().ready()) { if (canUseVideoFrame()) {
_preparedCoverStorage = QImage(); _preparedCoverStorage = QImage();
return _instance.frame(request); return _instance.frame(request);
} }

View file

@ -169,6 +169,7 @@ private:
void updatePlayPauseResumeState(const Player::TrackState &state); void updatePlayPauseResumeState(const Player::TrackState &state);
void restartAtSeekPosition(crl::time position); void restartAtSeekPosition(crl::time position);
[[nodiscard]] bool canUseVideoFrame() const;
[[nodiscard]] QImage videoFrame(const FrameRequest &request) const; [[nodiscard]] QImage videoFrame(const FrameRequest &request) const;
[[nodiscard]] QImage videoFrameForDirectPaint( [[nodiscard]] QImage videoFrameForDirectPaint(
const FrameRequest &request) const; const FrameRequest &request) const;

View file

@ -322,9 +322,6 @@ std::optional<PreparedList> PreparedList::PreparedFileFromFilesDialog(
auto filteredFiles = ranges::view::all( auto filteredFiles = ranges::view::all(
temp.files temp.files
) | ranges::view::filter([&](const auto &file) { ) | ranges::view::filter([&](const auto &file) {
if (!isAlbum) {
return true;
}
const auto info = QFileInfo(file.path); const auto info = QFileInfo(file.path);
if (Core::IsMimeSticker(Core::MimeTypeForFile(info).name())) { if (Core::IsMimeSticker(Core::MimeTypeForFile(info).name())) {
if (isSingleFile) { if (isSingleFile) {
@ -332,6 +329,9 @@ std::optional<PreparedList> PreparedList::PreparedFileFromFilesDialog(
} }
return false; return false;
} }
if (!isAlbum) {
return true;
}
using Info = FileMediaInformation; using Info = FileMediaInformation;
const auto media = &file.information->media; const auto media = &file.information->media;

View file

@ -702,20 +702,20 @@ void Editor::showMenu() {
if (_menu) { if (_menu) {
return; return;
} }
_menu.create(this); _menu = base::make_unique_q<Ui::DropdownMenu>(this);
_menu->setHiddenCallback([weak = Ui::MakeWeak(this), menu = _menu.data()]{ _menu->setHiddenCallback([weak = Ui::MakeWeak(this), menu = _menu.get()]{
menu->deleteLater(); menu->deleteLater();
if (weak && weak->_menu == menu) { if (weak && weak->_menu == menu) {
weak->_menu = nullptr; weak->_menu = nullptr;
weak->_menuToggle->setForceRippled(false); weak->_menuToggle->setForceRippled(false);
} }
}); });
_menu->setShowStartCallback(crl::guard(this, [this, menu = _menu.data()]{ _menu->setShowStartCallback(crl::guard(this, [this, menu = _menu.get()]{
if (_menu == menu) { if (_menu == menu) {
_menuToggle->setForceRippled(true); _menuToggle->setForceRippled(true);
} }
})); }));
_menu->setHideStartCallback(crl::guard(this, [this, menu = _menu.data()]{ _menu->setHideStartCallback(crl::guard(this, [this, menu = _menu.get()]{
if (_menu == menu) { if (_menu == menu) {
_menuToggle->setForceRippled(false); _menuToggle->setForceRippled(false);
} }

View file

@ -80,7 +80,7 @@ private:
QPointer<Inner> _inner; QPointer<Inner> _inner;
object_ptr<Ui::CrossButton> _close; object_ptr<Ui::CrossButton> _close;
object_ptr<Ui::IconButton> _menuToggle; object_ptr<Ui::IconButton> _menuToggle;
object_ptr<Ui::DropdownMenu> _menu = { nullptr }; base::unique_qptr<Ui::DropdownMenu> _menu;
object_ptr<Ui::MultiSelect> _select; object_ptr<Ui::MultiSelect> _select;
object_ptr<Ui::PlainShadow> _leftShadow; object_ptr<Ui::PlainShadow> _leftShadow;
object_ptr<Ui::PlainShadow> _topShadow; object_ptr<Ui::PlainShadow> _topShadow;

View file

@ -1,7 +1,7 @@
AppVersion 2001009 AppVersion 2001010
AppVersionStrMajor 2.1 AppVersionStrMajor 2.1
AppVersionStrSmall 2.1.9 AppVersionStrSmall 2.1.10
AppVersionStr 2.1.9 AppVersionStr 2.1.10
BetaChannel 1 BetaChannel 0
AlphaVersion 0 AlphaVersion 0
AppVersionOriginal 2.1.9.beta AppVersionOriginal 2.1.10

View file

@ -1,3 +1,9 @@
2.1.10 (05.06.20)
- Improve memory usage.
- Add support for full group message history export.
- Allow export of a single chat message history in JSON format.
2.1.9 beta (04.06.20) 2.1.9 beta (04.06.20)
- Several crash fixes. - Several crash fixes.