Pass StoryFullId to on_delete_story.
This commit is contained in:
parent
6c4e6eb6ff
commit
37b7e2421a
@ -732,14 +732,13 @@ void StoryManager::on_story_expire_timeout(int64 story_global_id) {
|
|||||||
return on_story_changed(story_full_id, story, false, false);
|
return on_story_changed(story_full_id, story, false, false);
|
||||||
}
|
}
|
||||||
auto owner_dialog_id = story_full_id.get_dialog_id();
|
auto owner_dialog_id = story_full_id.get_dialog_id();
|
||||||
auto story_id = story_full_id.get_story_id();
|
|
||||||
if (!is_story_owned(owner_dialog_id) && story->content_ != nullptr && !story->is_pinned_) {
|
if (!is_story_owned(owner_dialog_id) && story->content_ != nullptr && !story->is_pinned_) {
|
||||||
// non-owned expired non-pinned stories are fully deleted
|
// non-owned expired non-pinned stories are fully deleted
|
||||||
on_delete_story(owner_dialog_id, story_id);
|
on_delete_story(story_full_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto active_stories = get_active_stories(owner_dialog_id);
|
auto active_stories = get_active_stories(owner_dialog_id);
|
||||||
if (active_stories != nullptr && contains(active_stories->story_ids_, story_id)) {
|
if (active_stories != nullptr && contains(active_stories->story_ids_, story_full_id.get_story_id())) {
|
||||||
auto story_ids = active_stories->story_ids_;
|
auto story_ids = active_stories->story_ids_;
|
||||||
on_update_active_stories(owner_dialog_id, active_stories->max_read_story_id_, std::move(story_ids));
|
on_update_active_stories(owner_dialog_id, active_stories->max_read_story_id_, std::move(story_ids));
|
||||||
}
|
}
|
||||||
@ -1656,21 +1655,22 @@ StoryId StoryManager::on_get_skipped_story(DialogId owner_dialog_id,
|
|||||||
StoryId StoryManager::on_get_deleted_story(DialogId owner_dialog_id,
|
StoryId StoryManager::on_get_deleted_story(DialogId owner_dialog_id,
|
||||||
telegram_api::object_ptr<telegram_api::storyItemDeleted> &&story_item) {
|
telegram_api::object_ptr<telegram_api::storyItemDeleted> &&story_item) {
|
||||||
StoryId story_id(story_item->id_);
|
StoryId story_id(story_item->id_);
|
||||||
on_delete_story(owner_dialog_id, story_id);
|
on_delete_story({owner_dialog_id, story_id});
|
||||||
return story_id;
|
return story_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StoryManager::on_delete_story(DialogId owner_dialog_id, StoryId story_id) {
|
void StoryManager::on_delete_story(StoryFullId story_full_id) {
|
||||||
|
auto story_id = story_full_id.get_story_id();
|
||||||
if (!story_id.is_server()) {
|
if (!story_id.is_server()) {
|
||||||
LOG(ERROR) << "Receive deleted " << story_id << " in " << owner_dialog_id;
|
LOG(ERROR) << "Receive deleted " << story_full_id;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
StoryFullId story_full_id{owner_dialog_id, story_id};
|
|
||||||
const Story *story = get_story(story_full_id);
|
const Story *story = get_story(story_full_id);
|
||||||
if (story == nullptr) {
|
if (story == nullptr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
auto owner_dialog_id = story_full_id.get_dialog_id();
|
||||||
if (story->is_update_sent_) {
|
if (story->is_update_sent_) {
|
||||||
CHECK(owner_dialog_id.get_type() == DialogType::User);
|
CHECK(owner_dialog_id.get_type() == DialogType::User);
|
||||||
send_closure(G()->td(), &Td::send_update,
|
send_closure(G()->td(), &Td::send_update,
|
||||||
@ -2329,8 +2329,9 @@ void StoryManager::on_toggle_story_is_pinned(StoryId story_id, bool is_pinned, P
|
|||||||
}
|
}
|
||||||
|
|
||||||
void StoryManager::delete_story(StoryId story_id, Promise<Unit> &&promise) {
|
void StoryManager::delete_story(StoryId story_id, Promise<Unit> &&promise) {
|
||||||
DialogId dialog_id(td_->contacts_manager_->get_my_id());
|
DialogId owner_dialog_id(td_->contacts_manager_->get_my_id());
|
||||||
const Story *story = get_story({dialog_id, story_id});
|
StoryFullId story_full_id{owner_dialog_id, story_id};
|
||||||
|
const Story *story = get_story(story_full_id);
|
||||||
if (story == nullptr) {
|
if (story == nullptr) {
|
||||||
return promise.set_error(Status::Error(400, "Story not found"));
|
return promise.set_error(Status::Error(400, "Story not found"));
|
||||||
}
|
}
|
||||||
@ -2338,49 +2339,45 @@ void StoryManager::delete_story(StoryId story_id, Promise<Unit> &&promise) {
|
|||||||
return promise.set_error(Status::Error(400, "Invalid story identifier"));
|
return promise.set_error(Status::Error(400, "Invalid story identifier"));
|
||||||
}
|
}
|
||||||
|
|
||||||
delete_story_on_server(dialog_id, story_id, 0, std::move(promise));
|
delete_story_on_server(story_full_id, 0, std::move(promise));
|
||||||
|
|
||||||
on_delete_story(dialog_id, story_id);
|
on_delete_story(story_full_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
class StoryManager::DeleteStoryOnServerLogEvent {
|
class StoryManager::DeleteStoryOnServerLogEvent {
|
||||||
public:
|
public:
|
||||||
DialogId dialog_id_;
|
StoryFullId story_full_id_;
|
||||||
StoryId story_id_;
|
|
||||||
|
|
||||||
template <class StorerT>
|
template <class StorerT>
|
||||||
void store(StorerT &storer) const {
|
void store(StorerT &storer) const {
|
||||||
td::store(dialog_id_, storer);
|
td::store(story_full_id_, storer);
|
||||||
td::store(story_id_, storer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class ParserT>
|
template <class ParserT>
|
||||||
void parse(ParserT &parser) {
|
void parse(ParserT &parser) {
|
||||||
td::parse(dialog_id_, parser);
|
td::parse(story_full_id_, parser);
|
||||||
td::parse(story_id_, parser);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
uint64 StoryManager::save_delete_story_on_server_log_event(DialogId dialog_id, StoryId story_id) {
|
uint64 StoryManager::save_delete_story_on_server_log_event(StoryFullId story_full_id) {
|
||||||
DeleteStoryOnServerLogEvent log_event{dialog_id, story_id};
|
DeleteStoryOnServerLogEvent log_event{story_full_id};
|
||||||
return binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::DeleteStoryOnServer,
|
return binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::DeleteStoryOnServer,
|
||||||
get_log_event_storer(log_event));
|
get_log_event_storer(log_event));
|
||||||
}
|
}
|
||||||
|
|
||||||
void StoryManager::delete_story_on_server(DialogId dialog_id, StoryId story_id, uint64 log_event_id,
|
void StoryManager::delete_story_on_server(StoryFullId story_full_id, uint64 log_event_id, Promise<Unit> &&promise) {
|
||||||
Promise<Unit> &&promise) {
|
LOG(INFO) << "Delete " << story_full_id << " from server";
|
||||||
LOG(INFO) << "Delete " << story_id << " in " << dialog_id << " from server";
|
|
||||||
|
|
||||||
if (log_event_id == 0) {
|
if (log_event_id == 0) {
|
||||||
log_event_id = save_delete_story_on_server_log_event(dialog_id, story_id);
|
log_event_id = save_delete_story_on_server_log_event(story_full_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto new_promise = get_erase_log_event_promise(log_event_id, std::move(promise));
|
auto new_promise = get_erase_log_event_promise(log_event_id, std::move(promise));
|
||||||
promise = std::move(new_promise); // to prevent self-move
|
promise = std::move(new_promise); // to prevent self-move
|
||||||
|
|
||||||
deleted_story_full_ids_.insert({dialog_id, story_id});
|
deleted_story_full_ids_.insert(story_full_id);
|
||||||
|
|
||||||
td_->create_handler<DeleteStoriesQuery>(std::move(promise))->send({story_id});
|
td_->create_handler<DeleteStoriesQuery>(std::move(promise))->send({story_full_id.get_story_id()});
|
||||||
}
|
}
|
||||||
|
|
||||||
telegram_api::object_ptr<telegram_api::InputMedia> StoryManager::get_input_media(StoryFullId story_full_id) const {
|
telegram_api::object_ptr<telegram_api::InputMedia> StoryManager::get_input_media(StoryFullId story_full_id) const {
|
||||||
@ -2397,14 +2394,15 @@ telegram_api::object_ptr<telegram_api::InputMedia> StoryManager::get_input_media
|
|||||||
void StoryManager::remove_story_notifications_by_story_ids(DialogId dialog_id, const vector<StoryId> &story_ids) {
|
void StoryManager::remove_story_notifications_by_story_ids(DialogId dialog_id, const vector<StoryId> &story_ids) {
|
||||||
VLOG(notifications) << "Trying to remove notification about " << story_ids << " in " << dialog_id;
|
VLOG(notifications) << "Trying to remove notification about " << story_ids << " in " << dialog_id;
|
||||||
for (auto story_id : story_ids) {
|
for (auto story_id : story_ids) {
|
||||||
if (!have_story_force({dialog_id, story_id})) {
|
StoryFullId story_full_id{dialog_id, story_id};
|
||||||
LOG(INFO) << "Can't delete " << story_id << " because it is not found";
|
if (!have_story_force(story_full_id)) {
|
||||||
|
LOG(INFO) << "Can't delete " << story_full_id << " because it is not found";
|
||||||
// call synchronously to remove them before ProcessPush returns
|
// call synchronously to remove them before ProcessPush returns
|
||||||
// td_->notification_manager_->remove_temporary_notification_by_story_id(
|
// td_->notification_manager_->remove_temporary_notification_by_story_id(
|
||||||
// story_notification_group_id, story_id, true, "remove_story_notifications_by_story_ids");
|
// story_notification_group_id, story_full_id, true, "remove_story_notifications_by_story_ids");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
on_delete_story(dialog_id, story_id);
|
on_delete_story(story_full_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2419,14 +2417,14 @@ void StoryManager::on_binlog_events(vector<BinlogEvent> &&events) {
|
|||||||
DeleteStoryOnServerLogEvent log_event;
|
DeleteStoryOnServerLogEvent log_event;
|
||||||
log_event_parse(log_event, event.get_data()).ensure();
|
log_event_parse(log_event, event.get_data()).ensure();
|
||||||
|
|
||||||
auto dialog_id = log_event.dialog_id_;
|
auto dialog_id = log_event.story_full_id_.get_dialog_id();
|
||||||
if (dialog_id != DialogId(td_->contacts_manager_->get_my_id())) {
|
if (dialog_id != DialogId(td_->contacts_manager_->get_my_id())) {
|
||||||
binlog_erase(G()->td_db()->get_binlog(), event.id_);
|
binlog_erase(G()->td_db()->get_binlog(), event.id_);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
td_->messages_manager_->have_dialog_info_force(dialog_id);
|
td_->messages_manager_->have_dialog_info_force(dialog_id);
|
||||||
delete_story_on_server(dialog_id, log_event.story_id_, event.id_, Auto());
|
delete_story_on_server(log_event.story_full_id_, event.id_, Auto());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LogEvent::HandlerType::ReadStoriesOnServer: {
|
case LogEvent::HandlerType::ReadStoriesOnServer: {
|
||||||
|
@ -248,7 +248,7 @@ class StoryManager final : public Actor {
|
|||||||
StoryId on_get_deleted_story(DialogId owner_dialog_id,
|
StoryId on_get_deleted_story(DialogId owner_dialog_id,
|
||||||
telegram_api::object_ptr<telegram_api::storyItemDeleted> &&story_item);
|
telegram_api::object_ptr<telegram_api::storyItemDeleted> &&story_item);
|
||||||
|
|
||||||
void on_delete_story(DialogId owner_dialog_id, StoryId story_id);
|
void on_delete_story(StoryFullId story_full_id);
|
||||||
|
|
||||||
void on_get_dialog_pinned_stories(DialogId owner_dialog_id,
|
void on_get_dialog_pinned_stories(DialogId owner_dialog_id,
|
||||||
telegram_api::object_ptr<telegram_api::stories_stories> &&stories,
|
telegram_api::object_ptr<telegram_api::stories_stories> &&stories,
|
||||||
@ -263,9 +263,9 @@ class StoryManager final : public Actor {
|
|||||||
|
|
||||||
vector<FileId> get_story_file_ids(const Story *story) const;
|
vector<FileId> get_story_file_ids(const Story *story) const;
|
||||||
|
|
||||||
static uint64 save_delete_story_on_server_log_event(DialogId dialog_id, StoryId story_id);
|
static uint64 save_delete_story_on_server_log_event(StoryFullId story_full_id);
|
||||||
|
|
||||||
void delete_story_on_server(DialogId dialog_id, StoryId story_id, uint64 log_event_id, Promise<Unit> &&promise);
|
void delete_story_on_server(StoryFullId story_full_id, uint64 log_event_id, Promise<Unit> &&promise);
|
||||||
|
|
||||||
void delete_story_files(const Story *story) const;
|
void delete_story_files(const Story *story) const;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user