6 * Copyright (C) 2010-2013 SIPE Project <http://sipe.sourceforge.net/>
7 * Copyright (C) 2009 pier11 <pier11@operamail.com>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 /* Forward declarations */
26 struct sipe_core_private
;
27 struct sipe_http_request
;
28 struct sipe_http_session
;
31 /* Calendar statuses */
32 #define SIPE_CAL_FREE 0
33 #define SIPE_CAL_TENTATIVE 1
34 #define SIPE_CAL_BUSY 2
35 #define SIPE_CAL_OOF 3
36 #define SIPE_CAL_NO_DATA 4
38 /* Default granularity of FreeBusy data is 15 minutes */
39 #define SIPE_FREE_BUSY_GRANULARITY_SEC (15*60)
40 /* FreeBusy stream duration in seconds. Defaults to 4 days */
41 #define SIPE_FREE_BUSY_PERIOD_SEC (4*(24*60*60))
43 struct sipe_cal_event
{
53 /** For extracting our Calendar information from
54 * external sources like Exchange, Lotus Domino.
56 struct sipe_calendar
{
57 struct sipe_core_private
*sipe_private
;
63 int is_domino_disabled
;
66 gboolean ews_autodiscover_triggered
;
73 char *oof_state
; /* Enabled, Disabled, Scheduled */
80 struct sipe_http_session
*session
;
81 struct sipe_http_request
*request
;
86 char *working_hours_xml_str
;
91 sipe_cal_event_free(struct sipe_cal_event
* cal_event
);
94 sipe_cal_events_free(GSList
*cal_events
);
97 sipe_cal_calendar_free(struct sipe_calendar
*cal
);
100 sipe_cal_calendar_init(struct sipe_core_private
*sipe_private
);
103 * Returns hash of Calendar Event for comparison.
105 * Must be g_free()'d after use.
108 sipe_cal_event_hash(struct sipe_cal_event
* event
);
111 * Describes Calendar event in human readable form.
113 * Must be g_free()'d after use.
116 sipe_cal_event_describe(struct sipe_cal_event
* cal_event
);
119 * Converts struct tm to Epoch time_t considering timezone.
121 * @param tz as defined for TZ environment variable.
123 * Reference: see timegm(3) - Linux man page
126 sipe_mktime_tz(struct tm
*tm
,
130 * Converts hex representation of freebusy string as
131 * returned by Exchange Web Services to
132 * condenced and base64 encoded form
134 * Must be g_free()'d after use.
137 sipe_cal_get_freebusy_base64(const char* freebusy_hex
);
139 /** Contains buddy's working hours information */
140 struct sipe_cal_working_hours
;
143 * Parses Working Hours from passed XML piece
144 * and creates/fills struct sipe_cal_working_hours in struct sipe_buddy
147 sipe_cal_parse_working_hours(const struct _sipe_xml
*xn_working_hours
,
148 struct sipe_buddy
*buddy
);
151 * Frees struct sipe_cal_working_hours
154 sipe_cal_free_working_hours(struct sipe_cal_working_hours
*wh
);
157 * Returns user calendar information in text form.
158 * Example: "Currently Busy. Free at 13:00"
161 sipe_cal_get_description(struct sipe_buddy
*buddy
);
164 * Returns calendar status SIPE_CAL_* at time specified.
165 * Returns SIPE_CAL_NO_DATA if no calendar data availible.
167 * @param since (out) Returns beginning time of the status.
170 sipe_cal_get_status(struct sipe_buddy
*buddy
,
171 time_t time_in_question
,
175 * Returns calendar event at time in question.
176 * If conflict, takes last event in the following
177 * priority order: OOF, Busy, Tentative.
179 struct sipe_cal_event
*
180 sipe_cal_get_event(GSList
*cal_events
,
181 time_t time_in_question
);
184 * Publish presence information
186 void sipe_cal_presence_publish(struct sipe_core_private
*sipe_private
,
187 gboolean do_publish_calendar
);
190 * Schedule calendar update
192 void sipe_cal_delayed_calendar_update(struct sipe_core_private
*sipe_private
);