From: Piotr Kosko Date: Thu, 24 Aug 2017 12:57:30 +0000 (+0200) Subject: [Alarm][Notification] Refactored notification creation X-Git-Tag: submit/tizen/20170906.125601~3^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a43a69467e71d4ded690a3278110f0061e258c75;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Alarm][Notification] Refactored notification creation [Feature] Avoiding copying the notification json by passing picojson::value to getNotiHandleFromJson method. [Verification] Code compiles without errors. TCT passrate of Alarm and Notification didn't change. Change-Id: Ia996809944df74ab8c80d3bebe8f73ad7b060796 Signed-off-by: Piotr Kosko --- diff --git a/src/alarm/alarm_manager.cc b/src/alarm/alarm_manager.cc index e4747cc9..6bb33e4f 100755 --- a/src/alarm/alarm_manager.cc +++ b/src/alarm/alarm_manager.cc @@ -270,9 +270,7 @@ void AlarmManager::AddAlarmNotification(const picojson::value& args, picojson::o }; using namespace std::placeholders; - std::function impl {}; + GetHandleFromJsonFun impl {}; if (args.contains("newImpl") && args.get("newImpl").is() && args.get("newImpl").get()) { LoggerD("New implementation"); @@ -282,8 +280,7 @@ void AlarmManager::AddAlarmNotification(const picojson::value& args, picojson::o impl = std::bind(&StatusNotification::GetNotiHandleFromJson, _1, _2, _3); } - PlatformResult platform_result = impl(args.get(), - false, ¬ification_handle); + PlatformResult platform_result = impl(args.get("notification"), false, ¬ification_handle); if (!platform_result) { LogAndReportError(PlatformResult(ErrorCode::ABORT_ERR, platform_result.message().c_str()), &out); diff --git a/src/notification/common_notification.cc b/src/notification/common_notification.cc index ea7f87c3..a62df7a7 100644 --- a/src/notification/common_notification.cc +++ b/src/notification/common_notification.cc @@ -760,9 +760,7 @@ PlatformResult CommonNotification::UpdateNotificationAfterPost( notification_h noti_handle, int id, picojson::object* out_ptr) { time_t posted_time; PlatformResult status = GetPostedTime(noti_handle, &posted_time); - if (status.IsError()) { - return status; - } + CHECK_ERROR(status); picojson::object& out = *out_ptr; out["postedTime"] = @@ -786,11 +784,12 @@ PlatformResult CommonNotification::PostNotification(const picojson::object& args notification_free(noti_handle); }; - PlatformResult status = getHandle(args, is_update, ¬i_handle); - - if (status.IsError()) { - return status; + const auto& noti_val_it = args.find("notification"); + if (args.end() == noti_val_it) { + return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Cannot post notification"); } + PlatformResult status = getHandle(noti_val_it->second, is_update, ¬i_handle); + CHECK_ERROR(status); if (is_update) { ret = notification_update(noti_handle); diff --git a/src/notification/common_notification.h b/src/notification/common_notification.h index ba23662b..47c7079a 100644 --- a/src/notification/common_notification.h +++ b/src/notification/common_notification.h @@ -40,9 +40,10 @@ const std::string kProgressTypeByte = "BYTE"; typedef std::map InformationEnumMap; typedef std::map ImageEnumMap; -typedef std::function GetHandleFromJsonFun; +XW_EXPORT typedef std::function< + common::PlatformResult(const picojson::value& noti_val, + bool is_update, + notification_h *noti_handle)> GetHandleFromJsonFun; class CommonNotification { public: diff --git a/src/notification/notification_manager.cc b/src/notification/notification_manager.cc index 2476484d..d4574370 100644 --- a/src/notification/notification_manager.cc +++ b/src/notification/notification_manager.cc @@ -280,10 +280,12 @@ common::PlatformResult NotificationManager::SaveTemplate(const picojson::object& PlatformResult status = PlatformResult(ErrorCode::NO_ERROR); const auto& new_impl_it = args.find("newImpl"); - if (args.end() != new_impl_it && new_impl_it->second.get()) { - status = UserNotification::GetNotiHandleFromJson(args, false, ¬i_handle); + const auto& noti_val_it = args.find("notification"); + if (args.end() != new_impl_it && args.end() != noti_val_it + && new_impl_it->second.get()) { + status = UserNotification::GetNotiHandleFromJson(noti_val_it->second, false, ¬i_handle); } else { - status = StatusNotification::GetNotiHandleFromJson(args, false, ¬i_handle); + status = StatusNotification::GetNotiHandleFromJson(noti_val_it->second, false, ¬i_handle); } if (status.IsError()) { diff --git a/src/notification/status_notification.cc b/src/notification/status_notification.cc index 40be3a0c..303c2252 100644 --- a/src/notification/status_notification.cc +++ b/src/notification/status_notification.cc @@ -100,13 +100,11 @@ PlatformResult StatusNotification::ToJson(int id, return PlatformResult(ErrorCode::NO_ERROR); } -PlatformResult StatusNotification::GetNotiHandleFromJson(const picojson::object& args, +PlatformResult StatusNotification::GetNotiHandleFromJson(const picojson::value& noti_val, bool is_update, notification_h *noti_handle) { LoggerD("Enter"); - picojson::object noti_obj = - common::FromJson(args, "notification"); - picojson::value noti_val(noti_obj); + picojson::object noti_obj = noti_val.get(); notification_h tmp_noti = nullptr; // statusType, id diff --git a/src/notification/status_notification.h b/src/notification/status_notification.h index 9c573e00..5e767e73 100644 --- a/src/notification/status_notification.h +++ b/src/notification/status_notification.h @@ -36,7 +36,7 @@ class StatusNotification : public CommonNotification { notification_h noti_handle, app_control_h app_handle, picojson::object* out_ptr); - XW_EXPORT static common::PlatformResult GetNotiHandleFromJson(const picojson::object& args, + XW_EXPORT static common::PlatformResult GetNotiHandleFromJson(const picojson::value& noti_val, bool is_update, notification_h *noti_handle); static common::PlatformResult PostStatusNotification(const picojson::object& args, diff --git a/src/notification/user_notification.cc b/src/notification/user_notification.cc index 7185d98c..1c498e15 100644 --- a/src/notification/user_notification.cc +++ b/src/notification/user_notification.cc @@ -64,15 +64,11 @@ PlatformResult UserNotification::ToJson(int id, return PlatformResult(ErrorCode::NO_ERROR); } -PlatformResult UserNotification::GetNotiHandleFromJson(const picojson::object& args, +PlatformResult UserNotification::GetNotiHandleFromJson(const picojson::value& noti_val, bool is_update, notification_h *noti_handle) { LoggerD("Enter"); - // TODO change this function to use const picojson::value& args - // instead of object (no copying would be needed) - picojson::object noti_obj = - common::FromJson(args, "notification"); - picojson::value noti_val(noti_obj); + picojson::object noti_obj = noti_val.get(); notification_h tmp_noti = nullptr; PlatformResult status = InitNotiFromJson(noti_obj, "userType", is_update, &tmp_noti); diff --git a/src/notification/user_notification.h b/src/notification/user_notification.h index 47f5b7fe..3ed1dfdc 100644 --- a/src/notification/user_notification.h +++ b/src/notification/user_notification.h @@ -28,7 +28,7 @@ class UserNotification : public CommonNotification { notification_h noti_handle, app_control_h app_handle, picojson::object* out_ptr); - XW_EXPORT static common::PlatformResult GetNotiHandleFromJson(const picojson::object& args, + XW_EXPORT static common::PlatformResult GetNotiHandleFromJson(const picojson::value& noti_val, bool is_update, notification_h *noti_handle); static common::PlatformResult PostUserNotification(const picojson::object& args,