Diffstat (limited to 'kmicromail/libetpan/generic/pop3driver_cached.c') (more/less context) (ignore whitespace changes)
-rw-r--r-- | kmicromail/libetpan/generic/pop3driver_cached.c | 44 |
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 | |||
107 | pop3driver_cached_get_envelopes_list(mailsession * session, | 107 | pop3driver_cached_get_envelopes_list(mailsession * session, |
108 | struct mailmessage_list * env_list); | 108 | struct mailmessage_list * env_list); |
109 | 109 | ||
110 | static int pop3driver_cached_get_message(mailsession * session, | 110 | static int pop3driver_cached_get_message(mailsession * session, |
111 | uint32_t num, mailmessage ** result); | 111 | uint32_t num, mailmessage ** result); |
112 | 112 | ||
113 | static int pop3driver_cached_get_message_by_uid(mailsession * session, | ||
114 | const char * uid, mailmessage ** result); | ||
115 | |||
113 | static mailsession_driver local_pop3_cached_session_driver = { | 116 | static 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 | ||
160 | mailsession_driver * pop3_cached_session_driver = | 164 | mailsession_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 | |||
863 | static 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 | } | ||