/* 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/type_traits.h" #include "base/observer.h" #include "base/call_delayed.h" #include "mtproto/mtproto_proxy_data.h" class History; namespace Data { struct FileOrigin; } // namespace Data namespace InlineBots { namespace Layout { class ItemBase; } // namespace Layout } // namespace InlineBots namespace App { template [[nodiscard]] inline auto LambdaDelayed(int duration, Guard &&object, Lambda &&lambda) { auto guarded = crl::guard( std::forward(object), std::forward(lambda)); return [saved = std::move(guarded), duration] { auto copy = saved; base::call_delayed(duration, std::move(copy)); }; } void sendBotCommand( not_null peer, UserData *bot, const QString &cmd, MsgId replyTo = 0); bool insertBotCommand(const QString &cmd); void activateBotCommand( not_null msg, int row, int column); void searchByHashtag(const QString &tag, PeerData *inPeer); } // namespace App namespace Ui { // Legacy global methods. void showPeerProfile(not_null peer); void showPeerProfile(not_null history); void showPeerHistoryAtItem(not_null item); void showPeerHistory(not_null peer, MsgId msgId); void showPeerHistory(not_null history, MsgId msgId); void showChatsList(not_null session); PeerData *getPeerForMouseAction(); bool skipPaintEvent(QWidget *widget, QPaintEvent *event); } // namespace Ui enum ClipStopperType { ClipStopperMediaview, ClipStopperSavedGifsPanel, }; namespace Notify { bool switchInlineBotButtonReceived( not_null session, const QString &query, UserData *samePeerBot = nullptr, MsgId samePeerReplyTo = 0); } // namespace Notify #define DeclareReadOnlyVar(Type, Name) const Type &Name(); #define DeclareRefVar(Type, Name) DeclareReadOnlyVar(Type, Name) \ Type &Ref##Name(); #define DeclareVar(Type, Name) DeclareRefVar(Type, Name) \ void Set##Name(const Type &Name); namespace Global { bool started(); void start(); void finish(); DeclareVar(bool, TryIPv6); DeclareVar(std::vector, ProxiesList); DeclareVar(MTP::ProxyData, SelectedProxy); DeclareVar(MTP::ProxyData::Settings, ProxySettings); DeclareVar(bool, UseProxyForCalls); DeclareRefVar(base::Observable, ConnectionTypeChanged); DeclareRefVar(base::Variable, WorkMode); } // namespace Global