79
79
if (strlen ((gchar *) line) > 1024)
81
if (sscanf((gchar *) line, "%u %s", &id, uid) == 2) {
81
if (sscanf ((gchar *) line, "%u %s", &id, uid) == 2) {
82
82
fi = g_hash_table_lookup (folder->uids_id, GINT_TO_POINTER (id));
84
84
camel_operation_progress (NULL, (fi->index + 1) * 100 / folder->uids->len);
85
85
fi->uid = g_strdup (uid);
86
86
g_hash_table_insert (folder->uids_fi, fi->uid, fi);
88
g_warning("ID %u (uid: %s) not in previous LIST output", id, uid);
88
g_warning ("ID %u (uid: %s) not in previous LIST output", id, uid);
122
122
case CAMEL_MIME_PARSER_STATE_MULTIPART:
123
123
h = camel_mime_parser_headers_raw (mp);
125
if (g_ascii_strcasecmp(h->name, "status") != 0
126
&& g_ascii_strcasecmp(h->name, "x-status") != 0) {
125
if (g_ascii_strcasecmp (h->name, "status") != 0
126
&& g_ascii_strcasecmp (h->name, "x-status") != 0) {
127
127
g_checksum_update (checksum, (guchar *) h->name, -1);
128
128
g_checksum_update (checksum, (guchar *) h->value, -1);
164
164
pop3_store = CAMEL_POP3_STORE (parent_store);
165
165
pop3_folder = (CamelPOP3Folder *) folder;
166
166
service = (CamelService *) parent_store;
167
settings = camel_service_get_settings (service);
169
batch_fetch_count = camel_pop3_settings_get_batch_fetch_count (CAMEL_POP3_SETTINGS (settings));
168
settings = camel_service_ref_settings (service);
170
batch_fetch_count = camel_pop3_settings_get_batch_fetch_count (
171
CAMEL_POP3_SETTINGS (settings));
173
g_object_unref (settings);
172
176
ret = camel_pop3_stream_line (stream, &line, &len, cancellable, NULL);
174
if (sscanf((gchar *) line, "%u %u", &id, &size) == 2) {
178
if (sscanf ((gchar *) line, "%u %u", &id, &size) == 2) {
175
179
fi = g_malloc0 (sizeof (*fi));
178
182
fi->index = ((CamelPOP3Folder *) folder)->uids->len;
179
183
if ((pop3_store->engine->capa & CAMEL_POP3_CAP_UIDL) == 0)
180
fi->cmd = camel_pop3_engine_command_new(pe, CAMEL_POP3_COMMAND_MULTI, cmd_builduid, fi, cancellable, NULL, "TOP %u 0\r\n", id);
184
fi->cmd = camel_pop3_engine_command_new (
186
CAMEL_POP3_COMMAND_MULTI,
181
190
g_ptr_array_add (pop3_folder->uids, fi);
182
g_hash_table_insert (pop3_folder->uids_id, GINT_TO_POINTER (id), fi);
191
g_hash_table_insert (
192
pop3_folder->uids_id,
193
GINT_TO_POINTER (id), fi);
185
196
} while (ret > 0);
188
199
if (pop3_folder->mobile_mode && pop3_folder->uids->len) {
190
201
gboolean save_uid = FALSE;
191
CamelNetworkSettings *network_settings;
194
network_settings = CAMEL_NETWORK_SETTINGS (settings);
195
host = camel_network_settings_get_host (network_settings);
197
d(printf("*********** Mobile mode *************\n"));
198
d(printf("Total Count: %s: %d\n", host, pop3_folder->uids->len));
200
203
/* Preserve the first message's ID */
201
204
fi = pop3_folder->uids->pdata[0];
229
232
/* Lets pull another window of old messages */
231
234
/* Decrement 'i' by another batch count or till we reach the first message */
232
d(printf("Fetch more (%d): from %d", pop3_folder->fetch_more, i));
235
d (printf ("Fetch more (%d): from %d", pop3_folder->fetch_more, i));
233
236
for (k = 0; k< pop3_folder->fetch_more && i>= 0; k++, i--);
234
d(printf(" to %d\n", i));
237
d (printf (" to %d\n", i));
236
239
/* Don't load messages newer than the latest we already had. We had to just get old messages and not
237
240
* new messages. */
502
505
pop3_store = CAMEL_POP3_STORE (parent_store);
504
507
service = CAMEL_SERVICE (parent_store);
505
settings = camel_service_get_settings (service);
509
settings = camel_service_ref_settings (service);
509
513
"auto-fetch", &auto_fetch,
516
g_object_unref (settings);
512
518
fi = g_hash_table_lookup (pop3_folder->uids_fi, uid);
513
519
if (fi == NULL) {
554
560
/* check to see if we have safely written flag set */
555
561
if (pop3_store->cache == NULL
556
|| (stream = camel_data_cache_get(pop3_store->cache, "cache", fi->uid, NULL)) == NULL
562
|| (stream = camel_data_cache_get (pop3_store->cache, "cache", fi->uid, NULL)) == NULL
557
563
|| camel_stream_read (stream, buffer, 1, cancellable, NULL) != 1
558
564
|| buffer[0] != '#') {
560
566
/* Initiate retrieval, if disk backing fails, use a memory backing */
561
567
if (pop3_store->cache == NULL
562
|| (stream = camel_data_cache_add(pop3_store->cache, "cache", fi->uid, NULL)) == NULL)
568
|| (stream = camel_data_cache_add (pop3_store->cache, "cache", fi->uid, NULL)) == NULL)
563
569
stream = camel_stream_mem_new ();
565
571
/* ref it, the cache storage routine unref's when done */
566
572
fi->stream = g_object_ref (stream);
567
pcr = camel_pop3_engine_command_new(pop3_store->engine, CAMEL_POP3_COMMAND_MULTI, cmd_tocache, fi, cancellable, NULL, "RETR %u\r\n", fi->id);
573
pcr = camel_pop3_engine_command_new (
575
CAMEL_POP3_COMMAND_MULTI,
578
"RETR %u\r\n", fi->id);
569
/* Also initiate retrieval of some of the following messages, assume we'll be receiving them */
580
/* Also initiate retrieval of some of the following
581
* messages, assume we'll be receiving them. */
570
582
if (auto_fetch && pop3_store->cache != NULL) {
571
/* This should keep track of the last one retrieved, also how many are still
572
* oustanding incase of random access on large folders */
583
/* This should keep track of the last one retrieved,
584
* also how many are still oustanding incase of random
585
* access on large folders. */
573
586
i = fi->index + 1;
574
587
last = MIN (i + 10, pop3_folder->uids->len);
575
588
for (; i < last; i++) {
576
589
CamelPOP3FolderInfo *pfi = pop3_folder->uids->pdata[i];
578
591
if (pfi->uid && pfi->cmd == NULL) {
579
pfi->stream = camel_data_cache_add(pop3_store->cache, "cache", pfi->uid, NULL);
592
pfi->stream = camel_data_cache_add (
594
"cache", pfi->uid, NULL);
580
595
if (pfi->stream) {
581
pfi->cmd = camel_pop3_engine_command_new (pop3_store->engine, CAMEL_POP3_COMMAND_MULTI,
582
cmd_tocache, pfi, cancellable, NULL, "RETR %u\r\n", pfi->id);
596
pfi->cmd = camel_pop3_engine_command_new (
598
CAMEL_POP3_COMMAND_MULTI,
601
"RETR %u\r\n", pfi->id);
698
717
/* only used during setup */
699
718
pop3_folder->uids_id = g_hash_table_new (NULL, NULL);
701
pcl = camel_pop3_engine_command_new(pop3_store->engine, CAMEL_POP3_COMMAND_MULTI, cmd_list, folder, cancellable, &local_error, "LIST\r\n");
720
pcl = camel_pop3_engine_command_new (
722
CAMEL_POP3_COMMAND_MULTI,
724
cancellable, &local_error,
702
726
if (!local_error && (pop3_store->engine->capa & CAMEL_POP3_CAP_UIDL) != 0)
703
pcu = camel_pop3_engine_command_new(pop3_store->engine, CAMEL_POP3_COMMAND_MULTI, cmd_uidl, folder, cancellable, &local_error, "UIDL\r\n");
727
pcu = camel_pop3_engine_command_new (
729
CAMEL_POP3_COMMAND_MULTI,
731
cancellable, &local_error,
704
733
while ((i = camel_pop3_engine_iterate (pop3_store->engine, NULL, cancellable, error)) > 0)
759
788
parent_store = camel_folder_get_parent_store (folder);
760
789
service = (CamelService *) parent_store;
761
settings = camel_service_get_settings (service);
763
batch_fetch_count = camel_pop3_settings_get_batch_fetch_count (CAMEL_POP3_SETTINGS (settings));
791
settings = camel_service_ref_settings (service);
793
batch_fetch_count = camel_pop3_settings_get_batch_fetch_count (
794
CAMEL_POP3_SETTINGS (settings));
796
g_object_unref (settings);
765
798
old_len = pop3_folder->uids->len;
855
891
if (fi->flags & CAMEL_MESSAGE_DELETED) {
856
fi->cmd = camel_pop3_engine_command_new (pop3_store->engine,
892
fi->cmd = camel_pop3_engine_command_new (
896
"DELE %u\r\n", fi->id);
864
898
/* also remove from cache */
865
899
if (pop3_store->cache && fi->uid)
866
camel_data_cache_remove(pop3_store->cache, "cache", fi->uid, NULL);
900
camel_data_cache_remove (pop3_store->cache, "cache", fi->uid, NULL);
924
958
CamelPOP3Folder *pop3_folder;
926
960
service = CAMEL_SERVICE (parent);
927
settings = camel_service_get_settings (service);
929
d(printf("opening pop3 INBOX folder\n"));
962
d (printf ("opening pop3 INBOX folder\n"));
931
964
folder = g_object_new (
932
965
CAMEL_TYPE_POP3_FOLDER,
933
966
"full-name", "inbox", "display-name", "inbox",
934
967
"parent-store", parent, NULL);
969
settings = camel_service_ref_settings (service);
936
971
pop3_folder = (CamelPOP3Folder *) folder;
937
pop3_folder->mobile_mode = camel_pop3_settings_get_mobile_mode (CAMEL_POP3_SETTINGS (settings));
972
pop3_folder->mobile_mode = camel_pop3_settings_get_mobile_mode (
973
CAMEL_POP3_SETTINGS (settings));
975
g_object_unref (settings);
939
977
pop3_folder->fetch_more = 0;
940
978
if (pop3_folder->mobile_mode) {
1041
1079
pop3_store = CAMEL_POP3_STORE (parent_store);
1042
1080
temp = time (&temp);
1044
d(printf("%s(%d): pop3_folder->uids->len=[%d]\n", __FILE__, __LINE__, pop3_folder->uids->len));
1082
d (printf ("%s(%d): pop3_folder->uids->len=[%d]\n", __FILE__, __LINE__, pop3_folder->uids->len));
1045
1083
for (i = 0; i < pop3_folder->uids->len; i++) {
1046
1084
message_time = 0;
1047
1085
fi = pop3_folder->uids->pdata[i];
1062
d(printf("%s(%d): fi->uid=[%s]\n", __FILE__, __LINE__, fi->uid));
1100
d (printf ("%s(%d): fi->uid=[%s]\n", __FILE__, __LINE__, fi->uid));
1063
1101
if (!pop3_get_message_time_from_cache (folder, fi->uid, &message_time)) {
1064
d(printf("could not get message time from cache, trying from pop3\n"));
1102
d (printf ("could not get message time from cache, trying from pop3\n"));
1065
1103
message = pop3_folder_get_message_sync (
1066
1104
folder, fi->uid, cancellable, error);
1074
1112
gdouble time_diff = difftime (temp,message_time);
1075
1113
gint day_lag = time_diff / (60 * 60 * 24);
1077
d(printf("%s(%d): message_time= [%ld]\n", __FILE__, __LINE__, message_time));
1078
d(printf("%s(%d): day_lag=[%d] \t days_to_delete=[%d]\n",
1116
"%s(%d): message_time= [%ld]\n",
1117
__FILE__, __LINE__, message_time));
1119
"%s(%d): day_lag=[%d] \t days_to_delete=[%d]\n",
1079
1120
__FILE__, __LINE__, day_lag, days_to_delete));
1081
1122
if (day_lag > days_to_delete) {
1087
1128
camel_pop3_engine_command_free (pop3_store->engine, fi->cmd);
1088
1129
fi->cmd = NULL;
1090
d(printf("%s(%d): Deleting old messages\n", __FILE__, __LINE__));
1091
fi->cmd = camel_pop3_engine_command_new (pop3_store->engine,
1132
"%s(%d): Deleting old messages\n",
1133
__FILE__, __LINE__));
1134
fi->cmd = camel_pop3_engine_command_new (
1138
"DELE %u\r\n", fi->id);
1098
1139
/* also remove from cache */
1099
1140
if (pop3_store->cache && fi->uid) {
1100
camel_data_cache_remove(pop3_store->cache, "cache", fi->uid, NULL);
1141
camel_data_cache_remove (pop3_store->cache, "cache", fi->uid, NULL);