diff --git a/Telegram/SourceFiles/data/data_media_types.cpp b/Telegram/SourceFiles/data/data_media_types.cpp index 1367970fc..19d89c500 100644 --- a/Telegram/SourceFiles/data/data_media_types.cpp +++ b/Telegram/SourceFiles/data/data_media_types.cpp @@ -412,7 +412,7 @@ FullStoryId Media::storyId() const { return {}; } -bool Media::storyExpired() const { +bool Media::storyExpired(bool revalidate) { return false; } @@ -2033,7 +2033,15 @@ FullStoryId MediaStory::storyId() const { return _storyId; } -bool MediaStory::storyExpired() const { +bool MediaStory::storyExpired(bool revalidate) { + if (revalidate) { + const auto stories = &parent()->history()->owner().stories(); + if (const auto maybeStory = stories->lookup(_storyId)) { + _expired = false; + } else if (maybeStory.error() == Data::NoStory::Deleted) { + _expired = true; + } + } return _expired; } diff --git a/Telegram/SourceFiles/data/data_media_types.h b/Telegram/SourceFiles/data/data_media_types.h index 81e034c02..7649a37ed 100644 --- a/Telegram/SourceFiles/data/data_media_types.h +++ b/Telegram/SourceFiles/data/data_media_types.h @@ -114,7 +114,7 @@ public: virtual PollData *poll() const; virtual const WallPaper *paper() const; virtual FullStoryId storyId() const; - virtual bool storyExpired() const; + virtual bool storyExpired(bool revalidate = false); virtual bool storyMention() const; virtual bool uploading() const; @@ -580,7 +580,7 @@ public: std::unique_ptr clone(not_null parent) override; FullStoryId storyId() const override; - bool storyExpired() const override; + bool storyExpired(bool revalidate = false) override; bool storyMention() const override; TextWithEntities notificationText() const override; diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp index ca39658a6..b3911b9d4 100644 --- a/Telegram/SourceFiles/data/data_session.cpp +++ b/Telegram/SourceFiles/data/data_session.cpp @@ -3917,6 +3917,11 @@ void Session::refreshStoryItemViews(FullStoryId id) { const auto i = _storyItems.find(id); if (i != _storyItems.end()) { for (const auto item : i->second) { + if (const auto media = item->media()) { + if (media->storyMention()) { + item->updateStoryMentionText(); + } + } requestItemViewRefresh(item); } } diff --git a/Telegram/SourceFiles/history/history_item.cpp b/Telegram/SourceFiles/history/history_item.cpp index c6ddbb4c4..bc0fffeb7 100644 --- a/Telegram/SourceFiles/history/history_item.cpp +++ b/Telegram/SourceFiles/history/history_item.cpp @@ -4825,7 +4825,7 @@ PreparedServiceText HistoryItem::prepareStoryMentionText() { auto result = PreparedServiceText(); const auto peer = history()->peer; result.links.push_back(peer->createOpenLink()); - const auto phrase = (this->media() && this->media()->storyExpired()) + const auto phrase = (this->media() && this->media()->storyExpired(true)) ? (out() ? tr::lng_action_story_mention_me_unavailable : tr::lng_action_story_mention_unavailable)