* put filename reference into token, so we can put in errormessages where we wouldn...
authorWilfried Göesgens <willi@citadel.org>
Thu, 6 Nov 2008 21:12:25 +0000 (21:12 +0000)
committerWilfried Göesgens <willi@citadel.org>
Thu, 6 Nov 2008 21:12:25 +0000 (21:12 +0000)
* split horizon context in iterators; expect one context, provide another into the subiterators
* first work on mime iterators

webcit/inetconf.c
webcit/messages.c
webcit/netconf.c
webcit/preferences.c
webcit/subst.c
webcit/useredit.c
webcit/webcit.h
webcit/who.c

index 126e4afae5c1cb509da866506d24cff7b3973d1d..c025792b056df02a28a676874da1807801c68157 100644 (file)
@@ -417,6 +417,6 @@ InitModule_INETCONF
 {
        WebcitAddUrlHandler(HKEY("display_inetconf"), display_inetconf, 0);
        WebcitAddUrlHandler(HKEY("save_inetconf"), new_save_inetconf, AJAX);
-       RegisterIterator("SERVCFG:INET", 1, NULL, GetInetConfHash, InetCfgSubst, NULL, CTX_INETCFG);
+       RegisterIterator("SERVCFG:INET", 1, NULL, GetInetConfHash, InetCfgSubst, NULL, CTX_INETCFG, CTX_NONE);
        RegisterNamespace("SERVCFG:FLUSHINETCFG",0, 0, DeleteInetConfHash, CTX_NONE);
 }
index 8480ce618560119d267293cab8807a3dc841d360..d05d988efbd9d8a3c5dea55cf71777b71eaaa1ce 100644 (file)
@@ -811,9 +811,25 @@ void render_MAIL_UNKNOWN(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *Foun
 
 
 
-HashList *iterate_get_mime(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+HashList *iterate_get_mime_All(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
 {
-       return NULL;
+       message_summary *Msg = (message_summary*) Context;
+       return Msg->AllAttach;
+}
+HashList *iterate_get_mime_Submessages(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+       message_summary *Msg = (message_summary*) Context;
+       return Msg->Submessages;
+}
+HashList *iterate_get_mime_AttachLinks(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+       message_summary *Msg = (message_summary*) Context;
+       return Msg->AttachLinks;
+}
+HashList *iterate_get_mime_Attachments(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+       message_summary *Msg = (message_summary*) Context;
+       return Msg->AllAttach;
 }
 
 
@@ -3896,7 +3912,14 @@ InitModule_MSG
        RegisterConditional(HKEY("COND:MAIL:SUMM:OTHERNODE"), 0, Conditional_MAIL_SUMM_OTHERNODE, CTX_MAILSUM);
 
 
-       RegisterIterator("MAIL:MIME:ATTACH", 0, NULL, iterate_get_mime, tmplput_MIME_ATTACH, NULL, CTX_MAILSUM);
+       RegisterIterator("MAIL:MIME:ATTACH", 0, NULL, iterate_get_mime_All, 
+                        tmplput_MIME_ATTACH, NULL, CTX_MIME_ATACH, CTX_MAILSUM);
+       RegisterIterator("MAIL:MIME:ATTACH:SUBMESSAGES", 0, NULL, iterate_get_mime_Submessages, 
+                        tmplput_MIME_ATTACH, NULL, CTX_MIME_ATACH, CTX_MAILSUM);
+       RegisterIterator("MAIL:MIME:ATTACH:LINKS", 0, NULL, iterate_get_mime_AttachLinks, 
+                        tmplput_MIME_ATTACH, NULL, CTX_MIME_ATACH, CTX_MAILSUM);
+       RegisterIterator("MAIL:MIME:ATTACH:ATT", 0, NULL, iterate_get_mime_Attachments, 
+                        tmplput_MIME_ATTACH, NULL, CTX_MIME_ATACH, CTX_MAILSUM);
 
        RegisterMimeRenderer(HKEY("text/x-citadel-variformat"), render_MAIL_variformat);
        RegisterMimeRenderer(HKEY("text/plain"), render_MAIL_text_plain);
index dcdfe4316b7165c8f882ac3f2047853fb93a4970..67195404683dba3a0b5226ddfd1ebd1bd201395f 100644 (file)
@@ -540,6 +540,6 @@ InitModule_NETCONF
        WebcitAddUrlHandler(HKEY("display_confirm_delete_node"), display_confirm_delete_node, 0);
        WebcitAddUrlHandler(HKEY("delete_node"), delete_node, 0);
        WebcitAddUrlHandler(HKEY("display_add_node"), display_add_node, 0);
-       RegisterIterator("NODECONFIG", 0, NULL, load_netconf, NodeCfgSubst, DeleteHash, CTX_NODECONF);
+       RegisterIterator("NODECONFIG", 0, NULL, load_netconf, NodeCfgSubst, DeleteHash, CTX_NODECONF, CTX_NONE);
 }
 /*@}*/
index 8887f6fe5e9f37e10f05ab8b268a7db43014ff2b..f6e4bab1458695743eebb7633ebb3ab62486f670 100644 (file)
@@ -737,7 +737,7 @@ InitModule_PREFERENCES
        
        RegisterNamespace("PREF:VALUE", 1, 1, tmplput_CFG_Value, CTX_SESSION);
        RegisterNamespace("PREF:DESCR", 1, 1, tmplput_CFG_Descr, CTX_SESSION);
-       RegisterIterator("PREF:ZONE", 0, ZoneHash, NULL, CfgZoneTempl, NULL, CTX_PREF);
+       RegisterIterator("PREF:ZONE", 0, ZoneHash, NULL, CfgZoneTempl, NULL, CTX_PREF, CTX_NONE);
 
        RegisterConditional(HKEY("COND:PREF"), 4, ConditionalPreference, CTX_NONE);
 }
index cca998a4014eae990d10473cb20ce374f3edc390..c764ce6527b6a06b951484a5e94fa3e96a517f72 100644 (file)
@@ -696,6 +696,7 @@ WCTemplateToken *NewTemplateSubstitute(StrBuf *Buf,
        TemplateParam *Param;
        WCTemplateToken *NewToken = (WCTemplateToken*)malloc(sizeof(WCTemplateToken));
 
+       NewToken->FileName = pTmpl->FileName; /* to print meaningfull log messages... */
        NewToken->Flags = 0;
        NewToken->Line = Line + 1;
        NewToken->pTokenStart = pTmplStart;
@@ -1312,6 +1313,7 @@ typedef struct _HashIterator {
        HashList *StaticList;
        int AdditionalParams;
        int ContextType;
+       int XPectContextType;
        RetrieveHashlistFunc GetHash;
        HashDestructorFunc Destructor;
        SubTemplFunc DoSubTemplate;
@@ -1333,16 +1335,18 @@ void tmpl_iterate_subtmpl(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, vo
                     Tokens->Params[0]->Start,
                     Tokens->Params[0]->len,
                     &vIt)) {
-               lprintf(1, "unknown Iterator [%s] (in line %ld); "
+               lprintf(1, "unknown Iterator [%s] (in '%s' line %ld); "
                        " [%s]\n", 
                        Tokens->Params[0]->Start,
+                       ChrPtr(Tokens->FileName),
                        Tokens->Line,
                        ChrPtr(Tokens->FlatToken));
                StrBufAppendPrintf(
                        Target,
-                       "<pre>\nunknown Iterator [%s] (in line %ld); \n"
+                       "<pre>\nunknown Iterator [%s] (in '%s' line %ld); \n"
                        " [%s]\n</pre>", 
                        Tokens->Params[0]->Start,
+                       ChrPtr(Tokens->FileName),
                        Tokens->Line,
                        ChrPtr(Tokens->FlatToken));
                return;
@@ -1351,23 +1355,52 @@ void tmpl_iterate_subtmpl(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, vo
        It = (HashIterator*) vIt;
 
        if (Tokens->nParameters < It->AdditionalParams + 2) {
-               lprintf(1, "Iterator [%s] (in line %ld); "
+               lprintf(1, "Iterator [%s] (in '%s' line %ld); "
                        "doesn't work with %ld params [%s]\n", 
                        Tokens->Params[0]->Start,
+                       ChrPtr(Tokens->FileName),
                        Tokens->Line,
                        Tokens->nParameters, 
                        ChrPtr(Tokens->FlatToken));
                StrBufAppendPrintf(
                        Target,
-                       "<pre>Iterator [%s] \n(in line %ld);\n"
+                       "<pre>Iterator [%s] \n(in '%s' line %ld);\n"
                        "doesn't work with %ld params \n[%s]\n</pre>", 
                        Tokens->Params[0]->Start,
+                       ChrPtr(Tokens->FileName),
                        Tokens->Line,
                        Tokens->nParameters, 
                        ChrPtr(Tokens->FlatToken));
                return;
        }
 
+       if ((It->XPectContextType != CTX_NONE) &&
+           (It->XPectContextType != ContextType)) {
+               lprintf(1, "Iterator [%s] (in '%s' line %ld); "
+                       "requires context of type %ld, have %ld [%s]\n", 
+                       Tokens->pName,
+                       ChrPtr(Tokens->FileName),
+                       Tokens->Line,
+                       It->XPectContextType, 
+                       ContextType,
+                       ChrPtr(Tokens->FlatToken));
+               StrBufAppendPrintf(
+                       Target, 
+                       "<pre>\nIterator [%s] (in '%s' line %ld);"
+                       " requires context of type %ld, have %ld!\n[%s]\n</pre>\n", 
+                       Tokens->pName,
+                       ChrPtr(Tokens->FileName),
+                       Tokens->Line,
+                       It->XPectContextType, 
+                       ContextType,
+                       ChrPtr(Tokens->FlatToken));
+               return ;
+               
+       }
+
+
+
+
        if (It->StaticList == NULL)
                List = It->GetHash(Target, nArgs, Tokens, Context, ContextType);
        else
@@ -1443,7 +1476,8 @@ void RegisterITERATOR(const char *Name, long len,
                      RetrieveHashlistFunc GetHash, 
                      SubTemplFunc DoSubTempl,
                      HashDestructorFunc Destructor,
-                     int ContextType)
+                     int ContextType, 
+                     int XPectContextType)
 {
        HashIterator *It = (HashIterator*)malloc(sizeof(HashIterator));
        It->StaticList = StaticList;
@@ -1452,6 +1486,7 @@ void RegisterITERATOR(const char *Name, long len,
        It->DoSubTemplate = DoSubTempl;
        It->Destructor = Destructor;
        It->ContextType = ContextType;
+       It->XPectContextType = XPectContextType;
        Put(Iterators, Name, len, It, NULL);
 }
 
index 77c98e66772445d25df2629f89cf2a147347765d..97e59de1dd9dd67a4fe29d3020636c67623846ff 100644 (file)
@@ -950,5 +950,5 @@ InitModule_USEREDIT
        RegisterConditional(HKEY("COND:USERACCESS"), 0,   ConditionalUserAccess, CTX_USERLIST);
        RegisterConditional(HKEY("COND:USERLIST:FLAG:USE_INTERNET"), 0, ConditionalFlagINetEmail, CTX_USERLIST);
 
-       RegisterIterator("USERLIST", 0, NULL, iterate_load_userlist, NULL, DeleteHash, CTX_USERLIST);
+       RegisterIterator("USERLIST", 0, NULL, iterate_load_userlist, NULL, DeleteHash, CTX_USERLIST, CTX_NONE);
 }
index 59a361e8ebfe5022fd157ac6af20ae7c31467b57..0848579dade6d490314879d2344741b708420919 100644 (file)
@@ -269,6 +269,7 @@ typedef struct _TemplateParam {
 } TemplateParam;
 
 typedef struct _TemplateToken {
+       const StrBuf *FileName; /* Reference to print error messages; not to be freed */
        StrBuf *FlatToken;
        long Line;
        const char *pTokenStart;
@@ -311,7 +312,7 @@ typedef struct _wcsubst {
 #define CTX_NODECONF 7
 #define CTX_USERLIST 8
 #define CTX_MAILSUM 9
-
+#define CTX_MIME_ATACH 10
 
 void RegisterNS(const char *NSName, long len, 
                int nMinArgs, 
@@ -342,8 +343,9 @@ void RegisterITERATOR(const char *Name, long len,
                      RetrieveHashlistFunc GetHash, 
                      SubTemplFunc DoSubTempl,
                      HashDestructorFunc Destructor,
-                     int ContextType);
-#define RegisterIterator(a, b, c, d, e, f, g) RegisterITERATOR(a, sizeof(a)-1, b, c, d, e, f, g)
+                     int ContextType, 
+                     int XPectContextType);
+#define RegisterIterator(a, b, c, d, e, f, g, h) RegisterITERATOR(a, sizeof(a)-1, b, c, d, e, f, g, h)
 
 void SVPut(char *keyname, size_t keylen, int keytype, char *Data);
 #define svput(a, b, c) SVPut(a, sizeof(a) - 1, b, c)
index 5b011690d1d73f80f078322b9b0758574a180009..bd863e7eee30fcee8f95e1fbc9a33402b04c36eb 100644 (file)
@@ -499,5 +499,5 @@ InitModule_WHO
        WebcitAddUrlHandler(HKEY("terminate_session"), _terminate_session, 0);
        WebcitAddUrlHandler(HKEY("edit_me"), edit_me, 0);
 
-       RegisterIterator("WHOLIST", 0, NULL, GetWholistHash, WholistSubst, DeleteWholistHash, CTX_WHO);
+       RegisterIterator("WHOLIST", 0, NULL, GetWholistHash, WholistSubst, DeleteWholistHash, CTX_WHO, CTX_NONE);
 }