/* 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 namespace Data { class Session; } // namespace Data namespace Main { class Session; } // namespace Main struct TodoListItem { TextWithEntities text; PeerData *completedBy = nullptr; TimeId completionDate = 0; int id = 0; friend inline bool operator==( const TodoListItem &, const TodoListItem &) = default; }; struct TodoListData { TodoListData(not_null owner, TodoListId id); [[nodiscard]] Data::Session &owner() const; [[nodiscard]] Main::Session &session() const; enum class Flag { OthersCanAppend = 0x01, OthersCanComplete = 0x02, }; friend inline constexpr bool is_flag_type(Flag) { return true; }; using Flags = base::flags; bool applyChanges(const MTPDtodoList &todolist); bool applyCompletions(const MTPVector *completions); void apply( not_null item, const MTPDmessageActionTodoCompletions &data); void apply(const MTPDmessageActionTodoAppendTasks &data); [[nodiscard]] TodoListItem *itemById(int id); [[nodiscard]] const TodoListItem *itemById(int id) const; void setFlags(Flags flags); [[nodiscard]] Flags flags() const; [[nodiscard]] bool othersCanAppend() const; [[nodiscard]] bool othersCanComplete() const; TodoListId id; TextWithEntities title; std::vector items; int version = 0; static constexpr auto kMaxOptions = 32; private: const not_null _owner; Flags _flags = Flags(); }; [[nodiscard]] MTPVector TodoListItemsToMTP( not_null session, const std::vector &tasks); [[nodiscard]] MTPTodoList TodoListDataToMTP( not_null todolist); [[nodiscard]] MTPInputMedia TodoListDataToInputMedia( not_null todolist); [[nodiscard]] TodoListItem TodoListItemFromMTP( not_null session, const MTPTodoItem &item);