diff --git a/Telegram/SourceFiles/media/stories/media_stories_reply.cpp b/Telegram/SourceFiles/media/stories/media_stories_reply.cpp index 7ea8ce8b7..d6fbfd7c6 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_reply.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_reply.cpp @@ -11,6 +11,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "api/api_sending.h" #include "apiwrap.h" #include "base/call_delayed.h" +#include "base/timer_rpl.h" +#include "base/unixtime.h" #include "boxes/premium_limits_box.h" #include "boxes/send_files_box.h" #include "chat_helpers/compose/compose_show.h" @@ -30,6 +32,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "main/main_session.h" #include "media/stories/media_stories_controller.h" +#include "media/stories/media_stories_stealth.h" #include "menu/menu_send.h" #include "storage/localimageloader.h" #include "storage/storage_account.h" @@ -42,6 +45,35 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "styles/style_media_view.h" namespace Media::Stories { +namespace { + +[[nodiscard]] rpl::producer PlaceholderText( + const std::shared_ptr &show) { + return show->session().data().stories().stealthModeValue( + ) | rpl::map([](Data::StealthMode value) { + return value.enabledTill; + }) | rpl::distinct_until_changed() | rpl::map([](TimeId till) { + return rpl::single( + rpl::empty + ) | rpl::then( + base::timer_each(250) + ) | rpl::map([=] { + return till - base::unixtime::now(); + }) | rpl::take_while([](TimeId left) { + return left > 0; + }) | rpl::then( + rpl::single(0) + ) | rpl::map([](TimeId left) { + return left + ? tr::lng_stealth_mode_countdown( + lt_left, + rpl::single(TimeLeftText(left))) + : tr::lng_story_reply_ph(); + }) | rpl::flatten_latest(); + }) | rpl::flatten_latest(); +} + +} // namespace class ReplyArea::Cant final : public Ui::RpWidget { public: @@ -85,7 +117,7 @@ ReplyArea::ReplyArea(not_null controller) .mode = HistoryView::ComposeControlsMode::Normal, .sendMenuType = SendMenu::Type::SilentOnly, .stickerOrEmojiChosen = _controller->stickerOrEmojiChosen(), - .customPlaceholder = tr::lng_story_reply_ph(), + .customPlaceholder = PlaceholderText(_controller->uiShow()), .voiceCustomCancelText = tr::lng_record_cancel_stories(tr::now), .voiceLockFromBottom = true, .features = { diff --git a/Telegram/SourceFiles/media/stories/media_stories_stealth.cpp b/Telegram/SourceFiles/media/stories/media_stories_stealth.cpp index b5d441ee1..7bf25a1cf 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_stealth.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_stealth.cpp @@ -45,31 +45,13 @@ struct Feature { TextWithEntities about; }; -[[nodiscard]] QString LeftText(int left) { - Expects(left >= 0); - - const auto hours = left / 3600; - const auto minutes = (left % 3600) / 60; - const auto seconds = left % 60; - const auto zero = QChar('0'); - if (hours) { - return u"%1:%2:%3"_q - .arg(hours) - .arg(minutes, 2, 10, zero) - .arg(seconds, 2, 10, zero); - } else if (minutes) { - return u"%1:%2"_q.arg(minutes).arg(seconds, 2, 10, zero); - } - return u"0:%1"_q.arg(left, 2, 10, zero); -} - [[nodiscard]] Ui::Toast::Config ToastAlready(TimeId left) { return { .title = tr::lng_stealth_mode_already_title(tr::now), .text = tr::lng_stealth_mode_already_about( tr::now, lt_left, - TextWithEntities{ LeftText(left) }, + TextWithEntities{ TimeLeftText(left) }, Ui::Text::RichLangValue), .st = &st::storiesStealthToast, .duration = kAlreadyToastDuration, @@ -277,7 +259,7 @@ struct Feature { return tr::lng_stealth_mode_cooldown_in( tr::now, lt_left, - LeftText(left)); + TimeLeftText(left)); }) | rpl::type_erased(); }) | rpl::flatten_latest(); @@ -404,4 +386,22 @@ void SetupStealthMode(std::shared_ptr show) { } } +QString TimeLeftText(int left) { + Expects(left >= 0); + + const auto hours = left / 3600; + const auto minutes = (left % 3600) / 60; + const auto seconds = left % 60; + const auto zero = QChar('0'); + if (hours) { + return u"%1:%2:%3"_q + .arg(hours) + .arg(minutes, 2, 10, zero) + .arg(seconds, 2, 10, zero); + } else if (minutes) { + return u"%1:%2"_q.arg(minutes).arg(seconds, 2, 10, zero); + } + return u"0:%1"_q.arg(left, 2, 10, zero); +} + } // namespace Media::Stories diff --git a/Telegram/SourceFiles/media/stories/media_stories_stealth.h b/Telegram/SourceFiles/media/stories/media_stories_stealth.h index d4ccae4b6..f40b77bc4 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_stealth.h +++ b/Telegram/SourceFiles/media/stories/media_stories_stealth.h @@ -15,4 +15,6 @@ namespace Media::Stories { void SetupStealthMode(std::shared_ptr show); +[[nodiscard]] QString TimeLeftText(int left); + } // namespace Media::Stories diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp index ee6b3bd53..0cd3ca35e 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp @@ -1313,7 +1313,7 @@ void OverlayWidget::updateControls() { } _shareNav = navRect(index); _shareNavOver = style::centerrect(_shareNav, overRect); - _shareNavIcon = style::centerrect(_shareNav, st::mediaviewSave); + _shareNavIcon = style::centerrect(_shareNav, st::mediaviewShare); if (_shareVisible) { ++index; }