X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fserv_ical.c;h=267da1c731ae0b7fbe961c0861122996b13c4995;hb=25c2c5f758f5199c2434308b7db2480b161659df;hp=170a2347bf5c7120f3216b445467e0757eafccd8;hpb=12873bcf13c8163688065e514b271507dbec9bb7;p=citadel.git diff --git a/citadel/serv_ical.c b/citadel/serv_ical.c index 170a2347b..267da1c73 100644 --- a/citadel/serv_ical.c +++ b/citadel/serv_ical.c @@ -20,6 +20,8 @@ #include "support.h" #include "config.h" #include "dynloader.h" +#include "user_ops.h" +#include "room_ops.h" /* Tell clients what level of support to expect */ @@ -36,12 +38,41 @@ void cmd_ical(char *argbuf) } +/* We can't know if the calendar room exists so we just create it at login */ +void ical_create_room(void) +{ + char roomname[ROOMNAMELEN]; + struct quickroom qr; + + /* Create the room if it doesn't already exist */ + MailboxName(roomname, &CC->usersupp, USERCALENDARROOM); + create_room(roomname, 4, "", 0); + /* Set expiration policy to manual; otherwise objects will be lost! */ + if (lgetroom(&qr, roomname)) { + lprintf(3, "Couldn't get the user calendar room!\n"); + return; + } + qr.QRep.expire_mode = EXPIRE_MANUAL; + lputroom(&qr); + return; +} + + +/* User is reading a message */ +int ical_obj_beforeread(struct CtdlMessage *msg) +{ + return 0; +} + + +/* See if we need to prevent the object from being saved */ int ical_obj_beforesave(struct CtdlMessage *msg) { return 0; } +/* aftersave processing */ int ical_obj_aftersave(struct CtdlMessage *msg) { return 0; @@ -51,6 +82,8 @@ int ical_obj_aftersave(struct CtdlMessage *msg) /* Register this module with the Citadel server. */ char *Dynamic_Module_Init(void) { + CtdlRegisterSessionHook(ical_create_room, EVT_LOGIN); + CtdlRegisterMessageHook(ical_obj_beforeread, EVT_BEFOREREAD); CtdlRegisterMessageHook(ical_obj_beforesave, EVT_BEFORESAVE); CtdlRegisterMessageHook(ical_obj_aftersave, EVT_AFTERSAVE); CtdlRegisterProtoHook(cmd_ical, "ICAL", "Register iCalendar support");