/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once class HistoryItem; namespace style { struct WhoRead; } // namespace style namespace Ui { struct WhoReadContent; enum class WhoReadType; } // namespace Ui namespace Data { struct ReactionId; } // namespace Data namespace Api { enum class WhoReactedList { All, One, }; [[nodiscard]] QString FormatReadDate(TimeId date, const QDateTime &now); [[nodiscard]] bool WhoReadExists(not_null<HistoryItem*> item); [[nodiscard]] bool WhoReactedExists( not_null<HistoryItem*> item, WhoReactedList list); struct WhoReadPeer { PeerId peer = 0; TimeId date = 0; bool dateReacted = false; friend inline bool operator==( const WhoReadPeer &a, const WhoReadPeer &b) noexcept = default; }; struct WhoReadList { std::vector<WhoReadPeer> list; Ui::WhoReadType type = {}; }; // The context must be destroyed before the session holding this item. [[nodiscard]] rpl::producer<Ui::WhoReadContent> WhoReacted( not_null<HistoryItem*> item, not_null<QWidget*> context, // Cache results for this lifetime. const style::WhoRead &st, std::shared_ptr<WhoReadList> whoReadIds = nullptr); [[nodiscard]] rpl::producer<Ui::WhoReadContent> WhoReacted( not_null<HistoryItem*> item, const Data::ReactionId &reaction, not_null<QWidget*> context, // Cache results for this lifetime. const style::WhoRead &st); } // namespace Api