aboutsummaryrefslogtreecommitdiffstats
path: root/camel/providers/imap4/camel-imap4-store-summary.c
diff options
context:
space:
mode:
Diffstat (limited to 'camel/providers/imap4/camel-imap4-store-summary.c')
-rw-r--r--camel/providers/imap4/camel-imap4-store-summary.c402
1 files changed, 0 insertions, 402 deletions
diff --git a/camel/providers/imap4/camel-imap4-store-summary.c b/camel/providers/imap4/camel-imap4-store-summary.c
deleted file mode 100644
index ffa4bd05f1..0000000000
--- a/camel/providers/imap4/camel-imap4-store-summary.c
+++ /dev/null
@@ -1,402 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Authors: Jeffrey Stedfast <fejj@novell.com>
- *
- * Copyright 2004 Novell, Inc. (www.novell.com)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
- *
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include <camel/camel-store.h>
-#include <camel/camel-file-utils.h>
-
-#include "camel-imap4-utils.h"
-#include "camel-imap4-store-summary.h"
-
-
-#define CAMEL_IMAP4_STORE_SUMMARY_VERSION_0 (0)
-#define CAMEL_IMAP4_STORE_SUMMARY_VERSION (0)
-
-static void camel_imap4_store_summary_class_init (CamelIMAP4StoreSummaryClass *klass);
-static void camel_imap4_store_summary_init (CamelIMAP4StoreSummary *obj);
-static void camel_imap4_store_summary_finalize (CamelObject *obj);
-
-static int summary_header_load (CamelStoreSummary *s, FILE *in);
-static int summary_header_save (CamelStoreSummary *s, FILE *out);
-
-static CamelStoreInfo *store_info_load (CamelStoreSummary *s, FILE *in);
-static int store_info_save (CamelStoreSummary *s, FILE *out, CamelStoreInfo *info);
-static void store_info_free (CamelStoreSummary *s, CamelStoreInfo *info);
-
-
-static CamelStoreSummaryClass *parent_class = NULL;
-
-
-CamelType
-camel_imap4_store_summary_get_type (void)
-{
- static CamelType type = CAMEL_INVALID_TYPE;
-
- if (type == CAMEL_INVALID_TYPE) {
- type = camel_type_register (camel_store_summary_get_type (),
- "CamelIMAP4StoreSummary",
- sizeof (CamelIMAP4StoreSummary),
- sizeof (CamelIMAP4StoreSummaryClass),
- (CamelObjectClassInitFunc) camel_imap4_store_summary_class_init,
- NULL,
- (CamelObjectInitFunc) camel_imap4_store_summary_init,
- (CamelObjectFinalizeFunc) camel_imap4_store_summary_finalize);
- }
-
- return type;
-}
-
-
-static void
-camel_imap4_store_summary_class_init (CamelIMAP4StoreSummaryClass *klass)
-{
- CamelStoreSummaryClass *ssklass = (CamelStoreSummaryClass *) klass;
-
- parent_class = (CamelStoreSummaryClass *) camel_store_summary_get_type ();
-
- ssklass->summary_header_load = summary_header_load;
- ssklass->summary_header_save = summary_header_save;
-
- ssklass->store_info_load = store_info_load;
- ssklass->store_info_save = store_info_save;
- ssklass->store_info_free = store_info_free;
-}
-
-static void
-camel_imap4_store_summary_init (CamelIMAP4StoreSummary *s)
-{
- ((CamelStoreSummary *) s)->store_info_size = sizeof (CamelIMAP4StoreInfo);
- s->version = CAMEL_IMAP4_STORE_SUMMARY_VERSION;
- s->namespaces = NULL;
-}
-
-static void
-camel_imap4_store_summary_finalize (CamelObject *obj)
-{
- CamelIMAP4StoreSummary *s = (CamelIMAP4StoreSummary *) obj;
-
- if (s->namespaces)
- camel_imap4_namespace_list_free (s->namespaces);
-}
-
-
-static CamelIMAP4NamespaceList *
-load_namespaces (FILE *in)
-{
- CamelIMAP4Namespace *ns, *tail;
- CamelIMAP4NamespaceList *nsl;
- guint32 i, j, n;
-
- nsl = g_malloc (sizeof (CamelIMAP4NamespaceList));
- nsl->personal = NULL;
- nsl->shared = NULL;
- nsl->other = NULL;
-
- for (j = 0; j < 3; j++) {
- switch (j) {
- case 0:
- tail = (CamelIMAP4Namespace *) &nsl->personal;
- break;
- case 1:
- tail = (CamelIMAP4Namespace *) &nsl->shared;
- break;
- case 2:
- tail = (CamelIMAP4Namespace *) &nsl->other;
- break;
- }
-
- if (camel_file_util_decode_fixed_int32 (in, &n) == -1)
- goto exception;
-
- for (i = 0; i < n; i++) {
- guint32 sep;
- char *path;
-
- if (camel_file_util_decode_string (in, &path) == -1)
- goto exception;
-
- if (camel_file_util_decode_uint32 (in, &sep) == -1) {
- g_free (path);
- goto exception;
- }
-
- tail->next = ns = g_malloc (sizeof (CamelIMAP4Namespace));
- ns->sep = sep & 0xff;
- ns->path = path;
- ns->next = NULL;
- tail = ns;
- }
- }
-
- return nsl;
-
- exception:
-
- camel_imap4_namespace_list_free (nsl);
-
- return NULL;
-}
-
-static int
-summary_header_load (CamelStoreSummary *s, FILE *in)
-{
- CamelIMAP4StoreSummary *is = (CamelIMAP4StoreSummary *) s;
- guint32 version, capa;
-
- if (parent_class->summary_header_load (s, in) == -1)
- return -1;
-
- if (camel_file_util_decode_fixed_int32 (in, &version) == -1)
- return -1;
-
- is->version = version;
- if (version < CAMEL_IMAP4_STORE_SUMMARY_VERSION_0) {
- g_warning ("IMAP4 store summary header version too low");
- errno = EINVAL;
- return -1;
- }
-
- if (camel_file_util_decode_fixed_int32 (in, &capa) == -1)
- return -1;
-
- is->capa = capa;
-
- if (!(is->namespaces = load_namespaces (in)))
- return -1;
-
- return 0;
-}
-
-static int
-save_namespaces (FILE *out, CamelIMAP4NamespaceList *nsl)
-{
- CamelIMAP4Namespace *cur, *ns;
- guint32 i, n;
-
- for (i = 0; i < 3; i++) {
- switch (i) {
- case 0:
- cur = nsl->personal;
- break;
- case 1:
- cur = nsl->shared;
- break;
- case 2:
- cur = nsl->other;
- break;
- }
-
- for (ns = cur, n = 0; ns; n++)
- ns = ns->next;
-
- if (camel_file_util_encode_fixed_int32 (out, n) == -1)
- return -1;
-
- ns = cur;
- while (ns != NULL) {
- if (camel_file_util_encode_string (out, ns->path) == -1)
- return -1;
-
- if (camel_file_util_encode_uint32 (out, ns->sep) == -1)
- return -1;
-
- ns = ns->next;
- }
- }
-
- return 0;
-}
-
-static int
-summary_header_save (CamelStoreSummary *s, FILE *out)
-{
- CamelIMAP4StoreSummary *is = (CamelIMAP4StoreSummary *) s;
-
- if (parent_class->summary_header_save (s, out) == -1)
- return -1;
-
- if (camel_file_util_encode_fixed_int32 (out, is->version) == -1)
- return -1;
-
- if (camel_file_util_encode_fixed_int32 (out, is->capa) == -1)
- return -1;
-
- if (save_namespaces (out, is->namespaces) == -1)
- return -1;
-
- return 0;
-}
-
-static CamelStoreInfo *
-store_info_load (CamelStoreSummary *s, FILE *in)
-{
- return parent_class->store_info_load (s, in);
-}
-
-static int
-store_info_save (CamelStoreSummary *s, FILE *out, CamelStoreInfo *info)
-{
- return parent_class->store_info_save (s, out, info);
-}
-
-static void
-store_info_free (CamelStoreSummary *s, CamelStoreInfo *info)
-{
- parent_class->store_info_free (s, info);
-}
-
-
-/**
- * camel_imap4_store_summary_new:
- *
- * Create a new CamelIMAP4StoreSummary object.
- *
- * Returns a new CamelIMAP4StoreSummary object.
- **/
-CamelIMAP4StoreSummary *
-camel_imap4_store_summary_new (void)
-{
- return (CamelIMAP4StoreSummary *) camel_object_new (camel_imap4_store_summary_get_type ());
-}
-
-
-void
-camel_imap4_store_summary_set_capabilities (CamelIMAP4StoreSummary *s, guint32 capa)
-{
- s->capa = capa;
-}
-
-
-void
-camel_imap4_store_summary_set_namespaces (CamelIMAP4StoreSummary *s, const CamelIMAP4NamespaceList *ns)
-{
- if (s->namespaces)
- camel_imap4_namespace_list_free (s->namespaces);
- s->namespaces = camel_imap4_namespace_list_copy (ns);
-}
-
-
-void
-camel_imap4_store_summary_note_info (CamelIMAP4StoreSummary *s, CamelFolderInfo *fi)
-{
- CamelStoreSummary *ss = (CamelStoreSummary *) s;
- CamelStoreInfo *si;
-
- if ((si = camel_store_summary_path (ss, fi->full_name))) {
- if (fi->unread != -1) {
- si->unread = fi->unread;
- ss->flags |= CAMEL_STORE_SUMMARY_DIRTY;
- }
-
- if (fi->total != -1) {
- si->total = fi->total;
- ss->flags |= CAMEL_STORE_SUMMARY_DIRTY;
- }
-
- camel_store_summary_info_free (ss, si);
- return;
- }
-
- si = camel_store_summary_info_new (ss);
- si->path = g_strdup (fi->full_name);
- si->uri = g_strdup (fi->uri);
- si->flags = fi->flags;
- si->unread = fi->unread;
- si->total = fi->total;
-
- camel_store_summary_add (ss, si);
-
- /* FIXME: should this be recursive? */
-}
-
-
-void
-camel_imap4_store_summary_unnote_info (CamelIMAP4StoreSummary *s, CamelFolderInfo *fi)
-{
- CamelStoreSummary *ss = (CamelStoreSummary *) s;
-
- camel_store_summary_remove_path (ss, fi->full_name);
-}
-
-
-static CamelFolderInfo *
-store_info_to_folder_info (CamelStoreSummary *s, CamelStoreInfo *si)
-{
- CamelFolderInfo *fi;
-
- fi = g_malloc0 (sizeof (CamelFolderInfo));
- fi->full_name = g_strdup (camel_store_info_path (s, si));
- fi->name = g_strdup (camel_store_info_name (s, si));
- fi->uri = g_strdup (camel_store_info_uri (s, si));
- fi->flags = si->flags;
- fi->unread = si->unread;
- fi->total = si->total;
-
- return fi;
-}
-
-CamelFolderInfo *
-camel_imap4_store_summary_get_folder_info (CamelIMAP4StoreSummary *s, const char *top, guint32 flags)
-{
- CamelStoreSummary *ss = (CamelStoreSummary *) s;
- CamelFolderInfo *fi;
- GPtrArray *folders;
- CamelStoreInfo *si;
- size_t toplen, len;
- int i;
-
- toplen = strlen (top);
- folders = g_ptr_array_new ();
-
- for (i = 0; i < ss->folders->len; i++) {
- si = ss->folders->pdata[i];
- if (strncmp (si->path, top, toplen) != 0)
- continue;
-
- if (toplen > 0 && (len = strlen (si->path)) > toplen && si->path[toplen] != '/')
- continue;
-
- if (len == toplen) {
- /* found toplevel folder */
- g_ptr_array_add (folders, store_info_to_folder_info (ss, si));
- continue;
- }
-
- if ((flags & CAMEL_STORE_FOLDER_INFO_RECURSIVE) || !strchr (si->path + toplen + 1, '/'))
- g_ptr_array_add (folders, store_info_to_folder_info (ss, si));
- }
-
- fi = camel_folder_info_build (folders, top, '/', TRUE);
- g_ptr_array_free (folders, TRUE);
-
- return fi;
-}