summaryrefslogtreecommitdiffabout
path: root/kmicromail/libetpan/generic/pop3driver_cached.c
Unidiff
Diffstat (limited to 'kmicromail/libetpan/generic/pop3driver_cached.c') (more/less context) (ignore whitespace changes)
-rw-r--r--kmicromail/libetpan/generic/pop3driver_cached.c44
1 files changed, 43 insertions, 1 deletions
diff --git a/kmicromail/libetpan/generic/pop3driver_cached.c b/kmicromail/libetpan/generic/pop3driver_cached.c
index 6f97303..24f624b 100644
--- a/kmicromail/libetpan/generic/pop3driver_cached.c
+++ b/kmicromail/libetpan/generic/pop3driver_cached.c
@@ -110,6 +110,9 @@ pop3driver_cached_get_envelopes_list(mailsession * session,
110static int pop3driver_cached_get_message(mailsession * session, 110static int pop3driver_cached_get_message(mailsession * session,
111 uint32_t num, mailmessage ** result); 111 uint32_t num, mailmessage ** result);
112 112
113static int pop3driver_cached_get_message_by_uid(mailsession * session,
114 const char * uid, mailmessage ** result);
115
113static mailsession_driver local_pop3_cached_session_driver = { 116static mailsession_driver local_pop3_cached_session_driver = {
114 .sess_name = "pop3-cached", 117 .sess_name = "pop3-cached",
115 118
@@ -143,6 +146,7 @@ static mailsession_driver local_pop3_cached_session_driver = {
143 .sess_unsubscribe_folder = NULL, 146 .sess_unsubscribe_folder = NULL,
144 147
145 .sess_append_message = NULL, 148 .sess_append_message = NULL,
149 .sess_append_message_flags = NULL,
146 .sess_copy_message = NULL, 150 .sess_copy_message = NULL,
147 .sess_move_message = NULL, 151 .sess_move_message = NULL,
148 152
@@ -154,7 +158,7 @@ static mailsession_driver local_pop3_cached_session_driver = {
154#endif 158#endif
155 159
156 .sess_get_message = pop3driver_cached_get_message, 160 .sess_get_message = pop3driver_cached_get_message,
157 .sess_get_message_by_uid = NULL, 161 .sess_get_message_by_uid = pop3driver_cached_get_message_by_uid,
158}; 162};
159 163
160mailsession_driver * pop3_cached_session_driver = 164mailsession_driver * pop3_cached_session_driver =
@@ -855,3 +859,41 @@ static int pop3driver_cached_get_message(mailsession * session,
855 859
856 return MAIL_NO_ERROR; 860 return MAIL_NO_ERROR;
857} 861}
862
863static int pop3driver_cached_get_message_by_uid(mailsession * session,
864 const char * uid, mailmessage ** result)
865{
866 mailpop3 * pop3;
867 struct mailpop3_msg_info * msg_info;
868 int found;
869 unsigned int i;
870
871 if (uid == NULL)
872 return MAIL_ERROR_INVAL;
873
874 pop3 = get_pop3_session(session);
875
876 found = 0;
877
878 /* iterate all messages and look for uid */
879 for(i = 0 ; i < carray_count(pop3->pop3_msg_tab) ; i++) {
880 msg_info = carray_get(pop3->pop3_msg_tab, i);
881
882 if (msg_info == NULL)
883 continue;
884
885 if (msg_info->msg_deleted)
886 continue;
887
888 /* uid found, stop looking */
889 if (strcmp(msg_info->msg_uidl, uid) == 0) {
890 found = 1;
891 break;
892 }
893 }
894
895 if (!found)
896 return MAIL_ERROR_MSG_NOT_FOUND;
897
898 return pop3driver_cached_get_message(session, msg_info->msg_index, result);
899}