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
@@ -101,24 +101,27 @@ static int pop3driver_cached_remove_message(mailsession * session,
101 101
102static int 102static int
103pop3driver_cached_get_messages_list(mailsession * session, 103pop3driver_cached_get_messages_list(mailsession * session,
104 struct mailmessage_list ** result); 104 struct mailmessage_list ** result);
105 105
106static int 106static 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
119 .sess_parameters = pop3driver_cached_parameters, 122 .sess_parameters = pop3driver_cached_parameters,
120 123
121 .sess_connect_stream = pop3driver_cached_connect_stream, 124 .sess_connect_stream = pop3driver_cached_connect_stream,
122 .sess_connect_path = NULL, 125 .sess_connect_path = NULL,
123 .sess_starttls = pop3driver_cached_starttls, 126 .sess_starttls = pop3driver_cached_starttls,
124 .sess_login = pop3driver_cached_login, 127 .sess_login = pop3driver_cached_login,
@@ -134,36 +137,37 @@ static mailsession_driver local_pop3_cached_session_driver = {
134 .sess_select_folder = NULL, 137 .sess_select_folder = NULL,
135 .sess_expunge_folder = pop3driver_cached_expunge_folder, 138 .sess_expunge_folder = pop3driver_cached_expunge_folder,
136 .sess_status_folder = pop3driver_cached_status_folder, 139 .sess_status_folder = pop3driver_cached_status_folder,
137 .sess_messages_number = pop3driver_cached_messages_number, 140 .sess_messages_number = pop3driver_cached_messages_number,
138 .sess_recent_number = pop3driver_cached_recent_number, 141 .sess_recent_number = pop3driver_cached_recent_number,
139 .sess_unseen_number = pop3driver_cached_unseen_number, 142 .sess_unseen_number = pop3driver_cached_unseen_number,
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"
164#define FLAGS_NAME "flags.db" 168#define FLAGS_NAME "flags.db"
165 169
166 170
167static inline struct pop3_cached_session_state_data * 171static inline struct pop3_cached_session_state_data *
168get_cached_data(mailsession * session) 172get_cached_data(mailsession * session)
169{ 173{
@@ -846,12 +850,50 @@ static int pop3driver_cached_get_message(mailsession * session,
846 return MAIL_ERROR_MEMORY; 850 return MAIL_ERROR_MEMORY;
847 851
848 r = mailmessage_init(msg_info, session, pop3_cached_message_driver, num, 0); 852 r = mailmessage_init(msg_info, session, pop3_cached_message_driver, num, 0);
849 if (r != MAIL_NO_ERROR) { 853 if (r != MAIL_NO_ERROR) {
850 mailmessage_free(msg_info); 854 mailmessage_free(msg_info);
851 return r; 855 return r;
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}