#include "calendar.h"
CtxType CTX_VCARD = CTX_NONE;
+CtxType CTX_VCARD_LIST = CTX_NONE;
CtxType CTX_VCARD_TYPE = CTX_NONE;
long VCEnumCounter = 0;
{HKEY("uid")}
};
+/*
+ * Address book entry (keep it short and sweet, it's just a quickie lookup
+ * which we can use to get to the real meat and bones later)
+ */
+typedef struct _addrbookent {
+ StrBuf *name;
+ HashList *VC;
+ long ab_msgnum; /* message number of address book entry */
+} addrbookent;
+
+void deleteAbEnt(void *v) {
+ addrbookent *vc = (addrbookent*)v;
+ DeleteHash(&vc->VC);
+ FreeStrBuf(&vc->name);
+}
HashList *DefineToToken = NULL;
HashList *VCTokenToDefine = NULL;
{
void *vItem;
long searchFieldNo = GetTemplateTokenNumber(Target, TP, 0, 0);
- HashList *vc = (HashList*) CTX(CTX_VCARD);
- if (GetHash(vc, LKEY(searchFieldNo), &vItem) && (vItem != NULL)) {
+ addrbookent *ab = (addrbookent*) CTX(CTX_VCARD);
+ if (GetHash(ab->VC, LKEY(searchFieldNo), &vItem) && (vItem != NULL)) {
StrBufAppendTemplate(Target, TP, (StrBuf*) vItem, 1);
}
}
{
void *vItem;
vcField *t = (vcField*) CTX(CTX_VCARD_TYPE);
- HashList *vc = (HashList*) CTX(CTX_VCARD);
+ addrbookent *ab = (addrbookent*) CTX(CTX_VCARD);
if (t == NULL) {
LogTemplateError(NULL, "VCard item", ERR_NAME, TP,
return;
}
- if (GetHash(vc, LKEY(t->cval), &vItem) && (vItem != NULL)) {
+ if (GetHash(ab->VC, LKEY(t->cval), &vItem) && (vItem != NULL)) {
StrBufAppendTemplate(Target, TP, (StrBuf*) vItem, 0);
}
else {
searchType = GetTemplateTokenNumber(Target, TP, IT_ADDT_PARAM(0), 0);
if (vf->Type == searchType) {
- HashList *vc = (HashList*) CTX(CTX_VCARD);
- if (GetHash(vc, LKEY(vf->cval), &v) && v != NULL)
+ addrbookent *ab = (addrbookent*) CTX(CTX_VCARD);
+ if (GetHash(ab->VC, LKEY(vf->cval), &v) && v != NULL)
return 1;
}
return rc;
HashList *getContextVcard(StrBuf *Target, WCTemplputParams *TP)
{
vcField *vf = (vcField*) CTX(CTX_VCARD_TYPE);
- HashList *vc = (HashList*) CTX(CTX_VCARD);
+ addrbookent *ab = (addrbookent*) CTX(CTX_VCARD);
- if ((vf == NULL) || (vc == NULL)) {
+ if ((vf == NULL) || (ab == NULL)) {
LogTemplateError(NULL, "VCard item type", ERR_NAME, TP,
"Need VCard and Vcard type in context");
return NULL;
}
- return vc;
+ return ab->VC;
}
int filter_VC_ByContextType(const char* key, long len, void *Context, StrBuf *Target, WCTemplputParams *TP)
int conditional_VC_Havetype(StrBuf *Target, WCTemplputParams *TP)
{
- HashList *vc = (HashList*) CTX(CTX_VCARD);
+ addrbookent *ab = (addrbookent*) CTX(CTX_VCARD);
long HaveFieldType = GetTemplateTokenNumber(Target, TP, 2, 0);
int rc = 0;
void *vVCitem;
const char *Key;
long len;
- HashPos *it = GetNewHashPos(vc, 0);
- while (GetNextHashPos(vc, it, &len, &Key, &vVCitem) &&
+ HashPos *it = GetNewHashPos(ab->VC, 0);
+ while (GetNextHashPos(ab->VC, it, &len, &Key, &vVCitem) &&
(vVCitem != NULL))
{
void *vvcField;
void tmplput_VCARD_ITEM(StrBuf *Target, WCTemplputParams *TP)
{
- HashList *VC = CTX(CTX_VCARD);
+ addrbookent *ab = CTX(CTX_VCARD);
int evc;
void *vStr;
evc = GetTemplateTokenNumber(Target, TP, 0, -1);
if (evc != -1)
{
- if (GetHash(VC, IKEY(evc), &vStr))
+ if (GetHash(ab->VC, IKEY(evc), &vStr))
{
StrBufAppendTemplate(Target, TP,
(StrBuf*) vStr,
}
-void display_one_vcard (StrBuf *Target, HashList *VC, const char *tp_name, size_t tp_name_len)
+void display_one_vcard (StrBuf *Target, addrbookent *ab, const char *tp_name, size_t tp_name_len)
{
WCTemplputParams *TP = NULL;
WCTemplputParams SubTP;
memset(&SubTP, 0, sizeof(WCTemplputParams));
- StackContext(TP, &SubTP, VC, CTX_VCARD, 0, NULL);
+ StackContext(TP, &SubTP, ab, CTX_VCARD, 0, NULL);
DoTemplate(tp_name, tp_name_len, Target, &SubTP);
UnStackContext(&SubTP);
wc_mime_attachment *VCMime = NULL;
struct vCard *v;
char whatuser[256];
- VC = NewHash(0, lFlathash);
+ addrbookent ab;
+ memset(&ab, 0, sizeof(addrbookent));
+ ab.VC = NewHash(0, lFlathash);
/* Display the form */
output_headers(1, 1, 1, 0, 0, 0);
convenience_page("770000", _("Error"), "");/*TODO: important message*/
DestroyMessageSummary(Msg);
return;
+ DeleteHash(&ab.VC);
}
v = VCardLoad(VCMime->Data);
}
memset(&SubTP, 0, sizeof(WCTemplputParams));
-
{
WCTemplputParams *TP = NULL;
WCTemplputParams SubTP;
- StackContext(TP, &SubTP, VC, CTX_VCARD, 0, NULL);
+
+ StackContext(TP, &SubTP, &ab, CTX_VCARD, 0, NULL);
DoTemplate(HKEY("vcard_edit"), WCC->WBuf, &SubTP);
UnStackContext(&SubTP);
}
- DeleteHash(&VC);
+ DeleteHash(&ab.VC);
wDumpContent(1);
-/*
- * Address book entry (keep it short and sweet, it's just a quickie lookup
- * which we can use to get to the real meat and bones later)
- */
-typedef struct _addrbookent {
- StrBuf *name;
- HashList *VC;
- long ab_msgnum; /* message number of address book entry */
-} addrbookent;
-
-void deleteAbEnt(void *v) {
- addrbookent *vc = (addrbookent*)v;
- DeleteHash(&vc->VC);
- FreeStrBuf(&vc->name);
-}
-
typedef struct _vcardview_struct {
long is_singlecard;
HashList *addrbook;
abEntry->ab_msgnum = Msg->msgnum;
parse_vcard(WC->WBuf, v, abEntry->VC, VCMime);
- display_one_vcard(abEntry->name, abEntry->VC, HKEY("vcard_list_name"));
+ display_one_vcard(abEntry->name, abEntry, HKEY("vcard_list_name"));
if (StrLength(abEntry->name) == 0) {
StrBufPlain(abEntry->name, _("(no name)"), -1);
}
- StackContext(TP, &SubTP, abEnt->VC, CTX_VCARD, 0, NULL);
+ StackContext(TP, &SubTP, abEnt, CTX_VCARD, 0, NULL);
DoTemplate(HKEY("vcard_list_entry"), WCC->WBuf, &SubTP);
UnStackContext(&SubTP);
if (v != NULL) {
HashList *VC;
-
- VC = NewHash(0, lFlathash);
+ addrbookent ab;
+ memset(&ab, 0, sizeof(addrbookent));
+
+ ab.VC = NewHash(0, lFlathash);
+ ab.ab_msgnum = Mime->msgnum;
+
parse_vcard(Target, v, VC, Mime);
- display_one_vcard (Target, VC, HKEY("vcard_msg_display"));
+ display_one_vcard (Target, &ab, HKEY("vcard_msg_display"));
DeleteHash(&VC);
}
VCTokenToDefine = NewHash(1, NULL);
autoRegisterTokens(&VCEnumCounter, VCStrE, Prefix, 0, 0);
FreeStrBuf(&Prefix);
+
RegisterCTX(CTX_VCARD);
+ RegisterCTX(CTX_VCARD_LIST);
RegisterCTX(CTX_VCARD_TYPE);
+
RegisterReadLoopHandlerset(
VIEW_ADDRESSBOOK,
vcard_GetParamsGetServerCall,