diff options
-rw-r--r-- | alarm-app/inc/List/AlarmsView.h | 4 | ||||
-rw-r--r-- | alarm-app/src/Alert/AlertView.cpp | 6 | ||||
-rw-r--r-- | alarm-app/src/Input/InputView.cpp | 6 | ||||
-rw-r--r-- | alarm-app/src/List/AlarmItem.cpp | 2 | ||||
-rw-r--r-- | alarm-app/src/List/AlarmsView.cpp | 7 | ||||
-rw-r--r-- | alarm-app/src/OperationAlertController.cpp | 2 | ||||
-rw-r--r-- | alarm-app/src/OperationEditController.cpp | 2 | ||||
-rwxr-xr-x | alarm-svc/inc/AlarmService.h | 4 | ||||
-rwxr-xr-x | alarm-svc/src/AlarmService.cpp | 4 | ||||
-rw-r--r-- | alarm-widget/src/AlarmWidget.cpp | 8 | ||||
-rw-r--r-- | lib-common/inc/Common/Bundle.h | 88 | ||||
-rw-r--r-- | lib-common/inc/Common/Model/Alarm.h | 9 | ||||
-rw-r--r-- | lib-common/inc/Common/Model/AlarmBuilder.h | 4 | ||||
-rw-r--r-- | lib-common/inc/Common/Model/AlarmConsumer.h | 80 | ||||
-rw-r--r-- | lib-common/inc/Common/Model/AlarmProvider.h | 62 | ||||
-rw-r--r-- | lib-common/src/Common/Bundle.cpp | 85 | ||||
-rw-r--r-- | lib-common/src/Common/Model/Alarm.cpp | 32 | ||||
-rw-r--r-- | lib-common/src/Common/Model/AlarmBuilder.cpp | 5 | ||||
-rw-r--r-- | lib-common/src/Common/Model/AlarmConsumer.cpp | 155 | ||||
-rw-r--r-- | lib-common/src/Common/Model/AlarmProvider.cpp | 119 |
20 files changed, 57 insertions, 627 deletions
diff --git a/alarm-app/inc/List/AlarmsView.h b/alarm-app/inc/List/AlarmsView.h index 7fb30b6..4052584 100644 --- a/alarm-app/inc/List/AlarmsView.h +++ b/alarm-app/inc/List/AlarmsView.h @@ -17,7 +17,7 @@ #ifndef LIST_ALARMS_VIEW_H #define LIST_ALARMS_VIEW_H -#include "Common/Model/AlarmProvider.h" +#include "Model/DataControlProvider.h" #include "Ux/SelectView.h" #include <system_settings.h> @@ -75,11 +75,11 @@ namespace List void onItemLongpressed(Evas_Object *genlist, Elm_Object_Item *item); bool onSelectFinished(); + Model::DataControlProvider m_Provider; Evas_Object *m_NoContents; Evas_Object *m_ContentLayout; Ui::Genlist *m_Genlist; AddAlarmItem *m_AddAlarmItem; - Common::Model::AlarmProvider m_Provider; AddCallback m_OnAlarmAdded; }; diff --git a/alarm-app/src/Alert/AlertView.cpp b/alarm-app/src/Alert/AlertView.cpp index ba3ae95..ea1ab57 100644 --- a/alarm-app/src/Alert/AlertView.cpp +++ b/alarm-app/src/Alert/AlertView.cpp @@ -206,7 +206,7 @@ Eina_Bool AlertView::onCancel() } else { m_Alarm.dismiss(); } - AlarmConsumer::getInstance().updateAlarm(m_Alarm, nullptr); + AlarmConsumer::getInstance().updateDataItem(m_Alarm, nullptr); getPage()->close(); return EINA_FALSE; @@ -215,14 +215,14 @@ Eina_Bool AlertView::onCancel() void AlertView::onDismissClicked(Evas_Object *button, void *eventInfo) { m_Alarm.dismiss(); - AlarmConsumer::getInstance().updateAlarm(m_Alarm, nullptr); + AlarmConsumer::getInstance().updateDataItem(m_Alarm, nullptr); getPage()->close(); } void AlertView::onSnoozeClicked(Evas_Object *button, void *eventInfo) { m_Alarm.snooze(); - AlarmConsumer::getInstance().updateAlarm(m_Alarm, nullptr); + AlarmConsumer::getInstance().updateDataItem(m_Alarm, nullptr); getPage()->close(); } diff --git a/alarm-app/src/Input/InputView.cpp b/alarm-app/src/Input/InputView.cpp index 7484ca7..2011c21 100644 --- a/alarm-app/src/Input/InputView.cpp +++ b/alarm-app/src/Input/InputView.cpp @@ -152,7 +152,7 @@ void InputView::saveAlarm() return; } - AlarmConsumer::getInstance().saveAlarm(m_Alarm, [this](bool isSuccess, int alarmId) { + AlarmConsumer::getInstance().saveDataItem(m_Alarm, [this](bool isSuccess, int alarmId) { if (!isSuccess) { /* TODO: Show error message */ elm_object_disabled_set(m_Button, EINA_FALSE); @@ -174,7 +174,7 @@ void InputView::saveAlarm() void InputView::deleteAlarm() { elm_object_disabled_set(m_Button, EINA_TRUE); - AlarmConsumer::getInstance().deleteAlarm(m_Alarm.getId(), [this](bool isSuccess, int alarmId) { + AlarmConsumer::getInstance().deleteDataItem(m_Alarm.getId(), [this](bool isSuccess, int alarmId) { if (!isSuccess) { /* TODO: Show error message */ elm_object_disabled_set(m_Button, EINA_FALSE); @@ -191,7 +191,7 @@ void InputView::deleteAlarm() void InputView::handleDuplicateAlarm() { if (m_Alarm.getId()) { - AlarmConsumer::getInstance().deleteAlarm(m_Alarm.getId(), nullptr); + AlarmConsumer::getInstance().deleteDataItem(m_Alarm.getId(), nullptr); } char buffer[TOAST_BUFFER_SIZE]; diff --git a/alarm-app/src/List/AlarmItem.cpp b/alarm-app/src/List/AlarmItem.cpp index ec988be..c53bf45 100644 --- a/alarm-app/src/List/AlarmItem.cpp +++ b/alarm-app/src/List/AlarmItem.cpp @@ -152,7 +152,7 @@ void AlarmItem::onSelected() void AlarmItem::onAlarmEnabled(Evas_Object *check, void *eventInfo) { m_Alarm.setEnabled(elm_check_state_get(check)); - AlarmConsumer::getInstance().updateAlarm(m_Alarm, [this](bool isSuccess, int alarmId) { + AlarmConsumer::getInstance().updateDataItem(m_Alarm, [this](bool isSuccess, int alarmId) { if (isSuccess && m_Alarm.isEnabled()) { auto popup = new Common::AlarmSetPopup(m_Alarm); popup->create(getParent()->getEvasObject()); diff --git a/alarm-app/src/List/AlarmsView.cpp b/alarm-app/src/List/AlarmsView.cpp index d7ebd69..45a6e8d 100644 --- a/alarm-app/src/List/AlarmsView.cpp +++ b/alarm-app/src/List/AlarmsView.cpp @@ -14,7 +14,6 @@ * limitations under the License. */ -#include "Common/Model/Alarm.h" #include "Common/Model/AlarmConsumer.h" #include "List/AddAlarmItem.h" #include "List/AlarmItem.h" @@ -44,8 +43,8 @@ using namespace List; using namespace std::placeholders; AlarmsView::AlarmsView() - : m_NoContents(nullptr), m_ContentLayout(nullptr), m_Genlist(nullptr), - m_AddAlarmItem(nullptr) + : m_Provider(AlarmConsumer::getInstance()), m_NoContents(nullptr), + m_ContentLayout(nullptr), m_Genlist(nullptr), m_AddAlarmItem(nullptr) { Strings strings{}; strings.selectAll = "WDS_MSG_OPT_SELECT_ALL_ABB"; @@ -284,7 +283,7 @@ void AlarmsView::onItemLongpressed(Evas_Object *genlist, Elm_Object_Item *item) setSelectCallback([this](Ux::SelectResults results) { for (auto &&result : results) { auto alarm = (Alarm *)result.value.data; - AlarmConsumer::getInstance().deleteAlarm(alarm->getId(), nullptr); + AlarmConsumer::getInstance().deleteDataItem(alarm->getId(), nullptr); } return onSelectFinished(); diff --git a/alarm-app/src/OperationAlertController.cpp b/alarm-app/src/OperationAlertController.cpp index 09db8df..fd7bce6 100644 --- a/alarm-app/src/OperationAlertController.cpp +++ b/alarm-app/src/OperationAlertController.cpp @@ -26,7 +26,7 @@ using namespace Common::Model; void OperationAlertController::onRequest(const char *operation, app_control_h request) { int id = App::getIntExtraData(request, APP_CONTROL_DATA_ID); - AlarmConsumer::getInstance().getAlarm(id, [this](AlarmConsumer::DataList list) { + AlarmConsumer::getInstance().getDataItem(id, [this](AlarmConsumer::DataList list) { auto alarm = static_cast<Alarm *>(list.front()); getNavigator()->navigateTo(new Alert::AlertView(*alarm)); delete alarm; diff --git a/alarm-app/src/OperationEditController.cpp b/alarm-app/src/OperationEditController.cpp index 9e71da2..3c8fd6f 100644 --- a/alarm-app/src/OperationEditController.cpp +++ b/alarm-app/src/OperationEditController.cpp @@ -24,7 +24,7 @@ using namespace Common::Model; void OperationEditController::onRequest(const char *operation, app_control_h request) { int id = App::getIntExtraData(request, APP_CONTROL_DATA_ID); - AlarmConsumer::getInstance().getAlarm(id, [this](AlarmConsumer::DataList dataList) { + AlarmConsumer::getInstance().getDataItem(id, [this](AlarmConsumer::DataList dataList) { auto item = static_cast<Alarm *>(dataList.front()); getNavigator()->navigateTo(new Input::InputView(*item)); delete item; diff --git a/alarm-svc/inc/AlarmService.h b/alarm-svc/inc/AlarmService.h index cb3e6e0..cb3c2b0 100755 --- a/alarm-svc/inc/AlarmService.h +++ b/alarm-svc/inc/AlarmService.h @@ -18,7 +18,7 @@ #define ALARM_SERVICE_H #include "App/Service.h" -#include "Common/Bundle.h" +#include "Utils/Bundle.h" #include <data_control_provider.h> #include <sqlite3.h> @@ -40,7 +40,7 @@ private: void onDeleteRequested(int requestId, data_control_h provider, const char *where); static std::string formatWhere(const char *id); - static Common::Bundle createNotiBundle(int id); + static Utils::Bundle createNotiBundle(int id); sqlite3 *initDatabase(); bool initDataControl(); diff --git a/alarm-svc/src/AlarmService.cpp b/alarm-svc/src/AlarmService.cpp index 5a04281..a5eb07e 100755 --- a/alarm-svc/src/AlarmService.cpp +++ b/alarm-svc/src/AlarmService.cpp @@ -198,9 +198,9 @@ std::string AlarmService::formatWhere(const char *id) return std::string(COLUMN_ID " = ").append(id); } -Common::Bundle AlarmService::createNotiBundle(int id) +Utils::Bundle AlarmService::createNotiBundle(int id) { - return std::move(Bundle().addInt(COLUMN_ID, id)); + return std::move(Utils::Bundle().addInt(COLUMN_ID, id)); } sqlite3 *AlarmService::initDatabase() diff --git a/alarm-widget/src/AlarmWidget.cpp b/alarm-widget/src/AlarmWidget.cpp index 34dddfc..97f0d27 100644 --- a/alarm-widget/src/AlarmWidget.cpp +++ b/alarm-widget/src/AlarmWidget.cpp @@ -111,13 +111,13 @@ void AlarmWidget::updateEmptyState() void AlarmWidget::onCheckedPressed(Evas_Object *obj, void *eventInfo) { m_Alarm->setEnabled(elm_check_state_get(obj)); - AlarmConsumer::getInstance().updateAlarm(*m_Alarm, nullptr); + AlarmConsumer::getInstance().updateDataItem(*m_Alarm, nullptr); elm_layout_signal_emit(m_Layout, m_Alarm->isEnabled() ? SIGNAL_ALARM_ENABLE : SIGNAL_ALARM_DISABLE, ""); } void AlarmWidget::onCreatePressed(Evas_Object *obj, void *eventInfo) { - AlarmConsumer::getInstance().getAlarms([this](AlarmConsumer::DataList dataList) { + AlarmConsumer::getInstance().getDataItems([this](AlarmConsumer::DataList dataList) { if (dataList.empty()) { App::AppControl request(APP_CONTROL_OPERATION_ADD, APP_CONTROL_MIME_ALARM); request.launch(makeCallbackWithLastParam(&AlarmWidget::onCreateReply), this); @@ -145,7 +145,7 @@ void AlarmWidget::onContentPressed(Evas_Object *obj, void *eventInfo) void AlarmWidget::onPickReply(app_control_h request, app_control_h reply, app_control_result_e result) { std::string id = App::getStringExtraData(reply, APP_CONTROL_DATA_SELECTED); - AlarmConsumer::getInstance().getAlarm(atoi(id.c_str()), [this](AlarmConsumer::DataList dataList) { + AlarmConsumer::getInstance().getDataItem(atoi(id.c_str()), [this](AlarmConsumer::DataList dataList) { setAlarm(static_cast<Alarm *>(dataList.front())); updateEmptyState(); }); @@ -154,7 +154,7 @@ void AlarmWidget::onPickReply(app_control_h request, app_control_h reply, app_co void AlarmWidget::onCreateReply(app_control_h request, app_control_h reply, app_control_result_e result) { std::string id = App::getStringExtraData(reply, APP_CONTROL_DATA_ID); - AlarmConsumer::getInstance().getAlarm(atoi(id.c_str()), [this](AlarmConsumer::DataList dataList) { + AlarmConsumer::getInstance().getDataItem(atoi(id.c_str()), [this](AlarmConsumer::DataList dataList) { setAlarm(static_cast<Alarm *>(dataList.front())); updateEmptyState(); }); diff --git a/lib-common/inc/Common/Bundle.h b/lib-common/inc/Common/Bundle.h deleted file mode 100644 index c0e2a2d..0000000 --- a/lib-common/inc/Common/Bundle.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright 2017 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef COMMON_BUNDLE_H -#define COMMON_BUNDLE_H - -#include <bundle.h> -#include <tizen.h> - -namespace Common -{ - /** - * @brief Bundle wrapper. Provides lifetime management and convenience - * methods for adding and accessing stored values. - */ - class EXPORT_API Bundle - { - public: - Bundle(); - - /** - * @brief Wrap a pre-existing bundle object. - * @param[in] bundle A bundle to wrap - * @remark The bundle lifetime is not tied to the wrapper in this case. - */ - explicit Bundle(bundle *bundle); - Bundle(const Bundle &that) = delete; - Bundle(Bundle &&that); - virtual ~Bundle(); - - Bundle &operator=(const Bundle &that) = delete; - Bundle &operator=(Bundle &&that); - - /** - * @return Wrapped bundle object. - */ - bundle *getBundle() const; - - /** - * @brief Get integer value from a bundle. - * @param[in] key Value key - * @return Integer value. - */ - int getInt(const char *key) const; - - /** - * @brief Get string value from a bundle. - * @param[in] key Value key - * @return string value. - */ - const char *getStr(const char *key) const; - - /** - * @brief Add integer value to a bundle. - * @param[in] key Value key - * @param[in] value Integer value - * @return This object for method chaining. - */ - Bundle &addInt(const char *key, int value); - - /** - * @brief Add string value to a bundle. - * @param[in] key Value key - * @param[in] str String value - * @return This object for method chaining. - */ - Bundle &addStr(const char *key, const char *str); - - private: - bundle *m_Bundle; - bool m_IsOwner; - }; -} - -#endif /* COMMON_BUNDLE_H */ diff --git a/lib-common/inc/Common/Model/Alarm.h b/lib-common/inc/Common/Model/Alarm.h index e0561a2..7b9c612 100644 --- a/lib-common/inc/Common/Model/Alarm.h +++ b/lib-common/inc/Common/Model/Alarm.h @@ -19,7 +19,7 @@ #include "Model/DataItem.h" #include <ctime> -#include <data_control_noti.h> +#include <data_control_types.h> namespace Common { @@ -115,10 +115,7 @@ namespace Common virtual void onStandalone(bool isStandalone) override; virtual int onUpdate(void *data) override; - void onDataChanged(data_control_h provider, - data_control_data_change_type_e type, bundle *data); - void onDataCallbackAdded(data_control_h provider, - data_control_error_e result, int callbackId); + void onDataChanged(int id, data_control_data_change_type_e type); tm m_Date; int m_Repeat; @@ -127,8 +124,6 @@ namespace Common tm m_SnoozeDate; int m_SnoozeCount; bool m_IsSnoozed; - - int m_ChangeCallbackId; }; } } diff --git a/lib-common/inc/Common/Model/AlarmBuilder.h b/lib-common/inc/Common/Model/AlarmBuilder.h index 9d64a63..be02a23 100644 --- a/lib-common/inc/Common/Model/AlarmBuilder.h +++ b/lib-common/inc/Common/Model/AlarmBuilder.h @@ -17,7 +17,7 @@ #ifndef COMMON_MODEL_ALARM_BUILDER_H #define COMMON_MODEL_ALARM_BUILDER_H -#include "Common/Bundle.h" +#include "Utils/Bundle.h" #include <data_control_sql_cursor.h> namespace Common @@ -33,7 +33,7 @@ namespace Common * @param[in] alarm Alarm to create bundle from * @return Bundle containing alarm data. */ - static Bundle createBundle(const Alarm &alarm); + static Utils::Bundle createBundle(const Alarm &alarm); /** * @brief Create Alarm from result cursor. diff --git a/lib-common/inc/Common/Model/AlarmConsumer.h b/lib-common/inc/Common/Model/AlarmConsumer.h index 8f2d6b3..29d38eb 100644 --- a/lib-common/inc/Common/Model/AlarmConsumer.h +++ b/lib-common/inc/Common/Model/AlarmConsumer.h @@ -17,8 +17,7 @@ #ifndef COMMON_MODEL_ALARM_CONSUMER_H #define COMMON_MODEL_ALARM_CONSUMER_H -#include "Model/DataProvider.h" -#include <data_control_sql.h> +#include "Model/DataControlConsumer.h" namespace Common { @@ -29,99 +28,34 @@ namespace Common /** * @brief Provides access to alarm database. */ - class EXPORT_API AlarmConsumer + class EXPORT_API AlarmConsumer : public ::Model::DataControlConsumer { public: - typedef ::Model::DataProvider::DataList DataList; - - /** - * @brief Called when requested Alarm(s) is received. - * @param[in] dataList List of received Alarm objects - */ - typedef std::function<void(DataList dataList)> GetCallback; - - /** - * @brief Called when result of insert, update or delete is received. - * @param[in] isSuccess Whether operation was successful - * @param[in] alarmId Alarm Id if alarm was inserted - */ - typedef std::function<void(bool isSuccess, int alarmId)> ResultCallback; - /** * @return Consumer singleton instance. */ static AlarmConsumer &getInstance(); /** - * @return Data control provider handle. - */ - data_control_h getProvider() const; - - /** - * @brief Retrieve alarm from database by ID. - * @param[in] id Alarm ID - * @param[in] callback Callback to be called when alarm is received - */ - void getAlarm(int id, GetCallback callback); - - /** * @brief Retrieve alarm from database that matches specified alarm by time and repeat. * @param[in] alarm Alarm to compare against * @param[in] callback Callback to be called when alarm is received */ void getAlarm(const Alarm &alarm, GetCallback callback); + protected: /** - * @brief Retrieve all alarms from database. - * @param[in] callback Callback to be called when alarms are received - */ - void getAlarms(GetCallback callback); - - /** - * @brief Convenience wrapper to insert new or update existing alarm. - * @see insertAlarm() - * @see updateAlarm() - */ - void saveAlarm(const Alarm &alarm, ResultCallback callback); - - /** - * @brief Insert alarm into database. - * @param[in] alarm Alarm to insert - * @param[in] callback Callback to be called when operation is complete - */ - void insertAlarm(const Alarm &alarm, ResultCallback callback); - - /** - * @brief Update existing alarm in the database. - * @param[in] alarm Alarm to update - * @param[in] callback Callback to be called when operation is complete + * @see DataControlConsumer::createDataItem() */ - void updateAlarm(const Alarm &alarm, ResultCallback callback); + virtual ::Model::DataItem *createDataItem(result_set_cursor cursor) override; /** - * @brief Delete alarm from the database. - * @param[in] id Alarm ID - * @param[in] callback Callback to be called when operation is complete + * @see DataControlConsumer::createBundle() */ - void deleteAlarm(int id, ResultCallback callback); + virtual Utils::Bundle createBundle(const ::Model::DataItem &item) override; private: AlarmConsumer(); - ~AlarmConsumer(); - - void selectAlarms(const char *where, GetCallback callback); - void onSelectResponse(int requestId, data_control_h provider, - result_set_cursor result, bool isSuccess, const char *error); - void onInsertResponse(int requestId, data_control_h provider, - long long id, bool isSuccess, const char *error); - void onUpdateResponse(int requestId, data_control_h provider, - bool isSuccess, const char *error); - void onDeleteResponse(int requestId, data_control_h provider, - bool isSuccess, const char *error); - - data_control_h m_Provider; - std::vector<std::pair<int, ResultCallback>> m_ResultCallbacks; - std::vector<std::pair<int, GetCallback>> m_GetCallbacks; }; } } diff --git a/lib-common/inc/Common/Model/AlarmProvider.h b/lib-common/inc/Common/Model/AlarmProvider.h deleted file mode 100644 index dc828e0..0000000 --- a/lib-common/inc/Common/Model/AlarmProvider.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2017 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef COMMON_MODEL_ALARM_PROVIDER_H -#define COMMON_MODEL_ALARM_PROVIDER_H - -#include "Model/DataProvider.h" -#include <data_control_noti.h> - -namespace Common -{ - namespace Model - { - class Alarm; - class AlarmConsumer; - class EXPORT_API AlarmProvider : public ::Model::DataProvider - { - public: - AlarmProvider(); - virtual ~AlarmProvider() override; - - private: - struct ChangeInfo - { - int id; - data_control_data_change_type_e type; - }; - - virtual void startInit() override; - virtual void startUpdate() override; - - Alarm *findAlarm(int id); - void applyChange(ChangeInfo change, ::Model::DataItem *newItem); - - void onDataChanged(data_control_h provider, - data_control_data_change_type_e type, bundle *data); - void onDataCallbackAdded(data_control_h provider, - data_control_error_e result, int callbackId); - - AlarmConsumer &m_Consumer; - int m_ChangeCallbackId; - - std::vector<ChangeInfo> m_Changes; - int m_ChangesPending; - }; - } -} - -#endif /* COMMON_MODEL_ALARM_PROVIDER_H */ diff --git a/lib-common/src/Common/Bundle.cpp b/lib-common/src/Common/Bundle.cpp deleted file mode 100644 index ed8481c..0000000 --- a/lib-common/src/Common/Bundle.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2017 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "Common/Bundle.h" - -using namespace Common; - -Bundle::Bundle() - : m_Bundle(nullptr), m_IsOwner(true) -{ - m_Bundle = bundle_create(); -} - -Bundle::Bundle(bundle *bundle) - : m_Bundle(bundle), m_IsOwner(false) -{ -} - -Bundle::Bundle(Bundle &&that) - : m_Bundle(that.m_Bundle), m_IsOwner(that.m_IsOwner) -{ - that.m_IsOwner = false; -} - -Bundle::~Bundle() -{ - if (m_IsOwner) { - bundle_free(m_Bundle); - } -} - -Bundle &Bundle::operator=(Bundle &&that) -{ - if (m_IsOwner) { - bundle_free(m_Bundle); - } - m_Bundle = that.m_Bundle; - m_IsOwner = that.m_IsOwner; - that.m_IsOwner = false; - return *this; -} - -bundle *Bundle::getBundle() const -{ - return m_Bundle; -} - -int Bundle::getInt(const char *key) const -{ - int *value = nullptr; - bundle_get_byte(m_Bundle, key, (void **) &value, nullptr); - return value ? *value : 0; -} - -const char *Bundle::getStr(const char *key) const -{ - char *str = nullptr; - bundle_get_str(m_Bundle, key, &str); - return str; -} - -Bundle &Bundle::addInt(const char *key, int value) -{ - bundle_add_byte(m_Bundle, key, &value, sizeof(value)); - return *this; -} - -Bundle &Bundle::addStr(const char *key, const char *str) -{ - bundle_add_str(m_Bundle, key, str); - return *this; -} diff --git a/lib-common/src/Common/Model/Alarm.cpp b/lib-common/src/Common/Model/Alarm.cpp index cf023de..855418b 100644 --- a/lib-common/src/Common/Model/Alarm.cpp +++ b/lib-common/src/Common/Model/Alarm.cpp @@ -15,11 +15,7 @@ */ #include "Common/Model/Alarm.h" -#include "Common/Model/AlarmDb.h" -#include "Common/Bundle.h" #include "Common/Model/AlarmConsumer.h" -#include "Utils/Callback.h" -#include "Utils/Logger.h" #define DEFAULT_TIME 6, 0 #define SNOOZE_TIME 5 * 60 @@ -28,17 +24,18 @@ #define DAY_SECONDS 60 * 60 * 24 using namespace Common::Model; +using namespace std::placeholders; Alarm::Alarm() : m_Repeat(0), m_IsEnabled(true), m_SnoozeDate{0}, - m_SnoozeCount(0), m_IsSnoozed(false), m_ChangeCallbackId(0) + m_SnoozeCount(0), m_IsSnoozed(false) { setTime(DEFAULT_TIME); } Alarm::~Alarm() { - data_control_remove_data_change_cb(AlarmConsumer::getInstance().getProvider(), m_ChangeCallbackId); + AlarmConsumer::getInstance().onDataItemChanged() -= this; } Alarm::Alarm(const Alarm &that) @@ -177,28 +174,21 @@ void Alarm::resetSnooze() void Alarm::onStandalone(bool isStandalone) { - data_control_h provider = AlarmConsumer::getInstance().getProvider(); if (isStandalone) { - int err = data_control_add_data_change_cb(provider, - makeCallbackWithLastParam(&Alarm::onDataChanged), this, - makeCallbackWithLastParam(&Alarm::onDataCallbackAdded), this, - &m_ChangeCallbackId); - WARN_IF_ERR(err, "data_control_add_data_change_cb() failed."); + AlarmConsumer::getInstance().onDataItemChanged() += { std::bind(&Alarm::onDataChanged, this, _1, _2), this }; } else { - data_control_remove_data_change_cb(provider, m_ChangeCallbackId); - m_ChangeCallbackId = 0; + AlarmConsumer::getInstance().onDataItemChanged() -= this; } } -void Alarm::onDataChanged(data_control_h provider, - data_control_data_change_type_e type, bundle *data) +void Alarm::onDataChanged(int id, data_control_data_change_type_e type) { - if (Bundle(data).getInt(COLUMN_ID) != getId()) { + if (id != getId()) { return; } if (type == DATA_CONTROL_DATA_CHANGE_SQL_UPDATE) { - AlarmConsumer::getInstance().getAlarm(getId(), [this](AlarmConsumer::DataList dataList) { + AlarmConsumer::getInstance().getDataItem(getId(), [this](AlarmConsumer::DataList dataList) { update(dataList.front()); delete dataList.front(); }); @@ -207,12 +197,6 @@ void Alarm::onDataChanged(data_control_h provider, } } -void Alarm::onDataCallbackAdded(data_control_h provider, - data_control_error_e result, int callbackId) -{ - WARN_IF_ERR(result, "data_control_add_data_change_cb() failed."); -} - int Alarm::onUpdate(void *data) { int changes = 0; diff --git a/lib-common/src/Common/Model/AlarmBuilder.cpp b/lib-common/src/Common/Model/AlarmBuilder.cpp index 12655d3..55a8e52 100644 --- a/lib-common/src/Common/Model/AlarmBuilder.cpp +++ b/lib-common/src/Common/Model/AlarmBuilder.cpp @@ -22,12 +22,11 @@ #define NAME_BUFFER_SIZE 32 -using namespace Common; using namespace Common::Model; -Bundle AlarmBuilder::createBundle(const Alarm &alarm) +Utils::Bundle AlarmBuilder::createBundle(const Alarm &alarm) { - Bundle bundle; + Utils::Bundle bundle; const tm &date = alarm.getDate(); const tm &snoozeDate = alarm.getSnoozeDate(); diff --git a/lib-common/src/Common/Model/AlarmConsumer.cpp b/lib-common/src/Common/Model/AlarmConsumer.cpp index 59a7f40..40bf45c 100644 --- a/lib-common/src/Common/Model/AlarmConsumer.cpp +++ b/lib-common/src/Common/Model/AlarmConsumer.cpp @@ -19,175 +19,48 @@ #include "Common/Model/AlarmBuilder.h" #include "Common/Model/AlarmDb.h" -#include "Utils/Callback.h" -#include "Utils/Logger.h" -#include "Utils/Range.h" - #define PROVIDER_ID "http://alarm.tizen.org/datacontrol/provider/alarm" #define WHERE_BUFFER_SIZE 60 -using namespace Common; using namespace Common::Model; namespace { - template <typename T, typename... A> - void sendResponse(T &callbacks, int requestId, A... args) - { - for (auto it = callbacks.begin(); it != callbacks.end(); ++it) { - if (it->first == requestId) { - if (it->second) { - it->second(std::move(args)...); - } - callbacks.erase(it); - break; - } - } - } + const char *columnList[] = { + COLUMN_ID, + COLUMN_DATE, + COLUMN_REPEAT, + COLUMN_ENABLED, + COLUMN_SNOOZE_DATE, + COLUMN_SNOOZE_COUNT + }; } AlarmConsumer::AlarmConsumer() - : m_Provider(nullptr) + : DataControlConsumer(PROVIDER_ID, TABLE_ALARMS, columnList) { - data_control_sql_create(&m_Provider); - data_control_sql_set_provider_id(m_Provider, PROVIDER_ID); - data_control_sql_set_data_id(m_Provider, TABLE_ALARMS); - - data_control_sql_response_cb cbs; - cbs.select_cb = makeCallbackWithLastParam(&AlarmConsumer::onSelectResponse); - cbs.insert_cb = makeCallbackWithLastParam(&AlarmConsumer::onInsertResponse); - cbs.update_cb = makeCallbackWithLastParam(&AlarmConsumer::onUpdateResponse); - cbs.delete_cb = makeCallbackWithLastParam(&AlarmConsumer::onDeleteResponse); - - int err = data_control_sql_register_response_cb(m_Provider, &cbs, this); - WARN_IF_ERR(err, "data_control_sql_register_response_cb() failed."); } - -AlarmConsumer::~AlarmConsumer() -{ - data_control_sql_destroy(m_Provider); -} - AlarmConsumer &AlarmConsumer::getInstance() { static AlarmConsumer instance; return instance; } -data_control_h AlarmConsumer::getProvider() const -{ - return m_Provider; -} - -void AlarmConsumer::getAlarm(int id, GetCallback callback) -{ - std::string where; - if (id) { - where.append(COLUMN_ID " = " ) - .append(std::to_string(id)); - } - - selectAlarms(!where.empty() ? where.c_str() : nullptr, std::move(callback)); -} - void AlarmConsumer::getAlarm(const Alarm &alarm, GetCallback callback) { const tm &date = alarm.getDate(); char where[WHERE_BUFFER_SIZE]; snprintf(where, sizeof(where), COLUMN_TIME " = %d AND " COLUMN_REPEAT " = %d AND " COLUMN_ID " <> %d", date.tm_hour * 60 + date.tm_min, alarm.getRepeat(), alarm.getId()); - selectAlarms(where, std::move(callback)); -} - -void AlarmConsumer::getAlarms(GetCallback callback) -{ - getAlarm(0, std::move(callback)); -} - -void AlarmConsumer::saveAlarm(const Alarm &alarm, ResultCallback callback) -{ - if (alarm.getId() == 0) { - insertAlarm(alarm, std::move(callback)); - } else { - updateAlarm(alarm, std::move(callback)); - } -} - -void AlarmConsumer::insertAlarm(const Alarm &alarm, ResultCallback callback) -{ - int requestId = 0; - int err = data_control_sql_insert(m_Provider, - AlarmBuilder::createBundle(alarm).getBundle(), &requestId); - - WARN_IF_ERR(err, "data_control_sql_insert() failed."); - m_ResultCallbacks.push_back({ requestId, std::move(callback)} ); -} - -void AlarmConsumer::updateAlarm(const Alarm &alarm, ResultCallback callback) -{ - int requestId = 0; - int err = data_control_sql_update(m_Provider, - AlarmBuilder::createBundle(alarm).getBundle(), - std::to_string(alarm.getId()).c_str(), &requestId); - - WARN_IF_ERR(err, "data_control_sql_update() failed."); - m_ResultCallbacks.push_back({ requestId, std::move(callback)} ); -} - -void AlarmConsumer::deleteAlarm(int id, ResultCallback callback) -{ - int requestId = 0; - int err = data_control_sql_delete(m_Provider, std::to_string(id).c_str(), &requestId); - - WARN_IF_ERR(err, "data_control_sql_delete() failed."); - m_ResultCallbacks.push_back({ requestId, std::move(callback)} ); -} - -void AlarmConsumer::selectAlarms(const char *where, GetCallback callback) -{ - static const char *columns[] = { - COLUMN_ID, - COLUMN_DATE, - COLUMN_REPEAT, - COLUMN_ENABLED, - COLUMN_SNOOZE_DATE, - COLUMN_SNOOZE_COUNT - }; - - int requestId = 0; - int err = data_control_sql_select(m_Provider, (char **) columns, Utils::count(columns), - where, COLUMN_DATE, &requestId); - - WARN_IF_ERR(err, "data_control_sql_select() failed."); - m_GetCallbacks.push_back({ requestId, std::move(callback)} ); -} - -void AlarmConsumer::onSelectResponse(int requestId, data_control_h provider, - result_set_cursor result, bool isSuccess, const char *error) -{ - DataList list; - int err = data_control_sql_step_first(result); - while (err == DATA_CONTROL_ERROR_NONE) { - list.push_back(AlarmBuilder::createAlarm(result)); - err = data_control_sql_step_next(result); - } - sendResponse(m_GetCallbacks, requestId, std::move(list)); -} - -void AlarmConsumer::onInsertResponse(int requestId, data_control_h provider, - long long id, bool isSuccess, const char *error) -{ - sendResponse(m_ResultCallbacks, requestId, isSuccess, id); + selectDataItems(where, std::move(callback)); } -void AlarmConsumer::onUpdateResponse(int requestId, data_control_h provider, - bool isSuccess, const char *error) +::Model::DataItem *AlarmConsumer::createDataItem(result_set_cursor cursor) { - sendResponse(m_ResultCallbacks, requestId, isSuccess, -1); + return AlarmBuilder::createAlarm(cursor); } -void AlarmConsumer::onDeleteResponse(int requestId, data_control_h provider, - bool isSuccess, const char *error) +Utils::Bundle AlarmConsumer::createBundle(const ::Model::DataItem &item) { - sendResponse(m_ResultCallbacks, requestId, isSuccess, -1); + return AlarmBuilder::createBundle(static_cast<const Alarm &>(item)); } diff --git a/lib-common/src/Common/Model/AlarmProvider.cpp b/lib-common/src/Common/Model/AlarmProvider.cpp deleted file mode 100644 index 9476b46..0000000 --- a/lib-common/src/Common/Model/AlarmProvider.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 2017 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.1 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://floralicense.org/license/ - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "Common/Model/AlarmProvider.h" -#include "Common/Model/AlarmConsumer.h" -#include "Common/Model/AlarmDb.h" -#include "Common/Model/Alarm.h" -#include "Common/Bundle.h" - -#include "Utils/Callback.h" -#include "Utils/Logger.h" - -using namespace Common; -using namespace Common::Model; -using namespace std::placeholders; - -AlarmProvider::AlarmProvider() - : m_Consumer(AlarmConsumer::getInstance()), - m_ChangeCallbackId(0), m_ChangesPending(0) -{ -} - -AlarmProvider::~AlarmProvider() -{ - data_control_remove_data_change_cb(m_Consumer.getProvider(), - m_ChangeCallbackId); -} - -void AlarmProvider::startInit() -{ - m_Consumer.getAlarms(std::bind(&AlarmProvider::finishInit, this, _1)); - int err = data_control_add_data_change_cb(m_Consumer.getProvider(), - makeCallbackWithLastParam(&AlarmProvider::onDataChanged), this, - makeCallbackWithLastParam(&AlarmProvider::onDataCallbackAdded), this, - &m_ChangeCallbackId); - WARN_IF_ERR(err, "data_control_add_data_change_cb() failed."); -} - -void AlarmProvider::startUpdate() -{ - for (auto &&change : m_Changes) { - if (change.type == DATA_CONTROL_DATA_CHANGE_SQL_DELETE) { - applyChange(change, nullptr); - continue; - } - - ++m_ChangesPending; - m_Consumer.getAlarm(change.id, [this, change](DataList dataList) { - applyChange(change, dataList.front()); - if (!--m_ChangesPending) { - finishUpdate(); - } - }); - } - - m_Changes.clear(); - if (!m_ChangesPending) { - finishUpdate(); - } -} - -Alarm *AlarmProvider::findAlarm(int id) -{ - for (auto &&dataItem : getDataList()) { - auto alarm = static_cast<Alarm *>(dataItem); - if (alarm->getId() == id) { - return alarm; - } - } - return nullptr; -} - -void AlarmProvider::applyChange(ChangeInfo change, ::Model::DataItem *newItem) -{ - switch (change.type) { - case DATA_CONTROL_DATA_CHANGE_SQL_INSERT: - insertDataItem(newItem); - break; - case DATA_CONTROL_DATA_CHANGE_SQL_UPDATE: - if (auto alarm = findAlarm(change.id)) { - alarm->update(newItem); - } - delete newItem; - break; - case DATA_CONTROL_DATA_CHANGE_SQL_DELETE: - if (auto alarm = findAlarm(change.id)) { - deleteDataItem(*alarm); - } - break; - default: - break; - } -} - -void AlarmProvider::onDataChanged(data_control_h provider, - data_control_data_change_type_e type, bundle *data) -{ - m_Changes.push_back({ Bundle(data).getInt(COLUMN_ID), type }); - update(); -} - -void AlarmProvider::onDataCallbackAdded(data_control_h provider, - data_control_error_e result, int callbackId) -{ - WARN_IF_ERR(result, "data_control_add_data_change_cb() failed."); -} |