diff --git a/Telegram/SourceFiles/info/downloads/info_downloads_provider.cpp b/Telegram/SourceFiles/info/downloads/info_downloads_provider.cpp index 14180063f..f984ba1e6 100644 --- a/Telegram/SourceFiles/info/downloads/info_downloads_provider.cpp +++ b/Telegram/SourceFiles/info/downloads/info_downloads_provider.cpp @@ -370,7 +370,40 @@ void Provider::applyDragSelection( bool skipFrom, not_null tillItem, bool skipTill) { - // #TODO downloads selection + auto from = ranges::find(_elements, fromItem, &Element::item); + auto till = ranges::find(_elements, tillItem, &Element::item); + if (from == end(_elements) || till == end(_elements)) { + return; + } + if (skipFrom) { + ++from; + } + if (!skipTill) { + ++till; + } + if (from >= till) { + selected.clear(); + return; + } + auto chosen = base::flat_set>(); + chosen.reserve(till - from); + for (auto i = from; i != till; ++i) { + const auto item = i->item; + chosen.emplace(item); + ChangeItemSelection( + selected, + item, + computeSelectionData(item, FullSelection)); + } + if (selected.size() != chosen.size()) { + for (auto i = begin(selected); i != end(selected);) { + if (selected.contains(i->first)) { + ++i; + } else { + i = selected.erase(i); + } + } + } } bool Provider::allowSaveFileAs( diff --git a/Telegram/SourceFiles/info/media/info_media_list_section.cpp b/Telegram/SourceFiles/info/media/info_media_list_section.cpp index 03ecdb6f5..9a41a25f1 100644 --- a/Telegram/SourceFiles/info/media/info_media_list_section.cpp +++ b/Telegram/SourceFiles/info/media/info_media_list_section.cpp @@ -158,23 +158,6 @@ std::optional ListSection::findItemByItem( return std::nullopt; } -ListFoundItem ListSection::findItemNearId(UniversalMsgId universalId) const { - Expects(!_items.empty()); - - // #TODO downloads - auto itemIt = ranges::lower_bound( - _items, - universalId, - std::greater<>(), - [](const auto &item) { return GetUniversalId(item); }); - if (itemIt == _items.end()) { - --itemIt; - } - const auto item = *itemIt; - const auto exact = (GetUniversalId(item) == universalId); - return { item, findItemRect(item), exact }; -} - ListFoundItem ListSection::findItemDetails( not_null item) const { return { item, findItemRect(item), true }; diff --git a/Telegram/SourceFiles/info/media/info_media_list_section.h b/Telegram/SourceFiles/info/media/info_media_list_section.h index e03660bf0..77666a31a 100644 --- a/Telegram/SourceFiles/info/media/info_media_list_section.h +++ b/Telegram/SourceFiles/info/media/info_media_list_section.h @@ -34,8 +34,6 @@ public: bool removeItem(not_null item); [[nodiscard]] std::optional findItemByItem( not_null item) const; - [[nodiscard]] ListFoundItem findItemNearId( - UniversalMsgId universalId) const; [[nodiscard]] ListFoundItem findItemDetails( not_null item) const; [[nodiscard]] ListFoundItem findItemByPoint(QPoint point) const;