diff --git a/Telegram/SourceFiles/data/data_stories.cpp b/Telegram/SourceFiles/data/data_stories.cpp index 0090ba369..391caba74 100644 --- a/Telegram/SourceFiles/data/data_stories.cpp +++ b/Telegram/SourceFiles/data/data_stories.cpp @@ -340,7 +340,7 @@ void Stories::clearArchive(not_null peer) { _archive.erase(i); for (const auto &id : archive.ids.list) { if (const auto story = lookup({ peerId, id })) { - if ((*story)->expired() && !(*story)->pinned()) { + if ((*story)->expired() && !(*story)->inProfile()) { applyDeleted(peer, id); } } @@ -558,8 +558,8 @@ void Stories::unregisterDependentMessage( void Stories::savedStateChanged(not_null story) { const auto id = story->id(); const auto peer = story->peer()->id; - const auto pinned = story->pinned(); - if (pinned) { + const auto inProfile = story->inProfile(); + if (inProfile) { auto &saved = _saved[peer]; const auto added = saved.ids.list.emplace(id).second; if (added) { @@ -794,7 +794,7 @@ void Stories::applyDeleted(not_null peer, StoryId id) { } } } - if (story->pinned()) { + if (story->inProfile()) { if (const auto k = _saved.find(peerId); k != end(_saved)) { const auto saved = &k->second; if (saved->ids.list.remove(id)) { @@ -832,7 +832,7 @@ void Stories::applyDeleted(not_null peer, StoryId id) { void Stories::applyExpired(FullStoryId id) { if (const auto maybeStory = lookup(id)) { const auto story = *maybeStory; - if (!hasArchive(story->peer()) && !story->pinned()) { + if (!hasArchive(story->peer()) && !story->inProfile()) { applyDeleted(story->peer(), id.story); return; } @@ -1099,7 +1099,7 @@ void Stories::markAsRead(FullStoryId id, bool viewed) { return; } const auto story = *maybeStory; - if (story->expired() && story->pinned()) { + if (story->expired() && story->inProfile()) { _incrementViewsPending[id.peer].emplace(id.story); if (!_incrementViewsTimer.isActive()) { _incrementViewsTimer.callOnce(kIncrementViewsDelay); @@ -1724,9 +1724,9 @@ void Stories::deleteList(const std::vector &ids) { }).send(); } -void Stories::togglePinnedList( +void Stories::toggleInProfileList( const std::vector &ids, - bool pinned) { + bool inProfile) { if (ids.empty()) { return; } @@ -1745,7 +1745,7 @@ void Stories::togglePinnedList( api->request(MTPstories_TogglePinned( peer->input, MTP_vector(list), - MTP_bool(pinned) + MTP_bool(inProfile) )).done([=](const MTPVector &result) { const auto peerId = peer->id; auto &saved = _saved[peerId]; @@ -1759,8 +1759,8 @@ void Stories::togglePinnedList( for (const auto &id : result.v) { if (const auto maybeStory = lookup({ peerId, id.v })) { const auto story = *maybeStory; - story->setPinned(pinned); - if (pinned) { + story->setInProfile(inProfile); + if (inProfile) { const auto add = loaded || (id.v >= lastId); if (!add) { dirty = true; diff --git a/Telegram/SourceFiles/data/data_stories.h b/Telegram/SourceFiles/data/data_stories.h index 1cc3bb30d..2508b3557 100644 --- a/Telegram/SourceFiles/data/data_stories.h +++ b/Telegram/SourceFiles/data/data_stories.h @@ -131,7 +131,7 @@ public: explicit Stories(not_null owner); ~Stories(); - static constexpr auto kPinnedToastDuration = 4 * crl::time(1000); + static constexpr auto kInProfileToastDuration = 4 * crl::time(1000); [[nodiscard]] Session &owner() const; [[nodiscard]] Main::Session &session() const; @@ -205,7 +205,9 @@ public: void savedLoadMore(PeerId peerId); void deleteList(const std::vector &ids); - void togglePinnedList(const std::vector &ids, bool pinned); + void toggleInProfileList( + const std::vector &ids, + bool inProfile); void report( std::shared_ptr show, FullStoryId id, diff --git a/Telegram/SourceFiles/data/data_story.cpp b/Telegram/SourceFiles/data/data_story.cpp index cc0fefe99..6a525a7a6 100644 --- a/Telegram/SourceFiles/data/data_story.cpp +++ b/Telegram/SourceFiles/data/data_story.cpp @@ -389,12 +389,12 @@ TextWithEntities Story::inReplyText() const { Ui::Text::WithEntities); } -void Story::setPinned(bool pinned) { - _pinned = pinned; +void Story::setInProfile(bool value) { + _inProfile = value; } -bool Story::pinned() const { - return _pinned; +bool Story::inProfile() const { + return _inProfile; } StoryPrivacy Story::privacy() const { @@ -431,7 +431,9 @@ bool Story::canDownloadChecked() const { } bool Story::canShare() const { - return _privacyPublic && !forbidsForward() && (pinned() || !expired()); + return _privacyPublic + && !forbidsForward() + && (inProfile() || !expired()); } bool Story::canDelete() const { @@ -447,7 +449,7 @@ bool Story::canReport() const { } bool Story::hasDirectLink() const { - if (!_privacyPublic || (!_pinned && expired())) { + if (!_privacyPublic || (!_inProfile && expired())) { return false; } return !_peer->username().isEmpty(); @@ -707,7 +709,7 @@ void Story::applyFields( : data.vsent_reaction() ? Data::ReactionFromMTP(*data.vsent_reaction()) : Data::ReactionId(); - const auto pinned = data.is_pinned(); + const auto inProfile = data.is_pinned(); const auto edited = data.is_edited(); const auto privacy = data.is_public() ? StoryPrivacy::Public @@ -767,7 +769,7 @@ void Story::applyFields( } } - const auto pinnedChanged = (_pinned != pinned); + const auto inProfileChanged = (_inProfile != inProfile); const auto editedChanged = (_edited != edited); const auto mediaChanged = (_media != media); const auto captionChanged = (_caption != caption); @@ -783,7 +785,7 @@ void Story::applyFields( _privacyContacts = (privacy == StoryPrivacy::Contacts); _privacySelectedContacts = (privacy == StoryPrivacy::SelectedContacts); _edited = edited; - _pinned = pinned; + _inProfile = inProfile; _noForwards = noForwards; if (mediaChanged) { _media = std::move(media); @@ -823,7 +825,7 @@ void Story::applyFields( } _peer->owner().refreshStoryItemViews(fullId()); } - if (pinnedChanged) { + if (inProfileChanged) { _peer->owner().stories().savedStateChanged(this); } } diff --git a/Telegram/SourceFiles/data/data_story.h b/Telegram/SourceFiles/data/data_story.h index 41da0239e..f4fd17d60 100644 --- a/Telegram/SourceFiles/data/data_story.h +++ b/Telegram/SourceFiles/data/data_story.h @@ -153,8 +153,8 @@ public: [[nodiscard]] Image *replyPreview() const; [[nodiscard]] TextWithEntities inReplyText() const; - void setPinned(bool pinned); - [[nodiscard]] bool pinned() const; + void setInProfile(bool value); + [[nodiscard]] bool inProfile() const; [[nodiscard]] StoryPrivacy privacy() const; [[nodiscard]] bool forbidsForward() const; [[nodiscard]] bool edited() const; @@ -250,7 +250,7 @@ private: const TimeId _expires = 0; TimeId _lastUpdateTime = 0; bool _out : 1 = false; - bool _pinned : 1 = false; + bool _inProfile : 1 = false; bool _privacyPublic : 1 = false; bool _privacyCloseFriends : 1 = false; bool _privacyContacts : 1 = false; diff --git a/Telegram/SourceFiles/info/media/info_media_list_widget.cpp b/Telegram/SourceFiles/info/media/info_media_list_widget.cpp index 4e30f0b09..be09febef 100644 --- a/Telegram/SourceFiles/info/media/info_media_list_widget.cpp +++ b/Telegram/SourceFiles/info/media/info_media_list_widget.cpp @@ -1213,26 +1213,28 @@ void ListWidget::toggleStoryPin( } const auto channel = peerIsChannel(list.front().peer); const auto count = int(list.size()); - const auto pin = (_controller->storiesTab() == Stories::Tab::Archive); + const auto toProfile = (_controller->storiesTab() == Stories::Tab::Archive); const auto controller = _controller; const auto sure = [=](Fn close) { using namespace ::Media::Stories; - controller->session().data().stories().togglePinnedList(list, pin); + controller->session().data().stories().toggleInProfileList( + list, + toProfile); controller->showToast( - PrepareTogglePinnedToast(channel, count, pin)); + PrepareToggleInProfileToast(channel, count, toProfile)); close(); if (confirmed) { confirmed(); } }; - const auto onePhrase = pin + const auto onePhrase = toProfile ? (channel ? tr::lng_stories_channel_save_sure : tr::lng_stories_save_sure) : (channel ? tr::lng_stories_channel_archive_sure : tr::lng_stories_archive_sure); - const auto manyPhrase = pin + const auto manyPhrase = toProfile ? (channel ? tr::lng_stories_channel_save_sure_many : tr::lng_stories_save_sure_many) diff --git a/Telegram/SourceFiles/media/stories/media_stories_controller.cpp b/Telegram/SourceFiles/media/stories/media_stories_controller.cpp index d43ff3a27..10490e2aa 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_controller.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_controller.cpp @@ -1696,17 +1696,19 @@ void Controller::reportRequested() { ReportRequested(uiShow(), _shown, &st::storiesReportBox); } -void Controller::togglePinnedRequested(bool pinned) { +void Controller::toggleInProfileRequested(bool inProfile) { const auto story = this->story(); if (!story || !story->peer()->isSelf()) { return; } - if (!pinned && v::is(_context.data)) { + if (!inProfile && v::is(_context.data)) { moveFromShown(); } - story->owner().stories().togglePinnedList({ story->fullId() }, pinned); + story->owner().stories().toggleInProfileList( + { story->fullId() }, + inProfile); const auto channel = story->peer()->isChannel(); - uiShow()->showToast(PrepareTogglePinnedToast(channel, 1, pinned)); + uiShow()->showToast(PrepareToggleInProfileToast(channel, 1, inProfile)); } void Controller::moveFromShown() { @@ -1757,12 +1759,12 @@ void Controller::updatePowerSaveBlocker(const Player::TrackState &state) { [=] { return _wrap->window()->windowHandle(); }); } -Ui::Toast::Config PrepareTogglePinnedToast( +Ui::Toast::Config PrepareToggleInProfileToast( bool channel, int count, - bool pinned) { + bool inProfile) { return { - .text = (pinned + .text = (inProfile ? (count == 1 ? (channel ? tr::lng_stories_channel_save_done @@ -1793,8 +1795,8 @@ Ui::Toast::Config PrepareTogglePinnedToast( count, Ui::Text::WithEntities))), .st = &st::storiesActionToast, - .duration = (pinned - ? Data::Stories::kPinnedToastDuration + .duration = (inProfile + ? Data::Stories::kInProfileToastDuration : Ui::Toast::kDefaultDuration), }; } diff --git a/Telegram/SourceFiles/media/stories/media_stories_controller.h b/Telegram/SourceFiles/media/stories/media_stories_controller.h index b8745d4ed..2b5de5bc7 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_controller.h +++ b/Telegram/SourceFiles/media/stories/media_stories_controller.h @@ -172,7 +172,7 @@ public: void shareRequested(); void deleteRequested(); void reportRequested(); - void togglePinnedRequested(bool pinned); + void toggleInProfileRequested(bool inProfile); [[nodiscard]] bool ignoreWindowMove(QPoint position) const; void tryProcessKeyInput(not_null e); @@ -328,10 +328,10 @@ private: }; -[[nodiscard]] Ui::Toast::Config PrepareTogglePinnedToast( +[[nodiscard]] Ui::Toast::Config PrepareToggleInProfileToast( bool channel, int count, - bool pinned); + bool inProfile); void ReportRequested( std::shared_ptr show, FullStoryId id, diff --git a/Telegram/SourceFiles/media/stories/media_stories_view.cpp b/Telegram/SourceFiles/media/stories/media_stories_view.cpp index e21cd1fd9..c8f5ffe94 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_view.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_view.cpp @@ -103,8 +103,8 @@ void View::reportRequested() { _controller->reportRequested(); } -void View::togglePinnedRequested(bool pinned) { - _controller->togglePinnedRequested(pinned); +void View::toggleInProfileRequested(bool inProfile) { + _controller->toggleInProfileRequested(inProfile); } bool View::ignoreWindowMove(QPoint position) const { diff --git a/Telegram/SourceFiles/media/stories/media_stories_view.h b/Telegram/SourceFiles/media/stories/media_stories_view.h index 46a6662e2..da71d80d1 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_view.h +++ b/Telegram/SourceFiles/media/stories/media_stories_view.h @@ -112,7 +112,7 @@ public: void shareRequested(); void deleteRequested(); void reportRequested(); - void togglePinnedRequested(bool pinned); + void toggleInProfileRequested(bool inProfile); [[nodiscard]] bool ignoreWindowMove(QPoint position) const; void tryProcessKeyInput(not_null e); diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp index 229b37636..cfa414afe 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp @@ -1498,17 +1498,17 @@ void OverlayWidget::fillContextMenuActions(const MenuCallback &addAction) { &st::mediaMenuIconShowInChat); } if (story && story->peer()->isSelf()) { - const auto pinned = story->pinned(); - const auto text = pinned + const auto inProfile = story->inProfile(); + const auto text = inProfile ? tr::lng_mediaview_archive_story(tr::now) : tr::lng_mediaview_save_to_profile(tr::now); addAction(text, [=] { if (_stories) { - _stories->togglePinnedRequested(!pinned); + _stories->toggleInProfileRequested(!inProfile); } - }, pinned + }, (inProfile ? &st::mediaMenuIconArchiveStory - : &st::mediaMenuIconSaveStory); + : &st::mediaMenuIconSaveStory)); } if ((!story || story->canDownloadChecked()) && _document