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
@@ -107,12 +107,15 @@ static int
107pop3driver_cached_get_envelopes_list(mailsession * session, 107pop3driver_cached_get_envelopes_list(mailsession * session,
108 struct mailmessage_list * env_list); 108 struct mailmessage_list * env_list);
109 109
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
116 .sess_initialize = pop3driver_cached_initialize, 119 .sess_initialize = pop3driver_cached_initialize,
117 .sess_uninitialize = pop3driver_cached_uninitialize, 120 .sess_uninitialize = pop3driver_cached_uninitialize,
118 121
@@ -140,24 +143,25 @@ static mailsession_driver local_pop3_cached_session_driver = {
140 .sess_list_folders = NULL, 143 .sess_list_folders = NULL,
141 .sess_lsub_folders = NULL, 144 .sess_lsub_folders = NULL,
142 .sess_subscribe_folder = NULL, 145 .sess_subscribe_folder = NULL,
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
149 .sess_get_messages_list = pop3driver_cached_get_messages_list, 153 .sess_get_messages_list = pop3driver_cached_get_messages_list,
150 .sess_get_envelopes_list = pop3driver_cached_get_envelopes_list, 154 .sess_get_envelopes_list = pop3driver_cached_get_envelopes_list,
151 .sess_remove_message = pop3driver_cached_remove_message, 155 .sess_remove_message = pop3driver_cached_remove_message,
152#if 0 156#if 0
153 .sess_search_messages = maildriver_generic_search_messages, 157 .sess_search_messages = maildriver_generic_search_messages,
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 =
161&local_pop3_cached_session_driver; 165&local_pop3_cached_session_driver;
162 166
163#define ENV_NAME "env.db" 167#define ENV_NAME "env.db"
@@ -852,6 +856,44 @@ static int pop3driver_cached_get_message(mailsession * session,
852 } 856 }
853 857
854 * result = msg_info; 858 * result = msg_info;
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}