/* 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 "mtproto/sender.h" class ApiWrap; class PeerData; namespace Main { class Session; } // namespace Main namespace Api { class Ringtones final { public: explicit Ringtones(not_null api); using Ids = std::vector; void requestList(); void applyUpdate(); void remove(DocumentId id); void upload( const QString &filename, const QString &filemime, const QByteArray &content); [[nodiscard]] const Ids &list() const; [[nodiscard]] rpl::producer<> listUpdates() const; [[nodiscard]] rpl::producer uploadFails() const; [[nodiscard]] rpl::producer uploadDones() const; [[nodiscard]] int64 maxSize() const; [[nodiscard]] int maxSavedCount() const; [[nodiscard]] crl::time maxDuration() const; private: struct UploadedData { QString filename; QString filemime; QByteArray content; }; void ready(const FullMsgId &msgId, const MTPInputFile &file); const not_null _session; MTP::Sender _api; base::flat_map _uploads; rpl::event_stream _uploadFails; rpl::event_stream _uploadDones; struct { uint64 hash = 0; Ids documents; rpl::event_stream<> updates; mtpRequestId requestId = 0; } _list; }; } // namespace Api