]> code.citadel.org Git - citadel.git/blobdiff - webcit/messages.h
* split tasks view into its own file
[citadel.git] / webcit / messages.h
index e004bd051999932540ac9abffd682a4c2f1e1407..69f5e90aee77b065f0d977d76d2f24ebc4a44e34 100644 (file)
@@ -1,7 +1,7 @@
 
 extern HashList *MsgHeaderHandler;
 extern HashList *MimeRenderHandler;
-
+extern HashList *ReadLoopHandler;
 typedef struct wc_mime_attachment wc_mime_attachment;
 typedef void (*RenderMimeFunc)(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset);
 typedef struct _RenderMimeFuncStruct {
@@ -17,26 +17,23 @@ struct wc_mime_attachment {
        StrBuf *ContentType;
        StrBuf *Charset;
        StrBuf *Data;
-       size_t length;                     /* length of the mimeattachment */
+       size_t length;          /* length of the mimeattachment */
        long size_known;
-       long lvalue;               /* if we put a long... */
-       long msgnum;            /**< the message number on the citadel server derived from message_summary */
+       long lvalue;            /* if we put a long... */
+       long msgnum;            /* the message number on the citadel server derived from message_summary */
        const RenderMimeFuncStruct *Renderer;
 };
 void DestroyMime(void *vMime);
 
 
-/*
- * \brief message summary structure. ???
- */
 typedef struct _message_summary {
-       time_t date;        /**< its creation date */
-       long msgnum;            /**< the message number on the citadel server */
+       time_t date;            /* its creation date */
+       long msgnum;            /* the message number on the citadel server */
        int nhdr;
        int format_type;
-       StrBuf *from;           /**< the author */
-       StrBuf *to;             /**< the recipient */
-       StrBuf *subj;           /**< the title / subject */
+       StrBuf *from;           /* the author */
+       StrBuf *to;             /* the recipient */
+       StrBuf *subj;           /* the title / subject */
        StrBuf *reply_inreplyto;
        StrBuf *reply_references;
        StrBuf *reply_to;
@@ -48,17 +45,17 @@ typedef struct _message_summary {
        StrBuf *OtherNode;
        const StrBuf *PartNum;
 
-       HashList *Attachments;  /**< list of Attachments */
+       HashList *Attachments;  /* list of attachments */
        HashList *Submessages;
        HashList *AttachLinks;
 
        HashList *AllAttach;
 
-       int is_new;         /**< is it yet read? */
-       int hasattachments;     /* does it have attachments? */
+       int is_new;
+       int hasattachments;
 
 
-       /** The mime part of the message */
+       /* The mime part of the message */
        wc_mime_attachment *MsgBody;
 } message_summary;
 void DestroyMessageSummary(void *vMsg);
@@ -96,4 +93,104 @@ int load_message(message_summary *Msg,
                 StrBuf **Error);
 
 
-int load_msg_ptrs(const char *servcmd, int with_headers);
+
+
+typedef struct _SharedMessageStatus{
+       long load_seen;        /** should read information be loaded */
+       long sortit;           /** should we sort it using the standard sort API? */
+       long defaultsortorder; /** if we should sort it, which direction should be the default? */
+
+       long maxload;          /** how many headers should we accept from the server? defaults to 10k */
+       long maxmsgs;          /** how many message bodies do you want to load at most?*/
+       long reverse;          /** should the load-range be reversed? */
+
+       long startmsg;         /** which is the start message ????? */
+       long nummsgs;          /** How many messages are available to your view? */
+       long num_displayed;    /** counted up for LoadMsgFromServer */ /* TODO: unclear who should access this and why */
+
+       long lowest_found;     /** smallest Message ID found;  */
+       long highest_found;    /** highest Message ID found;  */
+
+}SharedMessageStatus;
+
+int load_msg_ptrs(const char *servcmd, SharedMessageStatus *Stat);
+
+typedef int (*GetParamsGetServerCall_func)(SharedMessageStatus *Stat, 
+                                          void **ViewSpecific, 
+                                          long oper, 
+                                          char *cmd, 
+                                          long len);
+
+typedef int (*PrintViewHeader_func)(SharedMessageStatus *Stat, void **ViewSpecific);
+
+typedef int (*LoadMsgFromServer_func)(SharedMessageStatus *Stat, 
+                                     void **ViewSpecific, 
+                                     message_summary* Msg, 
+                                     int is_new, 
+                                     int i);
+
+typedef int (*RenderView_or_Tail_func)(SharedMessageStatus *Stat, 
+                                      void **ViewSpecific, 
+                                      long oper);
+typedef int (*View_Cleanup_func)(void **ViewSpecific);
+
+void RegisterReadLoopHandlerset(
+       /**
+        * RoomType: which View definition are you going to be called for
+        */
+       int RoomType,
+
+       /**
+        * GetParamsGetServerCall should do the following:
+        *  * allocate your private context structure
+        *  * evaluate your commandline arguments, put results to your private struct.
+        *  * fill cmd with the command to load the message pointer list:
+        *    * might depend on bstr/oper depending on your needs
+        *    * might stay empty if no list should loaded and LoadMsgFromServer 
+        *      is skipped.
+        *  * influence the behaviour by presetting values on SharedMessageStatus
+        */
+       GetParamsGetServerCall_func GetParamsGetServerCall,
+
+       /**
+        * PrintViewHeader is here to print informations infront of your messages.
+        * The message list is already loaded & sorted (if) so you can evaluate 
+        * its result on the SharedMessageStatus struct.
+        */
+       PrintViewHeader_func PrintViewHeader,
+
+       /**
+        * LoadMsgFromServer is called for every message in the message list:
+        *  * which is 
+        *    * after 'startmsg'  
+        *    * up to 'maxmsgs' after your 'startmsg'
+        *  * it should load and parse messages from citserer.
+        *  * depending on your needs you might want to print your message here...
+        *  * if cmd was empty, its skipped alltogether.
+        */
+       LoadMsgFromServer_func LoadMsgFromServer,
+
+       /**
+        * RenderView_or_Tail is called last; 
+        *  * if you used PrintViewHeader to print messages, you might want to print 
+        *    trailing information here
+        *  * if you just pre-loaded your messages, put your render code here.
+        */
+       RenderView_or_Tail_func RenderView_or_Tail,
+
+       /**
+        * ViewCleanup should just clear your private data so all your mem can go back to 
+        * VALgrindHALLA.
+        * it also should release the content for delivery via end_burst() or wDumpContent(1);
+        */
+       View_Cleanup_func ViewCleanup
+       );
+/*
+GetParamsGetServerCall
+
+PrintViewHeader
+
+LoadMsgFromServer
+
+RenderView_or_Tail
+*/