summaryrefslogtreecommitdiffabout
path: root/kmicromail/libetpan/generic/maildirdriver.c
authorzautrix <zautrix>2004-09-01 10:23:29 (UTC)
committer zautrix <zautrix>2004-09-01 10:23:29 (UTC)
commit6cefbdc9c8f3f3001373f10715361e2740c45395 (patch) (unidiff)
treecb2c36f57620e698913c27ca4ebe59e4a7c9d46e /kmicromail/libetpan/generic/maildirdriver.c
parentb9257cb225cd29bab5d96fcdaf557926603ee587 (diff)
downloadkdepimpi-6cefbdc9c8f3f3001373f10715361e2740c45395.zip
kdepimpi-6cefbdc9c8f3f3001373f10715361e2740c45395.tar.gz
kdepimpi-6cefbdc9c8f3f3001373f10715361e2740c45395.tar.bz2
Mail fixes and libetpan updated
Diffstat (limited to 'kmicromail/libetpan/generic/maildirdriver.c') (more/less context) (ignore whitespace changes)
-rw-r--r--kmicromail/libetpan/generic/maildirdriver.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/kmicromail/libetpan/generic/maildirdriver.c b/kmicromail/libetpan/generic/maildirdriver.c
index 7830ceb..5f21422 100644
--- a/kmicromail/libetpan/generic/maildirdriver.c
+++ b/kmicromail/libetpan/generic/maildirdriver.c
@@ -82,12 +82,15 @@ static int unseen_number(mailsession * session, char * mb,
82static int messages_number(mailsession * session, char * mb, 82static int messages_number(mailsession * session, char * mb,
83 uint32_t * result); 83 uint32_t * result);
84 84
85static int append_message(mailsession * session, 85static int append_message(mailsession * session,
86 char * message, size_t size); 86 char * message, size_t size);
87 87
88static int append_message_flags(mailsession * session,
89 char * message, size_t size, struct mail_flags * flags);
90
88static int get_messages_list(mailsession * session, 91static int get_messages_list(mailsession * session,
89 struct mailmessage_list ** result); 92 struct mailmessage_list ** result);
90 93
91static int get_envelopes_list(mailsession * session, 94static int get_envelopes_list(mailsession * session,
92 struct mailmessage_list * env_list); 95 struct mailmessage_list * env_list);
93 96
@@ -126,12 +129,13 @@ static mailsession_driver local_maildir_session_driver = {
126 .sess_list_folders = NULL, 129 .sess_list_folders = NULL,
127 .sess_lsub_folders = NULL, 130 .sess_lsub_folders = NULL,
128 .sess_subscribe_folder = NULL, 131 .sess_subscribe_folder = NULL,
129 .sess_unsubscribe_folder = NULL, 132 .sess_unsubscribe_folder = NULL,
130 133
131 .sess_append_message = append_message, 134 .sess_append_message = append_message,
135 .sess_append_message_flags = append_message_flags,
132 .sess_copy_message = NULL, 136 .sess_copy_message = NULL,
133 .sess_move_message = NULL, 137 .sess_move_message = NULL,
134 138
135 .sess_get_messages_list = get_messages_list, 139 .sess_get_messages_list = get_messages_list,
136 .sess_get_envelopes_list = get_envelopes_list, 140 .sess_get_envelopes_list = get_envelopes_list,
137 .sess_remove_message = NULL, 141 .sess_remove_message = NULL,
@@ -352,24 +356,71 @@ static int recent_number(mailsession * session, char * mb,
352 356
353/* messages operations */ 357/* messages operations */
354 358
355static int append_message(mailsession * session, 359static int append_message(mailsession * session,
356 char * message, size_t size) 360 char * message, size_t size)
357{ 361{
362#if 0
358 struct maildir * md; 363 struct maildir * md;
359 int r; 364 int r;
360 365
361 md = get_maildir_session(session); 366 md = get_maildir_session(session);
362 if (md == NULL) 367 if (md == NULL)
363 return MAIL_ERROR_BAD_STATE; 368 return MAIL_ERROR_BAD_STATE;
364 369
365 r = maildir_message_add(md, message, size); 370 r = maildir_message_add(md, message, size);
366 if (r != MAILDIR_NO_ERROR) 371 if (r != MAILDIR_NO_ERROR)
367 return maildirdriver_maildir_error_to_mail_error(r); 372 return maildirdriver_maildir_error_to_mail_error(r);
368 373
369 return MAIL_NO_ERROR; 374 return MAIL_NO_ERROR;
375#endif
376
377 return append_message_flags(session, message, size, NULL);
378}
379
380static int append_message_flags(mailsession * session,
381 char * message, size_t size, struct mail_flags * flags)
382{
383 struct maildir * md;
384 int r;
385 char uid[PATH_MAX];
386 struct maildir_msg * md_msg;
387 chashdatum key;
388 chashdatum value;
389 uint32_t md_flags;
390
391 md = get_maildir_session(session);
392 if (md == NULL)
393 return MAIL_ERROR_BAD_STATE;
394
395 r = maildir_message_add_uid(md, message, size,
396 uid, sizeof(uid));
397 if (r != MAILDIR_NO_ERROR)
398 return maildirdriver_maildir_error_to_mail_error(r);
399
400 if (flags == NULL)
401 goto exit;
402
403 key.data = uid;
404 key.len = strlen(uid);
405 r = chash_get(md->mdir_msg_hash, &key, &value);
406 if (r < 0)
407 goto exit;
408
409 md_msg = value.data;
410
411 md_flags = maildirdriver_flags_to_maildir_flags(flags->fl_flags);
412
413 r = maildir_message_change_flags(md, uid, md_flags);
414 if (r != MAILDIR_NO_ERROR)
415 goto exit;
416
417 return MAIL_NO_ERROR;
418
419 exit:
420 return MAIL_NO_ERROR;
370} 421}
371 422
372static int get_messages_list(mailsession * session, 423static int get_messages_list(mailsession * session,
373 struct mailmessage_list ** result) 424 struct mailmessage_list ** result)
374{ 425{
375 struct maildir * md; 426 struct maildir * md;