On 9/28/07, Julien Kerihuel <[EMAIL PROTECTED]> wrote:
>
> On Fri, 2007-09-28 at 15:46 +0200, Andrew Gaylard wrote:
> > Quick question: is there a way to get openchangeclient to delete
> > the contents of the "sent items" folder?  Or should I write it myself?
>
> openchangeclient only supports mail deletion within "Inbox" for
> convenience -- maybe laziness --. However, I could easily copy the
> --folder option from openchangepfadmin to openchangeclient.


No problem.  I've just finished adding the code myself.
Patch follows.

This would fit for your purposes, but I'd rather prefer to improve the

> whole function first and provides a way to open folders which are more
> than 1 level from the top directory. For example "/Inbox/Holidays/2008"
> rather than only "/Inbox" as we are currently doing.


Yes, that would be a much better way of doing it.  But for now,
I can live with what this code provides.

Andrew.

Index: utils/openchangeclient.c
===================================================================
--- utils/openchangeclient.c    (revision 266)
+++ utils/openchangeclient.c    (working copy)
@@ -117,6 +117,36 @@
        return MAPI_E_NOT_FOUND;
 }

+static uint32_t default_folder_to_number(const char *f)
+{
+       uint32_t f_no;
+       f_no = 0;
+
+       if (!f) { return f_no; }
+
+            if (!strcasecmp(f, "TopInformationStore")) { f_no =
olFolderTopInformationStore    ;}
+       else if (!strcasecmp(f, "DeletedItems"       )) { f_no =
olFolderDeletedItems           ;}
+       else if (!strcasecmp(f, "Outbox"             )) { f_no =
olFolderOutbox                 ;}
+       else if (!strcasecmp(f, "SentMail"           )) { f_no =
olFolderSentMail               ;}
+       else if (!strcasecmp(f, "Inbox"              )) { f_no =
olFolderInbox                  ;}
+       else if (!strcasecmp(f, "Calendar"           )) { f_no =
olFolderCalendar               ;}
+       else if (!strcasecmp(f, "Contacts"           )) { f_no =
olFolderContacts               ;}
+       else if (!strcasecmp(f, "Journal"            )) { f_no =
olFolderJournal                ;}
+       else if (!strcasecmp(f, "Notes"              )) { f_no =
olFolderNotes                  ;}
+       else if (!strcasecmp(f, "Tasks"              )) { f_no =
olFolderTasks                  ;}
+       else if (!strcasecmp(f, "Drafts"             )) { f_no =
olFolderDrafts                 ;}
+       else if (!strcasecmp(f, "AllPublicFolders"   )) { f_no =
olPublicFoldersAllPublicFolders;}
+       else if (!strcasecmp(f, "Conflicts"          )) { f_no =
olFolderConflicts              ;}
+       else if (!strcasecmp(f, "SyncIssues"         )) { f_no =
olFolderSyncIssues             ;}
+       else if (!strcasecmp(f, "LocalFailures"      )) { f_no =
olFolderLocalFailures          ;}
+       else if (!strcasecmp(f, "ServerFailures"     )) { f_no =
olFolderServerFailures         ;}
+       else if (!strcasecmp(f, "Junk"               )) { f_no =
olFolderJunk                   ;}
+       else if (!strcasecmp(f, "PublicRoot"         )) { f_no =
olFolderPublicRoot             ;}
+       else if (!strcasecmp(f, "PublicIPMSubtree"   )) { f_no =
olFolderPublicIPMSubtree       ;}
+
+       return f_no;
+}
+
 static enum MAPISTATUS openchangeclient_getpfdir(TALLOC_CTX *mem_ctx,
                                                 mapi_object_t *obj_store,
                                                 mapi_object_t *obj_child,
@@ -812,7 +842,7 @@
 }

 /**
- * delete a mail from user INBOX
+ * delete a mail from user INBOX or specified folder
  */
 static bool openchangeclient_deletemail(TALLOC_CTX *mem_ctx,
                                        mapi_object_t *obj_store,
@@ -821,11 +851,12 @@
        enum MAPISTATUS         retval;
        struct SPropTagArray    *SPropTagArray;
        struct SRowSet          SRowSet;
-       mapi_id_t               id_inbox;
+       mapi_id_t               id_folder;
        mapi_id_t               *id_messages;
+       uint32_t                folder_no;
        uint32_t                count_messages;
        uint32_t                count_rows;
-       mapi_object_t           obj_inbox;
+       mapi_object_t           obj_folder;
        mapi_object_t           obj_table;
        uint32_t                len;
        uint32_t                i;
@@ -835,21 +866,28 @@
                MAPI_RETVAL_IF(!oclient->subject, MAPI_E_INVALID_PARAMETER,
NULL);
        }

-       mapi_object_init(&obj_inbox);
+       mapi_object_init(&obj_folder);
        mapi_object_init(&obj_table);

        if (oclient->pf == true) {
-               retval = openchangeclient_getpfdir(mem_ctx, obj_store,
&obj_inbox, oclient->folder);
+               retval = openchangeclient_getpfdir(mem_ctx, obj_store,
&obj_folder, oclient->folder);
                if (retval != MAPI_E_SUCCESS) return retval;
        } else {
-               retval = GetReceiveFolder(obj_store, &id_inbox);
+               if (oclient->folder) {
+                       folder_no =
default_folder_to_number(oclient->folder);
+                       if (folder_no == 0) return false;
+               } else {
+                       folder_no = olFolderInbox;
+               }
+
+               retval = GetDefaultFolder(obj_store, &id_folder, folder_no);
                if (retval != MAPI_E_SUCCESS) return false;

-               retval = OpenFolder(obj_store, id_inbox, &obj_inbox);
+               retval = OpenFolder(obj_store, id_folder, &obj_folder);
                if (retval != MAPI_E_SUCCESS) return false;
        }

-       retval = GetContentsTable(&obj_inbox, &obj_table);
+       retval = GetContentsTable(&obj_folder, &obj_table);
        if (retval != MAPI_E_SUCCESS) return false;

        SPropTagArray = set_SPropTagArray(mem_ctx, 0x5,
@@ -876,13 +914,13 @@
                        }
                }
                if (count_messages) {
-                       retval = DeleteMessage(&obj_inbox, id_messages,
count_messages);
+                       retval = DeleteMessage(&obj_folder, id_messages,
count_messages);
                        if (retval != MAPI_E_SUCCESS) return false;
                }
        }

        mapi_object_release(&obj_table);
-       mapi_object_release(&obj_inbox);
+       mapi_object_release(&obj_folder);

        return true;
 }
Index: doc/man/man1/openchangeclient.1
===================================================================
--- doc/man/man1/openchangeclient.1     (revision 266)
+++ doc/man/man1/openchangeclient.1     (working copy)
@@ -32,7 +32,7 @@

 .SH SYNOPSIS
 .nf
-openchangeclient [-?] [-?|--help] [--usage] [-f|--database STRING]
+openchangeclient [-?|--help] [--usage] [-f|--database STRING]
         [-p|--profile STRING] [-S|--sendmail] [-F|--fetchmail]
         [-G|--storemail STRING] [-D|--deletemail] [-A|--attachments STRING]
         [-I|--html-inline STRING] [-W|--html-file STRING] [-t|--to STRING]
@@ -42,6 +42,7 @@
         [--location STRING] [--dtstart STRING] [--dtend STRING]
         [--busystatus STRING] [--taskstatus STRING] [--email STRING]
         [--fullname STRING] [--cardname STRING] [--debuglevel STRING]
+       [--folder STRING]
        [--dump-data]
 .fi

@@ -197,13 +198,19 @@
 .B --sendmail

 .TP
+.B --folder=STRING
+Specify the folder to use.  For --deletemail, the options are:
+TopInformationStore, DeletedItems, Outbox, SentMail, Inbox, Calendar,
Contacts,
+Journal, Notes, Tasks, Drafts, AllPublicFolders.
+
+.TP
 .B --location=STRING
 Specify the appointment location. This is only meaningful with
 .B --sendappointment

 .TP
 .B --dtstart=STRING
-Specify the start date of an event. The following dat format need to be
used:
+Specify the start date of an event. The following date format need to be
used:
 .B "%Y-%m-%d %H:%M:%S"
 e.g: 2007-06-01 14:59:00. This is only meaningful with
 .B --sendappointment
@@ -212,7 +219,7 @@

 .TP
 .B --dtend=STRING
-Specify either the end date or due date of an event. The following dat
+Specify either the end date or due date of an event. The following date
 format need to be used:
 .B "%Y-%m-%d %H:%M:%S"
 e.g: 2007-06-01 14:59:00
_______________________________________________
devel mailing list
[email protected]
http://mailman.openchange.org/listinfo/devel

Reply via email to