| 155 | } |
| 156 | |
| 157 | void TodoLists::add( |
| 158 | not_null<HistoryItem*> item, |
| 159 | const std::vector<TodoListItem> &items, |
| 160 | Fn<void()> done, |
| 161 | Fn<void(QString)> fail) { |
| 162 | if (items.empty()) { |
| 163 | return; |
| 164 | } |
| 165 | const auto session = _session; |
| 166 | _session->api().request(MTPmessages_AppendTodoList( |
| 167 | item->history()->peer->input(), |
| 168 | MTP_int(item->id.bare), |
| 169 | TodoListItemsToMTP(&item->history()->session(), items) |
| 170 | )).done([=](const MTPUpdates &result) { |
| 171 | session->api().applyUpdates(result); |
| 172 | if (const auto onstack = done) { |
| 173 | onstack(); |
| 174 | } |
| 175 | }).fail([=](const MTP::Error &error) { |
| 176 | if (const auto onstack = fail) { |
| 177 | onstack(error.type()); |
| 178 | } |
| 179 | }).send(); |
| 180 | } |
| 181 | |
| 182 | void TodoLists::toggleCompletion(FullMsgId itemId, int id, bool completed) { |
| 183 | auto &entry = _toggles[itemId]; |
no test coverage detected