| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- /*
- 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 ApiWrap;
- namespace Api {
- struct ChatLink {
- QString link;
- QString title;
- TextWithEntities message;
- int clicks = 0;
- };
- struct ChatLinkUpdate {
- QString was;
- std::optional<ChatLink> now;
- };
- class ChatLinks final {
- public:
- explicit ChatLinks(not_null<ApiWrap*> api);
- using Link = ChatLink;
- using Update = ChatLinkUpdate;
- void create(
- const QString &title,
- const TextWithEntities &message,
- Fn<void(Link)> done = nullptr);
- void edit(
- const QString &link,
- const QString &title,
- const TextWithEntities &message,
- Fn<void(Link)> done = nullptr);
- void destroy(
- const QString &link,
- Fn<void()> done = nullptr);
- void preload();
- [[nodiscard]] const std::vector<ChatLink> &list() const;
- [[nodiscard]] bool loaded() const;
- [[nodiscard]] rpl::producer<> loadedUpdates() const;
- [[nodiscard]] rpl::producer<Update> updates() const;
- private:
- const not_null<ApiWrap*> _api;
- std::vector<Link> _list;
- rpl::event_stream<> _loadedUpdates;
- mtpRequestId _requestId = 0;
- bool _loaded = false;
- rpl::event_stream<Update> _updates;
- };
- } // namespace Api
|