static int groupwise_entry_write (CamelOfflineJournal *journal, EDListNode *entry, FILE *out) { CamelGroupwiseJournalEntry *groupwise_entry = (CamelGroupwiseJournalEntry *) entry; if (camel_file_util_encode_uint32 (out, groupwise_entry->type) == -1) return -1; switch (groupwise_entry->type) { case CAMEL_GROUPWISE_JOURNAL_ENTRY_APPEND: if (camel_file_util_encode_string (out, groupwise_entry->uid)) return -1; break; case CAMEL_GROUPWISE_JOURNAL_ENTRY_TRANSFER: if (camel_file_util_encode_string (out, groupwise_entry->uid)) return -1; if (camel_file_util_encode_string (out, groupwise_entry->original_uid)) return -1; if (camel_file_util_encode_string (out, groupwise_entry->source_container)) return -1; break; default: g_assert_not_reached (); } return 0; }
static int diary_encode_uids (CamelDiscoDiary *diary, GPtrArray *uids) { int i, status; status = camel_file_util_encode_uint32 (diary->file, uids->len); for (i = 0; status != -1 && i < uids->len; i++) status = camel_file_util_encode_string (diary->file, uids->pdata[i]); return status; }
static int store_info_save (CamelStoreSummary *s, FILE *out, CamelStoreInfo *mi) { CamelNNTPStoreInfo *isi = (CamelNNTPStoreInfo *)mi; if (camel_nntp_store_summary_parent->store_info_save (s, out, mi) == -1 || camel_file_util_encode_string (out, isi->full_name) == -1 || camel_file_util_encode_uint32(out, isi->first) == -1 || camel_file_util_encode_uint32(out, isi->last) == -1) return -1; return 0; }
static int gw_summary_header_save (CamelFolderSummary *s, FILE *out) { CamelGroupwiseSummary *ims = CAMEL_GROUPWISE_SUMMARY(s); if (camel_groupwise_summary_parent->summary_header_save (s, out) == -1) return -1; camel_file_util_encode_fixed_int32(out, CAMEL_GW_SUMMARY_VERSION); camel_file_util_encode_fixed_int32(out, ims->validity); return camel_file_util_encode_string (out, ims->time_string); }
static gint exchange_journal_entry_write (CamelOfflineJournal *journal, gpointer entry, FILE *out) { CamelExchangeJournalEntry *exchange_entry = entry; const gchar *string; gchar *tmp; if (camel_file_util_encode_uint32 (out, exchange_entry->type) == -1) return -1; switch (exchange_entry->type) { case CAMEL_EXCHANGE_JOURNAL_ENTRY_APPEND: if (camel_file_util_encode_string (out, exchange_entry->uid)) return -1; break; case CAMEL_EXCHANGE_JOURNAL_ENTRY_TRANSFER: if (camel_file_util_encode_string (out, exchange_entry->uid)) return -1; if (camel_file_util_encode_string (out, exchange_entry->original_uid)) return -1; if (camel_file_util_encode_string (out, exchange_entry->folder_name)) return -1; string = exchange_entry->delete_original ? "True" : "False"; if (camel_file_util_encode_string (out, string)) return -1; break; case CAMEL_EXCHANGE_JOURNAL_ENTRY_DELETE: if (camel_file_util_encode_string (out, exchange_entry->uid)) return -1; tmp = g_strdup_printf ("%u", exchange_entry->flags); if (camel_file_util_encode_string (out, tmp)) return -1; g_free (tmp); tmp = g_strdup_printf ("%u", exchange_entry->set); if (camel_file_util_encode_string (out, tmp)) return -1; g_free (tmp); break; default: g_critical ("%s: Uncaught case (%d)", G_STRLOC, exchange_entry->type); return -1; } return 0; }
void camel_disco_diary_log (CamelDiscoDiary *diary, CamelDiscoDiaryAction action, ...) { va_list ap; int status; d(printf("diary log: %s\n", diary->file?"ok":"no file!")); /* You may already be a loser. */ if (!diary && !diary->file) return; status = camel_file_util_encode_uint32 (diary->file, action); if (status == -1) goto lose; va_start (ap, action); switch (action) { case CAMEL_DISCO_DIARY_FOLDER_EXPUNGE: { CamelFolder *folder = va_arg (ap, CamelFolder *); GPtrArray *uids = va_arg (ap, GPtrArray *); d(printf(" folder expunge '%s'\n", folder->full_name)); status = camel_file_util_encode_string (diary->file, folder->full_name); if (status != -1) status = diary_encode_uids (diary, uids); break; } case CAMEL_DISCO_DIARY_FOLDER_APPEND: { CamelFolder *folder = va_arg (ap, CamelFolder *); char *uid = va_arg (ap, char *); d(printf(" folder append '%s'\n", folder->full_name)); status = camel_file_util_encode_string (diary->file, folder->full_name); if (status != -1) status = camel_file_util_encode_string (diary->file, uid); break; } case CAMEL_DISCO_DIARY_FOLDER_TRANSFER: { CamelFolder *source = va_arg (ap, CamelFolder *); CamelFolder *destination = va_arg (ap, CamelFolder *); GPtrArray *uids = va_arg (ap, GPtrArray *); gboolean delete_originals = va_arg (ap, gboolean); d(printf(" folder transfer '%s' to '%s'\n", source->full_name, destination->full_name)); status = camel_file_util_encode_string (diary->file, source->full_name); if (status == -1) break; status = camel_file_util_encode_string (diary->file, destination->full_name); if (status == -1) break; status = diary_encode_uids (diary, uids); if (status == -1) break; status = camel_file_util_encode_uint32 (diary->file, delete_originals); break; } default: g_assert_not_reached (); break; } va_end (ap); lose: if (status == -1) { char *msg; msg = g_strdup_printf (_("Could not write log entry: %s\n" "Further operations on this server " "will not be replayed when you\n" "reconnect to the network."), g_strerror (errno)); camel_session_alert_user (camel_service_get_session (CAMEL_SERVICE (diary->store)), CAMEL_SESSION_ALERT_ERROR, msg, FALSE); g_free (msg); fclose (diary->file); diary->file = NULL; } }