From 9a51e2c7e3c51edbc4bfc8a477ec12ae3261891a Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 28 Aug 2015 18:15:56 +0300 Subject: [PATCH] fixed mail links in Win10, include muted chats in the unread badge setting, shared links overview and search, version 0.8.53.dev --- Telegram/PrepareWin.bat | 10 +- Telegram/Resources/lang.strings | 4 + Telegram/Resources/style.txt | 16 + Telegram/SourceFiles/app.cpp | 6 + Telegram/SourceFiles/app.h | 6 + Telegram/SourceFiles/application.cpp | 4 +- Telegram/SourceFiles/art/sprite.png | Bin 171310 -> 172301 bytes Telegram/SourceFiles/art/sprite_200x.png | Bin 225082 -> 227074 bytes Telegram/SourceFiles/autoupdater.cpp | 4 +- Telegram/SourceFiles/config.h | 7 +- Telegram/SourceFiles/dialogswidget.cpp | 1 - Telegram/SourceFiles/gui/text.cpp | 11 + Telegram/SourceFiles/gui/text.h | 6 +- Telegram/SourceFiles/history.cpp | 83 +- Telegram/SourceFiles/history.h | 9 + Telegram/SourceFiles/localstorage.cpp | 11 +- Telegram/SourceFiles/mainwidget.cpp | 21 +- Telegram/SourceFiles/mainwidget.h | 1 + Telegram/SourceFiles/overviewwidget.cpp | 875 ++++++++++++++++-- Telegram/SourceFiles/overviewwidget.h | 82 +- Telegram/SourceFiles/profilewidget.cpp | 46 +- Telegram/SourceFiles/profilewidget.h | 5 +- Telegram/SourceFiles/pspecific_linux.cpp | 16 +- Telegram/SourceFiles/pspecific_mac.cpp | 10 +- Telegram/SourceFiles/pspecific_wnd.cpp | 10 +- Telegram/SourceFiles/settings.cpp | 1 + Telegram/SourceFiles/settings.h | 1 + Telegram/SourceFiles/settingswidget.cpp | 16 +- Telegram/SourceFiles/settingswidget.h | 3 +- Telegram/SourceFiles/title.cpp | 6 +- Telegram/SourceFiles/types.h | 1 + Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5540 -> 5540 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 +- Telegram/Version.sh | 2 +- Telegram/_qt_5_5_0_patch.diff | 16 + .../platforms/windows/qwindowsservices.cpp | 160 ++++ 37 files changed, 1253 insertions(+), 211 deletions(-) create mode 100644 Telegram/_qt_5_5_0_patch/qtbase/src/plugins/platforms/windows/qwindowsservices.cpp diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index 4a1fa200f..3a4b7051c 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,11 +1,11 @@ @echo OFF set "AppVersionStrMajor=0.8" -set "AppVersion=8052" -set "AppVersionStrSmall=0.8.52" -set "AppVersionStr=0.8.52" -set "AppVersionStrFull=0.8.52.0" -set "DevChannel=0" +set "AppVersion=8053" +set "AppVersionStrSmall=0.8.53" +set "AppVersionStr=0.8.53" +set "AppVersionStrFull=0.8.53.0" +set "DevChannel=1" if %DevChannel% neq 0 goto preparedev diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index eb93c89ae..b145afa5f 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -188,6 +188,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_show_preview" = "Show message preview"; "lng_settings_use_windows" = "Use Windows notifications"; "lng_settings_sound_notify" = "Play sound"; +"lng_settings_include_muted" = "Include muted chats in the unread badge"; "lng_notification_preview" = "You have a new message"; @@ -386,6 +387,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_profile_files_header" = "Files overview"; "lng_profile_audios" = "{count:_not_used_|# voice message|# voice messages} »"; "lng_profile_audios_header" = "Voice messages overview"; +"lng_profile_shared_links" = "{count:_not_used_|# shared link|# shared links} »"; +"lng_profile_shared_links_header" = "Shared links overview"; "lng_profile_audio_files_header" = "Playlist"; "lng_profile_show_all_types" = "Show all types"; "lng_profile_copy_phone" = "Copy phone number"; @@ -443,6 +446,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_media_type_videos" = "Video files"; "lng_media_type_files" = "Files"; "lng_media_type_audios" = "Voice messages"; +"lng_media_type_links" = "Shared links"; "lng_media_open_with" = "Open With"; "lng_media_download" = "Download"; diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index bdc6e4276..656a6e163 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -1451,6 +1451,10 @@ dropdownMediaAudios: iconedButton(dropdownMediaDocuments) { icon: sprite(62px, 348px, 24px, 24px); downIcon: sprite(62px, 348px, 24px, 24px); } +dropdownMediaLinks: iconedButton(dropdownMediaDocuments) { + icon: sprite(372px, 414px, 24px, 24px); + downIcon: sprite(62px, 348px, 24px, 24px); +} dragFont: font(28px semibold); dragSubfont: font(20px semibold); @@ -2002,3 +2006,15 @@ playerDuration: 200; playlistHoverBg: #f2f2f2; playlistPadding: 10px; + +linksSearchMargin: margins(20px, 20px, 20px, 0px); +linksMaxWidth: 520px; +linksLetterFont: font(24px); +linksMargin: 5px; +linksBorder: 1px; +linksBorderColor: #eaeaea; +linksDateColor: #000; +linksDateMargin: 15px; + +linksPhotoCheck: sprite(184px, 196px, 16px, 16px); +linksPhotoChecked: sprite(168px, 196px, 16px, 16px); diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index b99ceee01..7b36392db 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -1843,6 +1843,12 @@ namespace App { prepareCorners(BotKeyboardCorners, st::msgRadius, st::botKbBg); prepareCorners(BotKeyboardOverCorners, st::msgRadius, st::botKbOverBg); prepareCorners(BotKeyboardDownCorners, st::msgRadius, st::botKbDownBg); + prepareCorners(PhotoSelectOverlayCorners, st::msgRadius, st::overviewPhotoSelectOverlay); + + prepareCorners(DocRedCorners, st::msgRadius, st::mvDocRedColor); + prepareCorners(DocYellowCorners, st::msgRadius, st::mvDocYellowColor); + prepareCorners(DocGreenCorners, st::msgRadius, st::mvDocGreenColor); + prepareCorners(DocBlueCorners, st::msgRadius, st::mvDocBlueColor); prepareCorners(MessageInCorners, st::msgRadius, st::msgInBg, &st::msgInShadow); prepareCorners(MessageInSelectedCorners, st::msgRadius, st::msgInSelectBg, &st::msgInSelectShadow); diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index 51995a5c5..093b34395 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -58,6 +58,12 @@ enum RoundCorners { BotKeyboardCorners, BotKeyboardOverCorners, BotKeyboardDownCorners, + PhotoSelectOverlayCorners, + + DocRedCorners, + DocYellowCorners, + DocGreenCorners, + DocBlueCorners, InShadowCorners, // for photos without bg InSelectedShadowCorners, diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 684d76561..cb1abf4df 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -673,8 +673,8 @@ void Application::checkMapVersion() { if (Local::oldMapVersion() < AppVersion) { if (Local::oldMapVersion()) { QString versionFeatures; - if (cDevVersion() && Local::oldMapVersion() < 8050) { - versionFeatures = QString::fromUtf8("\xe2\x80\x94 Bug fixes in Windows notifications\n\xe2\x80\x94 Fixed input methods on Linux (Fcitx and IBus)");// .replace('@', qsl("@") + QChar(0x200D)); + if (cDevVersion() && Local::oldMapVersion() < 8053) { + versionFeatures = QString::fromUtf8("\xe2\x80\x94 Include muted chats in the unread badge setting\n\xe2\x80\x94 Shared links overview and search in shared media");// .replace('@', qsl("@") + QChar(0x200D)); } else if (!cDevVersion() && Local::oldMapVersion() < 8052) { versionFeatures = lang(lng_new_version_minor).trimmed(); } diff --git a/Telegram/SourceFiles/art/sprite.png b/Telegram/SourceFiles/art/sprite.png index 648101a311ff6ef50e8f30d95a451a7b5e7aad05..784f8a93a26396dafc1a865c6bc7f64d2c780cd5 100644 GIT binary patch delta 51852 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
!fNv3Un6&@h&1HU35fZr7 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 MMO(Q-(LDVB11ImhK>z>% delta 50839 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 diff --git a/Telegram/SourceFiles/art/sprite_200x.png b/Telegram/SourceFiles/art/sprite_200x.png index f8d5d7f382b6b87129dd7a50c84c22eddaaa6189..7ef912b1dc20810adb20ec42b8261c2b0e73082c 100644 GIT binary patch delta 63811 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

HR4Y(*Ew|ocsB>{%7ILx{baW_?aMZ%= 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 delta 61723 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 diff --git a/Telegram/SourceFiles/autoupdater.cpp b/Telegram/SourceFiles/autoupdater.cpp index 87cdba144..a84b3ca54 100644 --- a/Telegram/SourceFiles/autoupdater.cpp +++ b/Telegram/SourceFiles/autoupdater.cpp @@ -16,13 +16,13 @@ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014 John Preston, https://desktop.telegram.org */ -#ifndef TDESKTOP_DISABLE_AUTOUPDATE - #include "stdafx.h" #include "application.h" #include "pspecific.h" #include "autoupdater.h" +#ifndef TDESKTOP_DISABLE_AUTOUPDATE + #ifdef Q_OS_WIN typedef DWORD VerInt; typedef WCHAR VerChar; diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 6b9d80a95..974c4127d 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org */ #pragma once -static const int32 AppVersion = 8052; -static const wchar_t *AppVersionStr = L"0.8.52"; -static const bool DevVersion = false; +static const int32 AppVersion = 8053; +static const wchar_t *AppVersionStr = L"0.8.53"; +static const bool DevVersion = true; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; @@ -81,6 +81,7 @@ enum { AutoSearchTimeout = 900, // 0.9 secs SearchPerPage = 50, SearchManyPerPage = 100, + LinksOverviewPerPage = 12, MediaOverviewStartPerPage = 5, MediaOverviewPreloadCount = 4, diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index e28b385aa..f2c626da4 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -1700,7 +1700,6 @@ bool DialogsWidget::onSearchMessages(bool searchCache) { return false; } - void DialogsWidget::onNeedSearchMessages() { if (!onSearchMessages(true)) { _searchTimer.start(AutoSearchTimeout); diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index 9d3e3355c..ef42afe58 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -20,6 +20,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "lang.h" +#include "pspecific.h" + #include namespace { @@ -788,6 +790,15 @@ void TextLink::onClick(Qt::MouseButton button) const { } } +void EmailLink::onClick(Qt::MouseButton button) const { + if (button == Qt::LeftButton || button == Qt::MiddleButton) { + QUrl url(qstr("mailto:") + _email); + if (!QDesktopServices::openUrl(url)) { + psOpenFile(url.toString(QUrl::FullyEncoded), true); + } + } +} + void MentionLink::onClick(Qt::MouseButton button) const { if (button == Qt::LeftButton || button == Qt::MiddleButton) { App::openUserByName(_tag.mid(1), true); diff --git a/Telegram/SourceFiles/gui/text.h b/Telegram/SourceFiles/gui/text.h index 30304541c..3fd48128e 100644 --- a/Telegram/SourceFiles/gui/text.h +++ b/Telegram/SourceFiles/gui/text.h @@ -369,11 +369,7 @@ public: return _email; } - void onClick(Qt::MouseButton button) const { - if (button == Qt::LeftButton || button == Qt::MiddleButton) { - QDesktopServices::openUrl(qsl("mailto:") + _email); - } - } + void onClick(Qt::MouseButton button) const; const QString &readable() const { return _email; diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index f3ae1a3c0..26a684d24 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -644,12 +644,24 @@ HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, boo } const MTPMessageMedia *media = 0; + const QVector *entities = 0; switch (msg.type()) { - case mtpc_message: media = &msg.c_message().vmedia; break; + case mtpc_message: + media = &msg.c_message().vmedia; + entities = msg.c_message().has_entities() ? (&msg.c_message().ventities.c_vector().v) : 0; + break; } if (media) { existing->updateMedia(*media); } + if (entities && !existing->hasTextLinks()) { // index forwarded messages to links overview + existing->setText(qs(msg.c_message().vmessage), linksFromMTP(*entities)); + existing->initDimensions(0); + if (App::main()) App::main()->itemResized(existing); + if (existing->hasTextLinks()) { + existing->history()->addToOverview(existing, OverviewLinks); + } + } return (returnExisting || regged) ? existing : 0; } @@ -888,6 +900,24 @@ void History::createInitialDateBlock(const QDateTime &date) { push_front(dateBlock); // date block } +void History::addToOverview(HistoryItem *item, MediaOverviewType type) { + if (_overviewIds[type].constFind(item->id) == _overviewIds[type].cend()) { + _overview[type].push_back(item->id); + _overviewIds[type].insert(item->id, NullType()); + if (_overviewCount[type] > 0) ++_overviewCount[type]; + if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, type); + } +} + +bool History::addToOverviewFront(HistoryItem *item, MediaOverviewType type) { + if (_overviewIds[type].constFind(item->id) == _overviewIds[type].cend()) { + _overview[type].push_front(item->id); + _overviewIds[type].insert(item->id, NullType()); + return true; + } + return false; +} + HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem *adding, bool newMsg) { if (!adding) { if (newBlock) delete to; @@ -928,31 +958,14 @@ HistoryItem *History::doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem * HistoryMediaType mt = media->type(); MediaOverviewType t = mediaToOverviewType(mt); if (t != OverviewCount) { - if (_overviewIds[t].constFind(adding->id) == _overviewIds[t].cend()) { - _overview[t].push_back(adding->id); - _overviewIds[t].insert(adding->id, NullType()); - if (_overviewCount[t] > 0) ++_overviewCount[t]; - if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, t); - } + addToOverview(adding, t); if (mt == MediaTypeDocument && static_cast(media)->document()->song()) { - t = OverviewAudioDocuments; - if (_overviewIds[t].constFind(adding->id) == _overviewIds[t].cend()) { - _overview[t].push_back(adding->id); - _overviewIds[t].insert(adding->id, NullType()); - if (_overviewCount[t] > 0) ++_overviewCount[t]; - if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, t); - } + addToOverview(adding, OverviewAudioDocuments); } } } if (adding->hasTextLinks()) { - MediaOverviewType t = OverviewLinks; - if (_overviewIds[t].constFind(adding->id) == _overviewIds[t].cend()) { - _overview[t].push_back(adding->id); - _overviewIds[t].insert(adding->id, NullType()); - if (_overviewCount[t] > 0) ++_overviewCount[t]; - if (App::wnd()) App::wnd()->mediaOverviewUpdated(peer, t); - } + addToOverview(adding, OverviewLinks); } if (adding->from()->id) { if (peer->chat) { @@ -1102,28 +1115,14 @@ void History::addToFront(const QVector &slice) { HistoryMediaType mt = media->type(); MediaOverviewType t = mediaToOverviewType(mt); if (t != OverviewCount) { - if (_overviewIds[t].constFind(item->id) == _overviewIds[t].cend()) { - _overview[t].push_front(item->id); - _overviewIds[t].insert(item->id, NullType()); - mask |= (1 << t); - } + if (addToOverviewFront(item, t)) mask |= (1 << t); if (mt == MediaTypeDocument && static_cast(media)->document()->song()) { - t = OverviewAudioDocuments; - if (_overviewIds[t].constFind(item->id) == _overviewIds[t].cend()) { - _overview[t].push_front(item->id); - _overviewIds[t].insert(item->id, NullType()); - mask |= (1 << t); - } + if (addToOverviewFront(item, OverviewAudioDocuments)) mask |= (1 << OverviewAudioDocuments); } } } if (item->hasTextLinks()) { - MediaOverviewType t = OverviewLinks; - if (_overviewIds[t].constFind(item->id) == _overviewIds[t].cend()) { - _overview[t].push_front(item->id); - _overviewIds[t].insert(item->id, NullType()); - mask |= (1 << t); - } + if (addToOverviewFront(item, OverviewLinks)) mask |= (1 << OverviewLinks); } if (item->from()->id) { if (lastAuthors) { // chats @@ -1348,7 +1347,7 @@ void History::setUnreadCount(int32 newUnreadCount, bool psUpdate) { App::histories().unreadFull += newUnreadCount - unreadCount; if (mute) App::histories().unreadMuted += newUnreadCount - unreadCount; unreadCount = newUnreadCount; - if (psUpdate) App::wnd()->updateCounter(); + if (psUpdate && (!mute || cIncludeMuted())) App::wnd()->updateCounter(); if (unreadBar) unreadBar->setCount(unreadCount); } } @@ -5273,6 +5272,12 @@ void HistoryMessage::setText(const QString &text, const LinksInText &links) { } } +void HistoryMessage::getTextWithLinks(QString &text, LinksInText &links) { + if (_text.isEmpty()) return; + links = _text.calcLinksInText(); + text = _text.original(); +} + void HistoryMessage::draw(QPainter &p, uint32 selection) const { textstyleSet(&(out() ? st::outTextStyle : st::inTextStyle)); diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index bcdcc1e3b..3f1fe63c6 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -185,6 +185,8 @@ struct History : public QList { void addToBack(const QVector &slice); void createInitialDateBlock(const QDateTime &date); HistoryItem *doAddToBack(HistoryBlock *to, bool newBlock, HistoryItem *adding, bool newMsg); + void addToOverview(HistoryItem *item, MediaOverviewType type); + bool addToOverviewFront(HistoryItem *item, MediaOverviewType type); void newItemAdded(HistoryItem *item); void unregTyping(UserData *from); @@ -782,6 +784,8 @@ public: } virtual void setText(const QString &text, const LinksInText &links) { } + virtual void getTextWithLinks(QString &text, LinksInText &links) { + } virtual QString time() const { return QString(); } @@ -1181,6 +1185,10 @@ public: } ImagePtr replyPreview(); + WebPageData *webpage() { + return data; + } + private: WebPageData *data; TextLinkPtr _openl, _photol; @@ -1328,6 +1336,7 @@ public: HistoryMedia *getMedia(bool inOverview = false) const; void setMedia(const MTPmessageMedia &media); void setText(const QString &text, const LinksInText &links); + void getTextWithLinks(QString &text, LinksInText &links); QString time() const { return _time; diff --git a/Telegram/SourceFiles/localstorage.cpp b/Telegram/SourceFiles/localstorage.cpp index a1eb4837a..abb7952db 100644 --- a/Telegram/SourceFiles/localstorage.cpp +++ b/Telegram/SourceFiles/localstorage.cpp @@ -730,6 +730,14 @@ namespace { cSetSoundNotify(v == 1); } break; + case dbiIncludeMuted: { + qint32 v; + stream >> v; + if (!_checkStreamStatus(stream)) return false; + + cSetIncludeMuted(v == 1); + } break; + case dbiDesktopNotify: { qint32 v; stream >> v; @@ -1281,7 +1289,7 @@ namespace { _writeMap(WriteMapFast); } - uint32 size = 13 * (sizeof(quint32) + sizeof(qint32)); + uint32 size = 14 * (sizeof(quint32) + sizeof(qint32)); size += sizeof(quint32) + _stringSize(cAskDownloadPath() ? QString() : cDownloadPath()); size += sizeof(quint32) + sizeof(qint32) + (cRecentEmojisPreload().isEmpty() ? cGetRecentEmojis().size() : cRecentEmojisPreload().size()) * (sizeof(uint64) + sizeof(ushort)); size += sizeof(quint32) + sizeof(qint32) + cEmojiVariants().size() * (sizeof(uint32) + sizeof(uint64)); @@ -1295,6 +1303,7 @@ namespace { data.stream << quint32(dbiReplaceEmojis) << qint32(cReplaceEmojis() ? 1 : 0); data.stream << quint32(dbiDefaultAttach) << qint32(cDefaultAttach()); data.stream << quint32(dbiSoundNotify) << qint32(cSoundNotify()); + data.stream << quint32(dbiIncludeMuted) << qint32(cIncludeMuted()); data.stream << quint32(dbiDesktopNotify) << qint32(cDesktopNotify()); data.stream << quint32(dbiNotifyView) << qint32(cNotifyView()); data.stream << quint32(dbiWindowsNotifications) << qint32(cWindowsNotifications()); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index cd103a019..81ed01580 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -1183,6 +1183,7 @@ void MainWidget::mediaOverviewUpdated(PeerData *peer, MediaOverviewType type) { case OverviewVideos: connect(_mediaType.addButton(new IconedButton(this, st::dropdownMediaVideos, lang(lng_media_type_videos))), SIGNAL(clicked()), this, SLOT(onVideosSelect())); break; case OverviewDocuments: connect(_mediaType.addButton(new IconedButton(this, st::dropdownMediaDocuments, lang(lng_media_type_files))), SIGNAL(clicked()), this, SLOT(onDocumentsSelect())); break; case OverviewAudios: connect(_mediaType.addButton(new IconedButton(this, st::dropdownMediaAudios, lang(lng_media_type_audios))), SIGNAL(clicked()), this, SLOT(onAudiosSelect())); break; + case OverviewLinks: connect(_mediaType.addButton(new IconedButton(this, st::dropdownMediaLinks, lang(lng_media_type_links))), SIGNAL(clicked()), this, SLOT(onLinksSelect())); break; } } } @@ -1203,6 +1204,9 @@ void MainWidget::itemRemoved(HistoryItem *item) { if (history.peer() == item->history()->peer) { history.itemRemoved(item); } + if (overview && overview->peer() == item->history()->peer) { + overview->itemRemoved(item); + } itemRemovedGif(item); if (!_toForward.isEmpty()) { SelectedItemSet::iterator i = _toForward.find(item->id); @@ -2240,9 +2244,13 @@ void MainWidget::sentDataReceived(uint64 randomId, const MTPmessages_SentMessage if (!text.isEmpty() && !links.isEmpty()) { item = App::histItemById(d.vid.v); if (item) { + bool was = item->hasTextLinks(); item->setText(text, links); item->initDimensions(0); itemResized(item); + if (!was && item->hasTextLinks()) { + item->history()->addToOverview(item, OverviewLinks); + } } } } @@ -2273,9 +2281,13 @@ void MainWidget::sentDataReceived(uint64 randomId, const MTPmessages_SentMessage //if (!text.isEmpty() && !links.isEmpty()) { // item = App::histItemById(d.vid.v); // if (item) { + // bool was = item->hasTextLinks(); // item->setText(text, links); // item->initDimensions(0); // itemResized(item); + // if (!was && item->hasTextLinks()) { + // item->history()->addToOverview(item, OverviewLinks); + // } // } //} } @@ -2544,6 +2556,11 @@ void MainWidget::onAudiosSelect() { _mediaType.hideStart(); } +void MainWidget::onLinksSelect() { + if (overview) overview->switchType(OverviewLinks); + _mediaType.hideStart(); +} + TopBarWidget *MainWidget::topBar() { return &_topBar; } @@ -3389,7 +3406,7 @@ void MainWidget::handleUpdates(const MTPUpdates &updates) { 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, 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)); if (item) { history.peerMessagesUpdated(item->history()->peer->id); } @@ -3409,7 +3426,7 @@ void MainWidget::handleUpdates(const MTPUpdates &updates) { _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, 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)); if (item) { history.peerMessagesUpdated(item->history()->peer->id); } diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index 9fec76a31..73491c1c4 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -429,6 +429,7 @@ public slots: void onVideosSelect(); void onDocumentsSelect(); void onAudiosSelect(); + void onLinksSelect(); void onForwardCancel(QObject *obj = 0); diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index cbc3d25f9..26f0b9859 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -27,6 +27,103 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "application.h" #include "gui/filedialog.h" +OverviewInner::CachedLink::CachedLink(HistoryItem *item) : text(st::msgMinWidth) { + QString msgText; + LinksInText msgLinks; + item->getTextWithLinks(msgText, msgLinks); + int32 from = 0, till = msgText.size(), lnk = msgLinks.size(); + for (int32 i = 0; i < lnk; ++i) { + if (msgLinks[i].type != LinkInTextUrl && msgLinks[i].type != LinkInTextCustomUrl && msgLinks[i].type != LinkInTextEmail) { + continue; + } + QString url = msgLinks[i].text, text = msgText.mid(msgLinks[i].offset, msgLinks[i].length); + urls.push_back(Link(url.isEmpty() ? text : url, text)); + } + while (lnk > 0 && till > from) { + --lnk; + if (msgLinks[lnk].type != LinkInTextUrl && msgLinks[lnk].type != LinkInTextCustomUrl && msgLinks[lnk].type != LinkInTextEmail) { + ++lnk; + break; + } + int32 afterLinkStart = msgLinks[lnk].offset + msgLinks[lnk].length; + if (till > afterLinkStart) { + if (!QRegularExpression(qsl("^[,.\\s_=+\\-;:`'\"\\(\\)\\[\\]\\{\\}<>*&^%\\$#@!\\\\/]+$")).match(msgText.mid(afterLinkStart, till - afterLinkStart)).hasMatch()) { + ++lnk; + break; + } + } + till = msgLinks[lnk].offset; + } + if (!lnk) { + if (QRegularExpression(qsl("^[,.\\s\\-;:`'\"\\(\\)\\[\\]\\{\\}<>*&^%\\$#@!\\\\/]+$")).match(msgText.mid(from, till - from)).hasMatch()) { + till = from; + } + } + + HistoryMedia *media = item->getMedia(); + page = (media && media->type() == MediaTypeWebPage) ? static_cast(media)->webpage() : 0; + if (from >= till && page) { + msgText = page->description; + from = 0; + till = msgText.size(); + } + if (till > from) { + TextParseOptions opts = { TextParseMultiline, st::linksMaxWidth, 3 * st::msgFont->height, Qt::LayoutDirectionAuto }; + text.setText(st::msgFont, msgText.mid(from, till - from), opts); + } + if (page && page->photo) { + if (!page->photo->full->loaded()) page->photo->medium->load(false, false); + + int32 tw = convertScale(page->photo->medium->width()), th = convertScale(page->photo->medium->height()); + if (tw > st::dlgPhotoSize) { + if (th > tw) { + th = th * st::dlgPhotoSize / tw; + tw = st::dlgPhotoSize; + } else if (th > st::dlgPhotoSize) { + tw = tw * st::dlgPhotoSize / th; + th = st::dlgPhotoSize; + } + } + pixw = tw; + pixh = th; + if (pixw < 1) pixw = 1; + if (pixh < 1) pixh = 1; + } + + if (page) { + title = page->title; + } + QVector parts = (page ? page->url : (urls.isEmpty() ? QString() : urls.at(0).url)).splitRef('/'); + if (!parts.isEmpty()) { + QStringRef domain = parts.at(0); + if (parts.size() > 2 && domain.endsWith(':') && parts.at(1).isEmpty()) { // http:// and others + domain = parts.at(2); + } + + parts = domain.split('@').back().split('.'); + if (parts.size() > 1) { + letter = parts.at(parts.size() - 2).at(0).toUpper(); + if (title.isEmpty()) { + title.reserve(parts.at(parts.size() - 2).size()); + title.append(letter).append(parts.at(parts.size() - 2).mid(1)); + } + } + } + titleWidth = st::webPageTitleFont->m.width(title); +} + +int32 OverviewInner::CachedLink::countHeight(int32 w) { + int32 result = 0; + if (!title.isEmpty()) { + result += st::webPageTitleFont->height; + } + if (!text.isEmpty()) { + result += qMin(3 * st::msgFont->height, text.countHeight(w - st::dlgPhotoSize - st::dlgPhotoPadding)); + } + result += urls.size() * st::msgFont->height; + return qMax(result, int(st::dlgPhotoSize)) + st::linksMargin * 2 + st::linksBorder; +} + // flick scroll taken from http://qt-project.org/doc/qt-4.8/demos-embedded-anomaly-src-flickcharm-cpp.html OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const PeerData *peer, MediaOverviewType type) : QWidget(0) @@ -43,6 +140,16 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const , _audioLeft(st::msgMargin.left()) , _audioWidth(st::msgMinWidth) , _audioHeight(st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom()) + , _linksLeft(st::linksSearchMargin.left()) + , _linksWidth(st::msgMinWidth) + , _search(this, st::dlgFilter, lang(lng_dlg_filter)) + , _cancelSearch(this, st::btnCancelSearch) + , _itemsToBeLoaded(LinksOverviewPerPage * 2) + , _inSearch(false) + , _searchFull(false) + , _searchRequest(0) + , _lastSearchId(0) + , _searchedCount(0) , _width(st::wndMinWidth) , _height(0) , _minHeight(0) @@ -53,6 +160,8 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const , _dragItemIndex(-1) , _mousedItem(0) , _mousedItemIndex(-1) + , _lnkOverIndex(0) + , _lnkDownIndex(0) , _dragWasInactive(false) , _dragSelFrom(0) , _dragSelTo(0) @@ -81,8 +190,18 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const mediaOverviewUpdated(); setMouseTracking(true); - if (_type == OverviewAudioDocuments) { + connect(&_cancelSearch, SIGNAL(clicked()), this, SLOT(onCancelSearch())); + connect(&_search, SIGNAL(cancelled()), this, SLOT(onCancel())); + connect(&_search, SIGNAL(changed()), this, SLOT(onSearchUpdate())); + _searchTimer.setSingleShot(true); + connect(&_searchTimer, SIGNAL(timeout()), this, SLOT(onSearchMessages())); + + _cancelSearch.hide(); + if (_type == OverviewLinks) { + _search.show(); + } else { + _search.hide(); } } @@ -165,6 +284,87 @@ void OverviewInner::fixItemIndex(int32 ¤t, MsgId msgId) const { } } +void OverviewInner::searchReceived(bool fromStart, const MTPmessages_Messages &result, mtpRequestId req) { + if (fromStart && !_search.text().isEmpty()) { + SearchQueries::iterator i = _searchQueries.find(req); + if (i != _searchQueries.cend()) { + _searchCache[i.value()] = result; + _searchQueries.erase(i); + } + } + + if (_searchRequest == req) { + const QVector *messages = 0; + switch (result.type()) { + case mtpc_messages_messages: { + App::feedUsers(result.c_messages_messages().vusers); + App::feedChats(result.c_messages_messages().vchats); + messages = &result.c_messages_messages().vmessages.c_vector().v; + _searchedCount = messages->size(); + } break; + + case mtpc_messages_messagesSlice: { + App::feedUsers(result.c_messages_messagesSlice().vusers); + App::feedChats(result.c_messages_messagesSlice().vchats); + messages = &result.c_messages_messagesSlice().vmessages.c_vector().v; + _searchedCount = result.c_messages_messagesSlice().vcount.v; + } break; + } + if (messages) { + if (messages->isEmpty()) { + _searchFull = true; + } + if (fromStart) { + _searchResults.clear(); + _lastSearchId = 0; + _itemsToBeLoaded = LinksOverviewPerPage * 2; + } + for (QVector::const_iterator i = messages->cbegin(), e = messages->cend(); i != e; ++i) { + HistoryItem *item = App::histories().addToBack(*i, -1); + _searchResults.push_front(item->id); + _lastSearchId = item->id; + } + mediaOverviewUpdated(); + } + + _searchRequest = 0; + _overview->onScroll(); + } +} + +bool OverviewInner::searchFailed(const RPCError &error, mtpRequestId req) { + if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; + + if (_searchRequest == req) { + _searchRequest = 0; + _searchFull = true; + } + return true; +} + +OverviewInner::CachedLink *OverviewInner::cachedLink(HistoryItem *item) { + CachedLinks::const_iterator i = _links.constFind(item->id); + if (i == _links.cend()) i = _links.insert(item->id, new CachedLink(item)); + return i.value(); +} + +QString OverviewInner::urlByIndex(MsgId msgid, int32 index, int32 lnkIndex) const { + fixItemIndex(index, msgid); + if (index < 0 || !_items[index].link) return QString(); + + if (lnkIndex < 0 && _items[index].link->page) { + return _items[index].link->page->url; + } else if (lnkIndex > 0 && lnkIndex <= _items[index].link->urls.size()) { + return _items[index].link->urls.at(lnkIndex - 1).url; + } + return QString(); +} + +bool OverviewInner::urlIsEmail(const QString &url) const { + int32 at = url.indexOf('@'), slash = url.indexOf('/'); + return (at > 0) && (slash < 0 || slash > at); +} + bool OverviewInner::itemHasPoint(MsgId msgId, int32 index, int32 x, int32 y) const { fixItemIndex(index, msgId); if (index < 0) return false; @@ -177,6 +377,10 @@ bool OverviewInner::itemHasPoint(MsgId msgId, int32 index, int32 x, int32 y) con if (x >= _audioLeft && x < _audioLeft + _audioWidth && y >= 0 && y < _audioHeight) { return true; } + } else if (_type == OverviewLinks) { + if (x >= _linksLeft && x < _linksLeft + _linksWidth && y >= 0 && y < itemHeight(msgId, index)) { + return true; + } } else { HistoryItem *item = App::histItemById(msgId); HistoryMedia *media = item ? item->getMedia(true) : 0; @@ -201,6 +405,9 @@ int32 OverviewInner::itemHeight(MsgId msgId, int32 index) const { } fixItemIndex(index, msgId); + if (_type == OverviewLinks) { + return (index < 0) ? 0 : ((index + 1 < _items.size() ? _items[index + 1].y : (_height - _addToY)) - _items[index].y); + } return (index < 0) ? 0 : (_items[index].y - (index > 0 ? _items[index - 1].y : 0)); } @@ -249,11 +456,10 @@ void OverviewInner::updateMsg(MsgId itemId, int32 itemIndex) { update(int32(col * w), _addToY + int32(row * vsize), qCeil(w), vsize); } else if (_type == OverviewAudioDocuments) { update(_audioLeft, _addToY + int32(itemIndex * _audioHeight), _audioWidth, _audioHeight); + } else if (_type == OverviewLinks) { + update(_linksLeft, _addToY + _items[itemIndex].y, _linksWidth, itemHeight(itemId, itemIndex)); } else { - HistoryItem *item = App::histItemById(itemId); - HistoryMedia *media = item ? item->getMedia(true) : 0; - int32 w = _width - st::msgMargin.left() - st::msgMargin.right(); - if (media) update(0, _addToY + _height - _items[itemIndex].y, _width, media->countHeight(item, w) + st::msgMargin.top() + st::msgMargin.bottom()); + update(0, _addToY + _height - _items[itemIndex].y, _width, itemHeight(itemId, itemIndex)); } } } @@ -377,6 +583,11 @@ void OverviewInner::dragActionStart(const QPoint &screenPos, Qt::MouseButton but App::pressedLinkItem(App::hoveredLinkItem()); updateMsg(App::pressedLinkItem()); } + if (_lnkDownIndex != _lnkOverIndex) { + if (_dragItem) updateMsg(_dragItem, _dragItemIndex); + _lnkDownIndex = _lnkOverIndex; + if (_mousedItem) updateMsg(_mousedItem, _mousedItemIndex); + } _dragAction = NoDrag; _dragItem = _mousedItem; @@ -384,11 +595,11 @@ void OverviewInner::dragActionStart(const QPoint &screenPos, Qt::MouseButton but _dragStartPos = mapMouseToItem(mapFromGlobal(screenPos), _dragItem, _dragItemIndex); _dragWasInactive = App::wnd()->inactivePress(); if (_dragWasInactive) App::wnd()->inactivePress(false); - if (textlnkDown() && _selected.isEmpty()) { + if ((textlnkDown() || _lnkDownIndex) && _selected.isEmpty()) { _dragAction = PrepareDrag; } else if (!_selected.isEmpty()) { if (_selected.cbegin().value() == FullItemSel) { - if (_selected.constFind(_dragItem) != _selected.cend() && textlnkDown()) { + if (_selected.constFind(_dragItem) != _selected.cend() && (textlnkDown() || _lnkDownIndex)) { _dragAction = PrepareDrag; // start items drag } else { _dragAction = PrepareSelect; // start items select @@ -399,7 +610,7 @@ void OverviewInner::dragActionStart(const QPoint &screenPos, Qt::MouseButton but bool afterDragSymbol = false , uponSymbol = false; uint16 symbol = 0; if (!_dragWasInactive) { - if (textlnkDown()) { + if (textlnkDown() || _lnkDownIndex) { _dragSymbol = symbol; uint32 selStatus = (_dragSymbol << 16) | _dragSymbol; if (selStatus != FullItemSel && (_selected.isEmpty() || _selected.cbegin().value() != FullItemSel)) { @@ -439,6 +650,7 @@ void OverviewInner::dragActionCancel() { void OverviewInner::dragActionFinish(const QPoint &screenPos, Qt::MouseButton button) { TextLinkPtr needClick; + int32 needClickIndex = 0; dragActionUpdate(screenPos); @@ -447,6 +659,11 @@ void OverviewInner::dragActionFinish(const QPoint &screenPos, Qt::MouseButton bu needClick = textlnkDown(); } } + if (_lnkOverIndex) { + if (_lnkDownIndex == _lnkOverIndex && _dragAction != Dragging && !_selMode) { + needClickIndex = _lnkDownIndex; + } + } if (textlnkDown()) { updateMsg(App::pressedLinkItem()); textlnkDown(TextLinkPtr()); @@ -456,11 +673,29 @@ void OverviewInner::dragActionFinish(const QPoint &screenPos, Qt::MouseButton bu setCursor(_cursor); } } + if (_lnkDownIndex) { + updateMsg(_dragItem, _dragItemIndex); + _lnkDownIndex = 0; + if (!_lnkOverIndex && _cursor != style::cur_default) { + _cursor = style::cur_default; + setCursor(_cursor); + } + } if (needClick) { needClick->onClick(button); dragActionCancel(); return; } + if (needClickIndex) { + QString url = urlByIndex(_dragItem, _dragItemIndex, needClickIndex); + if (urlIsEmail(url)) { + EmailLink(url).onClick(button); + } else { + TextLink(url).onClick(button); + } + dragActionCancel(); + return; + } if (_dragAction == PrepareSelect && !needClick && !_dragWasInactive && !_selected.isEmpty() && _selected.cbegin().value() == FullItemSel) { SelectedItems::iterator i = _selected.find(_dragItem); if (i == _selected.cend() && _dragItem > 0) { @@ -525,6 +760,16 @@ void OverviewInner::onDragExec() { } else if (textlnkDown()) { sel = textlnkDown()->encoded(); if (!sel.isEmpty() && sel.at(0) != '/' && sel.at(0) != '@' && sel.at(0) != '#') { +// urls.push_back(QUrl::fromEncoded(sel.toUtf8())); // Google Chrome crashes in Mac OS X O_o + } + } else if (_lnkDownIndex) { + QString url = urlByIndex(_dragItem, _dragItemIndex, _lnkDownIndex); + if (urlIsEmail(url)) { + sel = EmailLink(url).encoded(); + } else { + sel = TextLink(url).encoded(); + } + if (!sel.isEmpty() && sel.at(0) != '/' && sel.at(0) != '@' && sel.at(0) != '#') { // urls.push_back(QUrl::fromEncoded(sel.toUtf8())); // Google Chrome crashes in Mac OS X O_o } } @@ -542,6 +787,7 @@ void OverviewInner::onDragExec() { } drag->setMimeData(mimeData); drag->exec(Qt::CopyAction); + dragActionUpdate(QCursor::pos()); return; } else { HistoryItem *pressedLnkItem = App::pressedLinkItem(), *pressedItem = App::pressedItem(); @@ -566,6 +812,7 @@ void OverviewInner::onDragExec() { drag->setMimeData(mimeData); drag->exec(Qt::CopyAction); + dragActionUpdate(QCursor::pos()); return; } } @@ -629,12 +876,22 @@ QPoint OverviewInner::mapMouseToItem(QPoint p, MsgId itemId, int32 itemIndex) { p.setY(p.y() - _addToY - row * (_vsize + st::overviewPhotoSkip) - st::overviewPhotoSkip); } else if (_type == OverviewAudioDocuments) { p.setY(p.y() - _addToY - itemIndex * _audioHeight); + } else if (_type == OverviewLinks) { + p.setY(p.y() - _addToY - _items[itemIndex].y); } else { p.setY(p.y() - _addToY - (_height - _items[itemIndex].y)); } return p; } +void OverviewInner::activate() { + if (_type == OverviewLinks) { + _search.setFocus(); + } else { + setFocus(); + } +} + void OverviewInner::clear() { _cached.clear(); } @@ -649,6 +906,27 @@ int32 OverviewInner::itemTop(MsgId msgId) const { return -1; } +void OverviewInner::preloadMore() { + if (_inSearch) { + if (!_searchRequest && !_searchFull) { + _searchRequest = MTP::send(MTPmessages_Search(_hist->peer->input, MTP_string(_searchQuery), MTP_inputMessagesFilterUrl(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(_lastSearchId), MTP_int(SearchPerPage)), rpcDone(&OverviewInner::searchReceived, !_lastSearchId), rpcFail(&OverviewInner::searchFailed)); + if (!_lastSearchId) { + _searchQueries.insert(_searchRequest, _searchQuery); + } + } + } else if (App::main()) { + App::main()->loadMediaBack(_hist->peer, _type, _type != OverviewLinks); + } +} + +bool OverviewInner::preloadLocal() { + if (_type != OverviewLinks) return false; + if (_itemsToBeLoaded >= _hist->_overview[_type].size()) return false; + _itemsToBeLoaded += LinksOverviewPerPage; + mediaOverviewUpdated(); + return true; +} + QPixmap OverviewInner::genPix(PhotoData *photo, int32 size) { size *= cIntRetinaFactor(); QImage img = (photo->full->loaded() ? photo->full : (photo->medium->loaded() ? photo->medium : photo->thumb))->pix().toImage(); @@ -680,6 +958,11 @@ void OverviewInner::paintEvent(QPaintEvent *e) { QPoint dogPos((_width - st::msgDogImg.pxWidth()) / 2, ((height() - st::msgDogImg.pxHeight()) * 4) / 9); p.drawPixmap(dogPos, *cChatDogImage()); return; + } else if (_inSearch && _searchResults.isEmpty() && _searchFull && !_searchTimer.isActive()) { + p.setFont(st::noContactsFont->f); + p.setPen(st::noContactsColor->p); + p.drawText(QRect(_linksLeft, _addToY, _linksWidth, _addToY), lng_search_found_results(lt_count, 0), style::al_center); + return; } int32 selfrom = -1, selto = -1; @@ -766,9 +1049,9 @@ void OverviewInner::paintEvent(QPaintEvent *e) { } if (sel == FullItemSel) { p.fillRect(QRect(pos.x(), pos.y(), _vsize, _vsize), st::overviewPhotoSelectOverlay->b); - p.drawPixmap(QPoint(pos.x() + _vsize - st::overviewPhotoChecked.pxWidth(), pos.y() + _vsize - st::overviewPhotoChecked.pxHeight()), App::sprite(), st::overviewPhotoChecked); + p.drawPixmap(QPoint(pos.x() + _vsize - st::overviewPhotoCheck.pxWidth(), pos.y() + _vsize - st::overviewPhotoCheck.pxHeight()), App::sprite(), st::overviewPhotoChecked); } else if (_selMode/* || (selfrom < count && selfrom <= selto && 0 <= selto)*/) { - p.drawPixmap(QPoint(pos.x() + _vsize - st::overviewPhotoChecked.pxWidth(), pos.y() + _vsize - st::overviewPhotoChecked.pxHeight()), App::sprite(), st::overviewPhotoCheck); + p.drawPixmap(QPoint(pos.x() + _vsize - st::overviewPhotoCheck.pxWidth(), pos.y() + _vsize - st::overviewPhotoCheck.pxHeight()), App::sprite(), st::overviewPhotoCheck); } } break; } @@ -800,6 +1083,95 @@ void OverviewInner::paintEvent(QPaintEvent *e) { static_cast(m)->drawInPlaylist(p, item, (sel == FullItemSel), ((_menu ? (App::contextItem() ? App::contextItem()->id : 0) : _selectedMsgId) == item->id), _audioWidth); p.translate(0, _audioHeight); } + } else if (_type == OverviewLinks) { + p.translate(_linksLeft, _addToY); + int32 y = 0, w = _linksWidth; + for (int32 i = 0, l = _items.size(); i < l; ++i) { + if (i + 1 == l || _addToY + _items[i + 1].y > r.top()) { + int32 left = st::dlgPhotoSize + st::dlgPhotoPadding, top = st::linksMargin + st::linksBorder, curY = _items[i].y; + if (_addToY + curY >= r.bottom()) break; + + p.translate(0, curY - y); + if (_items[i].msgid) { // draw item + CachedLink *lnk = _items[i].link; + WebPageData *page = lnk->page; + if (page && page->photo) { + QPixmap pix; + if (page->photo->full->loaded()) { + pix = page->photo->full->pixSingle(lnk->pixw, lnk->pixh, st::dlgPhotoSize, st::dlgPhotoSize); + } else if (page->photo->medium->loaded()) { + pix = page->photo->medium->pixSingle(lnk->pixw, lnk->pixh, st::dlgPhotoSize, st::dlgPhotoSize); + } else { + pix = page->photo->thumb->pixBlurredSingle(lnk->pixw, lnk->pixh, st::dlgPhotoSize, st::dlgPhotoSize); + } + p.drawPixmap(0, top, pix); + } else { + int32 index = lnk->letter.isEmpty() ? 0 : (lnk->letter.at(0).unicode() % 4); + switch (index) { + case 0: App::roundRect(p, QRect(0, top, st::dlgPhotoSize, st::dlgPhotoSize), st::mvDocRedColor, DocRedCorners); break; + case 1: App::roundRect(p, QRect(0, top, st::dlgPhotoSize, st::dlgPhotoSize), st::mvDocYellowColor, DocYellowCorners); break; + case 2: App::roundRect(p, QRect(0, top, st::dlgPhotoSize, st::dlgPhotoSize), st::mvDocGreenColor, DocGreenCorners); break; + case 3: App::roundRect(p, QRect(0, top, st::dlgPhotoSize, st::dlgPhotoSize), st::mvDocBlueColor, DocBlueCorners); break; + } + + if (!lnk->letter.isEmpty()) { + p.setFont(st::linksLetterFont->f); + p.setPen(st::white->p); + p.drawText(QRect(0, top, st::dlgPhotoSize, st::dlgPhotoSize), lnk->letter, style::al_center); + } + } + + uint32 sel = 0; + if (i >= selfrom && i <= selto) { + sel = (_dragSelecting && _items[i].msgid > 0) ? FullItemSel : 0; + } else if (hasSel) { + SelectedItems::const_iterator j = _selected.constFind(_items[i].msgid); + if (j != selEnd) { + sel = j.value(); + } + } + if (sel == FullItemSel) { + App::roundRect(p, QRect(0, top, st::dlgPhotoSize, st::dlgPhotoSize), st::overviewPhotoSelectOverlay, PhotoSelectOverlayCorners); + p.drawPixmap(QPoint(st::dlgPhotoSize - st::linksPhotoCheck.pxWidth(), top + st::dlgPhotoSize - st::linksPhotoCheck.pxHeight()), App::sprite(), st::linksPhotoChecked); + } else if (_selMode/* || (selfrom < count && selfrom <= selto && 0 <= selto)*/) { + p.drawPixmap(QPoint(st::dlgPhotoSize - st::linksPhotoCheck.pxWidth(), top + st::dlgPhotoSize - st::linksPhotoCheck.pxHeight()), App::sprite(), st::linksPhotoCheck); + } + + if (!lnk->title.isEmpty() && lnk->text.isEmpty() && lnk->urls.size() == 1) { + top += (st::dlgPhotoSize - st::webPageTitleFont->height - st::msgFont->height) / 2; + } + + p.setPen(st::black->p); + p.setFont(st::webPageTitleFont->f); + if (!lnk->title.isEmpty()) { + p.drawText(left, top + st::webPageTitleFont->ascent, (_linksWidth - left < lnk->titleWidth) ? st::webPageTitleFont->m.elidedText(lnk->title, Qt::ElideRight, _linksWidth - left) : lnk->title); + top += st::webPageTitleFont->height; + } + p.setFont(st::msgFont->f); + if (!lnk->text.isEmpty()) { + lnk->text.drawElided(p, left, top, _linksWidth - left, 3); + top += qMin(st::msgFont->height * 3, lnk->text.countHeight(_linksWidth - left)); + } + + p.setPen(st::btnYesColor->p); + for (int32 j = 0, c = lnk->urls.size(); j < c; ++j) { + bool sel = (_mousedItem == _items[i].msgid && j + 1 == _lnkOverIndex); + if (sel) p.setFont(st::msgFont->underline()->f); + p.drawText(left, top + st::msgFont->ascent, (_linksWidth - left < lnk->urls[j].width) ? st::msgFont->m.elidedText(lnk->urls[j].text, Qt::ElideRight, _linksWidth - left) : lnk->urls[j].text); + if (sel) p.setFont(st::msgFont->f); + top += st::msgFont->height; + } + p.fillRect(left, _items[i].y - curY, _linksWidth - left, st::linksBorder, st::linksBorderColor->b); + } else { + QString str = langDayOfMonth(_items[i].date); + + p.setPen(st::linksDateColor->p); + p.setFont(st::msgFont->f); + p.drawText(0, st::linksDateMargin + st::msgFont->ascent, str); + } + y = curY; + } + } } else { p.translate(0, st::msgMargin.top() + _addToY); int32 y = 0, w = _width - st::msgMargin.left() - st::msgMargin.right(); @@ -876,6 +1248,7 @@ void OverviewInner::onUpdateSelected() { QPoint m(_overview->clampMousePosition(mousePos)); TextLinkPtr lnk; + int32 lnkIndex = 0; // for OverviewLinks HistoryItem *item = 0; int32 index = -1; int32 newsel = 0; @@ -888,8 +1261,6 @@ void OverviewInner::onUpdateSelected() { bool upon = true; int32 i = row * _photosInRow + inRow - _photosToAdd, count = _hist->_overview[_type].size(); - if (!count) return; - if (i < 0) { i = 0; upon = false; @@ -898,25 +1269,24 @@ void OverviewInner::onUpdateSelected() { i = count - 1; upon = false; } - MsgId msgid = _hist->_overview[_type][i]; - HistoryItem *histItem = App::histItemById(msgid); - if (histItem) { - item = histItem; - index = i; - if (upon && m.x() >= inRow * w + st::overviewPhotoSkip && m.x() < inRow * w + st::overviewPhotoSkip + _vsize) { - if (m.y() >= _addToY + row * vsize + st::overviewPhotoSkip && m.y() < _addToY + (row + 1) * vsize + st::overviewPhotoSkip) { - HistoryMedia *media = item->getMedia(true); - if (media && media->type() == MediaTypePhoto) { - lnk = static_cast(media)->lnk(); + if (i >= 0) { + MsgId msgid = _hist->_overview[_type][i]; + HistoryItem *histItem = App::histItemById(msgid); + if (histItem) { + item = histItem; + index = i; + if (upon && m.x() >= inRow * w + st::overviewPhotoSkip && m.x() < inRow * w + st::overviewPhotoSkip + _vsize) { + if (m.y() >= _addToY + row * vsize + st::overviewPhotoSkip && m.y() < _addToY + (row + 1) * vsize + st::overviewPhotoSkip) { + HistoryMedia *media = item->getMedia(true); + if (media && media->type() == MediaTypePhoto) { + lnk = static_cast(media)->lnk(); + } } } } - } else { - return; } } else if (_type == OverviewAudioDocuments) { int32 i = int32((m.y() - _addToY) / _audioHeight), count = _hist->_overview[_type].size(); - if (!count) return; bool upon = true; if (m.y() < _addToY) { @@ -927,42 +1297,82 @@ void OverviewInner::onUpdateSelected() { i = count - 1; upon = false; } - MsgId msgid = _hist->_overview[_type][i]; - HistoryItem *histItem = App::histItemById(msgid); - if (histItem) { - item = histItem; - index = i; - if (upon && m.x() >= _audioLeft && m.x() < _audioLeft + _audioWidth) { - HistoryMedia *media = item->getMedia(true); - if (media && media->type() == MediaTypeDocument) { - lnk = static_cast(media)->linkInPlaylist(); - newsel = item->id; + if (i >= 0) { + MsgId msgid = _hist->_overview[_type][i]; + HistoryItem *histItem = App::histItemById(msgid); + if (histItem) { + item = histItem; + index = i; + if (upon && m.x() >= _audioLeft && m.x() < _audioLeft + _audioWidth) { + HistoryMedia *media = item->getMedia(true); + if (media && media->type() == MediaTypeDocument) { + lnk = static_cast(media)->linkInPlaylist(); + newsel = item->id; + } } } - if (newsel != _selectedMsgId) { - updateMsg(App::histItemById(_selectedMsgId)); - _selectedMsgId = newsel; - updateMsg(item); + } + if (newsel != _selectedMsgId) { + if (_selectedMsgId) updateMsg(App::histItemById(_selectedMsgId)); + _selectedMsgId = newsel; + updateMsg(item); + } + } else if (_type == OverviewLinks) { + int32 w = _width - st::msgMargin.left() - st::msgMargin.right(); + for (int32 i = 0, l = _items.size(); i < l; ++i) { + if ((i + 1 == l) || (_addToY + _items[i + 1].y > m.y())) { + int32 left = st::dlgPhotoSize + st::dlgPhotoPadding, y = _addToY + _items[i].y; + if (!_items[i].msgid) { // day item + int32 h = 2 * st::linksDateMargin + st::msgFont->height;// itemHeight(_items[i].msgid, i); + if (i > 0 && ((y + h / 2) >= m.y() || i == _items.size() - 1)) { + --i; + if (!_items[i].msgid) break; // wtf + y = _addToY + _items[i].y; + } else if (i < _items.size() - 1 && ((y + h / 2) < m.y() || !i)) { + ++i; + if (!_items[i].msgid) break; // wtf + y = _addToY + _items[i].y; + } else { + break; // wtf + } + } + + HistoryItem *histItem = App::histItemById(_items[i].msgid); + if (histItem) { + item = histItem; + index = i; + + int32 top = y + st::linksMargin + st::linksBorder, left = _linksLeft + st::dlgPhotoSize + st::dlgPhotoPadding, w = _linksWidth - st::dlgPhotoSize - st::dlgPhotoPadding; + if (!_items[i].link->title.isEmpty() && _items[i].link->text.isEmpty() && _items[i].link->urls.size() == 1) { + top += (st::dlgPhotoSize - st::webPageTitleFont->height - st::msgFont->height) / 2; + } + if (QRect(_linksLeft, y + st::linksMargin + st::linksBorder, st::dlgPhotoSize, st::dlgPhotoSize).contains(m)) { + lnkIndex = -1; + } else if (!_items[i].link->title.isEmpty() && QRect(left, top, qMin(w, _items[i].link->titleWidth), st::webPageTitleFont->height).contains(m)) { + lnkIndex = -1; + } else { + if (!_items[i].link->title.isEmpty()) top += st::webPageTitleFont->height; + if (!_items[i].link->text.isEmpty()) top += qMin(st::msgFont->height * 3, _items[i].link->text.countHeight(w)); + for (int32 j = 0, c = _items[i].link->urls.size(); j < c; ++j) { + if (QRect(left, top, qMin(w, _items[i].link->urls[j].width), st::msgFont->height).contains(m)) { + lnkIndex = j + 1; + break; + } + top += st::msgFont->height; + } + } + } + break; } - } else { - if (newsel != _selectedMsgId) { - updateMsg(App::histItemById(_selectedMsgId)); - _selectedMsgId = newsel; - } - return; } } else { int32 w = _width - st::msgMargin.left() - st::msgMargin.right(); - if (_items.isEmpty()) return; - for (int32 i = _items.size(); i > 0;) { --i; if (!i || (_addToY + _height - _items[i - 1].y > m.y())) { int32 y = _addToY + _height - _items[i].y; - if (item) break; - if (!_items[i].msgid) { // day item - int32 h = itemHeight(_items[i].msgid, i); + int32 h = st::msgServiceFont->height + st::msgServicePadding.top() + st::msgServicePadding.bottom() + st::msgServiceMargin.top() + st::msgServiceMargin.bottom(); // itemHeight(_items[i].msgid, i); if (i > 0 && ((y + h / 2) < m.y() || i == _items.size() - 1)) { --i; if (!_items[i].msgid) break; // wtf @@ -995,13 +1405,14 @@ void OverviewInner::onUpdateSelected() { media->getState(link, cursorState, m.x() - left, m.y() - y - st::msgMargin.top(), item, w); if (link) lnk = link; } - } else { - return; } + break; } } } + MsgId oldMousedItem = _mousedItem; + int32 oldMousedItemIndex = _mousedItemIndex; _mousedItem = item ? item->id : 0; _mousedItemIndex = index; m = mapMouseToItem(m, _mousedItem, _mousedItemIndex); @@ -1017,11 +1428,17 @@ void OverviewInner::onUpdateSelected() { } else { App::mousedItem(item); } + if (lnkIndex != _lnkOverIndex || _mousedItem != oldMousedItem) { + lnkChanged = true; + if (oldMousedItem) updateMsg(App::histItemById(oldMousedItem)); + _lnkOverIndex = lnkIndex; + if (item) updateMsg(item); + } fixItemIndex(_dragItemIndex, _dragItem); fixItemIndex(_mousedItemIndex, _mousedItem); if (_dragAction == NoDrag) { - if (lnk) { + if (lnk || lnkIndex) { cur = style::cur_pointer; } } else { @@ -1037,15 +1454,15 @@ void OverviewInner::onUpdateSelected() { _dragAction = Selecting; } } - cur = textlnkDown() ? style::cur_pointer : style::cur_default; + cur = (textlnkDown() || _lnkDownIndex) ? style::cur_pointer : style::cur_default; if (_dragAction == Selecting) { - if (_mousedItem == _dragItem && lnk && !_selected.isEmpty() && _selected.cbegin().value() != FullItemSel) { + if (_mousedItem == _dragItem && (lnk || lnkIndex) && !_selected.isEmpty() && _selected.cbegin().value() != FullItemSel) { bool afterSymbol = false, uponSymbol = false; uint16 second = 0; _selected[_dragItem] = 0; updateDragSelection(0, -1, 0, -1, false); } else { - bool selectingDown = ((_type == OverviewPhotos || _type == OverviewAudioDocuments) ? (_mousedItemIndex > _dragItemIndex) : (_mousedItemIndex < _dragItemIndex)) || (_mousedItemIndex == _dragItemIndex && (_type == OverviewPhotos ? (_dragStartPos.x() < m.x()) : (_dragStartPos.y() < m.y()))); + bool selectingDown = ((_type == OverviewPhotos || _type == OverviewAudioDocuments || _type == OverviewLinks) ? (_mousedItemIndex > _dragItemIndex) : (_mousedItemIndex < _dragItemIndex)) || (_mousedItemIndex == _dragItemIndex && (_type == OverviewPhotos ? (_dragStartPos.x() < m.x()) : (_dragStartPos.y() < m.y()))); MsgId dragSelFrom = _dragItem, dragSelTo = _mousedItem; int32 dragSelFromIndex = _dragItemIndex, dragSelToIndex = _mousedItemIndex; if (!itemHasPoint(dragSelFrom, dragSelFromIndex, _dragStartPos.x(), _dragStartPos.y())) { // maybe exclude dragSelFrom @@ -1058,6 +1475,10 @@ void OverviewInner::onUpdateSelected() { if (_dragStartPos.y() >= itemHeight(dragSelFrom, dragSelFromIndex) || ((_mousedItem == dragSelFrom) && (m.y() < _dragStartPos.y() + QApplication::startDragDistance()))) { moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, 1); } + } else if (_type == OverviewLinks) { + if (_dragStartPos.y() >= itemHeight(dragSelFrom, dragSelFromIndex) || ((_mousedItem == dragSelFrom) && (m.y() < _dragStartPos.y() + QApplication::startDragDistance()))) { + moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, 1); + } } else { if (_dragStartPos.y() >= (itemHeight(dragSelFrom, dragSelFromIndex) - st::msgMargin.bottom()) || ((_mousedItem == dragSelFrom) && (m.y() < _dragStartPos.y() + QApplication::startDragDistance()))) { moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, -1); @@ -1072,6 +1493,10 @@ void OverviewInner::onUpdateSelected() { if (_dragStartPos.y() < 0 || ((_mousedItem == dragSelFrom) && (m.y() >= _dragStartPos.y() - QApplication::startDragDistance()))) { moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, -1); } + } else if (_type == OverviewLinks) { + if (_dragStartPos.y() < 0 || ((_mousedItem == dragSelFrom) && (m.y() >= _dragStartPos.y() - QApplication::startDragDistance()))) { + moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, -1); + } } else { if (_dragStartPos.y() < st::msgMargin.top() || ((_mousedItem == dragSelFrom) && (m.y() >= _dragStartPos.y() - QApplication::startDragDistance()))) { moveToNextItem(dragSelFrom, dragSelFromIndex, dragSelTo, 1); @@ -1089,6 +1514,10 @@ void OverviewInner::onUpdateSelected() { if (m.y() < 0) { moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); } + } else if (_type == OverviewLinks) { + if (m.y() < 0) { + moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, -1); + } } else { if (m.y() < st::msgMargin.top()) { moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); @@ -1100,6 +1529,10 @@ void OverviewInner::onUpdateSelected() { moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); } } else if (_type == OverviewAudioDocuments) { + if (m.y() >= itemHeight(dragSelTo, dragSelToIndex)) { + moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, -1); + } + } else if (_type == OverviewLinks) { if (m.y() >= itemHeight(dragSelTo, dragSelToIndex)) { moveToNextItem(dragSelTo, dragSelToIndex, dragSelFrom, 1); } @@ -1125,7 +1558,7 @@ void OverviewInner::onUpdateSelected() { } else if (_dragAction == Dragging) { } - if (textlnkDown()) { + if (textlnkDown() || _lnkDownIndex) { cur = style::cur_pointer; } else if (_dragAction == Selecting && !_selected.isEmpty() && _selected.cbegin().value() != FullItemSel) { if (!_dragSelFrom || !_dragSelTo) { @@ -1176,12 +1609,12 @@ void OverviewInner::mouseReleaseEvent(QMouseEvent *e) { } void OverviewInner::keyPressEvent(QKeyEvent *e) { - if (e->key() == Qt::Key_Escape || e->key() == Qt::Key_Back) { - if (_selected.isEmpty() || e->key() == Qt::Key_Back) { - App::main()->showBackFromStack(); - } else { - _overview->onClearSelected(); - } + if ((_search.isHidden() || !_search.hasFocus()) && !_overview->isHidden() && e->key() == Qt::Key_Escape) { + onCancel(); + } else if (e->key() == Qt::Key_Back) { + App::main()->showBackFromStack(); + } else if (e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) { + onSearchMessages(); } } @@ -1210,6 +1643,10 @@ void OverviewInner::resizeEvent(QResizeEvent *e) { _width = width(); _audioWidth = qMin(_width - st::profilePadding.left() - st::profilePadding.right(), int(st::profileMaxWidth)); _audioLeft = (_width - _audioWidth) / 2; + _linksWidth = qMin(_width - st::linksSearchMargin.left() - st::linksSearchMargin.right(), int(st::linksMaxWidth)); + _linksLeft = (_width - _linksWidth) / 2; + _search.setGeometry(_linksLeft, st::linksSearchMargin.top(), _linksWidth, _search.height()); + _cancelSearch.move(_linksLeft + _linksWidth - _cancelSearch.width(), _search.y()); showAll(true); onUpdateSelected(); update(); @@ -1226,13 +1663,21 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { dragActionUpdate(e->globalPos()); } + bool ignoreMousedItem = false; + if (_mousedItem > 0) { + QPoint m = mapMouseToItem(mapFromGlobal(e->globalPos()), _mousedItem, _mousedItemIndex); + if (m.y() < 0 || m.y() >= itemHeight(_mousedItem, _mousedItemIndex)) { + ignoreMousedItem = true; + } + } + // -2 - has full selected items, but not over, 0 - no selection, 2 - over full selected items int32 isUponSelected = 0, hasSelected = 0; if (!_selected.isEmpty()) { isUponSelected = -1; if (_selected.cbegin().value() == FullItemSel) { hasSelected = 2; - if (App::hoveredLinkItem() && _selected.constFind(App::hoveredLinkItem()->id) != _selected.cend()) { + if (!ignoreMousedItem && App::mousedItem() && _selected.constFind(App::mousedItem()->id) != _selected.cend()) { isUponSelected = 2; } else { isUponSelected = -2; @@ -1282,8 +1727,23 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { App::contextItem(App::hoveredLinkItem()); updateMsg(App::contextItem()); if (_selectedMsgId > 0) updateMsg(App::histItemById(_selectedMsgId)); - } else if (App::mousedItem() && App::mousedItem()->id == _mousedItem) { + } else if (!ignoreMousedItem && App::mousedItem() && App::mousedItem()->id == _mousedItem) { + _contextMenuUrl = _lnkOverIndex ? urlByIndex(_mousedItem, _mousedItemIndex, _lnkOverIndex) : QString(); _menu = new ContextMenu(_overview); + if ((_contextMenuLnk && dynamic_cast(_contextMenuLnk.data())) || (!_contextMenuUrl.isEmpty() && !urlIsEmail(_contextMenuUrl))) { + _menu->addAction(lang(lng_context_open_link), this, SLOT(openContextUrl()))->setEnabled(true); + _menu->addAction(lang(lng_context_copy_link), this, SLOT(copyContextUrl()))->setEnabled(true); + } else if ((_contextMenuLnk && dynamic_cast(_contextMenuLnk.data())) || (!_contextMenuUrl.isEmpty() && urlIsEmail(_contextMenuUrl))) { + _menu->addAction(lang(lng_context_open_email), this, SLOT(openContextUrl()))->setEnabled(true); + _menu->addAction(lang(lng_context_copy_email), this, SLOT(copyContextUrl()))->setEnabled(true); + } else if (_contextMenuLnk && dynamic_cast(_contextMenuLnk.data())) { + _menu->addAction(lang(lng_context_open_mention), this, SLOT(openContextUrl()))->setEnabled(true); + _menu->addAction(lang(lng_context_copy_mention), this, SLOT(copyContextUrl()))->setEnabled(true); + } else if (_contextMenuLnk && dynamic_cast(_contextMenuLnk.data())) { + _menu->addAction(lang(lng_context_open_hashtag), this, SLOT(openContextUrl()))->setEnabled(true); + _menu->addAction(lang(lng_context_copy_hashtag), this, SLOT(copyContextUrl()))->setEnabled(true); + } else { + } _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())); @@ -1313,7 +1773,13 @@ void OverviewInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { int32 OverviewInner::resizeToWidth(int32 nwidth, int32 scrollTop, int32 minHeight) { if (width() == nwidth && minHeight == _minHeight) return scrollTop; _minHeight = minHeight; - _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); + if (_type == OverviewAudioDocuments) { + _addToY = st::playlistPadding; + } else if (_type == OverviewLinks) { + _addToY = st::linksSearchMargin.top() + _search.height() + st::linksSearchMargin.bottom(); + } else { + _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; + } if (_type == OverviewPhotos && _resizeIndex < 0) { _resizeIndex = _photosInRow * ((scrollTop + minHeight) / int32(_vsize + st::overviewPhotoSkip)) + _photosInRow - 1; _resizeSkip = (scrollTop + minHeight) - ((scrollTop + minHeight) / int32(_vsize + st::overviewPhotoSkip)) * int32(_vsize + st::overviewPhotoSkip); @@ -1344,9 +1810,16 @@ void OverviewInner::switchType(MediaOverviewType type) { _selected.clear(); _dragItemIndex = _mousedItemIndex = _dragSelFromIndex = _dragSelToIndex = -1; _dragItem = _mousedItem = _dragSelFrom = _dragSelTo = 0; + _lnkOverIndex = _lnkDownIndex = 0; _items.clear(); _cached.clear(); _type = type; + if (_type == OverviewLinks) { + _search.show(); + } else { + _search.hide(); + } + _cancelSearch.hide(); } mediaOverviewUpdated(); if (App::wnd()) App::wnd()->update(); @@ -1357,10 +1830,23 @@ void OverviewInner::setSelectMode(bool enabled) { } void OverviewInner::openContextUrl() { - HistoryItem *was = App::hoveredLinkItem(); - App::hoveredLinkItem(App::contextItem()); - _contextMenuLnk->onClick(Qt::LeftButton); - App::hoveredLinkItem(was); + if (_contextMenuLnk) { + HistoryItem *was = App::hoveredLinkItem(); + App::hoveredLinkItem(App::contextItem()); + _contextMenuLnk->onClick(Qt::LeftButton); + App::hoveredLinkItem(was); + } else if (urlIsEmail(_contextMenuUrl)) { + EmailLink(_contextMenuUrl).onClick(Qt::LeftButton); + } else { + TextLink(_contextMenuUrl).onClick(Qt::LeftButton); + } +} + +void OverviewInner::copyContextUrl() { + QString enc = _contextMenuLnk ? _contextMenuLnk->encoded() : _contextMenuUrl; + if (!enc.isEmpty()) { + QApplication::clipboard()->setText(enc); + } } void OverviewInner::goToMessage() { @@ -1433,9 +1919,88 @@ void OverviewInner::openContextFile() { if (lnkDocument) DocumentOpenLink(lnkDocument->document()).onClick(Qt::LeftButton); } +bool OverviewInner::onSearchMessages(bool searchCache) { + QString q = _search.text().trimmed(); + if (q.isEmpty()) { + if (_searchRequest) { + _searchRequest = 0; + } + return true; + } + if (searchCache) { + SearchCache::const_iterator i = _searchCache.constFind(q); + if (i != _searchCache.cend()) { + _searchQuery = q; + _searchFull = false; + _searchRequest = 0; + searchReceived(true, i.value(), 0); + return true; + } + } else if (_searchQuery != q) { + _searchQuery = q; + _searchFull = false; + _searchRequest = MTP::send(MTPmessages_Search(_hist->peer->input, MTP_string(_searchQuery), MTP_inputMessagesFilterUrl(), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(0), MTP_int(SearchPerPage)), rpcDone(&OverviewInner::searchReceived, true), rpcFail(&OverviewInner::searchFailed)); + _searchQueries.insert(_searchRequest, _searchQuery); + } + return false; +} + +void OverviewInner::onNeedSearchMessages() { + if (!onSearchMessages(true)) { + _searchTimer.start(AutoSearchTimeout); + if (_inSearch && _searchFull && _searchResults.isEmpty()) { + parentWidget()->update(); + } + } +} + +void OverviewInner::onSearchUpdate() { + QString filterText = _search.text().trimmed(); + bool inSearch = !filterText.isEmpty(), changed = (inSearch != _inSearch); + _inSearch = inSearch; + + onNeedSearchMessages(); + + if (filterText.isEmpty()) { + _searchCache.clear(); + _searchQueries.clear(); + _searchQuery = QString(); + _searchResults.clear(); + _cancelSearch.hide(); + } else if (_cancelSearch.isHidden()) { + _cancelSearch.show(); + } + + if (changed) { + _itemsToBeLoaded = LinksOverviewPerPage * 2; + mediaOverviewUpdated(); + } + _overview->scrollReset(); +} + +void OverviewInner::onCancel() { + if (_selected.isEmpty()) { + if (onCancelSearch()) return; + App::main()->showBackFromStack(); + } else { + _overview->onClearSelected(); + } +} + +bool OverviewInner::onCancelSearch() { + if (_search.isHidden()) return false; + bool clearing = !_search.text().isEmpty(); + _cancelSearch.hide(); + _search.clear(); + _search.updatePlaceholder(); + onSearchUpdate(); + return clearing; +} + void OverviewInner::onMenuDestroy(QObject *obj) { if (_menu == obj) { _menu = 0; + dragActionUpdate(QCursor::pos()); updateMsg(App::contextItem()); if (_selectedMsgId > 0) updateMsg(App::histItemById(_selectedMsgId)); } @@ -1503,7 +2068,85 @@ void OverviewInner::onTouchScrollTimer() { void OverviewInner::mediaOverviewUpdated(bool fromResize) { int32 oldHeight = _height; - if (_type != OverviewPhotos && _type != OverviewAudioDocuments) { + if (_type == OverviewLinks) { + History::MediaOverview &o(_inSearch ? _searchResults : _hist->_overview[_type]); + int32 l = o.size(), tocheck = qMin(l, _itemsToBeLoaded); + _items.reserve(2 * l); // day items + + int32 y = 0, in = 0; + bool allGood = true; + QDate prevDate; + for (int32 i = 0; i < tocheck; ++i) { + MsgId msgid = o.at(l - i - 1); + if (allGood) { + if (_items.size() > in && _items.at(in).msgid == msgid) { + prevDate = _items.at(in).date; + if (fromResize) { + _items[in].y = y; + y += _items[in].link->countHeight(_linksWidth); + } else { + y = (in + 1 < _items.size()) ? _items.at(in + 1).y : _height; + } + ++in; + continue; + } + if (_items.size() > in + 1 && !_items.at(in).msgid && _items.at(in + 1).msgid == msgid) { // day item + if (fromResize) { + _items[in].y = y; + y += st::msgFont->height + st::linksDateMargin * 2 + st::linksBorder; + } + ++in; + prevDate = _items.at(in).date; + if (fromResize) { + _items[in].y = y; + y += _items[in].link->countHeight(_linksWidth); + } else { + y = (in + 1 < _items.size()) ? _items.at(in + 1).y : _height; + } + ++in; + continue; + } + allGood = false; + } + HistoryItem *item = App::histItemById(msgid); + + QDate date = item->date.date(); + if (!in || (in > 0 && date != prevDate)) { + if (_items.size() > in) { + _items[in].msgid = 0; + _items[in].date = date; + _items[in].y = y; + } else { + _items.push_back(CachedItem(0, date, y)); + } + y += st::msgFont->height + st::linksDateMargin * 2 + st::linksBorder; + ++in; + prevDate = date; + } + + if (_items.size() > in) { + _items[in] = CachedItem(item->id, item->date.date(), y); + _items[in].link = cachedLink(item); + y += _items[in].link->countHeight(_linksWidth); + } else { + _items.push_back(CachedItem(item->id, item->date.date(), y)); + _items.back().link = cachedLink(item); + y += _items.back().link->countHeight(_linksWidth); + } + ++in; + } + if (_items.size() != in) { + _items.resize(in); + } + if (_height != _addToY + y + st::linksSearchMargin.top()) { + _height = _addToY + y + st::linksSearchMargin.top(); + if (!fromResize) { + resize(width(), _minHeight > _height ? _minHeight : _height); + } + } + dragActionUpdate(QCursor::pos()); + update(); + } else if (_type != OverviewPhotos && _type != OverviewAudioDocuments) { History::MediaOverview &o(_hist->_overview[_type]); int32 l = o.size(); _items.reserve(2 * l); // day items @@ -1598,7 +2241,7 @@ void OverviewInner::mediaOverviewUpdated(bool fromResize) { if (_height != y) { _height = y; if (!fromResize) { - _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); + _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; resize(width(), _minHeight > _height ? _minHeight : _height); } } @@ -1611,7 +2254,7 @@ void OverviewInner::mediaOverviewUpdated(bool fromResize) { if (!fromResize) { resizeEvent(0); - if (_height != oldHeight) { + if (_height != oldHeight && _type != OverviewLinks) { _overview->scrollBy(_height - oldHeight); } } @@ -1630,6 +2273,19 @@ void OverviewInner::changingMsgId(HistoryItem *row, MsgId newId) { break; } } + if (_links.contains(row->id) && row->id != newId) { + if (_links.contains(newId)) { + for (CachedItems::iterator i = _items.begin(), e = _items.end(); i != e; ++i) { + if (i->msgid == newId && i->link) { + i->link = _links[row->id]; + break; + } + } + } + _links[newId] = _links[row->id]; + delete _links[row->id]; + _links.remove(row->id); + } for (CachedItems::iterator i = _items.begin(), e = _items.end(); i != e; ++i) { if (i->msgid == row->id) { i->msgid = newId; @@ -1665,7 +2321,7 @@ void OverviewInner::itemRemoved(HistoryItem *item) { } void OverviewInner::itemResized(HistoryItem *item, bool scrollToIt) { - if (_type != OverviewPhotos && _type != OverviewAudioDocuments) { + if (_type != OverviewPhotos && _type != OverviewAudioDocuments && _type != OverviewLinks) { HistoryMedia *media = item ? item->getMedia(true) : 0; if (!media) return; @@ -1683,7 +2339,7 @@ void OverviewInner::itemResized(HistoryItem *item, bool scrollToIt) { _items[j].y += newh; } _height = _items[l - 1].y; - _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); + _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; resize(width(), _minHeight > _height ? _minHeight : _height); if (scrollToIt) { if (_addToY + _height - from > _scroll->scrollTop() + _scroll->height()) { @@ -1718,12 +2374,17 @@ void OverviewInner::msgUpdated(const HistoryItem *msg) { if (index >= 0) { update(_audioLeft, _addToY + int32(index * _audioHeight), _audioWidth, _audioHeight); } + } else if (_type == OverviewLinks) { + for (int32 i = 0, l = _items.size(); i != l; ++i) { + if (_items[i].msgid == msgid) { + update(_linksLeft, _addToY + _items[i].y, _linksWidth, itemHeight(msgid, i)); + break; + } + } } else { for (int32 i = 0, l = _items.size(); i != l; ++i) { if (_items[i].msgid == msgid) { - HistoryMedia *media = msg->getMedia(true); - int32 w = _width - st::msgMargin.left() - st::msgMargin.right(); - if (media) update(0, _addToY + _height - _items[i].y, _width, media->countHeight(msg, w) + st::msgMargin.top() + st::msgMargin.bottom()); + update(0, _addToY + _height - _items[i].y, _width, itemHeight(msgid, i)); break; } } @@ -1746,16 +2407,24 @@ void OverviewInner::showAll(bool recountHeights) { } int32 rows = ((_photosToAdd + count) / _photosInRow) + (((_photosToAdd + count) % _photosInRow) ? 1 : 0); newHeight = _height = (_vsize + st::overviewPhotoSkip) * rows + st::overviewPhotoSkip; + _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; } else if (_type == OverviewAudioDocuments) { int32 count = _hist->_overview[_type].size(), fullCount = _hist->_overviewCount[_type]; newHeight = _height = count * _audioHeight + 2 * st::playlistPadding; + _addToY = st::playlistPadding; + } else if (_type == OverviewLinks) { + if (recountHeights) { // recount heights because of texts + mediaOverviewUpdated(true); + } + newHeight = _height; + _addToY = st::linksSearchMargin.top() + _search.height() + st::linksSearchMargin.bottom(); } else { if (recountHeights && _type == OverviewVideos) { // recount heights because of captions mediaOverviewUpdated(true); } newHeight = _height; + _addToY = (_height < _minHeight) ? (_minHeight - _height) : 0; } - _addToY = (_type == OverviewAudioDocuments) ? st::playlistPadding : ((_height < _minHeight) ? (_minHeight - _height) : 0); if (newHeight < _minHeight) { newHeight = _minHeight; } @@ -1766,6 +2435,10 @@ void OverviewInner::showAll(bool recountHeights) { OverviewInner::~OverviewInner() { _dragAction = NoDrag; + for (CachedLinks::const_iterator i = _links.cbegin(), e = _links.cend(); i != e; ++i) { + delete i.value(); + } + _links.clear(); } OverviewWidget::OverviewWidget(QWidget *parent, const PeerData *peer, MediaOverviewType type) : QWidget(parent) @@ -1801,10 +2474,16 @@ void OverviewWidget::clear() { void OverviewWidget::onScroll() { MTP::clearLoaderPriorities(); - if (_scroll.scrollTop() < _scroll.height() * 5) { - if (App::main()) { - App::main()->loadMediaBack(peer(), type(), true); + int32 preloadThreshold = _scroll.height() * 5; + bool needToPreload = false; + do { + needToPreload = (type() == OverviewLinks) ? (_scroll.scrollTop() + preloadThreshold > _scroll.scrollTopMax()) : (_scroll.scrollTop() < preloadThreshold); + if (!needToPreload || !_inner.preloadLocal()) { + break; } + } while (true); + if (needToPreload) { + _inner.preloadMore(); } if (!_noDropResizeIndex) { _inner.dropResizeIndex(); @@ -1836,7 +2515,7 @@ void OverviewWidget::paintEvent(QPaintEvent *e) { } QRect r(e->rect()); - if (type() == OverviewPhotos || type() == OverviewAudioDocuments) { + if (type() == OverviewPhotos || type() == OverviewAudioDocuments || type() == OverviewLinks) { p.fillRect(r, st::white->b); } else { bool hasTopBar = !App::main()->topBar()->isHidden(), hasPlayer = !App::main()->player()->isHidden(); @@ -1883,6 +2562,10 @@ void OverviewWidget::scrollBy(int32 add) { } } +void OverviewWidget::scrollReset() { + _scroll.scrollToY((type() == OverviewLinks) ? 0 : _scroll.scrollTopMax()); +} + void OverviewWidget::paintTopBar(QPainter &p, float64 over, int32 decreaseWidth) { if (animating() && _showing) { p.setOpacity(a_bgAlpha.current()); @@ -1919,6 +2602,10 @@ MediaOverviewType OverviewWidget::type() const { void OverviewWidget::switchType(MediaOverviewType type) { _selCount = 0; + + disconnect(&_scroll, SIGNAL(scrolled()), &_inner, SLOT(onUpdateSelected())); + disconnect(&_scroll, SIGNAL(scrolled()), this, SLOT(onScroll())); + _inner.setSelectMode(false); _inner.switchType(type); switch (type) { @@ -1927,12 +2614,18 @@ void OverviewWidget::switchType(MediaOverviewType type) { case OverviewDocuments: _header = lang(lng_profile_files_header); break; case OverviewAudios: _header = lang(lng_profile_audios_header); break; case OverviewAudioDocuments: _header = lang(lng_profile_audio_files_header); break; + case OverviewLinks: _header = lang(lng_profile_shared_links_header); break; } noSelectingScroll(); App::main()->topBar()->showSelected(0); updateTopBarSelection(); - _scroll.scrollToY(_scroll.scrollTopMax()); + scrollReset(); + + connect(&_scroll, SIGNAL(scrolled()), &_inner, SLOT(onUpdateSelected())); + connect(&_scroll, SIGNAL(scrolled()), this, SLOT(onScroll())); + onScroll(); + activate(); } void OverviewWidget::updateTopBarSelection() { @@ -1945,7 +2638,7 @@ void OverviewWidget::updateTopBarSelection() { App::main()->topBar()->update(); } if (App::wnd() && !App::wnd()->layerShown()) { - _inner.setFocus(); + _inner.activate(); } update(); } @@ -1969,6 +2662,8 @@ int32 OverviewWidget::countBestScroll() const { return snap(top - int(_scroll.height() - (st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom())) / 2, 0, _scroll.scrollTopMax()); } } + } else if (type() == OverviewLinks) { + return 0; } return _scroll.scrollTopMax(); } @@ -1978,7 +2673,7 @@ void OverviewWidget::fastShow(bool back, int32 lastScrollTop) { resizeEvent(0); _scrollSetAfterShow = (lastScrollTop < 0 ? countBestScroll() : lastScrollTop); show(); - _inner.setFocus(); + _inner.activate(); doneShow(); } @@ -2001,7 +2696,7 @@ void OverviewWidget::animShow(const QPixmap &bgAnimCache, const QPixmap &bgAnimT anim::start(this); _showing = true; show(); - _inner.setFocus(); + _inner.activate(); App::main()->topBar()->update(); } @@ -2057,9 +2752,7 @@ void OverviewWidget::msgUpdated(PeerId p, const HistoryItem *msg) { } void OverviewWidget::itemRemoved(HistoryItem *row) { - if (row->history()->peer == peer()) { - _inner.itemRemoved(row); - } + _inner.itemRemoved(row); } void OverviewWidget::itemResized(HistoryItem *row, bool scrollToIt) { @@ -2083,7 +2776,7 @@ OverviewWidget::~OverviewWidget() { } void OverviewWidget::activate() { - _inner.setFocus(); + _inner.activate(); } QPoint OverviewWidget::clampMousePosition(QPoint point) { diff --git a/Telegram/SourceFiles/overviewwidget.h b/Telegram/SourceFiles/overviewwidget.h index 6c08d903b..a48367eb6 100644 --- a/Telegram/SourceFiles/overviewwidget.h +++ b/Telegram/SourceFiles/overviewwidget.h @@ -25,9 +25,14 @@ public: OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const PeerData *peer, MediaOverviewType type); + void activate(); + void clear(); int32 itemTop(MsgId msgId) const; + bool preloadLocal(); + void preloadMore(); + bool event(QEvent *e); void touchEvent(QTouchEvent *e); void paintEvent(QPaintEvent *e); @@ -75,6 +80,7 @@ public slots: void onUpdateSelected(); void openContextUrl(); + void copyContextUrl(); void cancelContextDownload(); void showContextInFolder(); void saveContextFile(); @@ -85,12 +91,19 @@ public slots: void forwardMessage(); void selectMessage(); + void onSearchUpdate(); + void onCancel(); + bool onCancelSearch(); + void onMenuDestroy(QObject *obj); void onTouchSelect(); void onTouchScrollTimer(); void onDragExec(); + bool onSearchMessages(bool searchCache = false); + void onNeedSearchMessages(); + private: void fixItemIndex(int32 ¤t, MsgId msgId) const; @@ -122,11 +135,11 @@ private: // photos int32 _photosInRow, _photosToAdd, _vsize; - typedef struct { + struct CachedSize { int32 vsize; bool medium; QPixmap pix; - } CachedSize; + }; typedef QMap CachedSizes; CachedSizes _cached; bool _selMode; @@ -134,16 +147,65 @@ private: // audio documents int32 _audioLeft, _audioWidth, _audioHeight; - // other - typedef struct _CachedItem { - _CachedItem() : msgid(0), y(0) { + // shared links + int32 _linksLeft, _linksWidth; + struct Link { + Link() : width(0) { } - _CachedItem(MsgId msgid, const QDate &date, int32 y) : msgid(msgid), date(date), y(y) { + Link(const QString &url, const QString &text) : url(url), text(text), width(st::msgFont->m.width(text)) { + } + QString url, text; + int32 width; + }; + struct CachedLink { + CachedLink() : titleWidth(0), page(0), pixw(0), pixh(0), text(st::msgMinWidth) { + } + CachedLink(HistoryItem *item); + int32 countHeight(int32 w); + + QString title, letter; + int32 titleWidth; + WebPageData *page; + int32 pixw, pixh; + Text text; + QVector urls; + }; + typedef QMap CachedLinks; + CachedLinks _links; + FlatInput _search; + IconedButton _cancelSearch; + QVector _results; + int32 _itemsToBeLoaded; + + QTimer _searchTimer; + QString _searchQuery; + bool _inSearch, _searchFull; + mtpRequestId _searchRequest; + History::MediaOverview _searchResults; + MsgId _lastSearchId; + int32 _searchedCount; + void searchReceived(bool fromStart, const MTPmessages_Messages &result, mtpRequestId req); + bool searchFailed(const RPCError &error, mtpRequestId req); + + typedef QMap SearchCache; + SearchCache _searchCache; + + typedef QMap SearchQueries; + SearchQueries _searchQueries; + + CachedLink *cachedLink(HistoryItem *item); + + // other + struct CachedItem { + CachedItem() : msgid(0), y(0) { + } + CachedItem(MsgId msgid, const QDate &date, int32 y) : msgid(msgid), date(date), y(y) { } MsgId msgid; QDate date; int32 y; - } CachedItem; + CachedLink *link; + }; typedef QVector CachedItems; CachedItems _items; @@ -166,9 +228,14 @@ private: int32 _dragItemIndex; MsgId _mousedItem; int32 _mousedItemIndex; + int32 _lnkOverIndex, _lnkDownIndex; // for OverviewLinks, 0 - none, -1 - photo or title, > 0 - lnk index uint16 _dragSymbol; bool _dragWasInactive; + QString urlByIndex(MsgId msgid, int32 index, int32 lnkIndex) const; + bool urlIsEmail(const QString &url) const; + + QString _contextMenuUrl; TextLinkPtr _contextMenuLnk; MsgId _dragSelFrom, _dragSelTo; @@ -202,6 +269,7 @@ public: void contextMenuEvent(QContextMenuEvent *e); void scrollBy(int32 add); + void scrollReset(); void paintTopBar(QPainter &p, float64 over, int32 decreaseWidth); void topBarShadowParams(int32 &x, float64 &o); diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index d5ee5fcaf..28f8f275c 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -59,10 +59,6 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee // shared media _allMediaTypes(false), _mediaShowAll(this, lang(lng_profile_show_all_types)), - _mediaPhotos(this, QString()), - _mediaVideos(this, QString()), - _mediaDocuments(this, QString()), - _mediaAudios(this, QString()), // actions _searchInPeer(this, lang(lng_profile_search_messages)), @@ -161,14 +157,11 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee // shared media connect(&_mediaShowAll, SIGNAL(clicked()), this, SLOT(onMediaShowAll())); - connect(&_mediaPhotos, SIGNAL(clicked()), this, SLOT(onMediaPhotos())); - connect(&_mediaVideos, SIGNAL(clicked()), this, SLOT(onMediaVideos())); - connect(&_mediaDocuments, SIGNAL(clicked()), this, SLOT(onMediaDocuments())); - connect(&_mediaAudios, SIGNAL(clicked()), this, SLOT(onMediaAudios())); - _mediaLinks[OverviewPhotos] = &_mediaPhotos; - _mediaLinks[OverviewVideos] = &_mediaVideos; - _mediaLinks[OverviewDocuments] = &_mediaDocuments; - _mediaLinks[OverviewAudios] = &_mediaAudios; + connect((_mediaButtons[OverviewPhotos] = new LinkButton(this, QString())), SIGNAL(clicked()), this, SLOT(onMediaPhotos())); + connect((_mediaButtons[OverviewVideos] = new LinkButton(this, QString())), SIGNAL(clicked()), this, SLOT(onMediaVideos())); + connect((_mediaButtons[OverviewDocuments] = new LinkButton(this, QString())), SIGNAL(clicked()), this, SLOT(onMediaDocuments())); + connect((_mediaButtons[OverviewAudios] = new LinkButton(this, QString())), SIGNAL(clicked()), this, SLOT(onMediaAudios())); + connect((_mediaButtons[OverviewLinks] = new LinkButton(this, QString())), SIGNAL(clicked()), this, SLOT(onMediaLinks())); App::main()->preloadOverviews(_peer); // actions @@ -216,7 +209,7 @@ void ProfileInner::loadProfilePhotos(int32 yFrom) { int32 yTo = yFrom + (parentWidget() ? parentWidget()->height() : App::wnd()->height()) * 5; MTP::clearLoaderPriorities(); - int32 partfrom = _mediaAudios.y() + _mediaAudios.height() + st::profileHeaderSkip; + int32 partfrom = _mediaButtons[OverviewAudios]->y() + _mediaButtons[OverviewAudios]->height() + st::profileHeaderSkip; yFrom -= partfrom; yTo -= partfrom; @@ -361,6 +354,10 @@ void ProfileInner::onMediaAudios() { App::main()->showMediaOverview(_peer, OverviewAudios); } +void ProfileInner::onMediaLinks() { + App::main()->showMediaOverview(_peer, OverviewLinks); +} + void ProfileInner::onInvitationLink() { QApplication::clipboard()->setText(_peerChat->invitationUrl); App::wnd()->showLayer(new ConfirmBox(lang(lng_group_invite_copied), true)); @@ -652,7 +649,7 @@ void ProfileInner::paintEvent(QPaintEvent *e) { if (!_allMediaTypes) { break; } - top += _mediaLinks[i]->height() + st::setLittleSkip; + top += _mediaButtons[i]->height() + st::setLittleSkip; } } if (_allMediaTypes) { @@ -660,13 +657,13 @@ void ProfileInner::paintEvent(QPaintEvent *e) { top -= st::setLittleSkip; } else { p.drawText(_left, top + st::linkFont->ascent, lang(oneState < 0 ? lng_profile_loading : lng_profile_no_media)); - top += _mediaLinks[OverviewPhotos]->height(); + top += _mediaButtons[OverviewPhotos]->height(); } } else { if (!oneState) { p.drawText(_left, top + st::linkFont->ascent, lang(lng_profile_no_media)); } - top += _mediaLinks[OverviewPhotos]->height(); + top += _mediaButtons[OverviewPhotos]->height(); } // actions @@ -934,13 +931,13 @@ void ProfileInner::resizeEvent(QResizeEvent *e) { if (_allMediaTypes) { int32 count = (_hist->_overviewCount[i] > 0) ? _hist->_overviewCount[i] : (_hist->_overviewCount[i] == 0 ? _hist->_overview[i].size() : -1); if (count > 0) { - if (wasCount) top += _mediaLinks[i]->height() + st::setLittleSkip; + if (wasCount) top += _mediaButtons[i]->height() + st::setLittleSkip; wasCount = count; } } - _mediaLinks[i]->move(_left, top); + _mediaButtons[i]->move(_left, top); } - top += _mediaLinks[OverviewPhotos]->height(); + top += _mediaButtons[OverviewPhotos]->height(); // actions top += st::profileHeaderSkip; @@ -1131,17 +1128,17 @@ void ProfileInner::showAll() { if (count > 0 || count < 0) { first = true; } else if (!_allMediaTypes) { - _mediaLinks[i]->hide(); + _mediaButtons[i]->hide(); continue; } if (count > 0) { - _mediaLinks[i]->setText(overviewLinkText(i, count)); - _mediaLinks[i]->show(); + _mediaButtons[i]->setText(overviewLinkText(i, count)); + _mediaButtons[i]->show(); } else { - _mediaLinks[i]->hide(); + _mediaButtons[i]->hide(); } } else { - _mediaLinks[i]->hide(); + _mediaButtons[i]->hide(); } } if (_allMediaTypes || !manyCounts) { @@ -1208,6 +1205,7 @@ QString ProfileInner::overviewLinkText(int32 type, int32 count) { case OverviewVideos: return lng_profile_videos(lt_count, count); case OverviewDocuments: return lng_profile_files(lt_count, count); case OverviewAudios: return lng_profile_audios(lt_count, count); + case OverviewLinks: return lng_profile_shared_links(lt_count, count); } return QString(); } diff --git a/Telegram/SourceFiles/profilewidget.h b/Telegram/SourceFiles/profilewidget.h index 5c742d31f..4c2d2ef18 100644 --- a/Telegram/SourceFiles/profilewidget.h +++ b/Telegram/SourceFiles/profilewidget.h @@ -92,6 +92,7 @@ public slots: void onMediaVideos(); void onMediaDocuments(); void onMediaAudios(); + void onMediaLinks(); void onMenuDestroy(QObject *obj); void onCopyPhone(); @@ -149,8 +150,8 @@ private: // shared media bool _allMediaTypes; - LinkButton _mediaShowAll, _mediaPhotos, _mediaVideos, _mediaDocuments, _mediaAudios; - LinkButton *_mediaLinks[OverviewCount]; + LinkButton _mediaShowAll; + LinkButton *_mediaButtons[OverviewCount]; QString overviewLinkText(int32 type, int32 count); // actions diff --git a/Telegram/SourceFiles/pspecific_linux.cpp b/Telegram/SourceFiles/pspecific_linux.cpp index 3c96e062b..2859c9067 100644 --- a/Telegram/SourceFiles/pspecific_linux.cpp +++ b/Telegram/SourceFiles/pspecific_linux.cpp @@ -252,8 +252,8 @@ namespace { #define GTK_ALPHA 3 QImage _trayIconImageGen() { - int32 counter = App::histories().unreadFull, counterSlice = (counter >= 1000) ? (1000 + (counter % 100)) : counter; - bool muted = (App::histories().unreadMuted >= counter); + int32 counter = App::histories().unreadFull - (cIncludeMuted() ? 0 : App::histories().unreadMuted), counterSlice = (counter >= 1000) ? (1000 + (counter % 100)) : counter; + bool muted = cIncludeMuted() ? (App::histories().unreadMuted >= counter) : false; if (_trayIconImage.isNull() || _trayIconImage.width() != _trayIconSize || muted != _trayIconMuted || counterSlice != _trayIconCount) { if (_trayIconImageBack.isNull() || _trayIconImageBack.width() != _trayIconSize) { _trayIconImageBack = App::wnd()->iconLarge().scaled(_trayIconSize, _trayIconSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); @@ -288,8 +288,8 @@ namespace { } QString _trayIconImageFile() { - int32 counter = App::histories().unreadFull, counterSlice = (counter >= 1000) ? (1000 + (counter % 100)) : counter; - bool muted = (App::histories().unreadMuted >= counter); + int32 counter = App::histories().unreadFull - (cIncludeMuted() ? 0 : App::histories().unreadMuted), counterSlice = (counter >= 1000) ? (1000 + (counter % 100)) : counter; + bool muted = cIncludeMuted() ? (App::histories().unreadMuted >= counter) : false; QString name = cWorkingDir() + qsl("tdata/ticons/ico%1_%2_%3.png").arg(muted ? "mute" : "").arg(_trayIconSize).arg(counterSlice); QFileInfo info(name); @@ -641,7 +641,7 @@ void PsMainWindow::psUpdateIndicator() { void PsMainWindow::psUpdateCounter() { setWindowIcon(wndIcon); - int32 counter = App::histories().unreadFull; + int32 counter = App::histories().unreadFull - (cIncludeMuted() ? 0 : App::histories().unreadMuted); setWindowTitle((counter > 0) ? qsl("Telegram (%1)").arg(counter) : qsl("Telegram")); if (_psUnityLauncherEntry) { @@ -665,8 +665,10 @@ void PsMainWindow::psUpdateCounter() { ps_gtk_status_icon_set_from_pixbuf(_trayIcon, _trayPixbuf); } } else if (trayIcon) { - int32 counter = App::histories().unreadFull; - style::color bg = (App::histories().unreadMuted < counter) ? st::counterBG : st::counterMuteBG; + int32 counter = App::histories().unreadFull - (cIncludeMuted() ? 0 : App::histories().unreadMuted); + bool muted = cIncludeMuted() ? (App::histories().unreadMuted >= counter) : false; + + style::color bg = muted ? st::counterMuteBG : st::counterBG; QIcon iconSmall; iconSmall.addPixmap(QPixmap::fromImage(iconWithCounter(16, counter, bg, true), Qt::ColorOnly)); iconSmall.addPixmap(QPixmap::fromImage(iconWithCounter(32, counter, bg, true), Qt::ColorOnly)); diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 0cac59f75..68e982f3b 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -174,7 +174,7 @@ void _placeCounter(QImage &img, int size, int count, style::color bg, style::col } void PsMainWindow::psUpdateCounter() { - int32 counter = App::histories().unreadFull; + int32 counter = App::histories().unreadFull - (cIncludeMuted() ? 0 : App::histories().unreadMuted); setWindowTitle((counter > 0) ? qsl("Telegram (%1)").arg(counter) : qsl("Telegram")); setWindowIcon(wndIcon); @@ -183,14 +183,16 @@ void PsMainWindow::psUpdateCounter() { _private.setWindowBadge(counter ? cnt : QString()); if (trayIcon) { - bool dm = objc_darkMode(), important = (App::histories().unreadMuted < counter); - style::color bg = important ? st::counterBG : st::counterMuteBG; + bool muted = cIncludeMuted() ? (App::histories().unreadMuted >= counter) : false; + bool dm = objc_darkMode(); + + style::color bg = muted ? st::counterMuteBG : st::counterBG; QIcon icon; QImage img(psTrayIcon(dm)), imgsel(psTrayIcon(true)); img.detach(); imgsel.detach(); int32 size = cRetina() ? 44 : 22; - _placeCounter(img, size, counter, bg, (dm && !important) ? st::counterMacInvColor : st::counterColor); + _placeCounter(img, size, counter, bg, (dm && muted) ? st::counterMacInvColor : st::counterColor); _placeCounter(imgsel, size, counter, st::white, st::counterMacInvColor); icon.addPixmap(QPixmap::fromImage(img, Qt::ColorOnly)); icon.addPixmap(QPixmap::fromImage(imgsel, Qt::ColorOnly), QIcon::Selected); diff --git a/Telegram/SourceFiles/pspecific_wnd.cpp b/Telegram/SourceFiles/pspecific_wnd.cpp index af60a328a..76e48f978 100644 --- a/Telegram/SourceFiles/pspecific_wnd.cpp +++ b/Telegram/SourceFiles/pspecific_wnd.cpp @@ -1117,8 +1117,10 @@ static HICON _qt_createHIcon(const QIcon &icon, int xSize, int ySize) { } void PsMainWindow::psUpdateCounter() { - int32 counter = App::histories().unreadFull; - style::color bg = (App::histories().unreadMuted < counter) ? st::counterBG : st::counterMuteBG; + int32 counter = App::histories().unreadFull - (cIncludeMuted() ? 0 : App::histories().unreadMuted); + bool muted = cIncludeMuted() ? (App::histories().unreadMuted >= counter) : false; + + style::color bg = muted ? st::counterMuteBG : st::counterBG; QIcon iconSmall, iconBig; iconSmall.addPixmap(QPixmap::fromImage(iconWithCounter(16, counter, bg, true), Qt::ColorOnly)); iconSmall.addPixmap(QPixmap::fromImage(iconWithCounter(32, counter, bg, true), Qt::ColorOnly)); @@ -2123,12 +2125,14 @@ bool psShowOpenWithMenu(int x, int y, const QString &file) { } void psOpenFile(const QString &name, bool openWith) { - std::wstring wname = QDir::toNativeSeparators(name).toStdWString(); + bool mailtoScheme = name.startsWith(qstr("mailto:")); + std::wstring wname = mailtoScheme ? name.toStdWString() : QDir::toNativeSeparators(name).toStdWString(); if (openWith && useOpenAs) { if (shOpenWithDialog) { OPENASINFO info; info.oaifInFlags = OAIF_ALLOW_REGISTRATION | OAIF_REGISTER_EXT | OAIF_EXEC; + if (mailtoScheme) info.oaifInFlags |= OAIF_FILE_IS_URI | OAIF_URL_PROTOCOL; info.pcszClass = NULL; info.pcszFile = wname.c_str(); shOpenWithDialog(0, &info); diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index da839b676..78790d5f0 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -40,6 +40,7 @@ QString gLangErrors; QString gDialogLastPath, gDialogHelperPath; // optimize QFileDialog bool gSoundNotify = true; +bool gIncludeMuted = true; bool gDesktopNotify = true; DBINotifyView gNotifyView = dbinvShowPreview; bool gWindowsNotifications = true; diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index 47c9a3610..ad36a2b1b 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -96,6 +96,7 @@ DeclareSetting(QPixmapPointer, ChatDogImage); DeclareSetting(bool, TileBackground); DeclareSetting(bool, SoundNotify); +DeclareSetting(bool, IncludeMuted); DeclareSetting(bool, NeedConfigResave); DeclareSetting(bool, DesktopNotify); DeclareSetting(DBINotifyView, NotifyView); diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index dc5459a57..41a1ed9a6 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -124,6 +124,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), _messagePreview(this, lang(lng_settings_show_preview), cNotifyView() <= dbinvShowPreview), _windowsNotifications(this, lang(lng_settings_use_windows), cWindowsNotifications()), _soundNotify(this, lang(lng_settings_sound_notify), cSoundNotify()), + _includeMuted(this, lang(lng_settings_include_muted), cIncludeMuted()), // general _changeLanguage(this, lang(lng_settings_change_lang)), @@ -225,6 +226,7 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), connect(&_messagePreview, SIGNAL(changed()), this, SLOT(onMessagePreview())); connect(&_windowsNotifications, SIGNAL(changed()), this, SLOT(onWindowsNotifications())); connect(&_soundNotify, SIGNAL(changed()), this, SLOT(onSoundNotify())); + connect(&_includeMuted, SIGNAL(changed()), this, SLOT(onIncludeMuted())); // general connect(&_changeLanguage, SIGNAL(clicked()), this, SLOT(onChangeLanguage())); @@ -431,7 +433,8 @@ void SettingsInner::paintEvent(QPaintEvent *e) { if (App::wnd()->psHasNativeNotifications() && cPlatform() == dbipWindows) { top += _windowsNotifications.height() + st::setSectionSkip; } - top += _soundNotify.height(); + top += _soundNotify.height() + st::setSectionSkip; + top += _includeMuted.height(); } // general @@ -662,7 +665,8 @@ void SettingsInner::resizeEvent(QResizeEvent *e) { if (App::wnd()->psHasNativeNotifications() && cPlatform() == dbipWindows) { _windowsNotifications.move(_left, top); top += _windowsNotifications.height() + st::setSectionSkip; } - _soundNotify.move(_left, top); top += _soundNotify.height(); + _soundNotify.move(_left, top); top += _soundNotify.height() + st::setSectionSkip; + _includeMuted.move(_left, top); top += _includeMuted.height(); } // general @@ -976,12 +980,14 @@ void SettingsInner::showAll() { _windowsNotifications.hide(); } _soundNotify.show(); + _includeMuted.show(); } else { _desktopNotify.hide(); _senderName.hide(); _messagePreview.hide(); _windowsNotifications.hide(); _soundNotify.hide(); + _includeMuted.hide(); } // general @@ -1443,6 +1449,12 @@ void SettingsInner::onSoundNotify() { Local::writeUserSettings(); } +void SettingsInner::onIncludeMuted() { + cSetIncludeMuted(_includeMuted.checked()); + if (App::wnd()) App::wnd()->updateCounter(); + Local::writeUserSettings(); +} + void SettingsInner::onWindowsNotifications() { cSetWindowsNotifications(!cWindowsNotifications()); App::wnd()->notifyClearFast(); diff --git a/Telegram/SourceFiles/settingswidget.h b/Telegram/SourceFiles/settingswidget.h index 38d4cb751..81de3b926 100644 --- a/Telegram/SourceFiles/settingswidget.h +++ b/Telegram/SourceFiles/settingswidget.h @@ -125,6 +125,7 @@ public slots: void onScaleChange(); void onSoundNotify(); + void onIncludeMuted(); void onDesktopNotify(); void onSenderName(); void onMessagePreview(); @@ -206,7 +207,7 @@ private: LinkButton _chooseUsername; // notifications - FlatCheckbox _desktopNotify, _senderName, _messagePreview, _windowsNotifications, _soundNotify; + FlatCheckbox _desktopNotify, _senderName, _messagePreview, _windowsNotifications, _soundNotify, _includeMuted; // general LinkButton _changeLanguage; diff --git a/Telegram/SourceFiles/title.cpp b/Telegram/SourceFiles/title.cpp index 6de0c0424..bea4b9b56 100644 --- a/Telegram/SourceFiles/title.cpp +++ b/Telegram/SourceFiles/title.cpp @@ -258,8 +258,10 @@ void TitleWidget::updateWideMode() { void TitleWidget::updateCounter() { if (cWideMode() || !MTP::authedId()) return; - int32 counter = App::histories().unreadFull; - style::color bg = (App::histories().unreadMuted < counter) ? st::counterBG : st::counterMuteBG; + int32 counter = App::histories().unreadFull - (cIncludeMuted() ? 0 : App::histories().unreadMuted); + bool muted = cIncludeMuted() ? (App::histories().unreadMuted >= counter) : false; + + style::color bg = muted ? st::counterMuteBG : st::counterBG; if (counter > 0) { int32 size = cRetina() ? -32 : -16; diff --git a/Telegram/SourceFiles/types.h b/Telegram/SourceFiles/types.h index 976f40085..377f92238 100644 --- a/Telegram/SourceFiles/types.h +++ b/Telegram/SourceFiles/types.h @@ -275,6 +275,7 @@ enum DataBlockId { dbiTryIPv6 = 0x28, dbiSongVolume = 0x29, dbiWindowsNotifications = 0x30, + dbiIncludeMuted = 0x31, dbiEncryptedWithSalt = 333, dbiEncrypted = 444, diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index b4aada093..7f3e9f0de 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.8.52 + 0.8.53 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) CFBundleSignature diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 0473e1651598623718e07b9a955505635ca34c54..175bf43784430732ef122a4d7f08097a35163306 100644 GIT binary patch delta 53 zcmZ3Yy+nIM5ig_h +#include +#include + +#include +#ifndef Q_OS_WINCE +# include +#endif + +QT_BEGIN_NAMESPACE + +enum { debug = 0 }; + +static inline bool shellExecute(const QUrl &url) +{ +#ifndef Q_OS_WINCE + const QString nativeFilePath = + url.isLocalFile() ? QDir::toNativeSeparators(url.toLocalFile()) : url.toString(QUrl::FullyEncoded); + const quintptr result = (quintptr)ShellExecute(0, 0, (wchar_t*)nativeFilePath.utf16(), 0, 0, SW_SHOWNORMAL); + // ShellExecute returns a value greater than 32 if successful + if (result <= 32) { + qWarning("ShellExecute '%s' failed (error %s).", qPrintable(url.toString()), qPrintable(QString::number(result))); + return false; + } + return true; +#else + Q_UNUSED(url); + return false; +#endif +} + +// Retrieve the commandline for the default mail client. It contains a +// placeholder %1 for the URL. The default key used below is the +// command line for the mailto: shell command. +static inline QString mailCommand() +{ + enum { BufferSize = sizeof(wchar_t) * MAX_PATH }; + + const wchar_t mailUserKey[] = L"Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\mailto\\UserChoice"; + + wchar_t command[MAX_PATH] = {0}; + // Check if user has set preference, otherwise use default. + HKEY handle; + QString keyName; + if (!RegOpenKeyEx(HKEY_CURRENT_USER, mailUserKey, 0, KEY_READ, &handle)) { + DWORD bufferSize = BufferSize; + if (!RegQueryValueEx(handle, L"Progid", 0, 0, reinterpret_cast(command), &bufferSize)) + keyName = QString::fromWCharArray(command); + RegCloseKey(handle); + } + if (keyName.isEmpty()) + keyName = QStringLiteral("mailto"); + keyName += QStringLiteral("\\Shell\\Open\\Command"); + if (debug) + qDebug() << __FUNCTION__ << "keyName=" << keyName; + command[0] = 0; + if (!RegOpenKeyExW(HKEY_CLASSES_ROOT, (const wchar_t*)keyName.utf16(), 0, KEY_READ, &handle)) { + DWORD bufferSize = BufferSize; + RegQueryValueEx(handle, L"", 0, 0, reinterpret_cast(command), &bufferSize); + RegCloseKey(handle); + } + if (!command[0]) + return QString(); +#ifndef Q_OS_WINCE + wchar_t expandedCommand[MAX_PATH] = {0}; + return ExpandEnvironmentStrings(command, expandedCommand, MAX_PATH) ? + QString::fromWCharArray(expandedCommand) : QString::fromWCharArray(command); +#else + return QString(); +#endif +} + +static inline bool launchMail(const QUrl &url) +{ + QString command = mailCommand(); + if (command.isEmpty()) { + qWarning("Cannot launch '%s': There is no mail program installed.", qPrintable(url.toString())); + return false; + } + //Make sure the path for the process is in quotes + const QChar doubleQuote = QLatin1Char('"'); + if (!command.startsWith(doubleQuote)) { + const int exeIndex = command.indexOf(QStringLiteral(".exe "), 0, Qt::CaseInsensitive); + if (exeIndex != -1) { + command.insert(exeIndex + 4, doubleQuote); + command.prepend(doubleQuote); + } + } + // Pass the url as the parameter. Should use QProcess::startDetached(), + // but that cannot handle a Windows command line [yet]. + if (command.indexOf(QStringLiteral("%1")) < 0) return false; + command.replace(QStringLiteral("%1"), url.toString(QUrl::FullyEncoded)); + if (debug) + qDebug() << __FUNCTION__ << "Launching" << command; + //start the process + PROCESS_INFORMATION pi; + ZeroMemory(&pi, sizeof(pi)); + STARTUPINFO si; + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + if (!CreateProcess(NULL, (wchar_t*)command.utf16(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { + qErrnoWarning("Unable to launch '%s'", qPrintable(command)); + return false; + } + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + return true; +} + +bool QWindowsServices::openUrl(const QUrl &url) +{ + const QString scheme = url.scheme(); + if (scheme == QLatin1String("mailto") && launchMail(url)) + return true; + return shellExecute(url); +} + +bool QWindowsServices::openDocument(const QUrl &url) +{ + return shellExecute(url); +} + +QT_END_NAMESPACE