if (pop3_ok(sock, NULL) != PS_SUCCESS) return POP3_GETRANGE_LAST_SEND;
if (!state->uidl_table) new = TRUE;
- if (state->ac_prefs->rmmail || state->ac_prefs->getall)
+ if (state->ac_prefs->getall)
get_all = TRUE;
while (sock_gets(sock, buf, sizeof(buf)) >= 0) {
}
}
}
+
+ if(should_delete(buf, (Pop3State *)state))
+ state->uidl_todelete_list = g_slist_append
+ (state->uidl_todelete_list, g_strdup(buf));
+
}
state->uidl_is_valid = TRUE;
else
return POP3_LOGOUT_SEND;
}
+gboolean should_delete(char * uidl, gpointer data) {
+ Pop3State *state = (Pop3State *)data;
+ /* answer[0] will contain id
+ answer[0] will contain uidl */
+ gchar **answer;
+ GDate *curdate = g_date_new();
+ int id = 0;
+ g_date_set_time(curdate, time(NULL));
+ if( state->ac_prefs->rmmail && strchr(uidl,' ') ) {
+ /* remove \r\n */
+ uidl = g_strndup(uidl, strlen(uidl)-2);
+ answer = g_strsplit(uidl, " ", 2);
+ id = atoi(answer[0]);
+ if( g_hash_table_lookup(state->uidl_table, answer[1]) != NULL ) {
+ gchar *sdate = g_hash_table_lookup(state->uidl_table, answer[1]);
+ int tdate = atoi(sdate);
+ int keep_for = atoi(state->ac_prefs->leave_time);
+ int today = g_date_day_of_year(curdate);
+ int nb_days = 365;
+ if ( g_date_is_leap_year (g_date_year(curdate)) )
+ nb_days = 366;
+ return ( (tdate + keep_for)%nb_days <= today );
+ }
+ }
+ return FALSE;
+}
gint pop3_getsize_list_send(SockInfo *sock, gpointer data)
{
Pop3State *state = (Pop3State *)data;
const gchar *file;
gint ok, drop_ok;
-
+ int keep_for=atoi(g_strdup(state->ac_prefs->leave_time));
+
if ((ok = pop3_ok(sock, NULL)) == PS_SUCCESS) {
if (recv_write_to_file(sock, (file = get_tmp_file())) < 0) {
if (state->inc_state == INC_SUCCESS)
state->inc_state = INC_ERROR;
return -1;
}
-
+
state->cur_total_bytes += state->msg[state->cur_msg].size;
state->cur_total_num++;
- if (drop_ok == 0 && state->ac_prefs->rmmail)
+ if (drop_ok == 0 && state->ac_prefs->rmmail && keep_for == 0) {
return POP3_DELETE_SEND;
+ }
state->msg[state->cur_msg].received = TRUE;
gint pop3_logout_send(SockInfo *sock, gpointer data)
{
Pop3State *state = (Pop3State *)data;
-
+ while (state->uidl_todelete_list != NULL) {
+ gchar **parts;
+ gint ok;
+ parts=g_strsplit((gchar *)state->uidl_todelete_list->data," ",2);
+ state->uidl_todelete_list = g_slist_remove(
+ state->uidl_todelete_list, state->uidl_todelete_list->data);
+ pop3_gen_send(sock, "DELE %s",parts[0]);
+ if ((ok = pop3_ok(sock, NULL)) != PS_SUCCESS)
+ log_warning(_("error occurred on DELE\n"));
+ }
+
inc_progress_update(state, POP3_LOGOUT_SEND);
pop3_gen_send(sock, "QUIT");