Improve StoryViewer constructor.

This commit is contained in:
levlam 2023-12-25 17:30:26 +03:00
parent 05651f587d
commit be785dd673
3 changed files with 27 additions and 17 deletions

View File

@ -225,6 +225,7 @@ class ContactsManager final : public Actor {
void on_update_user_stories_hidden(UserId user_id, bool stories_hidden);
void on_update_user_online(UserId user_id, tl_object_ptr<telegram_api::UserStatus> &&status);
void on_update_user_local_was_online(UserId user_id, int32 local_was_online);
// use on_update_dialog_is_blocked instead
void on_update_user_is_blocked(UserId user_id, bool is_blocked, bool is_blocked_for_stories);
void on_update_user_has_pinned_stories(UserId user_id, bool has_pinned_stories);
void on_update_user_common_chat_count(UserId user_id, int32 common_chat_count);

View File

@ -8,6 +8,7 @@
#include "td/telegram/BlockListId.h"
#include "td/telegram/ContactsManager.h"
#include "td/telegram/MessagesManager.h"
#include "td/telegram/Td.h"
#include "td/utils/algorithm.h"
@ -15,6 +16,25 @@
namespace td {
StoryViewer::StoryViewer(Td *td, telegram_api::object_ptr<telegram_api::StoryView> &&story_view_ptr) {
CHECK(story_view_ptr != nullptr);
if (story_view_ptr->get_id() != telegram_api::storyView::ID) {
return;
}
auto story_view = telegram_api::move_object_as<telegram_api::storyView>(story_view_ptr);
UserId user_id(story_view->user_id_);
if (!user_id.is_valid()) {
return;
}
user_id_ = user_id;
date_ = td::max(story_view->date_, static_cast<int32>(0));
is_blocked_ = story_view->blocked_;
is_blocked_for_stories_ = story_view->blocked_my_stories_from_;
reaction_type_ = ReactionType(story_view->reaction_);
td->messages_manager_->on_update_dialog_is_blocked(DialogId(user_id), is_blocked_, is_blocked_for_stories_);
}
td_api::object_ptr<td_api::storyInteraction> StoryViewer::get_story_interaction_object(
ContactsManager *contacts_manager) const {
auto block_list_id = BlockListId(is_blocked_, is_blocked_for_stories_);
@ -38,18 +58,13 @@ StoryViewers::StoryViewers(Td *td, int32 total_count, int32 total_forward_count,
, total_forward_count_(total_forward_count)
, total_reaction_count_(total_reaction_count)
, next_offset_(std::move(next_offset)) {
for (auto &story_view_ptr : story_views) {
if (story_view_ptr->get_id() != telegram_api::storyView::ID) {
for (auto &story_view : story_views) {
StoryViewer story_viewer(td, std::move(story_view));
if (!story_viewer.is_valid()) {
LOG(ERROR) << "Receive invalid " << story_viewer << " in story interaction";
continue;
}
auto story_view = telegram_api::move_object_as<telegram_api::storyView>(story_view_ptr);
td->contacts_manager_->on_update_user_is_blocked(UserId(story_view->user_id_), story_view->blocked_,
story_view->blocked_my_stories_from_);
story_viewers_.emplace_back(std::move(story_view));
if (!story_viewers_.back().is_valid()) {
LOG(ERROR) << "Receive invalid " << story_viewers_.back() << " in story interaction";
story_viewers_.pop_back();
}
story_viewers_.push_back(std::move(story_viewer));
}
}

View File

@ -30,13 +30,7 @@ class StoryViewer {
friend StringBuilder &operator<<(StringBuilder &string_builder, const StoryViewer &viewer);
public:
StoryViewer(telegram_api::object_ptr<telegram_api::storyView> &&story_view)
: user_id_(story_view->user_id_)
, date_(td::max(story_view->date_, static_cast<int32>(0)))
, is_blocked_(story_view->blocked_)
, is_blocked_for_stories_(story_view->blocked_my_stories_from_)
, reaction_type_(story_view->reaction_) {
}
StoryViewer(Td *td, telegram_api::object_ptr<telegram_api::StoryView> &&story_view_ptr);
UserId get_viewer_user_id() const {
return user_id_;