From 9c79cf9267e43a492180948433a863e131b59b56 Mon Sep 17 00:00:00 2001
From: Pawel Andruszkiewicz
Date: Wed, 8 Apr 2015 14:09:20 +0200
Subject: [PATCH] [Calendar] Allow to create multiple instances of
CalendarInstance class.
Change-Id: Ia5cdc66235cb4dd7fc09626f7af00068ae7c39d4
---
src/calendar/calendar.cc | 30 ++++++++++++-------------
src/calendar/calendar.h | 11 +++++----
src/calendar/calendar_extension.cc | 2 +-
src/calendar/calendar_instance.cc | 36 +++++++++++++-----------------
src/calendar/calendar_instance.h | 4 +++-
5 files changed, 41 insertions(+), 42 deletions(-)
diff --git a/src/calendar/calendar.cc b/src/calendar/calendar.cc
index 7e12f84e..dcbd2339 100644
--- a/src/calendar/calendar.cc
+++ b/src/calendar/calendar.cc
@@ -40,12 +40,9 @@ void CalendarFilterDeleter(calendar_filter_h calendar_filter) {
using namespace common;
-int Calendar::current_db_version_ = 0;
-std::map Calendar::listeners_registered_;
-
-Calendar& Calendar::GetInstance() {
- static Calendar instance;
- return instance;
+Calendar::Calendar(CalendarInstance& instance)
+ : current_db_version_(0),
+ instance_(instance) {
}
Calendar::~Calendar() {
@@ -944,7 +941,7 @@ PlatformResult Calendar::AddChangeListener(const picojson::object& args,
PlatformResult status = CalendarRecord::TypeToUri(type, &view_uri);
if (status.IsError()) return status;
- ret = calendar_db_add_changed_cb(view_uri.c_str(), ChangeCallback, nullptr);
+ ret = calendar_db_add_changed_cb(view_uri.c_str(), ChangeCallback, this);
if (CALENDAR_ERROR_NONE != ret) {
LoggerE("Add calendar change callback error for type %s", type.c_str());
return PlatformResult(ErrorCode::UNKNOWN_ERR,
@@ -979,8 +976,7 @@ PlatformResult Calendar::RemoveChangeListener(const picojson::object& args,
PlatformResult status = CalendarRecord::TypeToUri(type, &view_uri);
if (status.IsError()) return status;
- ret = calendar_db_remove_changed_cb(view_uri.c_str(), ChangeCallback,
- nullptr);
+ ret = calendar_db_remove_changed_cb(view_uri.c_str(), ChangeCallback, this);
if (CALENDAR_ERROR_NONE != ret) {
LoggerE("Remove calendar change callback error for type %s",
type.c_str());
@@ -993,13 +989,15 @@ PlatformResult Calendar::RemoveChangeListener(const picojson::object& args,
return PlatformResult(ErrorCode::NO_ERROR);
}
-void Calendar::ChangeCallback(const char* view_uri, void*) {
+void Calendar::ChangeCallback(const char* view_uri, void* user_data) {
LoggerD("enter");
+ Calendar* c = static_cast(user_data);
+
calendar_list_h list = nullptr;
int ret, updated_version;
ret = calendar_db_get_changes_by_version(view_uri, CALENDAR_BOOK_FILTER_ALL,
- current_db_version_, &list,
+ c->current_db_version_, &list,
&updated_version);
if (CALENDAR_ERROR_NONE != ret) {
LoggerE("Can't get the changed item list");
@@ -1025,12 +1023,12 @@ void Calendar::ChangeCallback(const char* view_uri, void*) {
// prepare response object
picojson::value response = picojson::value(picojson::object());
picojson::object& response_obj = response.get();
- if (listeners_registered_.find("EVENT") != listeners_registered_.end())
+ if (c->listeners_registered_.find("EVENT") != c->listeners_registered_.end())
response_obj.insert(
- std::make_pair("listenerId", picojson::value(listeners_registered_["EVENT"])));
+ std::make_pair("listenerId", picojson::value(c->listeners_registered_["EVENT"])));
else
response_obj.insert(
- std::make_pair("listenerId", picojson::value(listeners_registered_["TASK"])));
+ std::make_pair("listenerId", picojson::value(c->listeners_registered_["TASK"])));
picojson::array& added =
response_obj.insert(std::make_pair("added", picojson::value(picojson::array())))
@@ -1114,8 +1112,8 @@ void Calendar::ChangeCallback(const char* view_uri, void*) {
LoggerE("Can't get new version");
return;
}
- current_db_version_ = updated_version;
- CalendarInstance::GetInstance().PostMessage(response.serialize().c_str());
+ c->current_db_version_ = updated_version;
+ c->instance_.PostMessage(response.serialize().c_str());
}
PlatformResult Calendar::ErrorChecker(int errorCode) {
diff --git a/src/calendar/calendar.h b/src/calendar/calendar.h
index 8ec483b4..d34a7191 100644
--- a/src/calendar/calendar.h
+++ b/src/calendar/calendar.h
@@ -32,8 +32,11 @@ typedef std::string JsonString;
typedef std::shared_ptr JsonValuePtr;
+class CalendarInstance;
+
class Calendar {
public:
+ explicit Calendar(CalendarInstance& instance);
~Calendar();
/**
@@ -175,11 +178,11 @@ class Calendar {
common::PlatformResult RemoveChangeListener(const JsonObject& args,
JsonObject& out);
- static Calendar& GetInstance();
-
private:
- static std::map listeners_registered_;
- static int current_db_version_;
+ std::map listeners_registered_;
+ int current_db_version_;
+ CalendarInstance& instance_;
+
static void ChangeCallback(const char* view_uri, void* user_data);
common::PlatformResult ErrorChecker(int errorCode);
};
diff --git a/src/calendar/calendar_extension.cc b/src/calendar/calendar_extension.cc
index 993345ed..11a14168 100644
--- a/src/calendar/calendar_extension.cc
+++ b/src/calendar/calendar_extension.cc
@@ -32,5 +32,5 @@ CalendarExtension::CalendarExtension() {
CalendarExtension::~CalendarExtension() {}
common::Instance* CalendarExtension::CreateInstance() {
- return &extension::calendar::CalendarInstance::GetInstance();
+ return new extension::calendar::CalendarInstance();
}
diff --git a/src/calendar/calendar_instance.cc b/src/calendar/calendar_instance.cc
index 86aec2ea..5f59f039 100644
--- a/src/calendar/calendar_instance.cc
+++ b/src/calendar/calendar_instance.cc
@@ -26,12 +26,8 @@ const std::string kPrivilegeCalendarWrite = "http://tizen.org/privilege/calendar
using namespace common;
using namespace extension::calendar;
-CalendarInstance& CalendarInstance::GetInstance() {
- static CalendarInstance instance;
- return instance;
-}
-
-CalendarInstance::CalendarInstance() {
+CalendarInstance::CalendarInstance()
+ : calendar_(*this) {
using std::placeholders::_1;
using std::placeholders::_2;
@@ -70,8 +66,8 @@ void CalendarInstance::CalendarGet(const JsonValue& args, JsonObject& out) {
CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarRead, &out);
JsonValue val{JsonObject{}};
- PlatformResult status = Calendar::GetInstance().Get(
- common::JsonCast(args), val.get());
+ PlatformResult status = calendar_.Get(common::JsonCast(args),
+ val.get());
if (status.IsSuccess())
ReportSuccess(val, out);
@@ -83,8 +79,8 @@ void CalendarInstance::CalendarAdd(const JsonValue& args, JsonObject& out) {
CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
JsonValue val{JsonObject{}};
- PlatformResult status = Calendar::GetInstance().Add(
- common::JsonCast(args), val.get());
+ PlatformResult status = calendar_.Add(common::JsonCast(args),
+ val.get());
if (status.IsSuccess())
ReportSuccess(val, out);
@@ -98,7 +94,7 @@ void CalendarInstance::CalendarAddBatch(const JsonValue& args,
const double callback_id = args.get("callbackId").get();
auto get = [=](const std::shared_ptr& response) -> void {
JsonValue result = JsonValue(JsonArray());
- PlatformResult status = Calendar::GetInstance().AddBatch(
+ PlatformResult status = calendar_.AddBatch(
common::JsonCast(args), result.get());
if (status.IsSuccess())
@@ -124,8 +120,8 @@ void CalendarInstance::CalendarUpdate(const JsonValue& args, JsonObject& out) {
CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
JsonValue val{JsonObject{}};
- PlatformResult status = Calendar::GetInstance().Update(
- common::JsonCast(args), val.get());
+ PlatformResult status = calendar_.Update(common::JsonCast(args),
+ val.get());
if (status.IsSuccess())
ReportSuccess(val, out);
@@ -139,7 +135,7 @@ void CalendarInstance::CalendarUpdateBatch(const JsonValue& args,
const double callback_id = args.get("callbackId").get();
auto get = [=](const std::shared_ptr& response) -> void {
JsonValue result = JsonValue(JsonArray());
- PlatformResult status = Calendar::GetInstance().UpdateBatch(
+ PlatformResult status = calendar_.UpdateBatch(
common::JsonCast(args), result.get());
if (status.IsSuccess())
@@ -165,8 +161,8 @@ void CalendarInstance::CalendarRemove(const JsonValue& args, JsonObject& out) {
CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
JsonValue val{JsonObject{}};
- PlatformResult status = Calendar::GetInstance().Remove(
- common::JsonCast(args), val.get());
+ PlatformResult status = calendar_.Remove(common::JsonCast(args),
+ val.get());
if (status.IsSuccess())
ReportSuccess(out);
@@ -180,7 +176,7 @@ void CalendarInstance::CalendarRemoveBatch(const JsonValue& args,
const double callback_id = args.get("callbackId").get();
auto get = [=](const std::shared_ptr& response) -> void {
JsonValue result = JsonValue(JsonArray());
- PlatformResult status = Calendar::GetInstance().RemoveBatch(
+ PlatformResult status = calendar_.RemoveBatch(
common::JsonCast(args), result.get());
if (status.IsSuccess())
@@ -207,7 +203,7 @@ void CalendarInstance::CalendarFind(const JsonValue& args, JsonObject& out) {
const double callback_id = args.get("callbackId").get();
auto get = [=](const std::shared_ptr& response) -> void {
JsonValue result = JsonValue(JsonArray());
- PlatformResult status = Calendar::GetInstance().Find(
+ PlatformResult status = calendar_.Find(
common::JsonCast(args), result.get());
if (status.IsSuccess())
@@ -234,7 +230,7 @@ void CalendarInstance::CalendarAddChangeListener(const JsonValue& args,
CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarRead, &out);
JsonValue val{JsonObject{}};
- PlatformResult status = Calendar::GetInstance().AddChangeListener(
+ PlatformResult status = calendar_.AddChangeListener(
common::JsonCast(args), val.get());
if (status.IsSuccess())
@@ -248,7 +244,7 @@ void CalendarInstance::CalendarRemoveChangeListener(const JsonValue& args,
CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarRead, &out);
JsonValue val{JsonObject{}};
- PlatformResult status = Calendar::GetInstance().RemoveChangeListener(
+ PlatformResult status = calendar_.RemoveChangeListener(
common::JsonCast(args), val.get());
if (status.IsSuccess())
diff --git a/src/calendar/calendar_instance.h b/src/calendar/calendar_instance.h
index 025072c8..7d4d0de8 100644
--- a/src/calendar/calendar_instance.h
+++ b/src/calendar/calendar_instance.h
@@ -8,6 +8,8 @@
#include "common/extension.h"
#include "common/picojson.h"
+#include "calendar/calendar.h"
+
namespace extension {
namespace calendar {
@@ -15,7 +17,6 @@ class CalendarInstance : public common::ParsedInstance {
public:
CalendarInstance();
virtual ~CalendarInstance();
- static CalendarInstance& GetInstance();
private:
void CalendarGet(const picojson::value& args, picojson::object& out);
@@ -34,6 +35,7 @@ class CalendarInstance : public common::ParsedInstance {
void CalendarManagerGetCalendars(const picojson::value& args, picojson::object& out);
void CalendarManagerRemoveCalendar(const picojson::value& args, picojson::object& out);
+ Calendar calendar_;
};
} // namespace calendar
--
2.34.1