Make VideoNotesManager an actor.

This commit is contained in:
levlam 2022-10-20 18:53:12 +03:00
parent 46562f56d0
commit 49c993b674
4 changed files with 20 additions and 6 deletions

View File

@ -3451,6 +3451,8 @@ void Td::clear() {
LOG(DEBUG) << "TopDialogManager actor was cleared" << timer;
updates_manager_actor_.reset();
LOG(DEBUG) << "UpdatesManager actor was cleared" << timer;
video_notes_manager_actor_.reset();
LOG(DEBUG) << "VideoNotesManager actor was cleared" << timer;
voice_notes_manager_actor_.reset();
LOG(DEBUG) << "VoiceNotesManager actor was cleared" << timer;
web_pages_manager_actor_.reset();
@ -3855,7 +3857,6 @@ void Td::init_managers() {
audios_manager_ = make_unique<AudiosManager>(this);
callback_queries_manager_ = make_unique<CallbackQueriesManager>(this);
documents_manager_ = make_unique<DocumentsManager>(this);
video_notes_manager_ = make_unique<VideoNotesManager>(this);
videos_manager_ = make_unique<VideosManager>(this);
animations_manager_ = make_unique<AnimationsManager>(this, create_reference());
@ -3913,6 +3914,8 @@ void Td::init_managers() {
updates_manager_ = make_unique<UpdatesManager>(this, create_reference());
updates_manager_actor_ = register_actor("UpdatesManager", updates_manager_.get());
G()->set_updates_manager(updates_manager_actor_.get());
video_notes_manager_ = make_unique<VideoNotesManager>(this, create_reference());
video_notes_manager_actor_ = register_actor("VideoNotesManager", video_notes_manager_.get());
voice_notes_manager_ = make_unique<VoiceNotesManager>(this, create_reference());
voice_notes_manager_actor_ = register_actor("VoiceNotesManager", voice_notes_manager_.get());
web_pages_manager_ = make_unique<WebPagesManager>(this, create_reference());

View File

@ -134,7 +134,6 @@ class Td final : public Actor {
unique_ptr<CallbackQueriesManager> callback_queries_manager_;
unique_ptr<DocumentsManager> documents_manager_;
unique_ptr<OptionManager> option_manager_;
unique_ptr<VideoNotesManager> video_notes_manager_;
unique_ptr<VideosManager> videos_manager_;
unique_ptr<AnimationsManager> animations_manager_;
@ -181,6 +180,8 @@ class Td final : public Actor {
ActorOwn<TopDialogManager> top_dialog_manager_actor_;
unique_ptr<UpdatesManager> updates_manager_;
ActorOwn<UpdatesManager> updates_manager_actor_;
unique_ptr<VideoNotesManager> video_notes_manager_;
ActorOwn<VideoNotesManager> video_notes_manager_actor_;
unique_ptr<VoiceNotesManager> voice_notes_manager_;
ActorOwn<VoiceNotesManager> voice_notes_manager_actor_;
unique_ptr<WebPagesManager> web_pages_manager_;

View File

@ -23,13 +23,17 @@
namespace td {
VideoNotesManager::VideoNotesManager(Td *td) : td_(td) {
VideoNotesManager::VideoNotesManager(Td *td, ActorShared<> parent) : td_(td), parent_(std::move(parent)) {
}
VideoNotesManager::~VideoNotesManager() {
Scheduler::instance()->destroy_on_scheduler(G()->get_gc_scheduler_id(), video_notes_);
}
void VideoNotesManager::tear_down() {
parent_.reset();
}
int32 VideoNotesManager::get_video_note_duration(FileId file_id) const {
auto video_note = get_video_note(file_id);
CHECK(video_note != nullptr);

View File

@ -14,6 +14,8 @@
#include "td/telegram/td_api.h"
#include "td/telegram/telegram_api.h"
#include "td/actor/actor.h"
#include "td/utils/buffer.h"
#include "td/utils/common.h"
#include "td/utils/FlatHashMap.h"
@ -24,14 +26,14 @@ namespace td {
class Td;
class VideoNotesManager {
class VideoNotesManager final : public Actor {
public:
explicit VideoNotesManager(Td *td);
VideoNotesManager(Td *td, ActorShared<> parent);
VideoNotesManager(const VideoNotesManager &) = delete;
VideoNotesManager &operator=(const VideoNotesManager &) = delete;
VideoNotesManager(VideoNotesManager &&) = delete;
VideoNotesManager &operator=(VideoNotesManager &&) = delete;
~VideoNotesManager();
~VideoNotesManager() final;
int32 get_video_note_duration(FileId file_id) const;
@ -81,7 +83,11 @@ class VideoNotesManager {
FileId on_get_video_note(unique_ptr<VideoNote> new_video_note, bool replace);
void tear_down() final;
Td *td_;
ActorShared<> parent_;
WaitFreeHashMap<FileId, unique_ptr<VideoNote>, FileIdHash> video_notes_;
FlatHashMap<FileId, FlatHashSet<FullMessageId, FullMessageIdHash>, FileIdHash> video_note_messages_;