1
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
3
* Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
6
* Michael Zucchi <notzed@ximian.com>
7
* Dan Winship <danw@ximian.com>
9
* This program is free software; you can redistribute it and/or
10
* modify it under the terms of version 2 of the GNU Lesser General Public
11
* License as published by the Free Software Foundation.
13
* This program is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* General Public License for more details.
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with this program; if not, write to the
20
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21
* Boston, MA 02110-1301, USA.
35
#include "camel-file-utils.h"
37
#include "camel-imapp-summary.h"
39
#define CAMEL_IMAPP_SUMMARY_VERSION (1)
41
static gint summary_header_load(CamelFolderSummary *, FILE *);
42
static gint summary_header_save(CamelFolderSummary *, FILE *);
44
static CamelMessageInfo *message_info_load(CamelFolderSummary *s, FILE *in);
45
static gint message_info_save(CamelFolderSummary *s, FILE *out, CamelMessageInfo *info);
47
static void camel_imapp_summary_class_init(CamelIMAPPSummaryClass *klass);
48
static void camel_imapp_summary_init (CamelIMAPPSummary *obj);
50
static CamelFolderSummaryClass *camel_imapp_summary_parent;
53
camel_imapp_summary_get_type(void)
55
static CamelType type = CAMEL_INVALID_TYPE;
57
if (type == CAMEL_INVALID_TYPE) {
58
type = camel_type_register(
59
camel_folder_summary_get_type(), "CamelIMAPPSummary",
60
sizeof(CamelIMAPPSummary),
61
sizeof(CamelIMAPPSummaryClass),
62
(CamelObjectClassInitFunc) camel_imapp_summary_class_init,
64
(CamelObjectInitFunc) camel_imapp_summary_init,
72
camel_imapp_summary_class_init(CamelIMAPPSummaryClass *klass)
74
CamelFolderSummaryClass *cfs_class =(CamelFolderSummaryClass *) klass;
76
camel_imapp_summary_parent = CAMEL_FOLDER_SUMMARY_CLASS(camel_type_get_global_classfuncs(camel_folder_summary_get_type()));
78
cfs_class->summary_header_load = summary_header_load;
79
cfs_class->summary_header_save = summary_header_save;
80
cfs_class->message_info_load = message_info_load;
81
cfs_class->message_info_save = message_info_save;
85
camel_imapp_summary_init(CamelIMAPPSummary *obj)
87
CamelFolderSummary *s =(CamelFolderSummary *)obj;
89
/* subclasses need to set the right instance data sizes */
90
s->message_info_size = sizeof(CamelIMAPPMessageInfo);
91
s->content_info_size = sizeof(CamelMessageContentInfo);
93
/* and a unique file version */
94
s->version += CAMEL_IMAPP_SUMMARY_VERSION;
98
* camel_imapp_summary_new:
100
* This will create a new CamelIMAPPSummary object and read in the
101
* summary data from disk, if it exists.
103
* Return value: A new CamelIMAPPSummary object.
106
camel_imapp_summary_new(void)
108
CamelFolderSummary *summary = CAMEL_FOLDER_SUMMARY(camel_object_new(camel_imapp_summary_get_type()));
114
summary_header_load(CamelFolderSummary *s, FILE *in)
116
CamelIMAPPSummary *ims = CAMEL_IMAPP_SUMMARY(s);
118
if (camel_imapp_summary_parent->summary_header_load(s, in) == -1)
122
if (s->version == 0x100c)
123
return camel_file_util_decode_uint32(in, &ims->uidvalidity);
125
if (camel_file_util_decode_fixed_int32(in, &ims->version) == -1
126
|| camel_file_util_decode_fixed_int32(in, &ims->uidvalidity) == -1)
129
if (ims->version > CAMEL_IMAPP_SUMMARY_VERSION) {
130
g_warning("Unkown summary version\n");
139
summary_header_save(CamelFolderSummary *s, FILE *out)
141
CamelIMAPPSummary *ims = CAMEL_IMAPP_SUMMARY(s);
143
if (camel_imapp_summary_parent->summary_header_save(s, out) == -1)
146
if (camel_file_util_encode_fixed_int32(out, CAMEL_IMAPP_SUMMARY_VERSION) == -1
147
|| camel_file_util_encode_fixed_int32(out, ims->uidvalidity) == -1)
153
static CamelMessageInfo *
154
message_info_load(CamelFolderSummary *s, FILE *in)
156
CamelMessageInfo *info;
157
CamelIMAPPMessageInfo *iinfo;
159
info = camel_imapp_summary_parent->message_info_load(s, in);
161
iinfo =(CamelIMAPPMessageInfo *)info;
163
if (camel_file_util_decode_uint32(in, &iinfo->server_flags) == -1)
169
camel_message_info_free(info);
174
message_info_save(CamelFolderSummary *s, FILE *out, CamelMessageInfo *info)
176
CamelIMAPPMessageInfo *iinfo =(CamelIMAPPMessageInfo *)info;
178
if (camel_imapp_summary_parent->message_info_save(s, out, info) == -1)
181
return camel_file_util_encode_uint32(out, iinfo->server_flags);