Sophie

Sophie

distrib > Mandriva > cooker > x86_64 > by-pkgid > faed6dc8f28cec1d27210717f2b419fd > files > 201

lib64etpan-devel-1.1-3.x86_64.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Folder</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="libEtPan! API"
HREF="book1.htm"><LINK
REL="UP"
TITLE="Storages, folders, messages"
HREF="c2988.htm"><LINK
REL="PREVIOUS"
TITLE="Storage"
HREF="x3015.htm"><LINK
REL="NEXT"
TITLE="Message"
HREF="x3198.htm"></HEAD
><BODY
CLASS="SECT1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>libEtPan! API</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="x3015.htm"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
>Chapter 5. Storages, folders, messages</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="x3198.htm"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="AEN3082"
>Folder</A
></H1
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILFOLDER-DRIVER"
>Folder driver</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

typedef struct mailfolder_driver mailfolder_driver;

struct mailfolder_driver {
  int (* fld_get_session)(struct mailfolder * folder,
    mailsession ** result);

  int (* fld_noop)(struct mailfolder * folder);

  int (* fld_check)(struct mailfolder * folder);

  int (* fld_expunge)(struct mailfolder * folder);

  int (* fld_status)(struct mailfolder * folder,
    uint32_t * result_messages, uint32_t * result_recent,
    uint32_t * result_unseen);

  int (* fld_append_message)(struct mailfolder * folder,
    char * message, size_t size);

  int (* fld_get_messages_list)(struct mailfolder * folder,
    struct mailmessage_list ** result);

  int (* fld_get_envelopes_list)(struct mailfolder * folder,
    struct mailmessage_list * result);

  int (* fld_get_message)(struct mailfolder * folder,
    uint32_t num, mailmessage ** result);

  int (* fld_get_message_by_uid)(struct mailfolder * folder,
    const char * uid, mailmessage ** result);
}
        </PRE
><P
>          XXX - this will be implemented in the future.
        </P
><P
></P
><UL
><LI
><P
>              <B
CLASS="COMMAND"
>fld_get_session()</B
> will return the session
              this folder should use.
              </P
></LI
><LI
><P
>              For other method, you should see <A
HREF="x3472.htm#MAILSESSION-DRIVER"
>the Section called <I
>Session driver</I
></A
>.
            </P
></LI
></UL
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN3095"
>Folder</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailfolder {
  char * fld_pathname;
  char * fld_virtual_name;
  
  struct mailstorage * fld_storage;

  mailsession * fld_session;
  int fld_shared_session;
  clistiter * fld_pos;

  struct mailfolder * fld_parent;
  unsigned int fld_sibling_index;
  carray * fld_children; /* array of (struct mailfolder *) */

  void * fld_user_data;
};
        </PRE
><P
></P
><UL
><LI
><P
>              <B
CLASS="COMMAND"
>fld_pathname</B
> is the pathname specific to
              the driver.
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_virtual_name</B
> is the identifier of
              this folder. This can be <B
CLASS="COMMAND"
>NULL</B
>.
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_storage</B
> is the storage used for this
              folder (see <A
HREF="x3015.htm#MAILSTORAGE"
>the Section called <I
>Storage</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_session</B
> is the session used for this
              folder.
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_shared_session</B
> is set to 1 if the
              folder use the same session as the storage. This is used
              internally.
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_pos</B
> is the 
              position in the list of folders of the storage.
              This is used internally.
            </P
></LI
><LI
><P
>              use of <B
CLASS="COMMAND"
>fld_parent</B
>,
              <B
CLASS="COMMAND"
>fld_sibling_index</B
> and
              <B
CLASS="COMMAND"
>fld_children</B
> is deprecated.
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_user_data</B
> is a field for free
              use. The user can store any data in that field.
            </P
></LI
></UL
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILFOLDER-NEW"
>mailfolder_new and mail_folder_free</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailfolder * mailfolder_new(struct mailstorage * fld_storage,
    char * fld_pathname, char * fld_virtual_name);

void mailfolder_free(struct mailfolder * folder);
        </PRE
><P
>          <B
CLASS="COMMAND"
>mailfolder_new()</B
> initializes a folder
          structure with an identifier
          (<B
CLASS="COMMAND"
>fld_virtual_name</B
>) with path name
          (<B
CLASS="COMMAND"
>fld_pathname</B
>). The folder will be owned
          by the given storage (<B
CLASS="COMMAND"
>fld_storage</B
>).
        </P
><P
>          <B
CLASS="COMMAND"
>mailfolder_free()</B
> free the memory used
          by the folder.
        </P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILFOLDER-CONNECT"
>mailfolder_connect and mailfolder_disconnect</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int mailfolder_connect(struct mailfolder * folder);

void mailfolder_disconnect(struct mailfolder * folder);
        </PRE
><P
>          <B
CLASS="COMMAND"
>mailfolder_connect()</B
> connects the folder.
          This function can also be used to confirm that a folder
          connection is valid when the folder is already connected.
          When doing operations with several folders, you have to be
          sure that this function has been called before making calls
          on folder.
        </P
><P
>          <B
CLASS="COMMAND"
>mailfolder_disconnect()</B
> disconnects the 
          folder.
        </P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILFOLDER-NOOP"
>mailfolder_noop</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int mailfolder_noop(struct mailfolder * folder);
        </PRE
><P
>          This function will only send noop to the mail access.
        </P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILFOLDER-CHECK"
>mailfolder_check</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int mailfolder_check(struct mailfolder * folder);
        </PRE
><P
>          A call to this function will save to disk the internal state
          of the selected mailbox (such as flags).
        </P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILFOLDER-EXPUNGE"
>mailfolder_expunge</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int mailfolder_expunge(struct mailfolder * folder);
        </PRE
><P
>          A call to this function will delete all messages marked for
          deletion.
        </P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILFOLDER-STATUS"
>mailfolder_status</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>int mailfolder_status(struct mailfolder * folder,
    uint32_t * result_messages, uint32_t * result_recent,
    uint32_t * result_unseen);
        </PRE
><P
>          A call to this function will return some counts of messages
          in the mailbox.
        </P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILFOLDER-APPEND-MESSAGE"
>mailfolder_append_message</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>int mailfolder_append_message(struct mailfolder * folder,
    char * message, size_t size);
        </PRE
><P
>          This function will store a new message in the given folder.
          The message is given by a string in memory
          (<B
CLASS="COMMAND"
>message</B
>) and a size
          (<B
CLASS="COMMAND"
>size</B
>).
        </P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILFOLDER-GET-MESSAGES-LIST"
>mailfolder_get_messages_list</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>int mailfolder_get_messages_list(struct mailfolder * folder,
    struct mailmessage_list ** result);
        </PRE
><P
>          This function will return the list of messages in the given
          folder (see <A
HREF="x3198.htm#MAILMESSAGE-LIST"
>the Section called <I
>Message list</I
></A
>).
        </P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILFOLDER-GET-ENVELOPES-LIST"
>mailfolder_get_envelopes_list</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>int mailfolder_get_envelopes_list(struct mailfolder * folder,
    struct mailmessage_list * result);
        </PRE
><P
>          This function will fill the list of parsed header fields
          structure in the <B
CLASS="COMMAND"
>mailmessage</B
> structures
          of the given list of messages (<B
CLASS="COMMAND"
>result</B
>).
        </P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILFOLDER-GET-MESSAGE"
>mailfolder_get_message</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>int mailfolder_get_message(struct mailfolder * folder,
    uint32_t num, mailmessage ** result);
        </PRE
><P
>          This function will return the message identified by a
          message index (<B
CLASS="COMMAND"
>num</B
>)
          This will return a <B
CLASS="COMMAND"
>mailmessage</B
> structure
          in <B
CLASS="COMMAND"
>(* result)</B
> (see <A
HREF="x3198.htm#MAILMESSAGE"
>the Section called <I
>Message</I
></A
>).
        </P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILFOLDER-GET-MESSAGE-BY-UID"
>mailfolder_get_message_by_uid</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>int mailfolder_get_message_by_uid(struct mailfolder * folder,
    const char * uid, mailmessage ** result);
        </PRE
><P
>          This function will return the message identified by a
          unique identifier (<B
CLASS="COMMAND"
>uid</B
>)
          This will return a <B
CLASS="COMMAND"
>mailmessage</B
> structure
          in <B
CLASS="COMMAND"
>(* result)</B
> (see <A
HREF="x3198.htm#MAILMESSAGE"
>the Section called <I
>Message</I
></A
>).
        </P
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="AEN3193"
>Example</A
></H2
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN3195"
></A
><P
><B
>Example 5-2. use of folder</B
></P
><PRE
CLASS="PROGRAMLISTING"
>int main(void)
{
  struct mailstorage * storage;
  int r;

  storage = mailstorage_new(NULL);
  
  imap_mailstorage_init(storage, "imap.my-servers.org", 0,
    NULL, CONNECTION_TYPE_TRY_STARTTLS, IMAP_AUTH_TYPE_PLAIN,
    "my-login", "my-password", 1, "/home/login/.libetpan/cache");

  r = mailstorage_connect(storage);
  if (r == MAIL_NO_ERROR) {
    struct mailfolder * folder;

    folder = mailfolder_new(storage, "INBOX", NULL);
    
    r = mailfolder_connect(folder);
    if (r == MAIL_NO_ERROR) {
      struct mailmessage_list * msg_list;
      
      mailfolder_get_messages_list(folder, &amp;msg_list);
      
      /* do the things */
      
      mailmessage_list_free(msg_list);
      
      mailfolder_disconnect(folder);
    }
    
    mailstorage_disconnect(storage);
  }
  
  mailstorage_free(storage);
}
          </PRE
></DIV
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="x3015.htm"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="book1.htm"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="x3198.htm"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Storage</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="c2988.htm"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Message</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>