tdlight/td/telegram/GroupCallManager.h

117 lines
4.5 KiB
C
Raw Normal View History

2020-11-26 11:47:20 +01:00
//
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2020
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#pragma once
#include "td/telegram/ChannelId.h"
2020-12-03 17:52:50 +01:00
#include "td/telegram/GroupCallId.h"
2020-11-26 11:47:20 +01:00
#include "td/telegram/InputGroupCallId.h"
#include "td/telegram/td_api.h"
#include "td/telegram/telegram_api.h"
2020-11-27 13:22:19 +01:00
#include "td/telegram/UserId.h"
2020-11-26 11:47:20 +01:00
#include "td/actor/actor.h"
#include "td/actor/PromiseFuture.h"
2020-12-03 17:52:50 +01:00
#include "td/utils/Status.h"
2020-11-26 11:47:20 +01:00
#include <unordered_map>
namespace td {
class Td;
class GroupCallManager : public Actor {
public:
GroupCallManager(Td *td, ActorShared<> parent);
2020-11-26 16:02:18 +01:00
GroupCallManager(const GroupCallManager &) = delete;
GroupCallManager &operator=(const GroupCallManager &) = delete;
GroupCallManager(GroupCallManager &&) = delete;
GroupCallManager &operator=(GroupCallManager &&) = delete;
~GroupCallManager() override;
2020-11-26 11:47:20 +01:00
2020-12-04 10:40:51 +01:00
GroupCallId get_group_call_id(InputGroupCallId input_group_call_id, ChannelId channel_id);
2020-12-03 17:52:50 +01:00
2020-12-02 23:08:20 +01:00
void create_voice_chat(ChannelId channel_id, Promise<InputGroupCallId> &&promise);
2020-11-26 11:47:20 +01:00
2020-12-03 17:52:50 +01:00
void get_group_call(GroupCallId group_call_id, Promise<td_api::object_ptr<td_api::groupCall>> &&promise);
2020-12-03 00:00:46 +01:00
2020-12-03 17:52:50 +01:00
void join_group_call(GroupCallId group_call_id, td_api::object_ptr<td_api::groupCallPayload> &&payload, int32 source,
bool is_muted, Promise<td_api::object_ptr<td_api::groupCallJoinResponse>> &&promise);
2020-11-26 12:32:29 +01:00
2020-12-03 17:52:50 +01:00
void toggle_group_call_mute_new_members(GroupCallId group_call_id, bool mute_new_members, Promise<Unit> &&promise);
2020-12-03 17:52:50 +01:00
void invite_group_call_members(GroupCallId group_call_id, vector<UserId> &&user_ids, Promise<Unit> &&promise);
2020-11-27 13:22:19 +01:00
2020-12-03 17:52:50 +01:00
void toggle_group_call_member_is_muted(GroupCallId group_call_id, UserId user_id, bool is_muted,
Promise<Unit> &&promise);
void check_group_call_is_joined(GroupCallId group_call_id, Promise<Unit> &&promise);
2020-11-27 15:07:12 +01:00
void leave_group_call(GroupCallId group_call_id, Promise<Unit> &&promise);
2020-11-26 11:47:20 +01:00
2020-12-03 17:52:50 +01:00
void discard_group_call(GroupCallId group_call_id, Promise<Unit> &&promise);
2020-11-26 11:47:20 +01:00
2020-12-04 10:40:51 +01:00
void on_update_group_call(tl_object_ptr<telegram_api::GroupCall> group_call_ptr, ChannelId channel_id);
2020-11-26 11:47:20 +01:00
2020-12-03 17:52:50 +01:00
void process_join_group_call_response(InputGroupCallId input_group_call_id, uint64 generation,
2020-11-26 12:32:29 +01:00
tl_object_ptr<telegram_api::Updates> &&updates, Promise<Unit> &&promise);
2020-11-26 11:47:20 +01:00
private:
struct GroupCall;
2020-11-26 15:33:28 +01:00
struct PendingJoinRequest;
2020-11-26 11:47:20 +01:00
void tear_down() override;
2020-12-03 17:52:50 +01:00
Result<InputGroupCallId> get_input_group_call_id(GroupCallId group_call_id);
GroupCallId get_next_group_call_id(InputGroupCallId input_group_call_id);
2020-12-04 10:40:51 +01:00
GroupCall *add_group_call(InputGroupCallId input_group_call_id, ChannelId channel_id);
2020-12-03 00:00:46 +01:00
2020-12-03 17:52:50 +01:00
const GroupCall *get_group_call(InputGroupCallId input_group_call_id) const;
GroupCall *get_group_call(InputGroupCallId input_group_call_id);
2020-12-03 00:00:46 +01:00
2020-12-03 17:52:50 +01:00
void reload_group_call(InputGroupCallId input_group_call_id,
Promise<td_api::object_ptr<td_api::groupCall>> &&promise);
void finish_get_group_call(InputGroupCallId input_group_call_id,
2020-12-03 00:00:46 +01:00
Result<tl_object_ptr<telegram_api::phone_groupCall>> &&result);
2020-12-03 17:52:50 +01:00
void on_join_group_call_response(InputGroupCallId input_group_call_id, string json_response);
2020-11-26 12:32:29 +01:00
2020-12-03 17:52:50 +01:00
void finish_join_group_call(InputGroupCallId input_group_call_id, uint64 generation, Status error);
2020-11-26 12:32:29 +01:00
void on_group_call_left(InputGroupCallId input_group_call_id, int32 source);
2020-12-04 10:40:51 +01:00
InputGroupCallId update_group_call(const tl_object_ptr<telegram_api::GroupCall> &group_call_ptr,
ChannelId channel_id);
2020-11-26 11:47:20 +01:00
2020-11-26 12:32:29 +01:00
static Result<td_api::object_ptr<td_api::groupCallJoinResponse>> get_group_call_join_response_object(
string json_response);
2020-12-03 17:52:50 +01:00
static tl_object_ptr<td_api::updateGroupCall> get_update_group_call_object(const GroupCall *group_call);
2020-11-26 11:47:20 +01:00
2020-12-03 17:52:50 +01:00
static tl_object_ptr<td_api::groupCall> get_group_call_object(const GroupCall *group_call);
2020-11-26 11:47:20 +01:00
Td *td_;
ActorShared<> parent_;
2020-12-03 17:52:50 +01:00
GroupCallId max_group_call_id_;
vector<InputGroupCallId> input_group_call_ids_;
2020-11-26 11:47:20 +01:00
std::unordered_map<InputGroupCallId, unique_ptr<GroupCall>, InputGroupCallIdHash> group_calls_;
2020-11-26 12:32:29 +01:00
2020-12-03 00:00:46 +01:00
std::unordered_map<InputGroupCallId, vector<Promise<td_api::object_ptr<td_api::groupCall>>>, InputGroupCallIdHash>
load_group_call_queries_;
2020-11-26 15:33:28 +01:00
std::unordered_map<InputGroupCallId, unique_ptr<PendingJoinRequest>, InputGroupCallIdHash> pending_join_requests_;
2020-11-26 12:32:29 +01:00
uint64 join_group_request_generation_ = 0;
2020-11-26 11:47:20 +01:00
};
} // namespace td