aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--ChangeLog.ja5
-rw-r--r--libsylph/pop.c9
-rw-r--r--libsylph/pop.h1
4 files changed, 18 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 22b1ad8a..e1cf0459 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2005-12-26
+ * libsylph/pop.[ch]: prevent duplicate retrieval after incomplete
+ session.
+
+2005-12-26
+
* src/compose.c
src/messageview.c
src/prefs_common_dialog.c
diff --git a/ChangeLog.ja b/ChangeLog.ja
index 3b459b3c..341896d6 100644
--- a/ChangeLog.ja
+++ b/ChangeLog.ja
@@ -1,5 +1,10 @@
2005-12-26
+ * libsylph/pop.[ch]: セッションが完了しなかった後重複して受信するのを
+ 回避するようにした。
+
+2005-12-26
+
* src/compose.c
src/messageview.c
src/prefs_common_dialog.c
diff --git a/libsylph/pop.c b/libsylph/pop.c
index b61eb377..f0344957 100644
--- a/libsylph/pop.c
+++ b/libsylph/pop.c
@@ -374,6 +374,7 @@ static gint pop3_delete_send(Pop3Session *session)
static gint pop3_delete_recv(Pop3Session *session)
{
+ session->msg[session->cur_msg].recv_time = RECV_TIME_DELETE;
session->msg[session->cur_msg].deleted = TRUE;
return PS_SUCCESS;
}
@@ -518,8 +519,11 @@ gint pop3_write_uidl_list(Pop3Session *session)
for (n = 1; n <= session->count; n++) {
msg = &session->msg[n];
- if (msg->uidl && msg->received && !msg->deleted)
- fprintf(fp, "%s\t%ld\n", msg->uidl, msg->recv_time);
+ if (!msg->uidl || !msg->received)
+ continue;
+ if (session->state == POP3_DONE && msg->deleted)
+ continue;
+ fprintf(fp, "%s\t%ld\n", msg->uidl, msg->recv_time);
}
if (fclose(fp) == EOF) FILE_OP_ERROR(path, "fclose");
@@ -791,6 +795,7 @@ static gint pop3_session_recv_msg(Session *session, const gchar *msg)
}
break;
case POP3_LOGOUT:
+ pop3_session->state = POP3_DONE;
session_disconnect(session);
break;
case POP3_ERROR:
diff --git a/libsylph/pop.h b/libsylph/pop.h
index da0f80b7..0ca59e66 100644
--- a/libsylph/pop.h
+++ b/libsylph/pop.h
@@ -52,6 +52,7 @@ typedef enum {
POP3_RETR_RECV,
POP3_DELETE,
POP3_LOGOUT,
+ POP3_DONE,
POP3_ERROR,
N_POP3_STATE