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