From 92e880990d90836b7c06c78024ad3ed8d929daed Mon Sep 17 00:00:00 2001 From: gaojiaqi Date: Sun, 27 Apr 2025 19:29:33 +0800 Subject: [PATCH] fix bug Signed-off-by: gaojiaqi --- .../reminder/include/reminder_data_manager.h | 2 ++ .../reminder/src/reminder_data_manager.cpp | 2 +- .../src/reminder_data_manager_inner.cpp | 23 +++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/services/reminder/include/reminder_data_manager.h b/services/reminder/include/reminder_data_manager.h index 3d22df0c9..6d6ed476c 100644 --- a/services/reminder/include/reminder_data_manager.h +++ b/services/reminder/include/reminder_data_manager.h @@ -681,6 +681,8 @@ private: bool CheckShowLimit(std::unordered_map& limits, int32_t& totalCount, sptr& reminder); + void UpdateReminderFromDb(const std::vector>& remindersFromDb); + /** * Single instance. */ diff --git a/services/reminder/src/reminder_data_manager.cpp b/services/reminder/src/reminder_data_manager.cpp index d7a9ce29c..286ad1607 100644 --- a/services/reminder/src/reminder_data_manager.cpp +++ b/services/reminder/src/reminder_data_manager.cpp @@ -1580,7 +1580,7 @@ void ReminderDataManager::LoadReminderFromDb() } std::vector> existReminders = store_->GetHalfHourReminders(); std::lock_guard lock(ReminderDataManager::MUTEX); - reminderVector_ = existReminders; + UpdateReminderFromDb(existReminders); totalCount_ = static_cast(reminderVector_.size()); ReminderRequest::GLOBAL_ID = store_->GetMaxId() + 1; } diff --git a/services/reminder/src/reminder_data_manager_inner.cpp b/services/reminder/src/reminder_data_manager_inner.cpp index 1e0eb507a..bd13eddcd 100644 --- a/services/reminder/src/reminder_data_manager_inner.cpp +++ b/services/reminder/src/reminder_data_manager_inner.cpp @@ -259,5 +259,28 @@ void ReminderDataManager::AsyncStartExtensionAbility(const sptr serviceQueue_->submit(callback, taskAttr); } } + +void ReminderDataManager::UpdateReminderFromDb(const std::vector>& remindersFromDb) +{ + std::map> reminders; + for (const auto& reminder : remindersFromDb) { + reminders[reminder->GetReminderId()] = reminder; + } + // Only alerts that do not exist in memory are processed + for (const auto& reminder : reminderVector_) { + if (reminder->IsShare()) { + continue; + } + int32_t reminderId = reminder->GetReminderId(); + auto iter = reminders.find(reminderId); + if (iter != reminders.end()) { + reminders.erase(iter); + } + } + // new reminder + for (auto& each : reminders) { + reminderVector_.push_back(each.second); + } +} } } -- Gitee