diff --git a/Telegram/Resources/icons/menu/star.png b/Telegram/Resources/icons/menu/star.png new file mode 100644 index 0000000000..4bb1ea334b Binary files /dev/null and b/Telegram/Resources/icons/menu/star.png differ diff --git a/Telegram/Resources/icons/menu/star@2x.png b/Telegram/Resources/icons/menu/star@2x.png new file mode 100644 index 0000000000..a63b6a439a Binary files /dev/null and b/Telegram/Resources/icons/menu/star@2x.png differ diff --git a/Telegram/Resources/icons/menu/star@3x.png b/Telegram/Resources/icons/menu/star@3x.png new file mode 100644 index 0000000000..d2829cba8c Binary files /dev/null and b/Telegram/Resources/icons/menu/star@3x.png differ diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index d749a39f67..ebb454e6d0 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -4133,9 +4133,12 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_gift_resale_date" = "Date"; "lng_gift_resale_count#one" = "{count} gift in resale"; "lng_gift_resale_count#other" = "{count} gifts in resale"; +"lng_gift_resale_count_none" = "No listings"; "lng_gift_resale_sort_price" = "Sort by Price"; "lng_gift_resale_sort_date" = "Sort by Date"; "lng_gift_resale_sort_number" = "Sort by Number"; +"lng_gift_resale_all_listings" = "All Listings"; +"lng_gift_resale_stars_only" = "For Stars Only"; "lng_gift_resale_filter_all" = "Select All"; "lng_gift_resale_model" = "Model"; "lng_gift_resale_models#one" = "{count} Model"; @@ -4148,6 +4151,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_gift_resale_symbols#other" = "{count} Symbols"; "lng_gift_resale_switch_to_ton" = "Switch to Ton"; "lng_gift_resale_switch_to_stars" = "Switch to Stars"; +"lng_gift_resale_search_none" = "No gifts found for your search."; "lng_gift_resale_early" = "You will be able to resell this gift in {duration}."; "lng_gift_transfer_early" = "You will be able to transfer this gift in {duration}."; "lng_gift_resale_transfer_early_title" = "Try Later"; diff --git a/Telegram/SourceFiles/boxes/star_gift_resale_box.cpp b/Telegram/SourceFiles/boxes/star_gift_resale_box.cpp index bd1190c529..8da084dd2d 100644 --- a/Telegram/SourceFiles/boxes/star_gift_resale_box.cpp +++ b/Telegram/SourceFiles/boxes/star_gift_resale_box.cpp @@ -248,6 +248,18 @@ struct ResaleTabs { actionWithIcon(tr::lng_gift_resale_sort_number(tr::now), [=] { sort(ResaleGiftsSort::Number); }, &st::menuIconOrderNumber, is(ResaleGiftsSort::Number)); + menu->addSeparator(); + const auto starsOnly = state->filter.current().starsOnly; + actionWithIcon(tr::lng_gift_resale_all_listings(tr::now), [=] { + modify([&](ResaleGiftsFilter &filter) { + filter.starsOnly = false; + }); + }, &st::menuIconTopics, !starsOnly); + actionWithIcon(tr::lng_gift_resale_stars_only(tr::now), [=] { + modify([&](ResaleGiftsFilter &filter) { + filter.starsOnly = true; + }); + }, &st::menuIconStar, starsOnly); } else { const auto now = state->filter.current().attributes; const auto type = IndexToType(index); @@ -503,7 +515,12 @@ void GiftResaleBox( const auto countLabel = titleWrap->add( object_ptr( titleWrap, - tr::lng_gift_resale_count(tr::now, lt_count, descriptor.count), + (descriptor.count + ? tr::lng_gift_resale_count( + tr::now, + lt_count, + descriptor.count) + : tr::lng_gift_resale_count_none(tr::now)), st::defaultFlatLabel), QMargins( st::boxRowPadding.left(), @@ -547,7 +564,17 @@ void GiftResaleBox( peer, content, std::move(descriptor), - state->ton.value()); + state->ton.value(), + nullptr, + false, + [=](int count) { + countLabel->setText(count + ? tr::lng_gift_resale_count( + tr::now, + lt_count, + count) + : tr::lng_gift_resale_count_none(tr::now)); + }); } } // namespace @@ -559,7 +586,8 @@ void AddResaleGiftsList( Data::ResaleGiftsDescriptor descriptor, rpl::producer forceTon, Fn)> bought, - bool forCraft) { + bool forCraft, + Fn countChanged) { struct State { rpl::event_stream<> updated; ResaleGiftsDescriptor data; @@ -606,7 +634,11 @@ void AddResaleGiftsList( state->data.offset = slice.list.empty() ? QString() : slice.offset; + state->data.count = slice.count; state->data.list = std::move(slice.list); + if (countChanged) { + countChanged(state->data.count); + } state->updated.fire({}); }); }, container->lifetime()); @@ -712,7 +744,9 @@ void AddResaleGiftsList( container, object_ptr( container, - tr::lng_gift_craft_search_none(), + (forCraft + ? tr::lng_gift_craft_search_none() + : tr::lng_gift_resale_search_none()), st::craftYourListEmpty), (st::boxRowPadding + QMargins(0, 0, 0, skip))), style::al_top); diff --git a/Telegram/SourceFiles/boxes/star_gift_resale_box.h b/Telegram/SourceFiles/boxes/star_gift_resale_box.h index ef45be3f8d..5804dc59a0 100644 --- a/Telegram/SourceFiles/boxes/star_gift_resale_box.h +++ b/Telegram/SourceFiles/boxes/star_gift_resale_box.h @@ -48,6 +48,7 @@ void AddResaleGiftsList( Data::ResaleGiftsDescriptor descriptor, rpl::producer forceTon, Fn)> bought = nullptr, - bool forCraft = false); + bool forCraft = false, + Fn countChanged = nullptr); } // namespace Ui diff --git a/Telegram/SourceFiles/data/data_star_gift.cpp b/Telegram/SourceFiles/data/data_star_gift.cpp index 06b0bc5f60..4ecc85f4bb 100644 --- a/Telegram/SourceFiles/data/data_star_gift.cpp +++ b/Telegram/SourceFiles/data/data_star_gift.cpp @@ -236,7 +236,8 @@ rpl::producer ResaleGiftsSlice( | (filter.attributes.empty() ? Flag() : Flag::f_attributes) - | (filter.forCraft ? Flag::f_for_craft : Flag())), + | (filter.forCraft ? Flag::f_for_craft : Flag()) + | (filter.starsOnly ? Flag::f_stars_only : Flag())), MTP_long(filter.attributesHash), MTP_long(giftId), MTP_vector_from_range(filter.attributes diff --git a/Telegram/SourceFiles/data/data_star_gift.h b/Telegram/SourceFiles/data/data_star_gift.h index 7cd0b73cca..8a9f8be81e 100644 --- a/Telegram/SourceFiles/data/data_star_gift.h +++ b/Telegram/SourceFiles/data/data_star_gift.h @@ -397,6 +397,7 @@ struct ResaleGiftsFilter { base::flat_set attributes; ResaleGiftsSort sort = ResaleGiftsSort::Price; bool forCraft = false; + bool starsOnly = false; friend inline bool operator==( const ResaleGiftsFilter &, diff --git a/Telegram/SourceFiles/ui/menu_icons.style b/Telegram/SourceFiles/ui/menu_icons.style index 92f863dfb9..543e3afc0f 100644 --- a/Telegram/SourceFiles/ui/menu_icons.style +++ b/Telegram/SourceFiles/ui/menu_icons.style @@ -208,6 +208,7 @@ menuIconTagEdit: icon{{ "menu/tag_edit-24x24", menuIconColor }}; menuIconDownloadOff: icon {{ "menu/download_off-24x24", menuIconColor }}; menuIconShareOff: icon {{ "menu/share_off-24x24", menuIconColor }}; menuIconShareOn: icon {{ "menu/share_on-24x24", menuIconColor }}; +menuIconStar: icon {{ "menu/star", menuIconColor }}; menuIconTTLAny: icon {{ "menu/auto_delete_plain", menuIconColor }}; menuIconTTLAnyTextPosition: point(11px, 22px);