* register mimetypes and send them to citserver on _every_ connect.
authorWilfried Göesgens <willi@citadel.org>
Sat, 10 Oct 2009 16:44:48 +0000 (16:44 +0000)
committerWilfried Göesgens <willi@citadel.org>
Sat, 10 Oct 2009 16:44:48 +0000 (16:44 +0000)
webcit/msg_renderers.c
webcit/serv_func.c
webcit/webcit.h

index e16ae34bae60bad33ce3e66ce478460d28e0d85a..5c01b640d56faaec6f1281df51e795e4f9566ced 100644 (file)
@@ -61,14 +61,18 @@ void RegisterMsgHdr(const char *HeaderName, long HdrNLen, ExamineMsgHeaderFunc e
        Put(MsgHeaderHandler, HeaderName, HdrNLen, ev, NULL);
 }
 
-void RegisterMimeRenderer(const char *HeaderName, long HdrNLen, RenderMimeFunc MimeRenderer)
+void RegisterMimeRenderer(const char *HeaderName, long HdrNLen, 
+                         RenderMimeFunc MimeRenderer,
+                         int InlineRenderable,
+                         int Priority)
 {
        RenderMimeFuncStruct *f;
 
        f = (RenderMimeFuncStruct*) malloc(sizeof(RenderMimeFuncStruct));
        f->f = MimeRenderer;
        Put(MimeRenderHandler, HeaderName, HdrNLen, f, NULL);
-       
+       if (InlineRenderable)
+               RegisterEmbeddableMimeType(HeaderName, HdrNLen, 10000 - Priority);
 }
 
 /*----------------------------------------------------------------------------*/
@@ -1551,17 +1555,19 @@ InitModule_MSGRENDERERS
                         NULL, NULL, CTX_MIME_ATACH, CTX_NONE, IT_NOFLAG);
 
        /* mime renderers translate an attachment into webcit viewable html text */
-       RegisterMimeRenderer(HKEY("message/rfc822"), render_MAIL);
-       RegisterMimeRenderer(HKEY("text/vnote"), render_MIME_VNote);
-       RegisterMimeRenderer(HKEY("text/x-vcard"), render_MIME_VCard);
-       RegisterMimeRenderer(HKEY("text/vcard"), render_MIME_VCard);
-       RegisterMimeRenderer(HKEY("text/calendar"), render_MIME_ICS);
-       RegisterMimeRenderer(HKEY("application/ics"), render_MIME_ICS);
-       RegisterMimeRenderer(HKEY("text/x-citadel-variformat"), render_MAIL_variformat);
-       RegisterMimeRenderer(HKEY("text/plain"), render_MAIL_text_plain);
-       RegisterMimeRenderer(HKEY("text"), render_MAIL_text_plain);
-       RegisterMimeRenderer(HKEY("text/html"), render_MAIL_html);
-       RegisterMimeRenderer(HKEY(""), render_MAIL_UNKNOWN);
+       RegisterMimeRenderer(HKEY("message/rfc822"), render_MAIL, 1, 150);
+       RegisterMimeRenderer(HKEY("text/vnote"), render_MIME_VNote, 1, 300);
+       RegisterMimeRenderer(HKEY("text/x-vcard"), render_MIME_VCard, 1, 201);
+       RegisterMimeRenderer(HKEY("text/vcard"), render_MIME_VCard, 1, 200);
+       RegisterMimeRenderer(HKEY("text/calendar"), render_MIME_ICS, 1, 501);
+       RegisterMimeRenderer(HKEY("application/ics"), render_MIME_ICS, 1, 500);
+       RegisterMimeRenderer(HKEY("text/x-citadel-variformat"), render_MAIL_variformat, 1, 2);
+       RegisterMimeRenderer(HKEY("text/plain"), render_MAIL_text_plain, 1, 3);
+       RegisterMimeRenderer(HKEY("text"), render_MAIL_text_plain, 1, 1);
+       RegisterMimeRenderer(HKEY("text/html"), render_MAIL_html, 1, 100);
+       RegisterMimeRenderer(HKEY(""), render_MAIL_UNKNOWN, 0, 0);
+       /* and finalize the anouncement to the server... */
+       CreateMimeStr();
 
        /* these headers are citserver replies to MSG4 and friends. one evaluator for each */
        RegisterMsgHdr(HKEY("nhdr"), examine_nhdr, 0);
index 9e12d1afbbe8710fbcd23db46c3910af59a3fda3..ddc94f9af91bc57f29be7da6fb17289590126c4b 100644 (file)
@@ -1,4 +1,4 @@
-/*
+  /*
  * $Id$
  */
 
@@ -8,6 +8,23 @@
 int is_uds = 0;
 char serv_sock_name[PATH_MAX] = "";
 
+HashList *EmbeddableMimes = NULL;
+StrBuf *EmbeddableMimeStrs = NULL;
+
+
+void SetInlinMimeRenderers(void)
+{
+       StrBuf *Buf;
+
+       Buf = NewStrBuf();
+       /** Tell the server what kind of richtext we prefer */
+       serv_putbuf(EmbeddableMimeStrs);
+       StrBuf_ServGetln(Buf);
+
+       FreeStrBuf(&Buf);
+}
+
+
 void DeleteServInfo(ServInfo **FreeMe)
 {
        if (*FreeMe == NULL)
@@ -48,10 +65,6 @@ ServInfo *get_serv_info(StrBuf *browser_host, StrBuf *user_agent)
        );
        StrBuf_ServGetln(Buf);
 
-       /** Tell the server what kind of richtext we prefer */
-       serv_puts("MSGP text/calendar|text/vnote|text/html|text/plain");//// TODO: register me...
-       StrBuf_ServGetln(Buf);
-
        /*
         * Tell the server that when we save a calendar event, we
         * want invitations to be generated by the Citadel server
@@ -206,6 +219,7 @@ int GetConnected (void)
                        end_webcit_session();
                        return 1;
                }
+               SetInlinMimeRenderers();
        }
        return 0;
 }
@@ -723,6 +737,52 @@ void tmplput_mesg(StrBuf *Target, WCTemplputParams *TP)
        FreeStrBuf(&Line);
 }
 
+
+void RegisterEmbeddableMimeType(const char *MimeType, long MTLen, int Priority)
+{
+       StrBuf *MT;
+       printf("%s - %ld\n", MimeType, Priority);
+       MT = NewStrBufPlain(MimeType, MTLen);
+       Put(EmbeddableMimes, IKEY(Priority), MT, HFreeStrBuf);
+}
+
+void CreateMimeStr(void)
+{
+       HashPos  *it;
+       void *vMime;
+       long len = 0;
+       const char *Key;
+
+       it = GetNewHashPos(EmbeddableMimes, 0);
+       while (GetNextHashPos(EmbeddableMimes, it, &len, &Key, &vMime) &&
+               (vMime != NULL)) {
+               printf("%s - \n", ChrPtr((StrBuf*) vMime));
+               if (StrLength(EmbeddableMimeStrs) > 0)
+                       StrBufAppendBufPlain(EmbeddableMimeStrs, HKEY("|"), 0);
+               else 
+                       StrBufAppendBufPlain(EmbeddableMimeStrs, HKEY("MSGP "), 0);
+               StrBufAppendBuf(EmbeddableMimeStrs, (StrBuf*) vMime, 0);
+       }
+       printf("------%ld-------------%s------%s------------\n", len, ChrPtr(EmbeddableMimeStrs), ChrPtr((StrBuf*) vMime));
+}
+
+void
+ServerStartModule_SERV_FUNC
+(void)
+{
+       EmbeddableMimes = NewHash(1, Flathash);
+       EmbeddableMimeStrs = NewStrBuf();
+}
+
+
+void
+ServerShutdownModule_SERV_FUNC
+(void)
+{
+       FreeStrBuf(&EmbeddableMimeStrs);
+       DeleteHash(&EmbeddableMimes);
+}
+
 void 
 InitModule_SERVFUNC
 (void)
index 3a003556117f71961649c7ce975ecfaea1a0605f..497a1555b26aa21a53d81b6546747d0105116f8e 100644 (file)
@@ -604,6 +604,7 @@ void display_aide_menu(void);
 void display_advanced_menu(void);
 void slrp_highest(void);
 ServInfo *get_serv_info(StrBuf *, StrBuf *);
+void RegisterEmbeddableMimeType(const char *MimeType, long MTLen, int Priority);
 int GetConnected(void);
 void DeleteServInfo(ServInfo **FreeMe);
 int uds_connectsock(char *);