diff --git a/map/booking_availability_filter.cpp b/map/booking_availability_filter.cpp index 614be78042..911a01e2b4 100644 --- a/map/booking_availability_filter.cpp +++ b/map/booking_availability_filter.cpp @@ -63,8 +63,7 @@ using HotelToFeatureIds = HotelsMapping; bool IsConformToFilter(search::Result const & r) { - return r.m_details.m_isSponsoredHotel && r.GetResultType() == search::Result::Type::Feature && - !r.IsRefusedByFilter(); + return r.m_details.m_isSponsoredHotel && r.GetResultType() == search::Result::Type::Feature; } template diff --git a/map/booking_utils.cpp b/map/booking_utils.cpp index 6862f940d7..99af7f2242 100644 --- a/map/booking_utils.cpp +++ b/map/booking_utils.cpp @@ -25,10 +25,12 @@ void SortTransform(search::Results const & results, std::vector const & CHECK_EQUAL(results.GetCount(), extras.size(), ()); std::vector> featuresWithPrices; - featuresWithPrices.reserve(results.GetCount()); PriceFormatter formatter; for (size_t i = 0; i < results.GetCount(); ++i) { + if (results[i].IsRefusedByFilter()) + continue; + auto priceFormatted = formatter.Format(extras[i].m_price, extras[i].m_currency); featuresWithPrices.emplace_back(results[i].GetFeatureID(), std::move(priceFormatted)); } @@ -180,18 +182,19 @@ filter::TasksRawInternal MakeInternalTasks(std::vector const & featur if (sortedFeatures.empty()) return; - std::vector orderedPrices; - orderedPrices.reserve(extras.size()); - PriceFormatter formatter; - for (size_t i = 0; i < extras.size(); ++i) - orderedPrices.emplace_back(formatter.Format(extras[i].m_price, extras[i].m_currency)); + CHECK_EQUAL(sortedFeatures.size(), extras.size(), ()); + PriceFormatter formatter; std::vector sortedAvailable; - for (auto & id : sortedFeatures) + std::vector orderedPrices; + for (size_t i = 0; i < sortedFeatures.size(); ++i) { // Some hotels might be unavailable by offline filter. - if (!searchMarks.IsUnavailable(id)) - sortedAvailable.emplace_back(std::move(id)); + if (searchMarks.IsUnavailable(sortedFeatures[i])) + continue; + + sortedAvailable.emplace_back(std::move(sortedFeatures[i])); + orderedPrices.emplace_back(formatter.Format(extras[i].m_price, extras[i].m_currency)); } GetPlatform().RunTask(Platform::Thread::Gui, [&searchMarks, type, sortedAvailable, diff --git a/map/framework.cpp b/map/framework.cpp index cd26d329cf..dcf52f7902 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -3970,9 +3970,12 @@ void Framework::ShowViewportSearchResults(search::Results const & results, bool mark.SetSale(found); break; case Type::Availability: - mark.SetPreparing(!found); + // Some hotels might be unavailable by offline filters. + auto const isAvailable = found && !m_searchMarks.IsUnavailable(id); - if (found && !filterResult.m_extras.empty()) + mark.SetPreparing(!isAvailable); + + if (isAvailable && !filterResult.m_extras.empty()) { auto const index = distance(features.cbegin(), it); auto price = formatter.Format(filterResult.m_extras[index].m_price,