using namespace common;
-int Calendar::current_db_version_ = 0;
-std::map<std::string, std::string> Calendar::listeners_registered_;
-
-Calendar& Calendar::GetInstance() {
- static Calendar instance;
- return instance;
+Calendar::Calendar(CalendarInstance& instance)
+ : current_db_version_(0),
+ instance_(instance) {
}
Calendar::~Calendar() {
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,
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());
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<Calendar*>(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");
// prepare response object
picojson::value response = picojson::value(picojson::object());
picojson::object& response_obj = response.get<picojson::object>();
- 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())))
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) {
typedef std::shared_ptr<JsonValue> JsonValuePtr;
+class CalendarInstance;
+
class Calendar {
public:
+ explicit Calendar(CalendarInstance& instance);
~Calendar();
/**
common::PlatformResult RemoveChangeListener(const JsonObject& args,
JsonObject& out);
- static Calendar& GetInstance();
-
private:
- static std::map<std::string, std::string> listeners_registered_;
- static int current_db_version_;
+ std::map<std::string, std::string> listeners_registered_;
+ int current_db_version_;
+ CalendarInstance& instance_;
+
static void ChangeCallback(const char* view_uri, void* user_data);
common::PlatformResult ErrorChecker(int errorCode);
};
CalendarExtension::~CalendarExtension() {}
common::Instance* CalendarExtension::CreateInstance() {
- return &extension::calendar::CalendarInstance::GetInstance();
+ return new extension::calendar::CalendarInstance();
}
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;
CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarRead, &out);
JsonValue val{JsonObject{}};
- PlatformResult status = Calendar::GetInstance().Get(
- common::JsonCast<JsonObject>(args), val.get<JsonObject>());
+ PlatformResult status = calendar_.Get(common::JsonCast<JsonObject>(args),
+ val.get<JsonObject>());
if (status.IsSuccess())
ReportSuccess(val, out);
CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
JsonValue val{JsonObject{}};
- PlatformResult status = Calendar::GetInstance().Add(
- common::JsonCast<JsonObject>(args), val.get<JsonObject>());
+ PlatformResult status = calendar_.Add(common::JsonCast<JsonObject>(args),
+ val.get<JsonObject>());
if (status.IsSuccess())
ReportSuccess(val, out);
const double callback_id = args.get("callbackId").get<double>();
auto get = [=](const std::shared_ptr<JsonValue>& response) -> void {
JsonValue result = JsonValue(JsonArray());
- PlatformResult status = Calendar::GetInstance().AddBatch(
+ PlatformResult status = calendar_.AddBatch(
common::JsonCast<JsonObject>(args), result.get<JsonArray>());
if (status.IsSuccess())
CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
JsonValue val{JsonObject{}};
- PlatformResult status = Calendar::GetInstance().Update(
- common::JsonCast<JsonObject>(args), val.get<JsonObject>());
+ PlatformResult status = calendar_.Update(common::JsonCast<JsonObject>(args),
+ val.get<JsonObject>());
if (status.IsSuccess())
ReportSuccess(val, out);
const double callback_id = args.get("callbackId").get<double>();
auto get = [=](const std::shared_ptr<JsonValue>& response) -> void {
JsonValue result = JsonValue(JsonArray());
- PlatformResult status = Calendar::GetInstance().UpdateBatch(
+ PlatformResult status = calendar_.UpdateBatch(
common::JsonCast<JsonObject>(args), result.get<JsonArray>());
if (status.IsSuccess())
CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
JsonValue val{JsonObject{}};
- PlatformResult status = Calendar::GetInstance().Remove(
- common::JsonCast<JsonObject>(args), val.get<JsonObject>());
+ PlatformResult status = calendar_.Remove(common::JsonCast<JsonObject>(args),
+ val.get<JsonObject>());
if (status.IsSuccess())
ReportSuccess(out);
const double callback_id = args.get("callbackId").get<double>();
auto get = [=](const std::shared_ptr<JsonValue>& response) -> void {
JsonValue result = JsonValue(JsonArray());
- PlatformResult status = Calendar::GetInstance().RemoveBatch(
+ PlatformResult status = calendar_.RemoveBatch(
common::JsonCast<JsonObject>(args), result.get<JsonArray>());
if (status.IsSuccess())
const double callback_id = args.get("callbackId").get<double>();
auto get = [=](const std::shared_ptr<JsonValue>& response) -> void {
JsonValue result = JsonValue(JsonArray());
- PlatformResult status = Calendar::GetInstance().Find(
+ PlatformResult status = calendar_.Find(
common::JsonCast<JsonObject>(args), result.get<JsonArray>());
if (status.IsSuccess())
CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarRead, &out);
JsonValue val{JsonObject{}};
- PlatformResult status = Calendar::GetInstance().AddChangeListener(
+ PlatformResult status = calendar_.AddChangeListener(
common::JsonCast<JsonObject>(args), val.get<JsonObject>());
if (status.IsSuccess())
CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarRead, &out);
JsonValue val{JsonObject{}};
- PlatformResult status = Calendar::GetInstance().RemoveChangeListener(
+ PlatformResult status = calendar_.RemoveChangeListener(
common::JsonCast<JsonObject>(args), val.get<JsonObject>());
if (status.IsSuccess())
#include "common/extension.h"
#include "common/picojson.h"
+#include "calendar/calendar.h"
+
namespace extension {
namespace calendar {
public:
CalendarInstance();
virtual ~CalendarInstance();
- static CalendarInstance& GetInstance();
private:
void CalendarGet(const picojson::value& args, picojson::object& out);
void CalendarManagerGetCalendars(const picojson::value& args, picojson::object& out);
void CalendarManagerRemoveCalendar(const picojson::value& args, picojson::object& out);
+ Calendar calendar_;
};
} // namespace calendar