24#include "icalerror_p.h"
32#define BOOKED_DIR "booked"
33#define INCOMING_FILE "incoming.ics"
34#define PROP_FILE "properties.ics"
35#define FBLIST_FILE "freebusy.ics"
37struct icalcalendar_impl {
45struct icalcalendar_impl *icalcalendar_new_impl(
void)
47 struct icalcalendar_impl *impl;
49 if ((impl = (
struct icalcalendar_impl *)malloc(
sizeof(
struct icalcalendar_impl))) == 0) {
57static icalerrorenum icalcalendar_create(
const struct icalcalendar_impl *impl)
59 char path[MAXPATHLEN];
66 strncpy(path, impl->dir, MAXPATHLEN - 1);
67 strncat(path,
"/", MAXPATHLEN - strlen(path) - 1);
68 strncat(path, BOOKED_DIR, MAXPATHLEN - strlen(path) - 1);
69 path[MAXPATHLEN - 1] =
'\0';
72 r = stat(path, &sbuf);
74 if (r != 0 && errno == ENOENT) {
75 if (mkdir(path, 0777) != 0) {
84icalcalendar *icalcalendar_new(
const char *dir)
86 struct icalcalendar_impl *impl;
88 icalerror_check_arg_rz((dir != 0),
"dir");
90 impl = icalcalendar_new_impl();
96 impl->dir = (
char *)strdup(dir);
111void icalcalendar_free(icalcalendar *calendar)
113 if (calendar->dir != 0) {
117 if (calendar->freebusy != 0) {
121 if (calendar->properties != 0) {
125 if (calendar->booked != 0) {
129 if (calendar->incoming != 0) {
134 calendar->freebusy = 0;
135 calendar->properties = 0;
136 calendar->booked = 0;
137 calendar->incoming = 0;
142int icalcalendar_lock(
const icalcalendar *calendar)
144 icalerror_check_arg_rz((calendar != 0),
"calendar");
148int icalcalendar_unlock(
const icalcalendar *calendar)
150 icalerror_check_arg_rz((calendar != 0),
"calendar");
154int icalcalendar_islocked(
const icalcalendar *calendar)
156 icalerror_check_arg_rz((calendar != 0),
"calendar");
160int icalcalendar_ownlock(
const icalcalendar *calendar)
162 icalerror_check_arg_rz((calendar != 0),
"calendar");
166icalset *icalcalendar_get_booked(icalcalendar *calendar)
168 char dir[MAXPATHLEN];
170 icalerror_check_arg_rz((calendar != 0),
"calendar");
173 strncpy(dir, calendar->dir, MAXPATHLEN - 1);
174 strncat(dir,
"/", MAXPATHLEN - strlen(dir) - 1);
175 strncat(dir, BOOKED_DIR, MAXPATHLEN - strlen(dir) - 1);
176 dir[MAXPATHLEN - 1] =
'\0';
178 if (calendar->booked == 0) {
180 calendar->booked = icaldirset_new(dir);
184 return calendar->booked;
187icalset *icalcalendar_get_incoming(icalcalendar *calendar)
189 char path[MAXPATHLEN];
191 icalerror_check_arg_rz((calendar != 0),
"calendar");
194 strncpy(path, calendar->dir, MAXPATHLEN - 1);
195 strncat(path,
"/", MAXPATHLEN - strlen(path) - 1);
196 strncat(path, INCOMING_FILE, MAXPATHLEN - strlen(path) - 1);
197 path[MAXPATHLEN - 1] =
'\0';
199 if (calendar->properties == 0) {
200 calendar->properties = icalfileset_new(path);
203 return calendar->properties;
208 char path[MAXPATHLEN];
210 icalerror_check_arg_rz((calendar != 0),
"calendar");
213 strncpy(path, calendar->dir, MAXPATHLEN - 1);
214 strncat(path,
"/", MAXPATHLEN - strlen(path) - 1);
215 strncat(path, PROP_FILE, MAXPATHLEN - strlen(path) - 1);
216 path[MAXPATHLEN - 1] =
'\0';
218 if (calendar->properties == 0) {
219 calendar->properties = icalfileset_new(path);
222 return calendar->properties;
227 char path[MAXPATHLEN];
229 icalerror_check_arg_rz((calendar != 0),
"calendar");
232 strncpy(path, calendar->dir, MAXPATHLEN - 1);
233 strncat(path,
"/", MAXPATHLEN - strlen(path) - 1);
234 strncat(path, FBLIST_FILE, MAXPATHLEN - strlen(path) - 1);
235 path[MAXPATHLEN - 1] =
'\0';
237 if (calendar->freebusy == 0) {
238 calendar->freebusy = icalfileset_new(path);
241 return calendar->freebusy;
icalset * icalcalendar_get_freebusy(icalcalendar *calendar)
icalset * icalcalendar_get_properties(icalcalendar *calendar)
Routines for storing calendar data in a file system.
Manages a database of ical components and offers interfaces for reading, writing and searching for co...
void icalerror_set_errno(icalerrorenum x)
Sets the icalerrno to a given error.
void icalerror_clear_errno(void)
Resets icalerrno to ICAL_NO_ERROR.
icalerrorenum
Represents the different types of errors that can be triggered in libical.
#define icalerrno
Access the current icalerrno value.
Manages a database of ical components and offers interfaces for reading, writing and searching for co...
void icalset_free(icalset *set)