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,