| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 |
- /*
- 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
- #include "base/object_ptr.h"
- class History;
- namespace style {
- struct FlatLabel;
- struct Checkbox;
- } // namespace style
- namespace Api {
- struct SendOptions;
- struct SendAction;
- } // namespace Api
- namespace ChatHelpers {
- class Show;
- } // namespace ChatHelpers
- namespace Data {
- class Story;
- class Thread;
- struct SendError;
- struct SendErrorWithThread;
- } // namespace Data
- namespace Main {
- class Session;
- class SessionShow;
- } // namespace Main
- namespace Ui {
- class BoxContent;
- } // namespace Ui
- namespace Window {
- class SessionNavigation;
- } // namespace Window
- struct PreparedServiceText {
- TextWithEntities text;
- std::vector<ClickHandlerPtr> links;
- };
- [[nodiscard]] MessageFlags FlagsFromMTP(
- MsgId id,
- MTPDmessage::Flags flags,
- MessageFlags localFlags);
- [[nodiscard]] MessageFlags FlagsFromMTP(
- MsgId id,
- MTPDmessageService::Flags flags,
- MessageFlags localFlags);
- [[nodiscard]] MTPMessageReplyHeader NewMessageReplyHeader(
- const Api::SendAction &action);
- enum class MediaCheckResult {
- Good,
- Unsupported,
- Empty,
- HasExpiredMediaTimeToLive,
- HasUnsupportedTimeToLive,
- HasStoryMention,
- };
- [[nodiscard]] MediaCheckResult CheckMessageMedia(
- const MTPMessageMedia &media);
- [[nodiscard]] CallId CallIdFromInput(const MTPInputGroupCall &data);
- [[nodiscard]] std::vector<not_null<UserData*>> ParseInvitedToCallUsers(
- not_null<HistoryItem*> item,
- const QVector<MTPlong> &users);
- inline constexpr auto kMaxUnreadReactions = 5; // Now 3, but just in case.
- using OnStackUsers = std::array<UserData*, kMaxUnreadReactions>;
- [[nodiscard]] OnStackUsers LookupRecentUnreadReactedUsers(
- not_null<HistoryItem*> item);
- void CheckReactionNotificationSchedule(
- not_null<HistoryItem*> item,
- const OnStackUsers &wasUsers);
- [[nodiscard]] MessageFlags NewForwardedFlags(
- not_null<PeerData*> peer,
- PeerId from,
- not_null<HistoryItem*> fwd);
- [[nodiscard]] MessageFlags FinalizeMessageFlags(
- not_null<History*> history,
- MessageFlags flags);
- [[nodiscard]] bool CopyMarkupToForward(not_null<const HistoryItem*> item);
- [[nodiscard]] TextWithEntities EnsureNonEmpty(
- const TextWithEntities &text = TextWithEntities());
- [[nodiscard]] TextWithEntities UnsupportedMessageText();
- void RequestDependentMessageItem(
- not_null<HistoryItem*> item,
- PeerId peerId,
- MsgId msgId);
- void RequestDependentMessageStory(
- not_null<HistoryItem*> item,
- PeerId peerId,
- StoryId storyId);
- [[nodiscard]] MessageFlags NewMessageFlags(not_null<PeerData*> peer);
- [[nodiscard]] TimeId NewMessageDate(TimeId scheduled);
- [[nodiscard]] TimeId NewMessageDate(const Api::SendOptions &options);
- [[nodiscard]] PeerId NewMessageFromId(const Api::SendAction &action);
- [[nodiscard]] QString NewMessagePostAuthor(const Api::SendAction &action);
- [[nodiscard]] bool ShouldSendSilent(
- not_null<PeerData*> peer,
- const Api::SendOptions &options);
- [[nodiscard]] HistoryItem *LookupReplyTo(
- not_null<History*> history,
- FullMsgId replyToId);
- [[nodiscard]] MsgId LookupReplyToTop(
- not_null<History*> history,
- HistoryItem *replyTo);
- [[nodiscard]] MsgId LookupReplyToTop(
- not_null<History*> history,
- FullReplyTo replyTo);
- [[nodiscard]] bool LookupReplyIsTopicPost(HistoryItem *replyTo);
- struct SendingErrorRequest {
- MsgId topicRootId = 0;
- const HistoryItemsList *forward = nullptr;
- const Data::Story *story = nullptr;
- const TextWithTags *text = nullptr;
- int messagesCount = 0;
- bool ignoreSlowmodeCountdown = false;
- };
- [[nodiscard]] int ComputeSendingMessagesCount(
- not_null<History*> history,
- const SendingErrorRequest &request);
- [[nodiscard]] Data::SendError GetErrorForSending(
- not_null<PeerData*> peer,
- SendingErrorRequest request);
- [[nodiscard]] Data::SendError GetErrorForSending(
- not_null<Data::Thread*> thread,
- SendingErrorRequest request);
- struct SendPaymentDetails {
- int messages = 0;
- int stars = 0;
- };
- [[nodiscard]] std::optional<SendPaymentDetails> ComputePaymentDetails(
- not_null<PeerData*> peer,
- int messagesCount);
- struct PaidConfirmStyles {
- const style::FlatLabel *label = nullptr;
- const style::Checkbox *checkbox = nullptr;
- };
- void ShowSendPaidConfirm(
- not_null<Window::SessionNavigation*> navigation,
- not_null<PeerData*> peer,
- SendPaymentDetails details,
- Fn<void()> confirmed,
- PaidConfirmStyles styles = {});
- void ShowSendPaidConfirm(
- std::shared_ptr<Main::SessionShow> show,
- not_null<PeerData*> peer,
- SendPaymentDetails details,
- Fn<void()> confirmed,
- PaidConfirmStyles styles = {});
- void ShowSendPaidConfirm(
- std::shared_ptr<Main::SessionShow> show,
- const std::vector<not_null<PeerData*>> &peers,
- SendPaymentDetails details,
- Fn<void()> confirmed,
- PaidConfirmStyles styles = {});
- class SendPaymentHelper final {
- public:
- [[nodiscard]] bool check(
- not_null<Window::SessionNavigation*> navigation,
- not_null<PeerData*> peer,
- int messagesCount,
- int starsApproved,
- Fn<void(int)> resend,
- PaidConfirmStyles styles = {});
- [[nodiscard]] bool check(
- std::shared_ptr<Main::SessionShow> show,
- not_null<PeerData*> peer,
- int messagesCount,
- int starsApproved,
- Fn<void(int)> resend,
- PaidConfirmStyles styles = {});
- void clear();
- private:
- Fn<void()> _resend;
- rpl::lifetime _lifetime;
- };
- [[nodiscard]] Data::SendErrorWithThread GetErrorForSending(
- const std::vector<not_null<Data::Thread*>> &threads,
- SendingErrorRequest request);
- [[nodiscard]] object_ptr<Ui::BoxContent> MakeSendErrorBox(
- const Data::SendErrorWithThread &error,
- bool withTitle);
- [[nodiscard]] TextWithEntities DropDisallowedCustomEmoji(
- not_null<PeerData*> to,
- TextWithEntities text);
- [[nodiscard]] Main::Session *SessionByUniqueId(uint64 sessionUniqueId);
- [[nodiscard]] HistoryItem *MessageByGlobalId(GlobalMsgId globalId);
- [[nodiscard]] QDateTime ItemDateTime(not_null<const HistoryItem*> item);
- [[nodiscard]] QString ItemDateText(
- not_null<const HistoryItem*> item,
- bool isUntilOnline);
- [[nodiscard]] bool IsItemScheduledUntilOnline(
- not_null<const HistoryItem*> item);
- [[nodiscard]] ClickHandlerPtr JumpToMessageClickHandler(
- not_null<PeerData*> peer,
- MsgId msgId,
- FullMsgId returnToId = FullMsgId(),
- TextWithEntities highlightPart = {},
- int highlightPartOffsetHint = 0);
- [[nodiscard]] ClickHandlerPtr JumpToMessageClickHandler(
- not_null<HistoryItem*> item,
- FullMsgId returnToId = FullMsgId(),
- TextWithEntities highlightPart = {},
- int highlightPartOffsetHint = 0);
- [[nodiscard]] ClickHandlerPtr JumpToStoryClickHandler(
- not_null<Data::Story*> story);
- ClickHandlerPtr JumpToStoryClickHandler(
- not_null<PeerData*> peer,
- StoryId storyId);
- [[nodiscard]] ClickHandlerPtr HideSponsoredClickHandler();
- [[nodiscard]] ClickHandlerPtr ReportSponsoredClickHandler(
- not_null<HistoryItem*> item);
- [[nodiscard]] ClickHandlerPtr AboutSponsoredClickHandler();
- [[nodiscard]] not_null<HistoryItem*> GenerateJoinedMessage(
- not_null<History*> history,
- TimeId inviteDate,
- not_null<UserData*> inviter,
- bool viaRequest);
- [[nodiscard]] std::optional<bool> PeerHasThisCall(
- not_null<PeerData*> peer,
- CallId id);
- [[nodiscard]] rpl::producer<bool> PeerHasThisCallValue(
- not_null<PeerData*> peer,
- CallId id);
- [[nodiscard]] ClickHandlerPtr GroupCallClickHandler(
- not_null<PeerData*> peer,
- CallId callId);
- void ShowTrialTranscribesToast(int left, TimeId until);
- void ClearMediaAsExpired(not_null<HistoryItem*> item);
- [[nodiscard]] int ItemsForwardSendersCount(const HistoryItemsList &list);
- [[nodiscard]] int ItemsForwardCaptionsCount(const HistoryItemsList &list);
|