2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 * @file EventWrapper.cpp
18 * @author Lukasz Marek (l.marek@samsung.com)
25 #include <dpl/log/log.h>
26 #include <Commons/Exception.h>
27 #include "EventWrapper.h"
31 const char weekDays[] = "0111110";
32 const int NEW_EVENT_ID = -1;
35 namespace WrtDeviceApis {
40 EventWrapper::EventWrapper() :
41 m_platformEvent(NULL),
45 m_abstractEvent = CalendarEventPtr(new CalendarEvent());
46 if (!m_abstractEvent) {
47 ThrowMsg(Commons::UnknownException, "abstract object is not created");
51 EventWrapper::EventWrapper(const CalendarEventPtr &event) :
52 m_platformEvent(NULL),
53 m_abstractEvent(event)
58 EventWrapper::~EventWrapper()
64 int EventWrapper::getIDFromPlatformEvent() const
67 if (m_platformEvent == NULL) {
68 ThrowMsg(Commons::NullPointerException, "m_platformEvent is not set");
71 return calendar_svc_struct_get_int(m_platformEvent, CAL_VALUE_INT_INDEX);
74 void EventWrapper::saveEvent()
77 //Check if platform struct is set.
78 //It could be set here, but forcing user to do it manually can help to avoid problems.
79 if (m_platformEvent == NULL) {
80 ThrowMsg(Commons::NullPointerException, "m_platformEvent is not set");
83 int eventID = getIDFromPlatformEvent();
84 LogDebug("eventID: " << eventID);
86 displayPlatformEvent();
88 //insert new record or update existing one
89 if (eventID < 0) { //insert new event
90 int returnValue = calendar_svc_insert(m_platformEvent);
91 if (CAL_SUCCESS > returnValue) {
92 LogError("Can't insert new event, error code: " << returnValue);
93 ThrowMsg(Commons::PlatformException, "Can't insert new event.");
95 m_abstractEvent->setId(returnValue);
96 LogInfo("New calendar event inserted");
98 if (CAL_SUCCESS != calendar_svc_update(m_platformEvent)) {
99 ThrowMsg(Commons::PlatformException, "Can't update new event.");
101 LogDebug("Calendar event updated");
105 void EventWrapper::loadEvent(int id)
107 LogDebug("Entered. ID of event to load: " << id);
109 int errorCode = calendar_svc_get(CAL_STRUCT_SCHEDULE,
113 if (CAL_SUCCESS > errorCode) {
115 "Can't get event with ID = " << id << ", error code: " <<
118 Commons::PlatformException,
119 "Can't get event with ID = " << id << ", error code: " <<
122 convertPlatformEventToAbstractEvent();
123 displayAbstractEvent();
126 bool EventWrapper::matchFilters(EventFilterPtr filter)
132 if (!m_abstractEvent) {
133 ThrowMsg(Commons::NullPointerException,
134 "abstractEvent object is not set");
137 LogDebug("---new event to match---");
138 m_abstractEvent->display();
140 if (filter->getIdIsSet() && m_abstractEvent->getIdIsSet()) {
141 std::stringstream ss;
142 if (!(ss << m_abstractEvent->getId())) {
143 LogDebug("rejected by id");
146 if (!pcrecpp::RE(filter->getIdFilter()).FullMatch(ss.str())) {
147 LogDebug("rejected by id " << filter->getIdFilter());
151 if (filter->getCalendarIdIsSet()) {
152 if (m_abstractEvent->getCalendarId() !=
153 filter->getCalendarIdFilter()) {
154 LogDebug("rejected by calendar id " << filter->getCalendarIdFilter());
158 if (filter->getDescriptionIsSet()) {
159 if (!pcrecpp::RE(filter->getDescriptionFilter()).FullMatch(
160 m_abstractEvent->getDescription())) {
161 LogDebug("rejected by description " << filter->getDescriptionFilter());
165 if (filter->getSubjectIsSet()) {
166 if (!pcrecpp::RE(filter->getSubjectFilter()).FullMatch(m_abstractEvent
169 LogDebug("rejected by subject " << filter->getSubjectFilter());
173 if (filter->getStartTimeMinIsSet() && m_abstractEvent->getStartTime() <
174 filter->getStartTimeMinFilter()) {
175 LogDebug("rejected by start time min " << filter->getStartTimeMinFilter());
178 if (filter->getStartTimeMaxIsSet() && m_abstractEvent->getStartTime() >
179 filter->getStartTimeMaxFilter()) {
180 LogDebug("rejected by start time max " << filter->getStartTimeMaxFilter());
183 if (filter->getEndTimeMinIsSet() && m_abstractEvent->getEndTime() <
184 filter->getEndTimeMinFilter()) {
185 LogDebug("rejected by end time min " << filter->getEndTimeMinFilter());
188 if (filter->getEndTimeMaxIsSet() && m_abstractEvent->getEndTime() >
189 filter->getEndTimeMaxFilter()) {
190 LogDebug("rejected by end time max " << filter->getEndTimeMaxFilter());
193 if (filter->getLocationIsSet()) {
194 if (!pcrecpp::RE(filter->getLocationFilter()).FullMatch(m_abstractEvent
198 LogDebug("rejected by location " << filter->getLocationFilter());
202 if (filter->getRecurrenceIsSet()) {
203 const std::vector<CalendarEvent::EventRecurrence> &filterVal =
204 filter->getRecurrenceFilter();
205 if (std::find(filterVal.begin(), filterVal.end(),
206 m_abstractEvent->getRecurrence()) == filterVal.end()) {
207 LogDebug("rejected by recurrence");
211 if (filter->getStatusIsSet()) {
212 const std::vector<CalendarEvent::EventStatus> &filterVal =
213 filter->getStatusFilter();
214 if (std::find(filterVal.begin(), filterVal.end(),
215 m_abstractEvent->getStatus()) == filterVal.end()) {
216 LogDebug("rejected by status");
220 if (filter->getAlarmTimeMinIsSet() && m_abstractEvent->getAlarmTime() <
221 filter->getAlarmTimeMinFilter()) {
222 LogDebug("rejected by alarm time min " << filter->getAlarmTimeMinFilter());
225 if (filter->getAlarmTimeMinIsSet() && m_abstractEvent->getAlarmTime() >
226 filter->getAlarmTimeMaxFilter()) {
227 LogDebug("rejected by alarm time max " << filter->getAlarmTimeMaxFilter());
230 if (filter->getAlarmTypeIsSet()) {
231 const std::vector<CalendarEvent::EventAlarmType> &filterVal =
232 filter->getAlarmTypeFilter();
233 if (std::find(filterVal.begin(), filterVal.end(),
234 m_abstractEvent->getAlarmType()) == filterVal.end()) {
235 LogDebug("rejected by alarm type");
239 if (filter->getCategoryIsSet()) {
240 CategoryListPtr categories = m_abstractEvent->getCategories();
242 for (std::size_t i = 0; i < categories->size(); ++i) {
243 if (pcrecpp::RE(filter->getCategoryFilter()).FullMatch(categories->
251 LogDebug("rejectedy by category");
258 void EventWrapper::deleteEvent()
261 if (m_platformEvent == NULL) {
262 ThrowMsg(Commons::NullPointerException,
263 "Failed to delete event in calendar (m_platformEvent==NULL)");
265 int eventID = getIDFromPlatformEvent();
266 LogDebug("eventID: " << eventID);
269 Commons::InvalidArgumentException,
270 "Failed to delete event in calendar (event is not saved in calendar)");
272 cal_struct *event = NULL;
273 int error = calendar_svc_get(CAL_STRUCT_SCHEDULE, eventID, NULL, &event);
275 calendar_svc_struct_free(&event);
277 if (CAL_SUCCESS != error) {
279 Commons::NotFoundException,
280 "Can't delete calendar event, event doesn't exist. Error code "
283 error = calendar_svc_delete(CAL_STRUCT_SCHEDULE, eventID);
284 if (CAL_SUCCESS != error) {
285 ThrowMsg(Commons::PlatformException,
286 "Can't delete calendar event. Error code " << error);
288 LogDebug("event deleted");
289 m_abstractEvent->resetId();
290 setIDToPlatformEvent();
293 cal_struct *EventWrapper::getPlatformEvent() const
295 return m_platformEvent;
298 CalendarEventPtr EventWrapper::getAbstractEvent() const
300 return m_abstractEvent;
303 void EventWrapper::freePlatformEvent()
306 if (m_platformEvent != NULL) {
307 if (CAL_SUCCESS != calendar_svc_struct_free(&m_platformEvent)) {
308 LogError("Can't free calendar event struct.");
310 m_platformEvent = NULL;
314 cal_struct *EventWrapper::convertAbstractEventToPlatformEvent()
318 m_platformEvent = calendar_svc_struct_new(CAL_STRUCT_SCHEDULE);
319 if (!m_platformEvent) {
320 ThrowMsg(Commons::UnknownException, "cannot create platform event");
322 setDescriptionToPlatformEvent();
323 setSubjectToPlatformEvent();
324 setStartTimeToPlatformEvent();
325 setEndTimeToPlatformEvent();
326 setLocationToPlatformEvent();
327 setAlarmToPlatformEvent();
328 setRecurrenceToPlatformEvent();
329 setStatusToPlatformEvent();
330 setCategoriesToPlatformEvent();
331 setIDToPlatformEvent();
332 setExpiresToPlatformEvent();
333 setIntervalToPlatformEvent();
334 return getPlatformEvent();
337 void EventWrapper::setDescriptionToPlatformEvent()
339 if (!m_platformEvent) {
340 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
342 if (CAL_SUCCESS != calendar_svc_struct_set_str(m_platformEvent,
343 CAL_VALUE_TXT_DESCRIPTION,
345 getDescription().c_str()))
347 ThrowMsg(Commons::PlatformException, "Can't set event description.");
351 void EventWrapper::setSubjectToPlatformEvent()
353 if (!m_platformEvent) {
354 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
356 if (CAL_SUCCESS != calendar_svc_struct_set_str(m_platformEvent,
357 CAL_VALUE_TXT_SUMMARY,
358 m_abstractEvent->getSubject()
360 ThrowMsg(Commons::PlatformException, "Can't set event subject.");
364 void EventWrapper::setStartTimeToPlatformEvent()
366 if (!m_platformEvent) {
367 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
370 time_t time = m_abstractEvent->getStartTime();
372 time = m_abstractEvent->getEndTime();
374 if (CAL_SUCCESS != calendar_svc_struct_set_time(m_platformEvent,
375 CAL_VALUE_GMT_START_DATE_TIME,
376 CAL_TZ_FLAG_GMT, time)) {
377 ThrowMsg(Commons::PlatformException, "Can't set event start time.");
381 void EventWrapper::setEndTimeToPlatformEvent()
383 if (!m_platformEvent) {
384 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
387 time_t time = m_abstractEvent->getEndTime();
389 time = m_abstractEvent->getStartTime();
391 if (CAL_SUCCESS != calendar_svc_struct_set_time(m_platformEvent,
392 CAL_VALUE_GMT_END_DATE_TIME,
393 CAL_TZ_FLAG_GMT, time)) {
394 ThrowMsg(Commons::PlatformException, "Can't set event end time.");
398 void EventWrapper::setLocationToPlatformEvent()
400 if (!m_platformEvent) {
401 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
403 if (CAL_SUCCESS != calendar_svc_struct_set_str(m_platformEvent,
404 CAL_VALUE_TXT_LOCATION,
405 m_abstractEvent->getLocation()
407 ThrowMsg(Commons::PlatformException, "Can't set event location.");
411 void EventWrapper::setRecurrenceToPlatformEvent()
413 if (!m_platformEvent) {
414 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
417 switch (m_abstractEvent->getRecurrence()) {
418 case CalendarEvent::NO_RECURRENCE:
419 ret = (CAL_SUCCESS == calendar_svc_struct_set_int(m_platformEvent,
420 CAL_VALUE_INT_REPEAT_TERM,
423 case CalendarEvent::DAILY_RECURRENCE:
424 ret = (CAL_SUCCESS == calendar_svc_struct_set_int(m_platformEvent,
425 CAL_VALUE_INT_REPEAT_TERM,
426 CAL_REPEAT_EVERY_DAY))
428 (CAL_SUCCESS == calendar_svc_struct_set_int(m_platformEvent,
429 CAL_VALUE_INT_REPEAT_OCCURRENCES,
432 case CalendarEvent::WEEKLY_RECURRENCE:
434 char weekDay[] = "0000000";
435 time_t date = m_abstractEvent->getStartTime();
436 tm* time = localtime(&date);
438 LogError("localtime failed");
443 int days = time->tm_wday;
444 if (days < 0 || days > 6) {
445 LogError("invalid week day");
449 ret = (CAL_SUCCESS == calendar_svc_struct_set_int(m_platformEvent,
450 CAL_VALUE_INT_REPEAT_TERM,
451 CAL_REPEAT_EVERY_WEEK))
453 (CAL_SUCCESS == calendar_svc_struct_set_int(m_platformEvent,
454 CAL_VALUE_INT_REPEAT_OCCURRENCES,
456 (CAL_SUCCESS == calendar_svc_struct_set_str(m_platformEvent,
457 CAL_VALUE_TXT_WEEK_FLAG,
462 case CalendarEvent::MONTHLY_ON_DAY_RECURRENCE:
464 char weekDay[] = "0000000";
465 time_t date = m_abstractEvent->getStartTime();
466 int days = localtime(&date)->tm_wday;
467 if (days < 0 || days > 6) {
468 LogError("invalid week day");
472 ret = (CAL_SUCCESS == calendar_svc_struct_set_int(
474 CAL_VALUE_INT_REPEAT_OCCURRENCES,
476 (CAL_SUCCESS == calendar_svc_struct_set_str(
478 CAL_VALUE_TXT_WEEK_FLAG,
483 case CalendarEvent::MONTHLY_RECURRENCE:
484 ret = (CAL_SUCCESS == calendar_svc_struct_set_int(
486 CAL_VALUE_INT_REPEAT_TERM,
487 CAL_REPEAT_EVERY_MONTH)) &&
488 (CAL_SUCCESS == calendar_svc_struct_set_int(
490 CAL_VALUE_INT_REPEAT_OCCURRENCES,
493 case CalendarEvent::WEEKDAY_RECURRENCE:
494 ret = (CAL_SUCCESS == calendar_svc_struct_set_int(
496 CAL_VALUE_INT_REPEAT_TERM,
497 CAL_REPEAT_EVERY_WEEK)) &&
498 (CAL_SUCCESS == calendar_svc_struct_set_int(
500 CAL_VALUE_INT_REPEAT_OCCURRENCES,
502 (CAL_SUCCESS == calendar_svc_struct_set_str(
504 CAL_VALUE_TXT_WEEK_FLAG,
507 case CalendarEvent::YEARLY_RECURRENCE:
508 ret = (CAL_SUCCESS == calendar_svc_struct_set_int(
510 CAL_VALUE_INT_REPEAT_TERM,
511 CAL_REPEAT_EVERY_YEAR)) &&
512 (CAL_SUCCESS == calendar_svc_struct_set_int(
514 CAL_VALUE_INT_REPEAT_OCCURRENCES,
517 case CalendarEvent::INVALID_RECURRENCE:
518 case CalendarEvent::UNDEFINED_RECURRENCE:
520 LogError("invalid reccurence " << m_abstractEvent->getRecurrence());
525 ThrowMsg(Commons::PlatformException, "Can't set event recurrence.");
529 void EventWrapper::setAlarmToPlatformEvent()
531 if (!m_platformEvent) {
532 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
537 if (m_abstractEvent->getAlarmTimeIsSet()) {
540 cal_alert_type_t alarmType = CAL_ALERT_MELODY;
541 switch (m_abstractEvent->getAlarmType()) {
542 case CalendarEvent::NO_ALARM:
543 alarmType = CAL_ALERT_MUTE;
545 case CalendarEvent::SOUND_ALARM:
546 alarmType = CAL_ALERT_MELODY;
548 case CalendarEvent::SILENT_ALARM:
549 alarmType = CAL_ALERT_VIBRATION;
552 ThrowMsg(Commons::UnknownException, "wrong alarm type");
557 cal_value* alarm = calendar_svc_value_new(CAL_VALUE_LST_ALARM);
559 ThrowMsg(Commons::PlatformException, "Can't set alarm.");
562 if (CAL_SUCCESS != calendar_svc_value_set_time(
564 CAL_VALUE_GMT_ALARMS_TIME,
566 m_abstractEvent->getAlarmTime()) ||
567 CAL_SUCCESS != calendar_svc_value_set_int(
569 CAL_VALUE_INT_ALARMS_TICK,
571 CAL_SUCCESS != calendar_svc_value_set_int(
573 CAL_VALUE_INT_ALARMS_TICK_UNIT,
574 CAL_SCH_TIME_UNIT_SPECIFIC) ||
575 CAL_SUCCESS != calendar_svc_value_set_int(
577 CAL_VALUE_INT_ALARMS_TYPE,
580 calendar_svc_value_free(&alarm);
581 ThrowMsg(Commons::PlatformException, "Can't set alarm.");
585 list = g_list_prepend(list, alarm);
589 if (CAL_SUCCESS != calendar_svc_struct_store_list(
594 ThrowMsg(Commons::PlatformException, "cannot save the alarms");
599 void EventWrapper::setStatusToPlatformEvent()
601 if (!m_platformEvent) {
602 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
605 switch (m_abstractEvent->getStatus()) {
606 case CalendarEvent::TENTATIVE_STATUS:
609 case CalendarEvent::CANCELLED_STATUS:
612 case CalendarEvent::CONFIRMED_STATUS:
617 if (CAL_SUCCESS != calendar_svc_struct_set_int(m_platformEvent,
618 CAL_VALUE_INT_MEETING_STATUS,
620 ThrowMsg(Commons::PlatformException, "Can't set event ID.");
624 void EventWrapper::setCategoriesToPlatformEvent()
626 if (!m_platformEvent) {
627 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
629 GList *categoryList = NULL;
630 cal_value* category = NULL;
633 for (size_t i = 0; i < m_abstractEvent->getCategories()->size(); ++i) {
634 LogDebug("adding category " <<
635 m_abstractEvent->getCategories()->at(i));
636 category = calendar_svc_value_new(CAL_VALUE_LST_MEETING_CATEGORY);
637 if (NULL == category) {
638 LogError("error during creating category");
639 ThrowMsg(Commons::PlatformException,
640 "Cannot create category object");
643 calendar_svc_value_set_str(category, "category_name",
644 m_abstractEvent->getCategories()->at(
646 LogError("error during setting category name");
647 calendar_svc_value_free(&category);
648 ThrowMsg(Commons::PlatformException, "Cannot set category name");
650 //Order of categories is lost during saving, so we don't need to reverse this list.
651 categoryList = g_list_prepend(categoryList, category);
654 calendar_svc_struct_store_list(m_platformEvent,
655 CAL_VALUE_LST_MEETING_CATEGORY,
658 Catch(Commons::PlatformException)
660 LogError("error during setting categories");
661 calendar_svc_struct_store_list(m_platformEvent,
662 CAL_VALUE_LST_MEETING_CATEGORY,
664 for (; categoryList; categoryList = g_list_next(categoryList)) {
665 category = static_cast<cal_value*>(categoryList->data);
666 calendar_svc_value_free(&category);
668 g_list_free(categoryList);
669 ReThrow(Commons::PlatformException);
673 void EventWrapper::setIDToPlatformEvent()
675 if (!m_platformEvent) {
676 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
678 if (m_abstractEvent->getIdIsSet()) {
679 if (CAL_SUCCESS != calendar_svc_struct_set_int(
682 m_abstractEvent->getId()))
684 ThrowMsg(Commons::PlatformException, "Can't set event ID.");
687 if (CAL_SUCCESS != calendar_svc_struct_set_int(
692 ThrowMsg(Commons::PlatformException, "Can't set event ID.");
697 void EventWrapper::setExpiresToPlatformEvent()
699 if (!m_platformEvent) {
700 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
702 if (m_abstractEvent->getExpiresIsSet()) {
703 int errorCode = calendar_svc_struct_set_time(
705 CAL_VALUE_GMT_REPEAT_END_DATE,
707 m_abstractEvent->getExpires());
708 if (CAL_SUCCESS != errorCode) {
710 "Can't set CAL_VALUE_GMT_REPEAT_END_DATE, error: " <<
712 ThrowMsg(Commons::PlatformException, "Can't set expires.");
717 void EventWrapper::setIntervalToPlatformEvent()
719 if (CAL_SUCCESS != calendar_svc_struct_set_int(m_platformEvent,
720 CAL_VALUE_INT_REPEAT_INTERVAL,
721 m_abstractEvent->getInterval()))
723 ThrowMsg(Commons::PlatformException, "Can't set interval.");
727 CalendarEventPtr EventWrapper::convertPlatformEventToAbstractEvent()
730 setDescriptionFromPlatformEvent();
731 setSubjectFromPlatformEvent();
732 setStartTimeFromPlatformEvent();
733 setEndTimeFromPlatformEvent();
734 setLocationFromPlatformEvent();
735 setRecurrenceFromPlatformEvent();
736 setAlarmFromPlatformEvent();
737 setStatusFromPlatformEvent();
738 setCategoriesFromPlatformEvent();
739 setIDFromPlatformEvent();
740 setExpiresFromPlatformEvent();
741 setIntervalFromPlatformEvent();
742 return getAbstractEvent();
745 void EventWrapper::setDescriptionFromPlatformEvent()
747 if (!m_platformEvent) {
748 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
750 const char *description = calendar_svc_struct_get_str(
752 CAL_VALUE_TXT_DESCRIPTION);
754 m_abstractEvent->setDescription(description);
758 void EventWrapper::setSubjectFromPlatformEvent()
760 if (!m_platformEvent) {
761 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
763 const char *summary = calendar_svc_struct_get_str(m_platformEvent,
764 CAL_VALUE_TXT_SUMMARY);
766 m_abstractEvent->setSubject(summary);
770 void EventWrapper::setStartTimeFromPlatformEvent()
772 if (!m_platformEvent) {
773 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
775 time_t startTime = calendar_svc_struct_get_time(
777 CAL_VALUE_GMT_START_DATE_TIME,
779 m_abstractEvent->setStartTime(startTime);
782 void EventWrapper::setEndTimeFromPlatformEvent()
784 if (!m_platformEvent) {
785 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
787 time_t endTime = calendar_svc_struct_get_time(m_platformEvent,
788 CAL_VALUE_GMT_END_DATE_TIME,
790 m_abstractEvent->setEndTime(endTime);
793 void EventWrapper::setLocationFromPlatformEvent()
795 if (!m_platformEvent) {
796 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
798 const char* location = calendar_svc_struct_get_str(m_platformEvent,
799 CAL_VALUE_TXT_LOCATION);
801 m_abstractEvent->setLocation(location);
805 void EventWrapper::setRecurrenceFromPlatformEvent()
807 if (!m_platformEvent) {
808 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
810 int recurrence = calendar_svc_struct_get_int(m_platformEvent,
811 CAL_VALUE_INT_REPEAT_TERM);
812 switch (recurrence) {
813 case CAL_REPEAT_NONE:
814 m_abstractEvent->setRecurrence(CalendarEvent::NO_RECURRENCE);
816 case CAL_REPEAT_EVERY_DAY:
817 m_abstractEvent->setRecurrence(CalendarEvent::DAILY_RECURRENCE);
819 case CAL_REPEAT_EVERY_WEEK:
821 const char *daysFlag = calendar_svc_struct_get_str(
823 CAL_VALUE_TXT_WEEK_FLAG);
824 if (daysFlag && strncmp(daysFlag, weekDays, 7) == 0) {
825 m_abstractEvent->setRecurrence(CalendarEvent::WEEKDAY_RECURRENCE);
827 m_abstractEvent->setRecurrence(CalendarEvent::WEEKLY_RECURRENCE);
831 case CAL_REPEAT_EVERY_MONTH:
833 const char *daysFlag = calendar_svc_struct_get_str(
835 CAL_VALUE_TXT_WEEK_FLAG);
836 if (!daysFlag || strnlen(daysFlag, 7) == 0) {
837 m_abstractEvent->setRecurrence(CalendarEvent::MONTHLY_RECURRENCE);
839 m_abstractEvent->setRecurrence(
840 CalendarEvent::MONTHLY_ON_DAY_RECURRENCE);
844 case CAL_REPEAT_EVERY_YEAR:
845 m_abstractEvent->setRecurrence(CalendarEvent::YEARLY_RECURRENCE);
848 LogWarning("unknown recurrence");
849 m_abstractEvent->setRecurrence(CalendarEvent::NO_RECURRENCE);
854 void EventWrapper::setAlarmFromPlatformEvent()
856 if (!m_platformEvent) {
857 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
861 calendar_svc_struct_get_list(m_platformEvent, CAL_VALUE_LST_ALARM, &list);
864 m_abstractEvent->resetAlarmTime();
868 cal_value* alarm = static_cast<cal_value*>(list->data);
871 m_abstractEvent->resetAlarmTime();
875 cal_sch_remind_tick_unit_t tickUnit =
876 static_cast<cal_sch_remind_tick_unit_t>(calendar_svc_value_get_int(
878 CAL_VALUE_INT_ALARMS_TICK_UNIT));
880 if (CAL_SCH_TIME_UNIT_OFF == tickUnit) {
882 m_abstractEvent->resetAlarmTime();
885 else if (CAL_SCH_TIME_UNIT_SPECIFIC == tickUnit) {
886 m_abstractEvent->setAlarmTime(calendar_svc_value_get_time(
887 alarm, CAL_VALUE_GMT_ALARMS_TIME, CAL_TZ_FLAG_GMT));
890 int tick = calendar_svc_value_get_int(alarm,
891 CAL_VALUE_INT_ALARMS_TICK);
892 time_t startTime = m_abstractEvent->getStartTime();
894 case CAL_SCH_TIME_UNIT_MIN:
895 /* tick contains number of minutes to substract */
896 startTime -= tick * 60;
898 case CAL_SCH_TIME_UNIT_HOUR:
899 /* tick contains number of hours to substract */
900 startTime -= tick * 60 * 60;
902 case CAL_SCH_TIME_UNIT_DAY:
903 /* tick contains number of days to substract */
904 startTime -= tick * 60 * 60 * 24;
906 case CAL_SCH_TIME_UNIT_WEEK:
907 /* tick contains number of weeks to substract */
908 startTime -= tick * 60 * 60 * 24 * 7;
910 case CAL_SCH_TIME_UNIT_MONTH: {
911 /* tick contains number of months to substract */
912 struct tm *t = localtime(&startTime);
914 int tmpDay = t->tm_mday;
915 startTime = mktime(t);
916 if (tmpDay != t->tm_mday) {
917 //previous month is shorter than current
918 //corrent day and month
919 t->tm_mday = tmpDay - t->tm_mday;
921 startTime = mktime(t);
928 m_abstractEvent->setAlarmTime(startTime);
931 cal_alert_type_t alarmType = static_cast<cal_alert_type_t>(
932 calendar_svc_value_get_int(alarm, CAL_VALUE_INT_ALARMS_TYPE));
934 case CAL_ALERT_VIBRATION:
935 m_abstractEvent->setAlarmType(CalendarEvent::SILENT_ALARM);
937 case CAL_ALERT_MELODY:
938 case CAL_ALERT_INCREASING_MELODY:
939 case CAL_ALERT_VIBRATION_THEN_MELODY:
940 case CAL_ALERT_VIBMELODY:
941 case CAL_ALERT_VIB_INCREASING_MELODY:
942 m_abstractEvent->setAlarmType(CalendarEvent::SOUND_ALARM);
946 m_abstractEvent->setAlarmType(CalendarEvent::NO_ALARM);
951 void EventWrapper::setStatusFromPlatformEvent()
953 if (!m_platformEvent) {
954 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
956 int status = calendar_svc_struct_get_int(m_platformEvent,
957 CAL_VALUE_INT_MEETING_STATUS);
960 m_abstractEvent->setStatus(CalendarEvent::TENTATIVE_STATUS);
963 m_abstractEvent->setStatus(CalendarEvent::CANCELLED_STATUS);
967 m_abstractEvent->setStatus(CalendarEvent::CONFIRMED_STATUS);
971 void EventWrapper::setCategoriesFromPlatformEvent()
973 if (!m_platformEvent) {
974 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
976 m_abstractEvent->getCategories()->clear();
977 GList *categoryList = NULL;
979 calendar_svc_struct_get_list(m_platformEvent,
980 CAL_VALUE_LST_MEETING_CATEGORY,
982 LogError("cannot read category list");
985 cal_value* category = NULL;
986 for (; categoryList; categoryList = g_list_next(categoryList)) {
987 category = static_cast<cal_value*>(categoryList->data);
988 char* categoryName = calendar_svc_value_get_str(category,
990 if (NULL == categoryName) {
991 LogError("cannot read category name");
994 m_abstractEvent->getCategories()->push_back(categoryName);
998 void EventWrapper::setIDFromPlatformEvent()
1000 if (!m_platformEvent) {
1001 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
1003 m_abstractEvent->setId(getIDFromPlatformEvent());
1006 void EventWrapper::setExpiresFromPlatformEvent()
1008 if (!m_platformEvent) {
1009 ThrowMsg(Commons::UnknownException, "Null platform pointer.");
1011 time_t expires = calendar_svc_struct_get_time(m_platformEvent,
1012 CAL_VALUE_GMT_REPEAT_END_DATE,
1014 m_abstractEvent->setExpires(expires);
1017 void EventWrapper::setIntervalFromPlatformEvent()
1019 int interval = calendar_svc_struct_get_int(m_platformEvent,
1020 CAL_VALUE_INT_REPEAT_INTERVAL);
1021 m_abstractEvent->setInterval(interval);
1024 void EventWrapper::displayAbstractEvent()
1026 m_abstractEvent->display();
1029 void EventWrapper::displayPlatformEvent()
1031 LogDebug("event id: " << calendar_svc_struct_get_int(m_platformEvent,
1032 CAL_VALUE_INT_INDEX));
1033 LogDebug("event start time: " << calendar_svc_struct_get_time(
1034 m_platformEvent, CAL_VALUE_GMT_START_DATE_TIME,
1036 LogDebug("event end time: " << calendar_svc_struct_get_time(m_platformEvent,
1037 CAL_VALUE_GMT_END_DATE_TIME,
1039 LogDebug("event location: " << calendar_svc_struct_get_str(m_platformEvent,
1040 CAL_VALUE_TXT_LOCATION));
1041 LogDebug("event summary: " << calendar_svc_struct_get_str(m_platformEvent,
1042 CAL_VALUE_TXT_SUMMARY));
1043 LogDebug("event description: " << calendar_svc_struct_get_str(
1044 m_platformEvent, CAL_VALUE_TXT_DESCRIPTION));