OBS User unknown 2007-01-09 16:58:05 +00:00 committed by Git OBS Bridge
commit 4592257b28
90 changed files with 34235 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.osc

View File

@ -0,0 +1,29 @@
Index: camel/providers/groupwise/camel-groupwise-summary.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-summary.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -p -r1.10 -r1.11
--- camel/providers/groupwise/camel-groupwise-summary.c 9 Nov 2005 14:23:44 -0000 1.10
+++ camel/providers/groupwise/camel-groupwise-summary.c 20 Apr 2006 07:47:21 -0000 1.11
@@ -330,15 +330,17 @@ groupwise_summary_clear (CamelFolderSumm
CamelFolderChangeInfo *changes;
CamelMessageInfo *info;
int i, count;
+ const char *uid;
changes = camel_folder_change_info_new ();
count = camel_folder_summary_count (summary);
for (i = 0; i < count; i++) {
if (!(info = camel_folder_summary_index (summary, i)))
continue;
-
- camel_folder_change_info_remove_uid (changes, camel_message_info_uid (info));
- camel_folder_summary_remove(summary, info);
+
+ uid = camel_message_info_uid (info);
+ camel_folder_change_info_remove_uid (changes, uid);
+ camel_folder_summary_remove_uid (summary, uid);
camel_message_info_free(info);
}

View File

@ -0,0 +1,16 @@
Index: camel/providers/groupwise/camel-groupwise-store.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-store.c,v
retrieving revision 1.99
diff -u -p -r1.99 camel-groupwise-store.c
--- camel/providers/groupwise/camel-groupwise-store.c 6 Apr 2006 05:57:40 -0000 1.99
+++ camel/providers/groupwise/camel-groupwise-store.c 20 Apr 2006 09:05:34 -0000
@@ -224,7 +224,7 @@ groupwise_auth_loop (CamelService *servi
}
if (!E_IS_GW_CONNECTION(priv->cnc)) {
errbuf = g_strdup_printf (_("Unable to authenticate "
- "to GroupWise server."));
+ "to GroupWise server. "));
camel_exception_clear (ex);
} else

79
backend-timeout-fix.patch Normal file
View File

@ -0,0 +1,79 @@
Index: servers/exchange/lib/e2k-context.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/exchange/lib/e2k-context.c,v
retrieving revision 1.6
diff -u -p -r1.6 e2k-context.c
--- servers/exchange/lib/e2k-context.c 13 Dec 2005 03:54:28 -0000 1.6
+++ servers/exchange/lib/e2k-context.c 24 Feb 2006 21:58:51 -0000
@@ -110,6 +110,9 @@ struct _E2kContextPrivate {
#define E2K_CONTEXT_MIN_BATCH_SIZE 25
#define E2K_CONTEXT_MAX_BATCH_SIZE 100
+/* For soup sync session timeout */
+#define E2K_SOUP_SESSION_TIMEOUT 30
+
#ifdef E2K_DEBUG
char *e2k_debug;
int e2k_debug_level;
@@ -357,6 +360,7 @@ e2k_context_set_auth (E2kContext *ctx, c
const char *domain, const char *authmech,
const char *password)
{
+ guint timeout = E2K_SOUP_SESSION_TIMEOUT;
g_return_if_fail (E2K_IS_CONTEXT (ctx));
@@ -381,8 +385,15 @@ e2k_context_set_auth (E2kContext *ctx, c
if (ctx->priv->async_session)
g_object_unref (ctx->priv->async_session);
+ /* Set a default timeout value of 30 seconds.
+ FIXME: Make timeout configurable
+ */
+ if (g_getenv ("SOUP_SESSION_TIMEOUT"))
+ timeout = atoi (g_getenv ("SOUP_SESSION_TIMEOUT"));
+
ctx->priv->session = soup_session_sync_new_with_options (
SOUP_SESSION_USE_NTLM, !authmech || !strcmp (authmech, "NTLM"),
+ SOUP_SESSION_TIMEOUT, timeout,
NULL);
g_signal_connect (ctx->priv->session, "authenticate",
G_CALLBACK (session_authenticate), ctx);
Index: groupwise/e-gw-connection.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/groupwise/e-gw-connection.c,v
retrieving revision 1.138
diff -u -p -r1.138 e-gw-connection.c
--- servers/groupwise/e-gw-connection.c 23 Jan 2006 11:07:49 -0000 1.138
+++ servers/groupwise/e-gw-connection.c 24 Feb 2006 21:58:51 -0000
@@ -34,6 +34,8 @@
#include "e-gw-message.h"
#include "e-gw-filter.h"
+/* For soup sync session timeout */
+#define GW_SOUP_SESSION_TIMEOUT 30
static GObjectClass *parent_class = NULL;
static GHashTable *loaded_connections_permissions = NULL;
@@ -355,13 +357,20 @@ static void
e_gw_connection_init (EGwConnection *cnc, EGwConnectionClass *klass)
{
EGwConnectionPrivate *priv;
+ guint timeout = GW_SOUP_SESSION_TIMEOUT;
/* allocate internal structure */
priv = g_new0 (EGwConnectionPrivate, 1);
cnc->priv = priv;
+ /* Set a default timeout value of 30 seconds.
+ FIXME: Make timeout configurable
+ */
+ if (g_getenv ("SOUP_SESSION_TIMEOUT"))
+ timeout = atoi (g_getenv ("SOUP_SESSION_TIMEOUT"));
+
/* create the SoupSession for this connection */
- priv->soup_session = soup_session_sync_new ();
+ priv->soup_session = soup_session_sync_new_with_options (SOUP_SESSION_TIMEOUT, timeout, NULL);
priv->reauth_mutex = g_mutex_new ();
priv->categories_by_id = NULL;
priv->categories_by_name = NULL;

559
beagle-meta-summary.patch Normal file
View File

@ -0,0 +1,559 @@
Index: camel/camel-file-utils.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/camel-file-utils.c,v
retrieving revision 1.16
diff -u -p -r1.16 camel-file-utils.c
--- camel/camel-file-utils.c 10 Jan 2006 07:56:46 -0000 1.16
+++ camel/camel-file-utils.c 12 Mar 2006 20:49:46 -0000
@@ -316,6 +316,72 @@ camel_file_util_decode_string (FILE *in,
return 0;
}
+/**
+ * camel_file_util_encode_fixed_string:
+ * @out: file to output to
+ * @str: value to output
+ * @len: total-len of str to store
+ *
+ * Encode a normal string and save it in the output file.
+ * Unlike @camel_file_util_encode_string, it pads the
+ * @str with "NULL" bytes, if @len is > strlen(str)
+ *
+ * Return value: 0 on success, -1 on error.
+ **/
+int
+camel_file_util_encode_fixed_string (FILE *out, const char *str, size_t len)
+{
+ char buf[len];
+
+ /* Don't allow empty strings to be written */
+ if (len < 1)
+ return -1;
+
+ /* Max size is 64K */
+ if (len > 65536)
+ len = 65536;
+
+ memset(buf, 0x00, len);
+ g_strlcpy(buf, str, len);
+
+ if (fwrite (buf, len, 1, out) == len)
+ return 0;
+
+ return -1;
+}
+
+
+/**
+ * camel_file_util_decode_fixed_string:
+ * @in: file to read from
+ * @str: pointer to a variable to store the value in
+ * @len: total-len to decode.
+ *
+ * Decode a normal string from the input file.
+ *
+ * Return value: 0 on success, -1 on error.
+ **/
+int
+camel_file_util_decode_fixed_string (FILE *in, char **str, size_t len)
+{
+ register char *ret;
+
+ if (len > 65536) {
+ *str = NULL;
+ return -1;
+ }
+
+ ret = g_malloc (len+1);
+ if (len > 0 && fread (ret, len, 1, in) != 1) {
+ g_free (ret);
+ *str = NULL;
+ return -1;
+ }
+
+ ret[len] = 0;
+ *str = ret;
+ return 0;
+}
/**
* camel_file_util_safe_filename:
Index: camel/camel-file-utils.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/camel-file-utils.h,v
retrieving revision 1.11
diff -u -p -r1.11 camel-file-utils.h
--- camel/camel-file-utils.h 10 Jan 2006 07:56:46 -0000 1.11
+++ camel/camel-file-utils.h 12 Mar 2006 20:49:46 -0000
@@ -54,6 +54,9 @@ int camel_file_util_encode_size_t (FILE
int camel_file_util_decode_size_t (FILE *in, size_t *);
int camel_file_util_encode_string (FILE *out, const char *);
int camel_file_util_decode_string (FILE *in, char **);
+int camel_file_util_encode_fixed_string (FILE *out, const char *str, size_t len);
+int camel_file_util_decode_fixed_string (FILE *in, char **str, size_t len);
+
char *camel_file_util_safe_filename (const char *name);
Index: camel/camel-folder-summary.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/camel-folder-summary.c,v
retrieving revision 1.147
diff -u -p -r1.147 camel-folder-summary.c
--- camel/camel-folder-summary.c 2 Feb 2006 05:38:25 -0000 1.147
+++ camel/camel-folder-summary.c 12 Mar 2006 20:49:47 -0000
@@ -78,6 +78,8 @@ extern int strdup_count, malloc_count, f
#define _PRIVATE(o) (((CamelFolderSummary *)(o))->priv)
+#define META_SUMMARY_SUFFIX_LEN 5 /* strlen("-meta") */
+
/* trivial lists, just because ... */
struct _node {
struct _node *next;
@@ -88,12 +90,15 @@ static int my_list_size(struct _node **l
static int summary_header_load(CamelFolderSummary *, FILE *);
static int summary_header_save(CamelFolderSummary *, FILE *);
+static int summary_meta_header_load(CamelFolderSummary *, FILE *);
+static int summary_meta_header_save(CamelFolderSummary *, FILE *);
static CamelMessageInfo * message_info_new_from_header(CamelFolderSummary *, struct _camel_header_raw *);
static CamelMessageInfo * message_info_new_from_parser(CamelFolderSummary *, CamelMimeParser *);
static CamelMessageInfo * message_info_new_from_message(CamelFolderSummary *s, CamelMimeMessage *msg);
static CamelMessageInfo * message_info_load(CamelFolderSummary *, FILE *);
static int message_info_save(CamelFolderSummary *, FILE *, CamelMessageInfo *);
+static int meta_message_info_save(CamelFolderSummary *s, FILE *out_meta, FILE *out, CamelMessageInfo *info);
static void message_info_free(CamelFolderSummary *, CamelMessageInfo *);
static CamelMessageContentInfo * content_info_new_from_header(CamelFolderSummary *, struct _camel_header_raw *);
@@ -146,6 +151,13 @@ camel_folder_summary_init (CamelFolderSu
p->filter_lock = g_mutex_new();
p->alloc_lock = g_mutex_new();
p->ref_lock = g_mutex_new();
+
+ s->meta_summary = g_malloc0(sizeof(CamelFolderMetaSummary));
+
+ /* Default is 20, any implementor having UIDs that has length
+ exceeding 20, has to override this value
+ */
+ s->meta_summary->uid_len = 20;
}
static void free_o_name(void *key, void *value, void *data)
@@ -193,6 +205,10 @@ camel_folder_summary_finalize (CamelObje
camel_object_unref((CamelObject *)p->filter_stream);
if (p->index)
camel_object_unref((CamelObject *)p->index);
+
+ /* Freeing memory occupied by meta-summary-header */
+ g_free(s->meta_summary->path);
+ g_free(s->meta_summary);
g_mutex_free(p->summary_lock);
g_mutex_free(p->io_lock);
@@ -256,6 +272,9 @@ camel_folder_summary_set_filename(CamelF
g_free(s->summary_path);
s->summary_path = g_strdup(name);
+ g_free(s->meta_summary->path);
+ s->meta_summary->path = g_strconcat(name, "-meta", NULL);
+
CAMEL_SUMMARY_UNLOCK(s, summary_lock);
}
@@ -544,7 +563,8 @@ camel_folder_summary_load(CamelFolderSum
int i;
CamelMessageInfo *mi;
- if (s->summary_path == NULL)
+ if (s->summary_path == NULL ||
+ s->meta_summary->path == NULL)
return 0;
in = g_fopen(s->summary_path, "rb");
@@ -630,14 +650,17 @@ int
camel_folder_summary_save(CamelFolderSummary *s)
{
FILE *out;
- int fd, i;
+ FILE *out_meta;
+ int fd, i, fd_meta;
guint32 count;
CamelMessageInfo *mi;
char *path;
+ char *path_meta;
g_assert(s->message_info_size >= sizeof(CamelMessageInfoBase));
- if (s->summary_path == NULL
+ if (s->summary_path == NULL
+ || s->meta_summary->path == NULL
|| (s->flags & CAMEL_SUMMARY_DIRTY) == 0)
return 0;
@@ -655,32 +678,65 @@ camel_folder_summary_save(CamelFolderSum
return -1;
}
+ /* Meta summary code */
+ /* This meta summary will be used by beagle in order to
+ quickly pass through the actual summary file, which
+ is quite time consuming otherwise.
+ */
+ /* FIXME: Merge meta-summary and summary */
+ path_meta = alloca(strlen(s->meta_summary->path)+4);
+ sprintf(path_meta, "%s~", s->meta_summary->path);
+ fd_meta = g_open(path_meta, O_RDWR|O_CREAT|O_TRUNC|O_BINARY, 0600);
+ if (fd_meta == -1)
+ return -1;
+ out_meta = fdopen(fd_meta, "wb");
+ if (out_meta == NULL) {
+ i = errno;
+ g_unlink(path);
+ g_unlink(path_meta);
+ close(fd);
+ close(fd_meta);
+ errno = i;
+ return -1;
+ }
+
io(printf("saving header\n"));
CAMEL_SUMMARY_LOCK(s, io_lock);
if (((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->summary_header_save(s, out) == -1)
goto exception;
-
+
+ if (summary_meta_header_save(s, out_meta) == -1)
+ goto exception;
+
/* now write out each message ... */
/* we check ferorr when done for i/o errors */
count = s->messages->len;
for (i = 0; i < count; i++) {
mi = s->messages->pdata[i];
- if (((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS (s)))->message_info_save (s, out, mi) == -1)
+ if (((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS (s)))->meta_message_info_save (s, out_meta, out, mi) == -1)
goto exception;
+ if (((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS (s)))->message_info_save (s, out, mi) == -1)
+ goto exception;
+
if (s->build_content) {
if (perform_content_info_save (s, out, ((CamelMessageInfoBase *)mi)->content) == -1)
goto exception;
}
}
+ /* FIXME: Can't we use the above "fd" variables, instead of fileno()? */
if (fflush (out) != 0 || fsync (fileno (out)) == -1)
goto exception;
+ if (fflush (out_meta) != 0 || fsync (fileno (out_meta)) == -1)
+ goto exception;
+
fclose (out);
-
+ fclose (out_meta);
+
CAMEL_SUMMARY_UNLOCK(s, io_lock);
#ifdef G_OS_WIN32
@@ -692,6 +748,13 @@ camel_folder_summary_save(CamelFolderSum
errno = i;
return -1;
}
+
+ if (g_rename(path_meta, s->meta_summary->path) == -1) {
+ i = errno;
+ g_unlink(path_meta);
+ errno = i;
+ return -1;
+ }
s->flags &= ~CAMEL_SUMMARY_DIRTY;
return 0;
@@ -701,10 +764,12 @@ camel_folder_summary_save(CamelFolderSum
i = errno;
fclose (out);
+ fclose (out_meta);
CAMEL_SUMMARY_UNLOCK(s, io_lock);
g_unlink (path);
+ g_unlink (path_meta);
errno = i;
return -1;
@@ -725,20 +790,30 @@ int
camel_folder_summary_header_load(CamelFolderSummary *s)
{
FILE *in;
+ FILE *in_meta;
int ret;
- if (s->summary_path == NULL)
+ if (s->summary_path == NULL ||
+ s->meta_summary->path == NULL)
return 0;
in = g_fopen(s->summary_path, "rb");
if (in == NULL)
return -1;
+ in_meta = g_fopen(s->meta_summary->path, "rb");
+ if (in_meta == NULL) {
+ fclose(in);
+ return -1;
+ }
+
CAMEL_SUMMARY_LOCK(s, io_lock);
ret = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->summary_header_load(s, in);
+ ret = summary_meta_header_load(s, in_meta);
CAMEL_SUMMARY_UNLOCK(s, io_lock);
fclose(in);
+ fclose(in_meta);
s->flags &= ~CAMEL_SUMMARY_DIRTY;
return ret;
}
@@ -1086,6 +1161,7 @@ camel_folder_summary_clear(CamelFolderSu
g_hash_table_destroy(s->messages_uid);
s->messages_uid = g_hash_table_new(g_str_hash, g_str_equal);
s->flags |= CAMEL_SUMMARY_DIRTY;
+ s->meta_summary->msg_expunged = TRUE;
CAMEL_SUMMARY_UNLOCK(s, summary_lock);
}
@@ -1104,8 +1180,9 @@ camel_folder_summary_remove(CamelFolderS
g_hash_table_remove(s->messages_uid, camel_message_info_uid(info));
g_ptr_array_remove(s->messages, info);
s->flags |= CAMEL_SUMMARY_DIRTY;
+ s->meta_summary->msg_expunged = TRUE;
CAMEL_SUMMARY_UNLOCK(s, summary_lock);
-
+
camel_message_info_free(info);
}
@@ -1390,8 +1467,30 @@ my_list_size(struct _node **list)
}
static int
+summary_meta_header_load(CamelFolderSummary *s, FILE *in)
+{
+ if (!s->meta_summary->path)
+ return -1;
+
+ fseek(in, 0, SEEK_SET);
+
+ io(printf("Loading meta-header\n"));
+
+ if (camel_file_util_decode_uint32(in, &s->meta_summary->major) == -1
+ || camel_file_util_decode_uint32(in, &s->meta_summary->minor) == -1
+ || camel_file_util_decode_uint32(in, &s->meta_summary->uid_len) == -1) {
+ return -1;
+ }
+
+ return 0;
+}
+
+static int
summary_header_load(CamelFolderSummary *s, FILE *in)
{
+ if (!s->summary_path)
+ return -1;
+
fseek(in, 0, SEEK_SET);
io(printf("Loading header\n"));
@@ -1471,6 +1570,25 @@ summary_header_save(CamelFolderSummary *
return camel_file_util_encode_fixed_int32(out, junk);
}
+static int
+summary_meta_header_save(CamelFolderSummary *s, FILE *out_meta)
+{
+ fseek(out_meta, 0, SEEK_SET);
+
+ /* Save meta-summary header */
+ if (s->meta_summary->msg_expunged) {
+ s->meta_summary->msg_expunged = FALSE;
+ camel_file_util_encode_uint32(out_meta, ++s->meta_summary->major);
+ camel_file_util_encode_uint32(out_meta, (s->meta_summary->minor=0));
+ } else {
+ camel_file_util_encode_uint32(out_meta, s->meta_summary->major);
+ camel_file_util_encode_uint32(out_meta, ++s->meta_summary->minor);
+ }
+ camel_file_util_encode_uint32(out_meta, s->meta_summary->uid_len);
+
+ return ferror(out_meta);
+}
+
/* are these even useful for anything??? */
static CamelMessageInfo *
message_info_new_from_parser(CamelFolderSummary *s, CamelMimeParser *mp)
@@ -1774,6 +1892,25 @@ error:
}
static int
+meta_message_info_save(CamelFolderSummary *s, FILE *out_meta, FILE *out, CamelMessageInfo *info)
+{
+ time_t timestamp;
+ off_t offset;
+ CamelMessageInfoBase *mi = (CamelMessageInfoBase *)info;
+
+ time (&timestamp);
+ offset = ftell (out);
+ /* FIXME: errno check after ftell */
+
+ camel_file_util_encode_time_t(out_meta, timestamp);
+ camel_file_util_encode_fixed_string(out_meta, camel_message_info_uid(mi), s->meta_summary->uid_len);
+ camel_file_util_encode_uint32(out_meta, mi->flags);
+ camel_file_util_encode_off_t(out_meta, offset);
+
+ return ferror(out);
+}
+
+static int
message_info_save(CamelFolderSummary *s, FILE *out, CamelMessageInfo *info)
{
guint32 count;
@@ -3115,6 +3252,7 @@ camel_folder_summary_class_init (CamelFo
klass->message_info_new_from_message = message_info_new_from_message;
klass->message_info_load = message_info_load;
klass->message_info_save = message_info_save;
+ klass->meta_message_info_save = meta_message_info_save;
klass->message_info_free = message_info_free;
klass->message_info_clone = message_info_clone;
Index: camel/camel-folder-summary.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/camel-folder-summary.h,v
retrieving revision 1.86
diff -u -p -r1.86 camel-folder-summary.h
--- camel/camel-folder-summary.h 31 Aug 2005 04:21:56 -0000 1.86
+++ camel/camel-folder-summary.h 12 Mar 2006 20:49:47 -0000
@@ -46,6 +46,8 @@ typedef struct _CamelFolderSummaryClass
typedef struct _CamelMessageInfo CamelMessageInfo;
typedef struct _CamelMessageInfoBase CamelMessageInfoBase;
+typedef struct _CamelFolderMetaSummary CamelFolderMetaSummary;
+
/* A tree of message content info structures
describe the content structure of the message (if it has any) */
struct _CamelMessageContentInfo {
@@ -224,6 +226,7 @@ struct _CamelFolderSummary {
GHashTable *messages_uid; /* CamelMessageInfo's by uid */
struct _CamelFolder *folder; /* parent folder, for events */
+ struct _CamelFolderMetaSummary *meta_summary; /* Meta summary */
};
struct _CamelFolderSummaryClass {
@@ -238,7 +241,8 @@ struct _CamelFolderSummaryClass {
CamelMessageInfo * (*message_info_new_from_parser)(CamelFolderSummary *, CamelMimeParser *);
CamelMessageInfo * (*message_info_new_from_message)(CamelFolderSummary *, CamelMimeMessage *);
CamelMessageInfo * (*message_info_load)(CamelFolderSummary *, FILE *);
- int (*message_info_save)(CamelFolderSummary *, FILE *, CamelMessageInfo *);
+ int (*message_info_save)(CamelFolderSummary *, FILE *, CamelMessageInfo *);
+ int (*meta_message_info_save)(CamelFolderSummary *, FILE *, FILE *, CamelMessageInfo *);
void (*message_info_free)(CamelFolderSummary *, CamelMessageInfo *);
CamelMessageInfo * (*message_info_clone)(CamelFolderSummary *, const CamelMessageInfo *);
@@ -272,6 +276,15 @@ struct _CamelFolderSummaryClass {
gboolean (*info_set_user_flag)(CamelMessageInfo *mi, const char *id, gboolean state);
gboolean (*info_set_user_tag)(CamelMessageInfo *mi, const char *id, const char *val);
gboolean (*info_set_flags)(CamelMessageInfo *mi, guint32 mask, guint32 set);
+};
+
+/* Meta-summary info */
+struct _CamelFolderMetaSummary {
+ guint32 major; /* Major version of meta-summary */
+ guint32 minor; /* Minor version of meta-summary */
+ guint32 uid_len; /* Length of UID (for implementors to use) */
+ gboolean msg_expunged; /* Whether any message is expunged or not */
+ char *path; /* Path to meta-summary-file */
};
CamelType camel_folder_summary_get_type (void);
Index: camel/providers/groupwise/camel-groupwise-summary.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-summary.c,v
retrieving revision 1.10
diff -u -p -r1.10 camel-groupwise-summary.c
--- camel/providers/groupwise/camel-groupwise-summary.c 9 Nov 2005 14:23:44 -0000 1.10
+++ camel/providers/groupwise/camel-groupwise-summary.c 12 Mar 2006 20:49:47 -0000
@@ -122,6 +122,9 @@ camel_groupwise_summary_init (CamelGroup
/* subclasses need to set the right instance data sizes */
s->message_info_size = sizeof(CamelGroupwiseMessageInfo);
s->content_info_size = sizeof(CamelGroupwiseMessageContentInfo);
+
+ /* Meta-summary - Overriding UID len */
+ s->meta_summary->uid_len = 2048;
}
Index: camel/providers/local/camel-mbox-summary.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/local/camel-mbox-summary.c,v
retrieving revision 1.56
diff -u -p -r1.56 camel-mbox-summary.c
--- camel/providers/local/camel-mbox-summary.c 8 Dec 2005 11:28:47 -0000 1.56
+++ camel/providers/local/camel-mbox-summary.c 12 Mar 2006 20:49:47 -0000
@@ -54,6 +54,7 @@ static CamelMessageInfo * message_info_n
static CamelMessageInfo * message_info_new_from_parser(CamelFolderSummary *, CamelMimeParser *);
static CamelMessageInfo * message_info_load (CamelFolderSummary *, FILE *);
static int message_info_save (CamelFolderSummary *, FILE *, CamelMessageInfo *);
+static int meta_message_info_save(CamelFolderSummary *s, FILE *out_meta, FILE *out, CamelMessageInfo *mi);
/*static void message_info_free (CamelFolderSummary *, CamelMessageInfo *);*/
static char *mbox_summary_encode_x_evolution (CamelLocalSummary *cls, const CamelLocalMessageInfo *mi);
@@ -153,6 +154,7 @@ camel_mbox_summary_class_init(CamelMboxS
sklass->message_info_new_from_parser = message_info_new_from_parser;
sklass->message_info_load = message_info_load;
sklass->message_info_save = message_info_save;
+ sklass->meta_message_info_save = meta_message_info_save;
/*sklass->message_info_free = message_info_free;*/
sklass->info_set_user_flag = mbox_info_set_user_flag;
@@ -378,6 +380,20 @@ message_info_load(CamelFolderSummary *s,
error:
camel_message_info_free(mi);
return NULL;
+}
+
+static int
+meta_message_info_save(CamelFolderSummary *s, FILE *out_meta, FILE *out, CamelMessageInfo *mi)
+{
+ CamelMboxMessageInfo *mbi = (CamelMboxMessageInfo *)mi;
+
+ io(printf("saving mbox message info\n"));
+
+ if (((CamelFolderSummaryClass *)camel_mbox_summary_parent)->meta_message_info_save(s, out_meta, out, mi) == -1
+ || camel_file_util_encode_off_t(out_meta, mbi->frompos) == -1)
+ return -1;
+
+ return 0;
}
static int
Index: camel/providers/local/camel-mbox-store.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/local/camel-mbox-store.c,v
retrieving revision 1.44
diff -u -p -r1.44 camel-mbox-store.c
--- camel/providers/local/camel-mbox-store.c 10 Jan 2006 07:56:48 -0000 1.44
+++ camel/providers/local/camel-mbox-store.c 13 Mar 2006 13:33:37 -0000
@@ -99,7 +99,7 @@ camel_mbox_store_get_type(void)
}
static char *extensions[] = {
- ".msf", ".ev-summary", ".ibex.index", ".ibex.index.data", ".cmeta", ".lock"
+ ".msf", ".ev-summary", ".ibex.index", ".ibex.index.data", ".cmeta", ".lock", ".ev-summary-meta"
};
static gboolean

View File

@ -0,0 +1,38 @@
Index: camel/camel-mime-utils.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/camel-mime-utils.c,v
retrieving revision 1.235
diff -u -p -r1.235 camel-mime-utils.c
--- camel/camel-mime-utils.c 23 Jan 2006 09:57:55 -0000 1.235
+++ camel/camel-mime-utils.c 2 Mar 2006 10:14:36 -0000
@@ -2247,7 +2247,7 @@ camel_content_type_unref(CamelContentTyp
g_free(ct->type);
g_free(ct->subtype);
g_free(ct);
- ct= NULL;
+ ct = NULL;
} else {
ct->refcount--;
}
@@ -2449,7 +2449,7 @@ header_decode_mailbox(const char **in, c
}
}
pre = header_decode_word (&inptr);
- header_decode_lwsp(&inptr);
+ /*header_decode_lwsp(&inptr);*/
} else {
w(g_warning("broken address? %s", *in));
}
@@ -2508,10 +2508,10 @@ header_decode_mailbox(const char **in, c
g_string_truncate(name, 0);
g_string_append(name, text);
}
- } else {
+ }/* else {
g_string_append(name, text?text:addr->str);
g_string_truncate(addr, 0);
- }
+ }*/
g_free(text);
/* or maybe that we've added up a bunch of broken bits to make an encoded word */

View File

@ -0,0 +1,16 @@
Index: servers/exchange/storage/exchange-hierarchy-webdav.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/exchange/storage/exchange-hierarchy-webdav.c,v
retrieving revision 1.11
diff -u -p -r1.11 exchange-hierarchy-webdav.c
--- servers/exchange/storage/exchange-hierarchy-webdav.c 25 Feb 2006 06:09:14 -0000 1.11
+++ servers/exchange/storage/exchange-hierarchy-webdav.c 6 Apr 2006 13:50:35 -0000
@@ -421,7 +421,7 @@ xfer_folder (ExchangeHierarchy *hier, EF
* update folder size in case of rename.
*/
- source_folder_name = strrchr (physical_uri + 1, '/');
+ source_folder_name = strrchr (physical_uri, '/') + 1;
source_parent = g_strndup (physical_uri,
source_folder_name - physical_uri);
if (!strcmp (e_folder_get_physical_uri (dest_parent), source_parent)) {

View File

@ -0,0 +1,100 @@
Index: camel/providers/imap/camel-imap-store.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/imap/camel-imap-store.c,v
retrieving revision 1.340.2.3
diff -u -r1.340.2.3 camel/providers/imap/camel-imap-store.c
--- camel/providers/imap/camel-imap-store.c 24 Apr 2006 15:18:25 -0000 1.340.2.3
+++ camel/providers/imap/camel-imap-store.c 1 May 2006 21:14:40 -0000
@@ -280,7 +280,7 @@
imap_store->parameters = 0;
if (camel_url_get_param (url, "use_lsub"))
imap_store->parameters |= IMAP_PARAM_SUBSCRIPTIONS;
- if (camel_url_get_param (url, "namespace")) {
+ if (camel_url_get_param (url, "override_namespace") && camel_url_get_param (url, "namespace")) {
imap_store->parameters |= IMAP_PARAM_OVERRIDE_NAMESPACE;
g_free(imap_store->namespace);
imap_store->namespace = g_strdup (camel_url_get_param (url, "namespace"));
@@ -2618,7 +2618,10 @@
if (store->namespace && store->namespace[0]) {
char *pattern;
-
+
+ get_folders_sync(store, "INBOX", &m->ex);
+ if (camel_exception_is_set(&m->ex))
+ goto done;
get_folders_sync(store, store->namespace, &m->ex);
if (camel_exception_is_set(&m->ex))
goto done;
@@ -2697,6 +2700,10 @@
if (top[0] == 0) {
if (imap_store->namespace && imap_store->namespace[0]) {
+ get_folders_sync(imap_store, "INBOX", ex);
+ if (camel_exception_is_set(ex))
+ goto fail;
+
i = strlen(imap_store->namespace)-1;
pattern = g_alloca(i+5);
strcpy(pattern, imap_store->namespace);
@@ -2711,7 +2718,7 @@
}
} else {
char *name;
-
+
name = camel_imap_store_summary_full_from_path(imap_store->summary, top);
if (name == NULL)
name = camel_imap_store_summary_path_to_full(imap_store->summary, top, imap_store->dir_sep);
@@ -2748,6 +2755,7 @@
guint32 flags, CamelException *ex)
{
CamelImapStore *imap_store = CAMEL_IMAP_STORE (store);
+ gboolean include_inbox = FALSE;
CamelFolderInfo *fi;
GPtrArray *folders;
char *pattern, *name;
@@ -2760,12 +2768,14 @@
folders = g_ptr_array_new ();
- if (top == NULL)
+ if (top == NULL || top[0] == '\0') {
+ include_inbox = TRUE;
top = "";
+ }
/* get starting point */
if (top[0] == 0) {
- if (imap_store->namespace) {
+ if (imap_store->namespace && imap_store->namespace[0]) {
name = g_strdup(imap_store->summary->namespace->full_name);
top = imap_store->summary->namespace->path;
} else
@@ -2789,9 +2799,10 @@
if (si == NULL)
continue;
-
+
if ((!strcmp(name, camel_imap_store_info_full_name(imap_store->summary, si))
- || imap_match_pattern(imap_store->dir_sep, pattern, camel_imap_store_info_full_name(imap_store->summary, si)))
+ || imap_match_pattern(imap_store->dir_sep, pattern, camel_imap_store_info_full_name(imap_store->summary, si))
+ || (include_inbox && !g_ascii_strcasecmp (camel_imap_store_info_full_name(imap_store->summary, si), "INBOX")))
&& ((imap_store->parameters & IMAP_PARAM_SUBSCRIPTIONS) == 0
|| (flags & CAMEL_STORE_FOLDER_INFO_SUBSCRIBED) == 0
|| (si->flags & CAMEL_STORE_INFO_FOLDER_SUBSCRIBED))) {
@@ -2804,11 +2815,11 @@
it. See create folder */
if (fi->flags & CAMEL_FOLDER_NOINFERIORS)
fi->flags = (fi->flags & ~CAMEL_FOLDER_NOINFERIORS) | CAMEL_FOLDER_NOCHILDREN;
-
+
/* blah, this gets lost somewhere, i can't be bothered finding out why */
if (!g_ascii_strcasecmp(fi->full_name, "inbox"))
fi->flags = (fi->flags & ~CAMEL_FOLDER_TYPE_MASK) | CAMEL_FOLDER_TYPE_INBOX;
-
+
if (si->flags & CAMEL_FOLDER_NOSELECT) {
CamelURL *url = camel_url_new(fi->uri, NULL);

104
bgo-321797.patch Normal file
View File

@ -0,0 +1,104 @@
Index: camel/providers/imap/camel-imap-store.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/imap/camel-imap-store.c,v
retrieving revision 1.340.2.2
diff -u -r1.340.2.2 camel-imap-store.c
--- camel/providers/imap/camel-imap-store.c 20 Apr 2006 21:12:15 -0000 1.340.2.2
+++ camel/providers/imap/camel-imap-store.c 21 Apr 2006 18:56:51 -0000
@@ -978,16 +978,11 @@
camel_exception_clear (ex);
ai = camel_getaddrinfo(service->url->host, port, &hints, ex);
}
+
if (ai == NULL)
return FALSE;
- if (!(ret = connect_to_server (service, ai, mode, ex)) && mode == MODE_SSL) {
- camel_exception_clear (ex);
- ret = connect_to_server (service, ai, MODE_TLS, ex);
- } else if (!ret && mode == MODE_TLS) {
- camel_exception_clear (ex);
- ret = connect_to_server (service, ai, MODE_CLEAR, ex);
- }
+ ret = connect_to_server (service, ai, mode, ex);
camel_freeaddrinfo (ai);
Index: camel/providers/imap4/camel-imap4-store.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/imap4/camel-imap4-store.c,v
retrieving revision 1.56.2.3
diff -u -r1.56.2.3 camel-imap4-store.c
--- camel/providers/imap4/camel-imap4-store.c 21 Apr 2006 15:42:20 -0000 1.56.2.3
+++ camel/providers/imap4/camel-imap4-store.c 21 Apr 2006 18:56:51 -0000
@@ -383,16 +383,11 @@
camel_exception_clear (ex);
ai = camel_getaddrinfo (service->url->host, port, &hints, ex);
}
+
if (ai == NULL)
return FALSE;
- if (!(ret = connect_to_server (engine, ai, mode, ex)) && mode == MODE_SSL) {
- camel_exception_clear (ex);
- ret = connect_to_server (engine, ai, MODE_TLS, ex);
- } else if (!ret && mode == MODE_TLS) {
- camel_exception_clear (ex);
- ret = connect_to_server (engine, ai, MODE_CLEAR, ex);
- }
+ ret = connect_to_server (engine, ai, mode, ex);
camel_freeaddrinfo (ai);
Index: camel/providers/pop3/camel-pop3-store.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/pop3/camel-pop3-store.c,v
retrieving revision 1.124
diff -u -r1.124 camel-pop3-store.c
--- camel/providers/pop3/camel-pop3-store.c 31 Aug 2005 04:26:04 -0000 1.124
+++ camel/providers/pop3/camel-pop3-store.c 21 Apr 2006 18:56:51 -0000
@@ -324,16 +324,11 @@
camel_exception_clear (ex);
ai = camel_getaddrinfo(service->url->host, port, &hints, ex);
}
+
if (ai == NULL)
return FALSE;
- if (!(ret = connect_to_server (service, ai, mode, ex)) && mode == MODE_SSL) {
- camel_exception_clear (ex);
- ret = connect_to_server (service, ai, MODE_TLS, ex);
- } else if (!ret && mode == MODE_TLS) {
- camel_exception_clear (ex);
- ret = connect_to_server (service, ai, MODE_CLEAR, ex);
- }
+ ret = connect_to_server (service, ai, mode, ex);
camel_freeaddrinfo (ai);
Index: camel/providers/smtp/camel-smtp-transport.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/smtp/camel-smtp-transport.c,v
retrieving revision 1.169.6.2
diff -u -r1.169.6.2 camel-smtp-transport.c
--- camel/providers/smtp/camel-smtp-transport.c 18 Apr 2006 20:59:29 -0000 1.169.6.2
+++ camel/providers/smtp/camel-smtp-transport.c 21 Apr 2006 18:56:51 -0000
@@ -431,16 +431,11 @@
camel_exception_clear (ex);
ai = camel_getaddrinfo(service->url->host, port, &hints, ex);
}
+
if (ai == NULL)
return FALSE;
- if (!(ret = connect_to_server (service, ai, mode, ex)) && mode == MODE_SSL) {
- camel_exception_clear (ex);
- ret = connect_to_server (service, ai, MODE_TLS, ex);
- } else if (!ret && mode == MODE_TLS) {
- camel_exception_clear (ex);
- ret = connect_to_server (service, ai, MODE_CLEAR, ex);
- }
+ ret = connect_to_server (service, ai, mode, ex);
camel_freeaddrinfo (ai);

View File

@ -0,0 +1,13 @@
--- calendar/libedata-cal/e-cal-backend-cache.c.orig 2006-01-19 09:41:58.000000000 +0100
+++ calendar/libedata-cal/e-cal-backend-cache.c 2006-03-23 15:24:54.421930564 +0100
@@ -235,7 +235,9 @@ e_cal_backend_cache_get_type (void)
0,
(GInstanceInitFunc) e_cal_backend_cache_init,
};
- type = g_type_register_static (E_TYPE_FILE_CACHE, "ECalBackendCache", &info, 0);
+ /* Check if the type is already registered */
+ if (!(type = g_type_from_name ("ECalBackendCache")))
+ type = g_type_register_static (E_TYPE_FILE_CACHE, "ECalBackendCache", &info, 0);
}
g_static_mutex_unlock (&registering);

View File

@ -0,0 +1,144 @@
Index: servers/exchange/lib/e2k-uri.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/exchange/lib/e2k-uri.c,v
retrieving revision 1.5
diff -u -p -r1.5 e2k-uri.c
--- servers/exchange/lib/e2k-uri.c 27 Jan 2006 14:16:06 -0000 1.5
+++ servers/exchange/lib/e2k-uri.c 18 Apr 2006 10:00:10 -0000
@@ -109,14 +109,6 @@ e2k_uri_new (const char *uri_string)
*backslash = '\0';
uri->user = g_strdup (backslash + 1);
}
- else {
- /* if backslash is not there check for @ */
- user_at = strchr (uri->user, '@');
- if (user_at) {
- *user_at = '\0';
- uri->domain = g_strdup (user_at + 1);
- }
- }
} else
uri->user = uri->passwd = uri->domain = NULL;
Index: servers/exchange/lib/e2k-validate.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/exchange/lib/e2k-validate.h,v
retrieving revision 1.3
diff -u -p -r1.3 e2k-validate.h
--- servers/exchange/lib/e2k-validate.h 1 Jul 2005 05:43:21 -0000 1.3
+++ servers/exchange/lib/e2k-validate.h 18 Apr 2006 10:00:47 -0000
@@ -36,7 +36,7 @@ typedef enum {
E2K_AUTOCONFIG_FAILED
} E2kAutoconfigResult;
-gboolean e2k_validate_user (const char *owa_url, char *user, ExchangeParams *exchange_params, gboolean *remember_password, E2kAutoconfigResult *result);
+gboolean e2k_validate_user (const char *owa_url, char **user, ExchangeParams *exchange_params, gboolean *remember_password, E2kAutoconfigResult *result);
#ifdef __cplusplus
Index: servers/exchange/lib/e2k-autoconfig.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/exchange/lib/e2k-autoconfig.c,v
retrieving revision 1.14
diff -u -p -r1.14 e2k-autoconfig.c
--- servers/exchange/lib/e2k-autoconfig.c 6 Mar 2006 06:00:25 -0000 1.14
+++ servers/exchange/lib/e2k-autoconfig.c 18 Apr 2006 10:02:36 -0000
@@ -1002,6 +1002,7 @@ set_account_uri_string (E2kAutoconfig *a
g_string_append (uri, ";mailbox=");
e2k_uri_append_encoded (uri, mailbox, FALSE, ";?");
}
+ printf ("set account uri string: mailbox = %s \n", mailbox);
g_string_append (uri, ";owa_path=/");
e2k_uri_append_encoded (uri, path, FALSE, ";?");
g_free (path);
@@ -1505,6 +1506,7 @@ validate (const char *owa_url, char *use
*mailbox++ = '\0';
exchange_params->mailbox = g_strdup (mailbox);
+ printf ("validate: mailbox = %s \n", exchange_params->mailbox);
exchange_params->owa_path = g_strdup_printf ("%s%s", "/", path);
g_free (path);
exchange_params->host = g_strdup (ac->pf_server);
@@ -1619,14 +1621,20 @@ validate (const char *owa_url, char *use
}
gboolean
-e2k_validate_user (const char *owa_url, char *user,
+e2k_validate_user (const char *owa_url, char **user,
ExchangeParams *exchange_params, gboolean *remember_password,
E2kAutoconfigResult *result)
{
gboolean valid = FALSE, remember=FALSE;
char *key, *password, *prompt;
+ char *username;
+ gchar **usernames;
+ int try = 0;
- key = g_strdup_printf ("%s//%s@%s/", "exchange:", user, owa_url); /* FIXME */
+try_auth_again:
+ username = g_strdup (*user);
+
+ key = g_strdup_printf ("%s//%s@%s/", "exchange:", username, owa_url); /* FIXME */
password = e_passwords_get_password ("Exchange", key);
if (password) {
/* This can be the case, where user presses authenticate button and
@@ -1636,7 +1644,7 @@ e2k_validate_user (const char *owa_url,
e_passwords_forget_password ("Exchange", key);
}
- prompt = g_strdup_printf (_("Enter password for %s"), user);
+ prompt = g_strdup_printf (_("Enter password for %s"), username);
password = e_passwords_ask_password (_("Enter password"),
"Exchange", key, prompt,
E_PASSWORDS_REMEMBER_FOREVER|E_PASSWORDS_SECRET,
@@ -1644,10 +1652,11 @@ e2k_validate_user (const char *owa_url,
g_free (prompt);
if (!password) {
g_free (key);
+ g_free (username);
return valid;
}
- valid = validate (owa_url, user, password, exchange_params, result);
+ valid = validate (owa_url, username, password, exchange_params, result);
if (valid) {
/* generate the proper key once the host name
* is read and remember password temporarily,
@@ -1659,18 +1668,35 @@ e2k_validate_user (const char *owa_url,
g_free (key);
if (exchange_params->is_ntlm)
key = g_strdup_printf ("exchange://%s;auth=NTLM@%s/",
- user, exchange_params->host);
+ username, exchange_params->host);
else
- key = g_strdup_printf ("exchange://%s@%s/", user, exchange_params->host);
+ key = g_strdup_printf ("exchange://%s@%s/", username, exchange_params->host);
e_passwords_add_password (key, password);
e_passwords_remember_password ("Exchange", key);
}
else {
+ if (try == 0) {
+ /* Check for name as e-mail id and try once again
+ * extracing username from e-mail id.
+ */
+ usernames = g_strsplit (*user, "@", 2);
+ if (usernames && usernames[0] && usernames[1]) {
+ username = g_strdup (usernames[0]);
+ g_strfreev (usernames);
+ try ++;
+ memset(*user, 0, strlen(*user));
+ g_free (*user);
+ *user = g_strdup (username);
+ g_free (username);
+ goto try_auth_again;
+ }
+ }
/* if validation failed*/
e_passwords_forget_password ("Exchange", key);
}
g_free (key);
g_free (password);
+ g_free (username);
return valid;
}

View File

@ -0,0 +1,40 @@
--- calendar/backends/file/e-cal-backend-file.c.orig 2006-02-28 13:16:32.000000000 +0100
+++ calendar/backends/file/e-cal-backend-file.c 2006-03-23 15:15:18.582703795 +0100
@@ -399,13 +399,17 @@ check_dup_uid (ECalBackendFile *cbfile,
{
ECalBackendFilePrivate *priv;
ECalBackendFileObject *obj_data;
- const char *uid;
+ const char *uid = NULL;
char *new_uid;
priv = cbfile->priv;
e_cal_component_get_uid (comp, &uid);
-
+ if (!uid) {
+ g_warning ("Checking for duplicate uid, the component does not have a valid UID skipping it\n");
+ return;
+ }
+
obj_data = g_hash_table_lookup (priv->comp_uid_hash, uid);
if (!obj_data)
return; /* Everything is fine */
@@ -447,11 +451,16 @@ add_component (ECalBackendFile *cbfile,
{
ECalBackendFilePrivate *priv;
ECalBackendFileObject *obj_data;
- const char *uid;
+ const char *uid = NULL;
priv = cbfile->priv;
e_cal_component_get_uid (comp, &uid);
+ if (!uid) {
+ g_warning ("The component does not have a valid UID skipping it\n");
+ return;
+ }
+
obj_data = g_hash_table_lookup (priv->comp_uid_hash, uid);
if (e_cal_component_is_instance (comp)) {
const char *rid;

View File

@ -0,0 +1,12 @@
--- calendar/libedata-cal/e-cal-backend.c.orig 2006-03-04 10:57:00.000000000 +0100
+++ calendar/libedata-cal/e-cal-backend.c 2006-03-23 15:34:00.889158434 +0100
@@ -1319,7 +1319,8 @@ e_cal_backend_notify_object_removed (ECa
if (object == NULL) {
/* if object == NULL, it means the object has been completely
removed from the backend */
- e_data_cal_view_notify_objects_removed_1 (query, id);
+ if (e_data_cal_view_object_matches (query, old_object))
+ e_data_cal_view_notify_objects_removed_1 (query, id);
} else
match_query_and_notify (query, old_object, object);

View File

@ -0,0 +1,12 @@
--- libedataserver/e-source-group.c.orig 2005-12-08 08:59:00.000000000 +0100
+++ libedataserver/e-source-group.c 2006-03-23 15:19:38.363378094 +0100
@@ -216,6 +216,9 @@ e_source_group_new_from_xmldoc (xmlDocPt
goto done;
new = g_object_new (e_source_group_get_type (), NULL);
+ if (!new)
+ goto done;
+
new->priv->uid = g_strdup (uid);
e_source_group_set_name (new, name);

View File

@ -0,0 +1,15 @@
--- camel/camel-mime-filter-crlf.c 2005-08-31 06:21:56.000000000 +0200
+++ camel/camel-mime-filter-crlf.c.new 2006-11-06 07:40:33.000000000 +0100
@@ -97,7 +97,11 @@ filter (CamelMimeFilter *f, char *in, si
*outptr++ = *inptr++;
}
} else {
- camel_mime_filter_set_size (f, len, FALSE);
+ /* Output can "grow" by one byte if crlf->saw_cr was set as
+ * a carry-over from the previous invocation. This will happen
+ * in practice, as the input is processed in arbitrarily-sized
+ * blocks. */
+ camel_mime_filter_set_size (f, len+1, FALSE);
outptr = f->outbuf;
while (inptr < inend) {

View File

@ -0,0 +1,89 @@
Index: camel/providers/groupwise/camel-groupwise-store.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-store.c,v
retrieving revision 1.94
diff -u -p -r1.94 camel-groupwise-store.c
--- camel/providers/groupwise/camel-groupwise-store.c 13 Mar 2006 06:31:04 -0000 1.94
+++ camel/providers/groupwise/camel-groupwise-store.c 13 Mar 2006 09:42:28 -0000
@@ -169,9 +169,9 @@ groupwise_compare_folder_name (gconstpoi
static gboolean
groupwise_auth_loop (CamelService *service, CamelException *ex)
{
- CamelGroupwiseStore *groupwise_store = CAMEL_GROUPWISE_STORE (service);
CamelSession *session = camel_service_get_session (service);
CamelStore *store = CAMEL_STORE (service);
+ CamelGroupwiseStore *groupwise_store = CAMEL_GROUPWISE_STORE (store);
CamelGroupwiseStorePrivate *priv = groupwise_store->priv;
char *errbuf = NULL;
gboolean authenticated = FALSE;
@@ -183,6 +183,7 @@ groupwise_auth_loop (CamelService *servi
else
uri = g_strconcat ("http://", priv->server_name, ":", priv->port, "/soap", NULL);
service->url->passwd = NULL;
+
while (!authenticated) {
if (errbuf) {
@@ -192,6 +193,7 @@ groupwise_auth_loop (CamelService *servi
service->url->passwd = NULL;
}
+
if (!service->url->passwd && !(store->flags & CAMEL_STORE_PROXY)) {
char *prompt;
@@ -268,10 +270,9 @@ groupwise_connect (CamelService *service
d("in groupwise store connect\n");
/* if (((CamelOfflineStore *) store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL ||
- (service->status == CAMEL_SERVICE_DISCONNECTED))
+ (service->status == CAMEL_SERVICE_DISCONNECTED))
return FALSE; */
-
- if (((CamelOfflineStore *) store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL)
+ if (service->status == CAMEL_SERVICE_DISCONNECTED)
return FALSE;
if (!priv) {
@@ -293,7 +294,9 @@ groupwise_connect (CamelService *service
return FALSE;
}
+
service->status = CAMEL_SERVICE_CONNECTED;
+ ((CamelOfflineStore *) store)->state = CAMEL_OFFLINE_STORE_NETWORK_AVAIL;
if (!e_gw_connection_get_version (priv->cnc)) {
camel_session_alert_user(session,
@@ -1110,6 +1113,7 @@ groupwise_get_folder_info (CamelStore *s
if (top && groupwise_is_system_folder (top))
return groupwise_build_folder_info (groupwise_store, NULL, top );
+
/*
* Thanks to Michael, for his cached folders implementation in IMAP
* is used as is here.
@@ -1141,6 +1145,12 @@ groupwise_get_folder_info (CamelStore *s
CAMEL_SERVICE_LOCK (store, connect_lock);
if ((groupwise_store->list_loaded == FALSE) && check_for_connection((CamelService *)store, ex)) {
+ if (!priv->cnc) {
+ if (groupwise_connect ((CamelService *)store, ex)) {
+ g_warning ("Could connect!!!\n");
+ } else
+ g_warning ("Could not connect..failure connecting\n");
+ }
if (camel_groupwise_store_connected ((CamelGroupwiseStore *)store, ex)) {
groupwise_store->list_loaded = TRUE;
groupwise_folders_sync (groupwise_store, ex);
@@ -1416,8 +1426,9 @@ gboolean
camel_groupwise_store_connected (CamelGroupwiseStore *store, CamelException *ex)
{
if (((CamelOfflineStore *) store)->state == CAMEL_OFFLINE_STORE_NETWORK_AVAIL
- && camel_service_connect ((CamelService *)store, ex))
+ && camel_service_connect ((CamelService *)store, ex)) {
return TRUE;
+ }
/*Not online, so return FALSE*/
return FALSE;
}

View File

@ -0,0 +1,73 @@
Index: camel/camel-gpg-context.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/camel-gpg-context.c,v
retrieving revision 1.77
diff -u -p -r1.77 camel-gpg-context.c
--- camel/camel-gpg-context.c 2 Feb 2006 08:37:46 -0000 1.77
+++ camel/camel-gpg-context.c 16 Mar 2006 05:04:39 -0000
@@ -811,7 +811,7 @@ gpg_ctx_parse_status (struct _GpgCtx *gp
"user: \"%s\""), name);
}
- if ((passwd = camel_session_get_password (gpg->session, NULL, NULL, prompt, gpg->need_id, CAMEL_SESSION_PASSWORD_SECRET, ex)) && !gpg->utf8) {
+ if ((passwd = camel_session_get_password (gpg->session, NULL, NULL, prompt, gpg->need_id, CAMEL_SESSION_PASSWORD_SECRET|CAMEL_SESSION_PASSPHRASE, ex)) && !gpg->utf8) {
char *opasswd = passwd;
if ((passwd = g_locale_to_utf8 (passwd, -1, &nread, &nwritten, NULL))) {
Index: camel/camel-session.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/camel-session.h,v
retrieving revision 1.53
diff -u -p -r1.53 camel-session.h
--- camel/camel-session.h 22 Dec 2005 01:48:30 -0000 1.53
+++ camel/camel-session.h 16 Mar 2006 05:04:39 -0000
@@ -56,6 +56,7 @@ enum {
CAMEL_SESSION_PASSWORD_REPROMPT = 1 << 0,
CAMEL_SESSION_PASSWORD_SECRET = 1 << 2,
CAMEL_SESSION_PASSWORD_STATIC = 1 << 3,
+ CAMEL_SESSION_PASSPHRASE = 1 << 4,
};
struct _CamelSession
Index: libedataserverui/e-passwords.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/libedataserverui/e-passwords.c,v
retrieving revision 1.31
diff -u -p -r1.31 e-passwords.c
--- libedataserverui/e-passwords.c 24 Feb 2006 21:00:47 -0000 1.31
+++ libedataserverui/e-passwords.c 16 Mar 2006 05:04:42 -0000
@@ -467,9 +739,16 @@ ep_ask_password(EPassMsg *msg)
/* static password, shouldn't be remembered between sessions,
but will be remembered within the session beyond our control */
if (type != E_PASSWORDS_REMEMBER_NEVER) {
- msg->check = gtk_check_button_new_with_mnemonic(type == E_PASSWORDS_REMEMBER_FOREVER
- ? _("_Remember this password")
- : _("_Remember this password for the remainder of this session"));
+ if (msg->flags & E_PASSWORDS_PASSPHRASE) {
+ msg->check = gtk_check_button_new_with_mnemonic(type == E_PASSWORDS_REMEMBER_FOREVER
+ ? _("_Remember this passphrase")
+ : _("_Remember this passphrase for the remainder of this session"));
+ } else {
+ msg->check = gtk_check_button_new_with_mnemonic(type == E_PASSWORDS_REMEMBER_FOREVER
+ ? _("_Remember this password")
+ : _("_Remember this password for the remainder of this session"));
+
+ }
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (msg->check), *msg->remember);
gtk_box_pack_start (GTK_BOX (vbox), msg->check, TRUE, FALSE, 3);
if ((msg->flags & E_PASSWORDS_DISABLE_REMEMBER))
Index: libedataserverui/e-passwords.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/libedataserverui/e-passwords.h,v
retrieving revision 1.12
diff -u -p -r1.12 e-passwords.h
--- libedataserverui/e-passwords.h 31 Aug 2005 04:26:10 -0000 1.12
+++ libedataserverui/e-passwords.h 16 Mar 2006 05:04:42 -0000
@@ -58,6 +58,7 @@ typedef enum {
E_PASSWORDS_REPROMPT = 1<<9,
E_PASSWORDS_ONLINE = 1<<10, /* only ask if we're online */
E_PASSWORDS_DISABLE_REMEMBER = 1<<11, /* disable the 'remember password' checkbox */
+ E_PASSWORDS_PASSPHRASE = 1<<12, /* We are asking a passphrase */
} EPasswordsRememberType;
char * e_passwords_ask_password (const char *title,

View File

@ -0,0 +1,217 @@
Index: camel/providers/groupwise/camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.119
diff -u -p -r1.119 camel-groupwise-folder.c
--- camel/providers/groupwise/camel-groupwise-folder.c 15 Mar 2006 08:45:26 -0000 1.119
+++ camel/providers/groupwise/camel-groupwise-folder.c 16 Mar 2006 11:29:35 -0000
@@ -49,6 +49,8 @@
#include <e-gw-connection.h>
#include <e-gw-item.h>
+#include <libsoup/soup-misc.h>
+
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -58,6 +60,7 @@
#define REMOVE_JUNK_ENTRY -1
#define JUNK_FOLDER "Junk Mail"
#define READ_CURSOR_MAX_IDS 500
+#define MAX_ATTACHMENT_SIZE 1*1024*1024 /*In bytes*/
static CamelOfflineFolderClass *parent_class = NULL;
@@ -1455,7 +1458,7 @@ groupwise_folder_item_to_msg( CamelFolde
const char *uid = NULL;
gboolean is_text_html = FALSE;
gboolean is_text_html_embed = FALSE;
-
+ gboolean is_base64_encoded = FALSE;
uid = e_gw_item_get_id(item);
cnc = cnc_lookup (priv);
@@ -1541,6 +1544,7 @@ groupwise_folder_item_to_msg( CamelFolde
int len = 0;
CamelMimePart *part;
EGwItem *temp_item;
+ is_base64_encoded = FALSE;
if (attach->contentid && (is_text_html_embed != TRUE))
is_text_html_embed = TRUE;
@@ -1568,9 +1572,36 @@ groupwise_folder_item_to_msg( CamelFolde
}
g_object_unref (temp_item);
} else {
- status = e_gw_connection_get_attachment (cnc,
- attach->id, 0, -1,
- (const char **)&attachment, &len);
+ g_print ("%d:%d\n", attach->size, MAX_ATTACHMENT_SIZE);
+ if (attach->size > MAX_ATTACHMENT_SIZE) {
+ long count = 0;
+ int i, t_len=0, offset=0, t_offset=0;
+ char *t_attach = NULL;
+ GString *gstr = g_string_new (NULL);
+
+ count = (attach->size)/(1024*1024);
+ count++;
+ len = 0;
+ for (i = 0; i<count; i++) {
+ status = e_gw_connection_get_attachment_base64 (cnc,
+ attach->id, t_offset, MAX_ATTACHMENT_SIZE,
+ (const char **)&t_attach, &t_len, &offset);
+ if (status == E_GW_CONNECTION_STATUS_OK) {
+ gstr = g_string_append (gstr, t_attach);
+ t_offset = offset;
+ g_free (t_attach);
+ t_attach = NULL;
+ t_len = 0;
+ }
+ }
+ attachment = soup_base64_decode (gstr->str, &len);
+ g_string_free (gstr, TRUE);
+ is_base64_encoded = FALSE;
+ } else {
+ status = e_gw_connection_get_attachment (cnc,
+ attach->id, 0, -1,
+ (const char **)&attachment, &len);
+ }
if (status != E_GW_CONNECTION_STATUS_OK) {
g_warning ("Could not get attachment\n");
continue;
@@ -1613,6 +1644,8 @@ groupwise_folder_item_to_msg( CamelFolde
//camel_mime_part_set_filename(part, g_strdup(attach->name));
if (attach->contentType) {
+ if (is_base64_encoded)
+ camel_mime_part_set_encoding (part, CAMEL_TRANSFER_ENCODING_BASE64);
camel_mime_part_set_content(part, attachment, len, attach->contentType);
camel_content_type_set_param (((CamelDataWrapper *) part)->mime_type, "name", attach->name);
} else
@@ -1872,15 +1905,16 @@ groupwise_transfer_messages_to (CamelFol
if (status == E_GW_CONNECTION_STATUS_OK) {
if (delete_originals)
camel_folder_delete_message(source, uids->pdata[index]);
- /* Refresh the destination folder, if its not refreshed already */
- if (gw_store->current_folder != destination ||
- camel_folder_summary_count (destination->summary) == count)
- camel_folder_refresh_info (destination, ex);
} else {
g_warning ("Warning!! Could not move item : %s\n", (char *)uids->pdata[index]);
}
index ++;
}
+ /* Refresh the destination folder, if its not refreshed already */
+ if (gw_store->current_folder != destination ||
+ camel_folder_summary_count (destination->summary) == count)
+ camel_folder_refresh_info (destination, ex);
+
camel_folder_summary_touch (source->summary);
camel_folder_summary_touch (destination->summary);
Index: servers/groupwise/e-gw-connection.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/groupwise/e-gw-connection.c,v
retrieving revision 1.139
diff -u -p -r1.139 e-gw-connection.c
--- servers/groupwise/e-gw-connection.c 15 Mar 2006 06:08:24 -0000 1.139
+++ servers/groupwise/e-gw-connection.c 17 Mar 2006 05:22:38 -0000
@@ -148,6 +148,7 @@ e_gw_connection_parse_response_status (S
case 53530: return E_GW_CONNECTION_STATUS_OTHER;
/* FIXME: 58652 should be changed with an enum.*/
case 58652: return 58652;
+ case 59922: return 59922; /*Very big attachment, get in chunks*/
/* FIXME: map all error codes */
}
@@ -2571,6 +2572,75 @@ e_gw_connection_get_attachment (EGwConne
return E_GW_CONNECTION_STATUS_OK;
}
+/*
+ *
+ */
+EGwConnectionStatus
+e_gw_connection_get_attachment_base64 (EGwConnection *cnc, const char *id, int offset, int length, const char **attachment, int *attach_length, int *offset_r)
+{
+
+ SoupSoapMessage *msg;
+ SoupSoapResponse *response;
+ EGwConnectionStatus status;
+ SoupSoapParameter *param ;
+ char *buffer = NULL, *buf_length = NULL, *o_return = NULL;
+
+ g_return_val_if_fail (E_IS_GW_CONNECTION (cnc), E_GW_CONNECTION_STATUS_INVALID_OBJECT);
+
+ /* build the SOAP message */
+ msg = e_gw_message_new_with_header (cnc->priv->uri, cnc->priv->session_id, "getAttachmentRequest");
+ if (!msg) {
+ g_warning (G_STRLOC ": Could not build SOAP message");
+ return E_GW_CONNECTION_STATUS_UNKNOWN;
+ }
+
+
+ e_gw_message_write_string_parameter (msg, "id", NULL, id);
+ e_gw_message_write_int_parameter (msg, "offset", NULL, offset);
+ e_gw_message_write_int_parameter (msg, "length", NULL, length);
+
+ e_gw_message_write_footer (msg);
+
+ /* send message to server */
+ response = e_gw_connection_send_message (cnc, msg);
+ if (!response) {
+ g_object_unref (msg);
+ return E_GW_CONNECTION_STATUS_NO_RESPONSE;
+ }
+
+ status = e_gw_connection_parse_response_status (response);
+ if (status != E_GW_CONNECTION_STATUS_OK) {
+ if (status == E_GW_CONNECTION_STATUS_INVALID_CONNECTION)
+ reauthenticate (cnc);
+ g_object_unref (response);
+ g_object_unref (msg);
+ return status;
+ }
+
+
+ param = soup_soap_response_get_first_parameter_by_name (response, "part") ;
+ if (param) {
+ buf_length = soup_soap_parameter_get_property (param, "length") ;
+ o_return = soup_soap_parameter_get_property (param, "offset") ;
+ buffer = soup_soap_parameter_get_string_value (param) ;
+ }
+
+ if (buffer && buf_length) {
+ int len = atoi (buf_length) ;
+ *attachment = g_strdup (buffer);
+ *attach_length = len;
+ *offset_r = atoi (o_return);
+ }
+
+ /* free memory */
+ g_free (buffer) ;
+ g_free (buf_length) ;
+ g_free (o_return);
+ g_object_unref (response);
+ g_object_unref (msg);
+
+ return E_GW_CONNECTION_STATUS_OK;
+}
EGwConnectionStatus
e_gw_connection_add_item (EGwConnection *cnc, const char *container, const char *id)
Index: servers/groupwise/e-gw-connection.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/groupwise/e-gw-connection.h,v
retrieving revision 1.68
diff -u -p -r1.68 e-gw-connection.h
--- servers/groupwise/e-gw-connection.h 31 Aug 2005 04:26:07 -0000 1.68
+++ servers/groupwise/e-gw-connection.h 17 Mar 2006 05:22:38 -0000
@@ -144,6 +144,7 @@ EGwConnectionStatus e_gw_connection_get_
EGwConnectionStatus e_gw_connection_create_folder(EGwConnection *cnc, const char *parent_name,const char *folder_name, char **container_id) ;
EGwConnectionStatus
e_gw_connection_get_attachment (EGwConnection *cnc, const char *id, int offset, int length, const char **attachment, int *attach_length) ;
+EGwConnectionStatus e_gw_connection_get_attachment_base64 (EGwConnection *cnc, const char *id, int offset, int length, const char **attachment, int *attach_length, int *offset_r);
EGwConnectionStatus e_gw_connection_add_item (EGwConnection *cnc, const char *container, const char *id) ;
EGwConnectionStatus e_gw_connection_add_items (EGwConnection *cnc, const char *container, GList *item_ids) ;
EGwConnectionStatus e_gw_connection_move_item (EGwConnection *cnc, const char *id, const char *dest_container_id, const char *from_container_id);

View File

@ -0,0 +1,19 @@
Index: addressbook/backends/groupwise/e-book-backend-groupwise.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/addressbook/backends/groupwise/e-book-backend-groupwise.c,v
retrieving revision 1.74
diff -u -p -r1.74 e-book-backend-groupwise.c
--- addressbook/backends/groupwise/e-book-backend-groupwise.c 10 Apr 2006 11:02:36 -0000 1.74
+++ addressbook/backends/groupwise/e-book-backend-groupwise.c 16 Apr 2006 07:30:20 -0000
@@ -2334,6 +2334,11 @@ find_book_view (EBookBackendGroupwise *e
return NULL;
EIterator *iter = e_list_get_iterator (views);
EDataBookView *rv = NULL;
+
+ if (!iter) {
+ g_object_unref (views);
+ return NULL;
+ }
if (e_iterator_is_valid (iter)) {
/* just always use the first book view */

View File

@ -0,0 +1,154 @@
Index: camel/providers/groupwise/camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.117
diff -u -p -r1.117 camel-groupwise-folder.c
--- camel/providers/groupwise/camel-groupwise-folder.c 11 Mar 2006 12:27:42 -0000 1.117
+++ camel/providers/groupwise/camel-groupwise-folder.c 13 Mar 2006 06:27:53 -0000
@@ -881,7 +881,8 @@ groupwise_refresh_info(CamelFolder *fold
/* We probably could not get the messages the first time. (get_folder) failed???!
* so do a get_folder again. And hope that it works
*/
- gw_store_reload_folder ((CamelStore *)gw_store, folder->name, 0, ex);
+ g_print("Reloading folder...something wrong with the summary....\n");
+ gw_store_reload_folder (gw_store, folder, 0, ex);
}
}
Index: camel-groupwise-store.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-store.c,v
retrieving revision 1.93
diff -u -p -r1.93 camel-groupwise-store.c
--- camel/providers/groupwise/camel-groupwise-store.c 11 Mar 2006 09:52:29 -0000 1.93
+++ camel/providers/groupwise/camel-groupwise-store.c 13 Mar 2006 06:27:54 -0000
@@ -674,8 +674,112 @@ groupwise_get_folder (CamelStore *store,
}
void
-gw_store_reload_folder (CamelStore *store, const char *folder_name, guint32 flags, CamelException *ex)
+gw_store_reload_folder (CamelGroupwiseStore *gw_store, CamelFolder *folder, guint32 flags, CamelException *ex)
{
+ CamelGroupwiseStorePrivate *priv = gw_store->priv;
+ CamelGroupwiseSummary *summary;
+ char *container_id, *folder_dir, *storage_path;
+ EGwConnectionStatus status;
+ GList *list = NULL;
+ gboolean done = FALSE;
+ const char *position = E_GW_CURSOR_POSITION_END;
+ int count = 0, cursor, summary_count = 0;
+ CamelStoreInfo *si = NULL;
+ guint total;
+
+ camel_exception_clear (ex);
+
+ CAMEL_SERVICE_LOCK (gw_store, connect_lock);
+
+ if (!camel_groupwise_store_connected (gw_store, ex)) {
+ CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
+ return;
+ }
+
+ if (!E_IS_GW_CONNECTION( priv->cnc)) {
+ if (!groupwise_connect (CAMEL_SERVICE((CamelStore*)gw_store), ex)) {
+ camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE, _("Authentication failed"));
+ CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
+ return;
+ }
+ }
+
+ container_id = g_strdup (g_hash_table_lookup (priv->name_hash, folder->full_name));
+
+ si = camel_store_summary_path ((CamelStoreSummary *)gw_store->summary, folder->name);
+ if (si) {
+ total = si->total;
+ camel_store_summary_info_free ((CamelStoreSummary *)(gw_store)->summary, si);
+ }
+
+ summary = (CamelGroupwiseSummary *) folder->summary;
+ camel_folder_summary_clear (folder->summary);
+ camel_folder_summary_save (folder->summary);
+
+ summary_count = camel_folder_summary_count (folder->summary);
+ if(!summary_count || !summary->time_string) {
+ d(g_print ("\n\n** %s **: Summary missing???? Reloading summary....\n\n", folder->name);)
+
+ status = e_gw_connection_create_cursor (priv->cnc, container_id,
+ "peek id recipient attachments distribution subject status options priority startDate created delivered size",
+ NULL,
+ &cursor);
+ if (status != E_GW_CONNECTION_STATUS_OK) {
+ CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
+ g_free (container_id);
+ return;
+ }
+
+ camel_operation_start (NULL, _("Fetching summary information for new messages in %s"), folder->name);
+
+ while (!done) {
+ status = e_gw_connection_read_cursor (priv->cnc, container_id,
+ cursor, FALSE,
+ CURSOR_ITEM_LIMIT, position, &list);
+ if (status != E_GW_CONNECTION_STATUS_OK) {
+ CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
+ e_gw_connection_destroy_cursor (priv->cnc, container_id, cursor);
+ camel_folder_summary_clear (folder->summary);
+ camel_folder_summary_save (folder->summary);
+ camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Authentication failed"));
+ camel_operation_end (NULL);
+ camel_object_unref (folder);
+ g_free (container_id);
+ return;
+ }
+
+ count += g_list_length (list);
+
+ if (total > 0)
+ camel_operation_progress (NULL, (100*count)/total);
+ gw_update_summary (folder, list, ex);
+
+ if (!list)
+ done = TRUE;
+ g_list_foreach (list, (GFunc)g_object_unref, NULL);
+ g_list_free (list);
+ list = NULL;
+ position = E_GW_CURSOR_POSITION_CURRENT;
+ }
+
+ e_gw_connection_destroy_cursor (priv->cnc, container_id, cursor);
+
+ camel_operation_end (NULL);
+ }
+
+ if (done) {
+ if (summary->time_string)
+ g_free (summary->time_string);
+ summary->time_string = g_strdup (e_gw_connection_get_server_time (priv->cnc));
+ }
+
+ camel_folder_summary_save (folder->summary);
+
+ gw_store->current_folder = folder;
+
+ g_free (container_id);
+ CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
+ return;
}
CamelFolderInfo *
Index: camel/providers/groupwise/camel-groupwise-store.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-store.h,v
retrieving revision 1.12
diff -u -p -r1.12 camel-groupwise-store.h
--- camel/providers/groupwise/camel-groupwise-store.h 11 Mar 2006 09:52:29 -0000 1.12
+++ camel/providers/groupwise/camel-groupwise-store.h 13 Mar 2006 06:27:54 -0000
@@ -82,7 +82,7 @@ char *storage_path_lookup (CamelGroupwis
const char *groupwise_base_url_lookup (CamelGroupwiseStorePrivate *priv);
CamelFolderInfo * create_junk_folder (CamelStore *store);
gboolean camel_groupwise_store_connected (CamelGroupwiseStore *store, CamelException *ex);
-void gw_store_reload_folder (CamelStore *store, const char *folder_name, guint32 flags, CamelException *ex);
+void gw_store_reload_folder (CamelGroupwiseStore *store, CamelFolder *folder, guint32 flags, CamelException *ex);
#ifdef __cplusplus
}

View File

@ -0,0 +1,120 @@
Index: camel/providers/groupwise/camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.120
diff -u -p -r1.120 camel-groupwise-folder.c
--- camel/providers/groupwise/camel-groupwise-folder.c 17 Mar 2006 05:42:00 -0000 1.120
+++ camel/providers/groupwise/camel-groupwise-folder.c 20 Mar 2006 08:12:51 -0000
@@ -1006,7 +1006,7 @@ groupwise_refresh_folder(CamelFolder *fo
if (gw_store->current_folder != folder) {
gw_store->current_folder = folder;
}
-
+
if (list) {
gw_update_cache (folder, list, ex, FALSE);
}
@@ -1051,6 +1051,7 @@ void
gw_update_cache (CamelFolder *folder, GList *list, CamelException *ex, gboolean uid_flag)
{
CamelGroupwiseMessageInfo *mi = NULL;
+ CamelMessageInfo *pmi = NULL;
CamelGroupwiseStore *gw_store = CAMEL_GROUPWISE_STORE (folder->parent_store);
CamelGroupwiseFolder *gw_folder = CAMEL_GROUPWISE_FOLDER(folder);
CamelGroupwiseStorePrivate *priv = gw_store->priv;
@@ -1105,13 +1105,6 @@ gw_update_cache (CamelFolder *folder, GL
id = (char *) item_list->data;
camel_operation_progress (NULL, (100*i)/total_items);
- cache_stream = camel_data_cache_get (gw_folder->cache, "cache", id, ex);
- if (cache_stream) {
- camel_object_unref (cache_stream);
- cache_stream = NULL;
- i++;
- continue;
- }
status = e_gw_connection_get_item (cnc, container_id, id, "peek default distribution recipient message attachments subject notification created recipientStatus status size", &item);
if (status != E_GW_CONNECTION_STATUS_OK) {
@@ -1121,9 +1114,16 @@ gw_update_cache (CamelFolder *folder, GL
/************************ First populate summary *************************/
mi = NULL;
- mi = (CamelGroupwiseMessageInfo *)camel_folder_summary_uid (folder->summary, id);
- if (mi) {
+ pmi = NULL;
+ pmi = camel_folder_summary_uid (folder->summary, id);
+ if (pmi) {
exists = TRUE;
+ camel_message_info_ref (pmi);
+ mi = (CamelGroupwiseMessageInfo *)camel_message_info_clone(pmi);
+ /*
+ pmi->summary = folder->summary;
+ mi->info.summary = folder->summary;
+ */
}
if (!exists) {
@@ -1223,18 +1223,26 @@ gw_update_cache (CamelFolder *folder, GL
mi->info.date_sent = mi->info.date_received = actual_time;
}
}
+#if 0
if (exists)
g_free(mi->info.uid);
mi->info.uid = g_strdup(e_gw_item_get_id(item));
- if (!exists)
+#endif
+ if (!exists) {
+ mi->info.uid = g_strdup (e_gw_item_get_id(item));
mi->info.size = e_gw_item_get_mail_size (item);
- if (!exists)
mi->info.subject = camel_pstring_strdup(e_gw_item_get_subject(item));
+ }
if (exists) {
- camel_folder_change_info_change_uid (changes, e_gw_item_get_id (item));
- camel_message_info_free (&mi->info);
+ /*
+ camel_folder_change_info_change_uid (changes, mi->info.uid);
+ camel_message_info_free (&mi->info);*/
+ camel_folder_summary_remove(folder->summary, pmi);
+ camel_folder_summary_add (folder->summary,(CamelMessageInfo *)mi);
+ camel_folder_change_info_add_uid (changes, mi->info.uid);
+ camel_message_info_free (pmi);
} else {
camel_folder_summary_add (folder->summary,(CamelMessageInfo *)mi);
camel_folder_change_info_add_uid (changes, mi->info.uid);
@@ -1248,11 +1256,11 @@ gw_update_cache (CamelFolder *folder, GL
if (!strcmp (folder->full_name, "Sent Items"))
exists = FALSE;
/******************** Begine Caching ************************/
- mail_msg = groupwise_folder_item_to_msg (folder, item, ex);
- if (mail_msg)
- camel_medium_set_header (CAMEL_MEDIUM (mail_msg), "X-Evolution-Source", groupwise_base_url_lookup (priv));
/* add to cache if its a new message*/
if (!exists) {
+ mail_msg = groupwise_folder_item_to_msg (folder, item, ex);
+ if (mail_msg)
+ camel_medium_set_header (CAMEL_MEDIUM (mail_msg), "X-Evolution-Source", groupwise_base_url_lookup (priv));
CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
if ((cache_stream = camel_data_cache_add (gw_folder->cache, "cache", id, NULL))) {
if (camel_data_wrapper_write_to_stream ((CamelDataWrapper *) mail_msg, cache_stream) == -1 || camel_stream_flush (cache_stream) == -1)
@@ -1678,7 +1686,7 @@ static void
gw_update_all_items (CamelFolder *folder, GList *item_list, CamelException *ex)
{
CamelGroupwiseFolder *gw_folder = CAMEL_GROUPWISE_FOLDER (folder);
- GPtrArray *summary = camel_folder_get_summary (folder);
+ GPtrArray *summary = NULL;
int index = 0;
GList *temp;
CamelFolderChangeInfo *changes = NULL;
@@ -1687,6 +1695,7 @@ gw_update_all_items (CamelFolder *folder
item_list = g_list_reverse (item_list);
+ summary = camel_folder_get_summary (folder);
/*item_ids : List of ids from the summary*/
while (index < summary->len) {
info = g_ptr_array_index (summary, index);

View File

@ -0,0 +1,16 @@
Index: servers/groupwise/e-gw-connection.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/groupwise/e-gw-connection.c,v
retrieving revision 1.138
diff -u -p -r1.138 e-gw-connection.c
--- servers/groupwise/e-gw-connection.c 23 Jan 2006 11:07:49 -0000 1.138
+++ servers/groupwise/e-gw-connection.c 15 Mar 2006 05:48:03 -0000
@@ -2390,7 +2390,7 @@ EGwConnectionStatus e_gw_connection_get_
g_object_unref (msg);
return E_GW_CONNECTION_STATUS_INVALID_RESPONSE;
}
- if (start_date && *start_date && !strcmp (message_list, "New")) {
+ if (start_date && *start_date && (((!strcmp (message_list, "New")) || (!strcmp (message_list, "Modified"))))) {
subparam = soup_soap_response_get_first_parameter_by_name (response, "startDate");
if (subparam) {
char *date;

View File

@ -0,0 +1,167 @@
Index: camel/providers/groupwise/camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.116
diff -u -p -r1.116 camel-groupwise-folder.c
--- camel/providers/groupwise/camel-groupwise-folder.c 11 Mar 2006 09:52:29 -0000 1.116
+++ camel/providers/groupwise/camel-groupwise-folder.c 11 Mar 2006 12:25:51 -0000
@@ -81,7 +81,7 @@ static void groupwise_transfer_messages_
static int gw_getv (CamelObject *object, CamelException *ex, CamelArgGetV *args);
void convert_to_calendar (EGwItem *item, char **str, int *len);
static void convert_to_task (EGwItem *item, char **str, int *len);
-static void gw_update_all_items ( CamelFolder *folder, GSList *item_list, CamelException *ex);
+static void gw_update_all_items ( CamelFolder *folder, GList *item_list, CamelException *ex);
static void groupwise_populate_details_from_item (CamelMimeMessage *msg, EGwItem *item);
static void groupwise_populate_msg_body_from_item (EGwConnection *cnc, CamelMultipart *multipart, EGwItem *item, char *body);
static void groupwise_msg_set_recipient_list (CamelMimeMessage *msg, EGwItem *item);
@@ -586,7 +586,7 @@ groupwise_sync (CamelFolder *folder, gbo
CamelGroupwiseStorePrivate *priv = gw_store->priv;
CamelMessageInfo *info = NULL;
CamelGroupwiseMessageInfo *gw_info;
- GList *read_items = NULL, *deleted_items = NULL;
+ GList *read_items = NULL;
flags_diff_t diff;
const char *container_id;
EGwConnectionStatus status;
@@ -761,7 +761,7 @@ update_update (CamelSession *session, Ca
EGwConnectionStatus status;
CamelException *ex = NULL;
- GList *item_list;
+ GList *item_list, *items_full_list = NULL, *last_element=NULL;
int cursor = 0;
const char *position = E_GW_CURSOR_POSITION_END;
gboolean done;
@@ -787,16 +787,48 @@ update_update (CamelSession *session, Ca
if (!item_list || g_list_length (item_list) == 0)
done = TRUE;
else {
- for (;item_list; item_list = g_list_next (item_list)) {
- m->slist = g_slist_prepend (m->slist, (char *)item_list->data);
+
+ /* item_list is prepended to items_full_list and not the other way
+ because when we have a large number of items say 50000,
+ for each iteration there will be more elements in items_full_list
+ and less elements in item_list */
+
+ last_element = g_list_last (item_list);
+ if (items_full_list) {
+ last_element->next = items_full_list;
+ items_full_list->prev = item_list;
}
+ items_full_list = item_list;
}
- g_list_free (item_list);
position = E_GW_CURSOR_POSITION_CURRENT;
}
e_gw_connection_destroy_cursor (m->cnc, m->container_id, cursor);
- gw_update_all_items (m->folder, m->slist, ex);
+ /* Take out only the first part in the list until the @ since it is guaranteed
+ to be unique only until that symbol */
+
+ if (items_full_list) {
+ int i;
+ item_list = items_full_list;
+
+ while (item_list->next) {
+ i = 0;
+ while (((const char *)item_list->data)[i++]!='@');
+ ((char *)item_list->data)[i-1] = '\0';
+ item_list = item_list->next;
+ }
+
+ i = 0;
+ while (((const char *)item_list->data)[i++]!='@');
+ ((char *)item_list->data)[i-1] = '\0';
+ }
+
+ gw_update_all_items (m->folder, items_full_list, ex);
+
+ if (items_full_list) {
+ g_list_foreach (items_full_list, (GFunc)g_free, NULL);
+ g_list_free (items_full_list);
+ }
}
static void
@@ -1594,55 +1626,45 @@ groupwise_folder_item_to_msg( CamelFolde
return msg;
}
-static gint
-string_cmp(gconstpointer a, gconstpointer b)
-{
- int ret;
- char **tmp1, **tmp2;
-
- tmp1 = g_strsplit ((const char *)a, "@", -1);
- tmp2 = g_strsplit ((const char *)b, "@", -1);
- ret = strcmp (tmp1[0], tmp2[0]);
- g_strfreev (tmp1);
- g_strfreev (tmp2);
- return ret;
-}
-
static void
-gw_update_all_items ( CamelFolder *folder, GSList *item_list, CamelException *ex)
+gw_update_all_items (CamelFolder *folder, GList *item_list, CamelException *ex)
{
CamelGroupwiseFolder *gw_folder = CAMEL_GROUPWISE_FOLDER (folder);
GPtrArray *summary = camel_folder_get_summary (folder);
- int index = 0;
- GSList *item_ids = NULL, *l = NULL;
+ int index = 0, i;
+ GList *temp;
+ char *uid;
CamelFolderChangeInfo *changes = NULL;
-
+ CamelMessageInfo *info;
changes = camel_folder_change_info_new ();
+
/*item_ids : List of ids from the summary*/
while (index < summary->len) {
- CamelMessageInfo *info = g_ptr_array_index (summary, index);
- item_ids = g_slist_append (item_ids, info->uid);
- index ++;
- }
- l = item_ids;
-
- /*item_list : List of ids from the server*/
- for (; item_ids != NULL ; item_ids = g_slist_next (item_ids)) {
- GSList *temp = NULL;
+ info = g_ptr_array_index (summary, index);
+ temp = NULL;
+ i = 0;
+ uid = g_strdup (info->uid);
+
+ while (((const char *)uid)[i++]!='@');
+ ((char *)uid)[i-1] = '\0';
- temp = g_slist_find_custom (item_list, (const char *)item_ids->data, (GCompareFunc) string_cmp);
+ temp = g_list_find_custom (item_list, (const char*)uid, (GCompareFunc) strcmp);
+ g_free (uid);
+
if (!temp) {
CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
- camel_folder_summary_remove_uid (folder->summary, (const char *)item_ids->data);
- camel_data_cache_remove(gw_folder->cache, "cache", (const char *)item_ids->data, ex);
- camel_folder_change_info_remove_uid(changes, (const char *)item_ids->data);
+ camel_folder_summary_remove_uid (folder->summary, info->uid);
+ camel_data_cache_remove (gw_folder->cache, "cache", info->uid, ex);
+ camel_folder_change_info_remove_uid (changes, info->uid);
CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
- }
+ } else
+ item_list = g_list_remove(item_list, temp);
+
+ index ++;
}
- camel_object_trigger_event (folder, "folder_changed", changes);
+ camel_object_trigger_event (folder, "folder_changed", changes);
camel_folder_free_summary (folder, summary);
- g_slist_free (l);
}
static void

View File

@ -0,0 +1,110 @@
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-store.c,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -r1.91 -r1.92
--- camel/providers/groupwise/camel-groupwise-store.c 2006/01/31 06:55:50 1.91
+++ camel/providers/groupwise/camel-groupwise-store.c 2006/03/09 12:58:56 1.92
@@ -1305,11 +1305,7 @@
if (((CamelOfflineStore *) store)->state == CAMEL_OFFLINE_STORE_NETWORK_AVAIL
&& camel_service_connect ((CamelService *)store, ex))
return TRUE;
-
- if (!camel_exception_is_set (ex))
- camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
- _("You must be working online to complete this operation"));
-
+ /*Not online, so return FALSE*/
return FALSE;
}
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.115
retrieving revision 1.116
diff -u -r1.115 -r1.116
--- camel/providers/groupwise/camel-groupwise-folder.c 2006/03/09 10:54:43 1.115
+++ camel/providers/groupwise/camel-groupwise-folder.c 2006/03/11 09:52:29 1.116
@@ -849,7 +849,7 @@
/* We probably could not get the messages the first time. (get_folder) failed???!
* so do a get_folder again. And hope that it works
*/
- camel_store_get_folder ((CamelStore *)gw_store, folder->name, 0, ex);
+ gw_store_reload_folder ((CamelStore *)gw_store, folder->name, 0, ex);
}
}
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-store.c,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -r1.92 -r1.93
--- camel/providers/groupwise/camel-groupwise-store.c 2006/03/09 12:58:56 1.92
+++ camel/providers/groupwise/camel-groupwise-store.c 2006/03/11 09:52:29 1.93
@@ -267,8 +267,11 @@
d("in groupwise store connect\n");
- if (((CamelOfflineStore *) store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL ||
+/* if (((CamelOfflineStore *) store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL ||
(service->status == CAMEL_SERVICE_DISCONNECTED))
+ return FALSE; */
+
+ if (((CamelOfflineStore *) store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL)
return FALSE;
if (!priv) {
@@ -592,10 +595,10 @@
return NULL;
}
g_free (folder_dir);
-
+
si = camel_store_summary_path ((CamelStoreSummary *)gw_store->summary, folder_name);
if (si) {
- camel_object_get (folder, NULL, CAMEL_FOLDER_TOTAL, &total, NULL);
+ total = si->total;
camel_store_summary_info_free ((CamelStoreSummary *)(gw_store)->summary, si);
}
@@ -670,6 +673,11 @@
return folder;
}
+void
+gw_store_reload_folder (CamelStore *store, const char *folder_name, guint32 flags, CamelException *ex)
+{
+}
+
CamelFolderInfo *
convert_to_folder_info (CamelGroupwiseStore *store, EGwContainer *container, const char *url, CamelException *ex)
{
@@ -754,10 +762,11 @@
if (e_gw_container_get_is_shared_by_me (container))
fi->flags |= CAMEL_FOLDER_SHARED_BY_ME;
- if (type == E_GW_CONTAINER_TYPE_INBOX) {
+ /*if (type == E_GW_CONTAINER_TYPE_INBOX) {
fi->total = -1;
fi->unread = -1;
- } else if (type == E_GW_CONTAINER_TYPE_TRASH) {
+ } else if (type == E_GW_CONTAINER_TYPE_TRASH) {*/
+ if (type == E_GW_CONTAINER_TYPE_TRASH) {
fi->total = e_gw_container_get_total_count (container);
fi->unread = 0;
}else {
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-store.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- camel/providers/groupwise/camel-groupwise-store.h 2005/09/18 18:21:10 1.11
+++ camel/providers/groupwise/camel-groupwise-store.h 2006/03/11 09:52:29 1.12
@@ -82,6 +82,7 @@
const char *groupwise_base_url_lookup (CamelGroupwiseStorePrivate *priv);
CamelFolderInfo * create_junk_folder (CamelStore *store);
gboolean camel_groupwise_store_connected (CamelGroupwiseStore *store, CamelException *ex);
+void gw_store_reload_folder (CamelStore *store, const char *folder_name, guint32 flags, CamelException *ex);
#ifdef __cplusplus
}

View File

@ -0,0 +1,195 @@
Index: camel/providers/groupwise/camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.118
diff -u -p -r1.118 camel-groupwise-folder.c
--- camel/providers/groupwise/camel-groupwise-folder.c 13 Mar 2006 06:31:04 -0000 1.118
+++ camel/providers/groupwise/camel-groupwise-folder.c 15 Mar 2006 08:44:51 -0000
@@ -85,7 +85,7 @@ static void gw_update_all_items ( CamelF
static void groupwise_populate_details_from_item (CamelMimeMessage *msg, EGwItem *item);
static void groupwise_populate_msg_body_from_item (EGwConnection *cnc, CamelMultipart *multipart, EGwItem *item, char *body);
static void groupwise_msg_set_recipient_list (CamelMimeMessage *msg, EGwItem *item);
-static void gw_update_cache ( CamelFolder *folder, GList *item_list,CamelException *ex);
+static void gw_update_cache ( CamelFolder *folder, GList *item_list, CamelException *ex, gboolean uid_flag);
static CamelMimeMessage *groupwise_folder_item_to_msg ( CamelFolder *folder, EGwItem *item, CamelException *ex );
@@ -796,7 +796,7 @@ update_update (CamelSession *session, Ca
last_element = g_list_last (item_list);
if (items_full_list) {
last_element->next = items_full_list;
- items_full_list->prev = item_list;
+ items_full_list->prev = last_element;
}
items_full_list = item_list;
}
@@ -807,7 +807,7 @@ update_update (CamelSession *session, Ca
/* Take out only the first part in the list until the @ since it is guaranteed
to be unique only until that symbol */
- if (items_full_list) {
+ /*if (items_full_list) {
int i;
item_list = items_full_list;
@@ -821,14 +821,10 @@ update_update (CamelSession *session, Ca
i = 0;
while (((const char *)item_list->data)[i++]!='@');
((char *)item_list->data)[i-1] = '\0';
- }
+ }*/
+ g_print ("\nNumber of items in the folder: %d \n", g_list_length(items_full_list));
gw_update_all_items (m->folder, items_full_list, ex);
-
- if (items_full_list) {
- g_list_foreach (items_full_list, (GFunc)g_free, NULL);
- g_list_free (items_full_list);
- }
}
static void
@@ -947,6 +943,8 @@ groupwise_refresh_folder(CamelFolder *fo
time_string = g_strdup (((CamelGroupwiseSummary *) folder->summary)->time_string);
t_str = g_strdup (time_string);
+
+#if 0
/*Get the New Items*/
status = e_gw_connection_get_quick_messages (cnc, container_id,
"peek id",
@@ -973,17 +971,29 @@ groupwise_refresh_folder(CamelFolder *fo
slist = NULL;
t_str = g_strdup (time_string);
-
+#endif
+
/*Get those items which have been modifed*/
+
status = e_gw_connection_get_quick_messages (cnc, container_id,
"peek id",
&t_str, "Modified", NULL, NULL, -1, &slist);
- g_free (t_str), t_str = NULL;
+
if (status != E_GW_CONNECTION_STATUS_OK) {
camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Authentication failed"));
goto end3;
}
+ /* The storing of time-stamp to summary code below should be commented if the
+ above commented code is uncommented */
+
+ if (summary->time_string)
+ g_free (summary->time_string);
+
+ summary->time_string = g_strdup (t_str);
+
+ g_free (t_str), t_str = NULL;
+
for ( sl = slist ; sl != NULL; sl = sl->next)
list = g_list_append (list, sl->data);
@@ -995,7 +1005,7 @@ groupwise_refresh_folder(CamelFolder *fo
}
if (list) {
- gw_update_cache (folder, list, ex);
+ gw_update_cache (folder, list, ex, FALSE);
}
@@ -1035,7 +1045,7 @@ end1:
}
void
-gw_update_cache ( CamelFolder *folder, GList *list, CamelException *ex)
+gw_update_cache (CamelFolder *folder, GList *list, CamelException *ex, gboolean uid_flag)
{
CamelGroupwiseMessageInfo *mi = NULL;
CamelGroupwiseStore *gw_store = CAMEL_GROUPWISE_STORE (folder->parent_store);
@@ -1072,7 +1082,7 @@ gw_update_cache ( CamelFolder *folder, G
camel_operation_start (NULL, _("Fetching summary information for new messages in %s"), folder->name);
for ( ; item_list != NULL ; item_list = g_list_next (item_list) ) {
- EGwItem *temp_item = (EGwItem *)item_list->data;
+ EGwItem *temp_item ;
EGwItem *item;
EGwItemType type = E_GW_ITEM_TYPE_UNKNOWN;
EGwItemOrganizer *org;
@@ -1084,7 +1094,12 @@ gw_update_cache ( CamelFolder *folder, G
CamelMimeMessage *mail_msg = NULL;
exists = FALSE;
- id = e_gw_item_get_id (temp_item);
+
+ if (uid_flag == FALSE) {
+ temp_item = (EGwItem *)item_list->data;
+ id = e_gw_item_get_id (temp_item);
+ } else
+ id = (char *) item_list->data;
camel_operation_progress (NULL, (100*i)/total_items);
cache_stream = camel_data_cache_get (gw_folder->cache, "cache", id, ex);
@@ -1632,39 +1647,48 @@ gw_update_all_items (CamelFolder *folder
{
CamelGroupwiseFolder *gw_folder = CAMEL_GROUPWISE_FOLDER (folder);
GPtrArray *summary = camel_folder_get_summary (folder);
- int index = 0, i;
+ int index = 0;
GList *temp;
- char *uid;
CamelFolderChangeInfo *changes = NULL;
CamelMessageInfo *info;
changes = camel_folder_change_info_new ();
+ item_list = g_list_reverse (item_list);
+
/*item_ids : List of ids from the summary*/
while (index < summary->len) {
info = g_ptr_array_index (summary, index);
temp = NULL;
- i = 0;
- uid = g_strdup (info->uid);
- while (((const char *)uid)[i++]!='@');
- ((char *)uid)[i-1] = '\0';
+ if (item_list) {
+ temp = g_list_find_custom (item_list, (const char *)info->uid, (GCompareFunc) strcmp);
+ }
- temp = g_list_find_custom (item_list, (const char*)uid, (GCompareFunc) strcmp);
- g_free (uid);
-
if (!temp) {
CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
camel_folder_summary_remove_uid (folder->summary, info->uid);
camel_data_cache_remove (gw_folder->cache, "cache", info->uid, ex);
camel_folder_change_info_remove_uid (changes, info->uid);
CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
- } else
- item_list = g_list_remove(item_list, temp);
-
+ } else {
+ item_list = g_list_delete_link (item_list, temp);
+ }
index ++;
}
-
+
camel_object_trigger_event (folder, "folder_changed", changes);
+
+ if (item_list) {
+ CamelGroupwiseStore *gw_store = CAMEL_GROUPWISE_STORE (folder->parent_store);
+
+ CAMEL_SERVICE_LOCK (gw_store, connect_lock);
+ gw_update_cache (folder, item_list, ex, TRUE);
+ CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
+
+ g_list_foreach (item_list, (GFunc)g_free, NULL);
+ g_list_free (item_list);
+ }
+
camel_folder_free_summary (folder, summary);
}

View File

@ -0,0 +1,18 @@
--- camel/providers/groupwise/camel-groupwise-store.c.orig 2006-03-20 16:30:38.488752753 +0100
+++ camel/providers/groupwise/camel-groupwise-store.c 2006-03-20 16:38:37.082768906 +0100
@@ -462,6 +462,15 @@ groupwise_build_folder_info(CamelGroupwi
else
name++;
+ if (!strcmp (folder_name, "Sent Items"))
+ fi->flags |= CAMEL_FOLDER_TYPE_SENT;
+ else if (!strcmp (folder_name, "Mailbox"))
+ fi->flags |= CAMEL_FOLDER_TYPE_INBOX;
+ else if (!strcmp (folder_name, "Trash"))
+ fi->flags |= CAMEL_FOLDER_TYPE_TRASH;
+ else if (!strcmp (folder_name, "Junk Mail"))
+ fi->flags |= CAMEL_FOLDER_TYPE_JUNK;
+
fi->name = g_strdup(name);
return fi;
}

View File

@ -0,0 +1,286 @@
Index: calendar/backends/groupwise/e-cal-backend-groupwise.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/backends/groupwise/e-cal-backend-groupwise.c,v
retrieving revision 1.173
diff -u -p -r1.173 e-cal-backend-groupwise.c
--- calendar/backends/groupwise/e-cal-backend-groupwise.c 23 Jan 2006 11:09:58 -0000 1.173
+++ calendar/backends/groupwise/e-cal-backend-groupwise.c 24 Mar 2006 14:42:22 -0000
@@ -79,6 +79,8 @@ static void e_cal_backend_groupwise_fina
static void sanitize_component (ECalBackendSync *backend, ECalComponent *comp, char *server_uid);
static ECalBackendSyncStatus
e_cal_backend_groupwise_add_timezone (ECalBackendSync *backend, EDataCal *cal, const char *tzobj);
+static const char * get_gw_item_id (icalcomponent *icalcomp);
+static void get_retract_data (ECalComponent *comp, const char **retract_comment, gboolean *all_instances);
#define PARENT_TYPE E_TYPE_CAL_BACKEND_SYNC
static ECalBackendClass *parent_class = NULL;
@@ -219,6 +221,7 @@ populate_cache (ECalBackendGroupwise *cb
return E_GW_CONNECTION_STATUS_OK;
}
+
static gboolean
compare_prefix (gconstpointer a, gconstpointer b)
{
@@ -467,7 +470,6 @@ get_deltas (gpointer handle)
needs_to_get = TRUE;
} else {
cache_keys = g_slist_delete_link (cache_keys, remove);
- g_message ("******** found \n");
}
g_free (real_key);
@@ -476,7 +478,6 @@ get_deltas (gpointer handle)
for (l = cache_keys; l ; l = g_slist_next (l)) {
/* assumes rid is null - which works for now */
ECalComponent *comp = NULL;
- GSList *comp_list = NULL;
ECalComponentVType vtype;
comp = e_cal_backend_cache_get_component (cache, (const char *) l->data, NULL);
@@ -1632,10 +1633,9 @@ e_cal_backend_groupwise_internal_get_tim
icaltimezone *zone;
zone = icaltimezone_get_builtin_timezone_from_tzid (tzid);
-
if (!zone)
return icaltimezone_get_utc_timezone();
-
+
return zone;
}
@@ -1791,6 +1791,44 @@ e_cal_backend_groupwise_create_object (E
return GNOME_Evolution_Calendar_Success;
}
+static void
+get_retract_data (ECalComponent *comp, const char **retract_comment, gboolean *all_instances)
+{
+ icalcomponent *icalcomp = NULL;
+ icalproperty *icalprop = NULL;
+ gboolean is_instance = FALSE;
+ const char *x_ret = NULL, *x_recur = NULL;
+
+ is_instance = e_cal_component_is_instance (comp);
+ icalcomp = e_cal_component_get_icalcomponent (comp);
+ icalprop = icalcomponent_get_first_property (icalcomp, ICAL_X_PROPERTY);
+ while (icalprop) {
+ const char *x_name;
+
+ x_name = icalproperty_get_x_name (icalprop);
+ /* This property will be set only if the user is an organizer */
+ if (!strcmp (x_name, "X-EVOLUTION-RETRACT-COMMENT")) {
+ x_ret = icalproperty_get_x (icalprop);
+ if (!strcmp (x_ret, "0")) {
+ *retract_comment = NULL;
+ } else
+ *retract_comment = x_ret;
+ }
+
+ if (is_instance && !strcmp (x_name, "X-EVOLUTION-RECUR-MOD")) {
+ x_recur = icalproperty_get_x (icalprop);
+ if (!strcmp (x_recur, "All"))
+ *all_instances = TRUE;
+ else
+ *all_instances = FALSE;
+ }
+
+ if (x_ret && (!is_instance || x_recur))
+ break;
+ icalprop = icalcomponent_get_next_property (icalcomp, ICAL_X_PROPERTY);
+ }
+}
+
static ECalBackendSyncStatus
e_cal_backend_groupwise_modify_object (ECalBackendSync *backend, EDataCal *cal, const char *calobj,
CalObjModType mod, char **old_object, char **new_object)
@@ -1838,7 +1876,7 @@ e_cal_backend_groupwise_modify_object (E
if (e_cal_component_has_attendees (comp) &&
e_cal_backend_groupwise_utils_check_delegate (comp, e_gw_connection_get_user_email (priv->cnc))) {
const char *id = NULL, *recur_key = NULL;
-
+
item = e_gw_item_new_for_delegate_from_cal (cbgw, comp);
if (mod == CALOBJ_MOD_ALL && e_cal_component_is_instance (comp)) {
@@ -1848,21 +1886,19 @@ e_cal_backend_groupwise_modify_object (E
}
status = e_gw_connection_delegate_request (priv->cnc, item, id, NULL, NULL, recur_key);
-
+
if (status == E_GW_CONNECTION_STATUS_INVALID_CONNECTION)
- status = e_gw_connection_delegate_request (priv->cnc, item, id, NULL, NULL, recur_key);
-
- if (status != E_GW_CONNECTION_STATUS_OK) {
- g_object_unref (comp);
- g_object_unref (cache_comp);
- return GNOME_Evolution_Calendar_OtherError;
- }
-
-
+ status = e_gw_connection_delegate_request (priv->cnc, item, id, NULL, NULL, recur_key);
+ if (status != E_GW_CONNECTION_STATUS_OK) {
+ g_object_unref (comp);
+ g_object_unref (cache_comp);
+ return GNOME_Evolution_Calendar_OtherError;
+ }
+
e_cal_backend_cache_put_component (priv->cache, comp);
*new_object = e_cal_component_get_as_string (comp);
break;
- }
+ }
item = e_gw_item_new_from_cal_component (priv->container_id, cbgw, comp);
cache_item = e_gw_item_new_from_cal_component (priv->container_id, cbgw, cache_comp);
@@ -2359,40 +2395,91 @@ e_cal_backend_groupwise_receive_objects
static ECalBackendSyncStatus
send_object (ECalBackendGroupwise *cbgw, EDataCal *cal, icalcomponent *icalcomp, icalproperty_method method)
{
- ECalComponent *comp, *found_comp;
+ ECalComponent *comp, *found_comp = NULL;
ECalBackendGroupwisePrivate *priv;
- ECalBackendSyncStatus status = GNOME_Evolution_Calendar_Success;
- char *uid, *comp_str;
+ ECalBackendSyncStatus status = GNOME_Evolution_Calendar_OtherError;
+ const char *uid = NULL, *rid = NULL;
priv = cbgw->priv;
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (icalcomp));
+ rid = e_cal_component_get_recurid_as_string (comp);
e_cal_component_get_uid (comp, (const char **) &uid);
- found_comp = e_cal_backend_cache_get_component (priv->cache, uid, NULL);
+ found_comp = e_cal_backend_cache_get_component (priv->cache, uid, rid);
+
+ if (!found_comp) {
+ g_object_unref (comp);
+ return GNOME_Evolution_Calendar_ObjectNotFound;
+ }
+
switch (priv->mode) {
case CAL_MODE_ANY :
case CAL_MODE_REMOTE :
- if (found_comp) {
- char *comp_str;
- status = e_cal_backend_groupwise_modify_object (E_CAL_BACKEND_SYNC (cbgw), cal, comp_str,
- CALOBJ_MOD_THIS, &comp_str, NULL);
- g_free (comp_str);
- } else
- status = e_cal_backend_groupwise_create_object (E_CAL_BACKEND_SYNC (cbgw), cal, &comp_str, NULL);
+ if (method == ICAL_METHOD_CANCEL) {
+ const char *retract_comment = NULL;
+ gboolean all_instances = FALSE;
+ const char *id = NULL;
+
+ get_retract_data (comp, &retract_comment, &all_instances);
+ id = get_gw_item_id (icalcomp);
+ status = e_gw_connection_retract_request (priv->cnc, id, retract_comment,
+ all_instances, FALSE);
+
+ if (status == E_GW_CONNECTION_STATUS_INVALID_CONNECTION)
+ status = e_gw_connection_retract_request (priv->cnc, id, retract_comment,
+ all_instances, FALSE);
+ if (status == E_GW_CONNECTION_STATUS_OK) {
+ ECalComponentId *id = NULL;
+
+ if (all_instances) {
+ char *old_object = NULL;
+ GSList *l, *comp_list = e_cal_backend_cache_get_components_by_uid (priv->cache, uid);
+ for (l = comp_list; l; l = l->next) {
+ ECalComponent *comp = E_CAL_COMPONENT (l->data);
+ ECalComponentId *id = e_cal_component_get_id (comp);
+ char *object = e_cal_component_get_as_string (comp);
+
+ if (e_cal_backend_cache_remove_component (priv->cache, id->uid,
+ id->rid))
+ e_cal_backend_notify_object_removed (E_CAL_BACKEND (cbgw), id, object, NULL);
+
+ e_cal_component_free_id (id);
+ g_free (object);
+ g_object_unref (comp);
+ }
+
+ g_slist_free (comp_list);
+ g_free (old_object);
+ } else {
+ id = e_cal_component_get_id (comp);
+ icalcomp = e_cal_component_get_icalcomponent (comp);
+ char * object = e_cal_component_get_as_string (comp);
+
+ if (e_cal_backend_cache_remove_component (priv->cache, id->uid,
+ id->rid)) {
+ e_cal_backend_notify_object_removed (E_CAL_BACKEND (cbgw), id,
+ object, NULL);
+ }
+ g_free (object);
+ e_cal_component_free_id (id);
+ }
+ }
+ }
break;
case CAL_MODE_LOCAL :
/* in offline mode, we just update the cache */
- e_cal_backend_cache_put_component (priv->cache, comp);
+ status = GNOME_Evolution_Calendar_RepositoryOffline;
break;
default:
break;
}
g_object_unref (comp);
+ g_object_unref (found_comp);
return status;
}
@@ -2446,12 +2533,16 @@ e_cal_backend_groupwise_send_objects (EC
comp = e_cal_component_new ();
- if (e_cal_component_set_icalcomponent (comp, icalcomp)) {
+ if (e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (icalcomp))) {
GSList *attendee_list = NULL, *tmp;
e_cal_component_get_attendee_list (comp, &attendee_list);
/* convert this into GList */
- for (tmp = attendee_list; tmp; tmp = g_slist_next (tmp))
- *users = g_list_append (*users, tmp);
+ for (tmp = attendee_list; tmp; tmp = g_slist_next (tmp)) {
+ const char *attendee = tmp->data;
+
+ if (attendee)
+ *users = g_list_append (*users, g_strdup (attendee));
+ }
g_object_unref (comp);
}
Index: servers/groupwise/e-gw-connection.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/groupwise/e-gw-connection.c,v
retrieving revision 1.141
diff -u -p -r1.141 e-gw-connection.c
--- servers/groupwise/e-gw-connection.c 23 Mar 2006 10:08:37 -0000 1.141
+++ servers/groupwise/e-gw-connection.c 3 Apr 2006 08:41:02 -0000
@@ -1463,7 +1463,16 @@ e_gw_connection_retract_request (EGwConn
soup_soap_message_start_element (msg, "items", NULL, NULL);
e_gw_message_write_string_parameter (msg, "item", NULL, id);
soup_soap_message_end_element (msg);
- /* comment, FALSE, FALSE to be filled in later. */
+
+ if (retract_all)
+ e_gw_message_write_string_parameter (msg, "retractingAllInstances", NULL, "1");
+
+ if (comment)
+ e_gw_message_write_string_parameter (msg, "comment", NULL, comment);
+
+ if (resend)
+ e_gw_message_write_string_parameter (msg, "retractCausedByResend", NULL, "1");
+
e_gw_message_write_footer (msg);
response = e_gw_connection_send_message (cnc, msg);

View File

@ -0,0 +1,82 @@
--- camel/providers/groupwise/camel-groupwise-folder.c.orig 2006-03-23 16:21:05.882346341 +0100
+++ camel/providers/groupwise/camel-groupwise-folder.c 2006-03-23 16:21:53.346929567 +0100
@@ -902,6 +902,7 @@ groupwise_refresh_folder(CamelFolder *fo
char *container_id = NULL;
char *time_string = NULL, *t_str = NULL;
struct _folder_update_msg *msg;
+ gboolean check_all = FALSE;
if (((CamelOfflineStore *) gw_store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
g_warning ("In offline mode. Cannot refresh!!!\n");
@@ -947,7 +948,7 @@ groupwise_refresh_folder(CamelFolder *fo
time_string = g_strdup (((CamelGroupwiseSummary *) folder->summary)->time_string);
t_str = g_strdup (time_string);
-#if 0
+
/*Get the New Items*/
status = e_gw_connection_get_quick_messages (cnc, container_id,
"peek id",
@@ -963,18 +964,23 @@ groupwise_refresh_folder(CamelFolder *fo
*/
if (summary->time_string)
g_free (summary->time_string);
+
+
summary->time_string = g_strdup (t_str);
g_free (t_str);
t_str = NULL;
+ /*
for ( sl = slist ; sl != NULL; sl = sl->next)
- list = g_list_append (list, sl->data);
+ list = g_list_append (list, sl->data);*/
+ if (slist && g_slist_length(slist) != 0)
+ check_all = TRUE;
+
g_slist_free (slist);
slist = NULL;
t_str = g_strdup (time_string);
-#endif
/*Get those items which have been modifed*/
@@ -989,15 +995,16 @@ groupwise_refresh_folder(CamelFolder *fo
/* The storing of time-stamp to summary code below should be commented if the
above commented code is uncommented */
- if (summary->time_string)
+
+/* if (summary->time_string)
g_free (summary->time_string);
summary->time_string = g_strdup (t_str);
- g_free (t_str), t_str = NULL;
+ g_free (t_str), t_str = NULL;*/
for ( sl = slist ; sl != NULL; sl = sl->next)
- list = g_list_append (list, sl->data);
+ list = g_list_prepend (list, sl->data);
g_slist_free (slist);
slist = NULL;
@@ -1021,6 +1028,7 @@ groupwise_refresh_folder(CamelFolder *fo
* this folder, and update the summary.
*/
/*create a new session thread for the update all operation*/
+ if (check_all) {
msg = camel_session_thread_msg_new (session, &update_ops, sizeof(*msg));
msg->cnc = cnc;
msg->t_str = g_strdup (time_string);
@@ -1030,7 +1038,7 @@ groupwise_refresh_folder(CamelFolder *fo
camel_folder_freeze (folder);
camel_session_thread_queue (session, &msg->msg, 0);
/*thread creation and queueing done*/
-
+ }
end3:
g_list_foreach (list, (GFunc) g_object_unref, NULL);

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,18 @@
Index: calendar/backends/caldav/e-cal-backend-caldav.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/backends/caldav/e-cal-backend-caldav.c,v
retrieving revision 1.5
diff -u -p -r1.5 e-cal-backend-caldav.c
--- calendar/backends/caldav/e-cal-backend-caldav.c 9 Feb 2006 06:12:05 -0000 1.5
+++ calendar/backends/caldav/e-cal-backend-caldav.c 23 Mar 2006 19:55:51 -0000
@@ -1491,6 +1491,10 @@ caldav_remove (ECalBackendSync *backend,
priv = E_CAL_BACKEND_CALDAV_GET_PRIVATE (cbdav);
g_mutex_lock (priv->lock);
+
+ if (priv->loaded != TRUE)
+ return GNOME_Evolution_Calendar_Success;
+
status = check_state (cbdav, &online);
if (status != GNOME_Evolution_Calendar_Success) {

View File

@ -0,0 +1,16 @@
Index: calendar/libecal/e-cal.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/libecal/e-cal.c,v
retrieving revision 1.125
diff -u -p -r1.125 e-cal.c
--- calendar/libecal/e-cal.c 4 Mar 2006 10:29:07 -0000 1.125
+++ calendar/libecal/e-cal.c 11 Apr 2006 13:29:57 -0000
@@ -3528,7 +3528,7 @@ process_detached_instances (GList *insta
ci->end = cid->end;
processed = TRUE;
- } else {
+ } else if (instance_recur_id.datetime.value && recur_id.datetime.value){
cmp = icaltime_compare (*instance_recur_id.datetime.value,
*recur_id.datetime.value);
if ((recur_id.type == E_CAL_COMPONENT_RANGE_THISPRIOR && cmp <= 0) ||

View File

@ -0,0 +1,71 @@
Index: camel/providers/groupwise/camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.126
diff -u -p -r1.126 camel-groupwise-folder.c
--- camel/providers/groupwise/camel-groupwise-folder.c 3 Apr 2006 06:36:11 -0000 1.126
+++ camel/providers/groupwise/camel-groupwise-folder.c 3 Apr 2006 06:42:45 -0000
@@ -491,7 +491,8 @@ update_junk_list (CamelStore *store, Cam
goto error;
email = g_strsplit_set (from, "<>", -1);
- if (!email[1])
+
+ if (!email || !email[1])
goto error;
if (flag == ADD_JUNK_ENTRY)
@@ -617,6 +618,7 @@ groupwise_sync (CamelFolder *folder, gbo
if ((flags & CAMEL_MESSAGE_JUNK) && !(flags & CAMEL_GW_MESSAGE_JUNK)) /*marked a message junk*/
move_to_junk (folder, info, ex);
+
else if ((flags & CAMEL_MESSAGE_JUNK) && (flags & CAMEL_GW_MESSAGE_JUNK)) /*message was marked as junk, now unjunk*/
move_to_mailbox (folder, info, ex);
@@ -1171,12 +1173,17 @@ gw_update_cache (CamelFolder *folder, GL
org = e_gw_item_get_organizer (item);
if (org) {
- if (exists)
- camel_pstring_free(mi->info.from);
- if (org->display_name && org->display_name[0])
- mi->info.from = camel_pstring_strdup (org->display_name);
- else if (org->email && org->email[0])
- mi->info.from = camel_pstring_strdup (org->email);
+ GString *str;
+ str = g_string_new ("");
+ if (org->display_name && org->display_name[0])
+ str = g_string_append (str, org->display_name);
+ if (org->email && org->email[0]) {
+ g_string_append (str, "<");
+ str = g_string_append (str, org->email);
+ g_string_append (str, ">");
+ }
+ mi->info.from = camel_pstring_strdup (str->str);
+ g_string_free (str, TRUE);
}
g_string_truncate (str, 0);
recp_list = e_gw_item_get_recipient_list (item);
@@ -1369,10 +1376,17 @@ gw_update_summary ( CamelFolder *folder,
org = e_gw_item_get_organizer (item);
if (org) {
- if (org->display_name && org->display_name[0])
- mi->info.from = camel_pstring_strdup (org->display_name);
- else if (org->email && org->email[0])
- mi->info.from = camel_pstring_strdup (org->email);
+ GString *str;
+ str = g_string_new ("");
+ if (org->display_name && org->display_name[0])
+ str = g_string_append (str, org->display_name);
+ if (org->email && org->email[0]) {
+ g_string_append (str, "<");
+ str = g_string_append (str, org->email);
+ g_string_append (str, ">");
+ }
+ mi->info.from = camel_pstring_strdup (str->str);
+ g_string_free (str, TRUE);
}
g_string_truncate (str, 0);
recp_list = e_gw_item_get_recipient_list (item);

View File

@ -0,0 +1,82 @@
Index: addressbook/backends/groupwise/e-book-backend-groupwise.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/addressbook/backends/groupwise/e-book-backend-groupwise.c,v
retrieving revision 1.73
diff -u -p -r1.73 e-book-backend-groupwise.c
--- addressbook/backends/groupwise/e-book-backend-groupwise.c 23 Mar 2006 10:55:47 -0000 1.73
+++ addressbook/backends/groupwise/e-book-backend-groupwise.c 3 Apr 2006 13:18:36 -0000
@@ -70,11 +70,11 @@ struct _EBookBackendGroupwisePrivate {
int cache_timeout;
EBookBackendCache *cache;
EBookBackendSummary *summary;
+ GMutex *update_mutex;
/* for future use */
void *reserved1;
void *reserved2;
void *reserved3;
- void *reserved4;
};
#define ELEMENT_TYPE_SIMPLE 0x01
@@ -2711,6 +2711,8 @@ update_address_book_deltas (EBookBackend
EBookBackendGroupwisePrivate *priv = ebgw->priv;
EBookBackendCache *cache = priv->cache;
+
+ g_mutex_lock (priv->update_mutex);
if (enable_debug)
printf("\nupdating GroupWise system address book cache \n");
@@ -2724,6 +2726,7 @@ update_address_book_deltas (EBookBackend
if (status != E_GW_CONNECTION_STATUS_OK) {
if (enable_debug)
printf("No connection with the server \n");
+ g_mutex_unlock(priv->update_mutex);
return FALSE;
}
@@ -2733,6 +2736,7 @@ update_address_book_deltas (EBookBackend
if (enable_debug)
printf ("sequence is reset, rebuilding cache...\n");
build_cache (ebgw);
+ g_mutex_unlock(priv->update_mutex);
return TRUE;
}
@@ -2754,6 +2758,7 @@ update_address_book_deltas (EBookBackend
build_cache (ebgw);
add_sequence_to_cache (cache, server_first_sequence,
server_last_sequence, server_last_po_rebuild_time);
+ g_mutex_unlock(priv->update_mutex);
return TRUE;
}
@@ -2926,6 +2931,7 @@ update_address_book_deltas (EBookBackend
printf("updating GroupWise system address book cache took %ld.%03ld seconds for %d changes\n",
diff / 1000, diff % 1000, contact_num);
}
+ g_mutex_unlock(priv->update_mutex);
return TRUE;
}
@@ -3427,6 +3433,8 @@ e_book_backend_groupwise_dispose (GObjec
g_source_remove (bgw->priv->cache_timeout);
bgw->priv->cache_timeout = 0;
}
+ if (bgw->priv->update_mutex)
+ g_mutex_free(bgw->priv->update_mutex);
g_free (bgw->priv);
bgw->priv = NULL;
@@ -3485,10 +3493,10 @@ e_book_backend_groupwise_init (EBookBack
priv->cnc = NULL;
priv->original_uri = NULL;
priv->cache_timeout = 0;
+ priv->update_mutex = g_mutex_new();
priv->reserved1 = NULL;
priv->reserved2 = NULL;
priv->reserved3 = NULL;
- priv->reserved4 = NULL;
backend->priv = priv;
if (g_getenv ("GROUPWISE_DEBUG")) {

View File

@ -0,0 +1,41 @@
Index: calendar/backends/groupwise/e-cal-backend-groupwise.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/backends/groupwise/e-cal-backend-groupwise.c,v
retrieving revision 1.174
diff -u -p -r1.174 e-cal-backend-groupwise.c
--- calendar/backends/groupwise/e-cal-backend-groupwise.c 3 Apr 2006 08:36:44 -0000 1.174
+++ calendar/backends/groupwise/e-cal-backend-groupwise.c 5 Apr 2006 06:17:11 -0000
@@ -1839,7 +1839,7 @@ e_cal_backend_groupwise_modify_object (E
ECalComponent *comp, *cache_comp = NULL;
EGwConnectionStatus status;
EGwItem *item, *cache_item;
- const char *uid = NULL;
+ const char *uid = NULL, *rid = NULL;
*old_object = NULL;
cbgw = E_CAL_BACKEND_GROUPWISE (backend);
@@ -1861,13 +1861,14 @@ e_cal_backend_groupwise_modify_object (E
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomp);
e_cal_component_get_uid (comp, &uid);
+ rid = e_cal_component_get_recurid_as_string (comp);
/* check if the object exists */
switch (priv->mode) {
case CAL_MODE_ANY :
case CAL_MODE_REMOTE :
/* when online, send the item to the server */
- cache_comp = e_cal_backend_cache_get_component (priv->cache, uid, NULL);
+ cache_comp = e_cal_backend_cache_get_component (priv->cache, uid, rid);
if (!cache_comp) {
g_message ("CRITICAL : Could not find the object in cache");
return GNOME_Evolution_Calendar_ObjectNotFound;
@@ -2070,7 +2071,7 @@ e_cal_backend_groupwise_remove_object (E
e_cal_backend_cache_remove_component (priv->cache, id->uid,
id->rid);
- if (!g_str_equal (id->rid, rid))
+ if (!id->rid || !g_str_equal (id->rid, rid))
e_cal_backend_notify_object_removed (E_CAL_BACKEND (cbgw), id, e_cal_component_get_as_string (comp), NULL);
e_cal_component_free_id (id);

View File

@ -0,0 +1,70 @@
--- addressbook/libebook/e-vcard.c.orig 2006-04-04 20:53:02.000000000 -0500
+++ addressbook/libebook/e-vcard.c 2006-04-04 20:56:55.000000000 -0500
@@ -541,6 +541,45 @@ read_attribute (char **p)
return NULL;
}
+/* Stolen from glib/glib/gconvert.c */
+static gchar *
+make_valid_utf8 (const gchar *name)
+{
+ GString *string;
+ const gchar *remainder, *invalid;
+ gint remaining_bytes, valid_bytes;
+
+ string = NULL;
+ remainder = name;
+ remaining_bytes = strlen (name);
+
+ while (remaining_bytes != 0)
+ {
+ if (g_utf8_validate (remainder, remaining_bytes, &invalid))
+ break;
+ valid_bytes = invalid - remainder;
+
+ if (string == NULL)
+ string = g_string_sized_new (remaining_bytes);
+
+ g_string_append_len (string, remainder, valid_bytes);
+ /* append U+FFFD REPLACEMENT CHARACTER */
+ g_string_append (string, "\357\277\275");
+
+ remaining_bytes -= valid_bytes + 1;
+ remainder = invalid + 1;
+ }
+
+ if (string == NULL)
+ return g_strdup (name);
+
+ g_string_append (string, remainder);
+
+ g_assert (g_utf8_validate (string->str, -1, NULL));
+
+ return g_string_free (string, FALSE);
+}
+
/* we try to be as forgiving as we possibly can here - this isn't a
* validator. Almost nothing is considered a fatal error. We always
* try to return *something*.
@@ -548,17 +587,12 @@ read_attribute (char **p)
static void
parse (EVCard *evc, const char *str)
{
- char *buf = g_strdup (str);
- char *p, *end;
+ char *buf;
+ char *p;
EVCardAttribute *attr;
- /* first validate the string is valid utf8 */
- if (!g_utf8_validate (buf, -1, (const char **)&end)) {
- /* if the string isn't valid, we parse as much as we can from it */
- g_warning ("invalid utf8 passed to EVCard. Limping along.");
- *end = '\0';
- }
-
+ buf = make_valid_utf8 (str);
+
buf = fold_lines (buf);
d(printf ("BEFORE FOLDING:\n"));

View File

@ -0,0 +1,39 @@
Index: calendar/backends/file/e-cal-backend-file.c
================================================================================
--- calendar/backends/file/e-cal-backend-file.c
+++ calendar/backends/file/e-cal-backend-file.c
@@ -129,6 +129,7 @@
GnomeVFSFileSize out;
gchar *tmp, *backup_uristr;
char *buf;
+ char *error = NULL;
ECalBackendFile *cbfile = user_data;
priv = cbfile->priv;
@@ -201,12 +202,14 @@
g_mutex_unlock (priv->idle_save_mutex);
e_cal_backend_notify_error (E_CAL_BACKEND (cbfile),
_("Cannot save calendar data: Malformed URI."));
- return TRUE;
+ return FALSE;
error:
g_mutex_unlock (priv->idle_save_mutex);
- e_cal_backend_notify_error (E_CAL_BACKEND (cbfile), gnome_vfs_result_to_string (result));
- return TRUE;
+ error = g_strconcat (_("Can't save calendar data: "), gnome_vfs_result_to_string (result), NULL);
+ e_cal_backend_notify_error (E_CAL_BACKEND (cbfile), error);
+ g_free (error);
+ return FALSE;
}
static void
@@ -520,8 +523,6 @@
g_assert (icalcomp != NULL);
icalcomponent_add_component (priv->icalcomp, icalcomp);
-
- save (cbfile);
}
}

View File

@ -0,0 +1,26 @@
Index: addressbook/backends/file/e-book-backend-file.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/addressbook/backends/file/e-book-backend-file.c,v
retrieving revision 1.41
diff -u -p -r1.41 e-book-backend-file.c
--- addressbook/backends/file/e-book-backend-file.c 16 Jan 2006 16:36:14 -0000 1.41
+++ addressbook/backends/file/e-book-backend-file.c 11 Apr 2006 11:25:19 -0000
@@ -516,6 +516,8 @@ book_view_thread (gpointer data)
{
EDataBookView *book_view = data;
FileBackendSearchClosure *closure = get_closure (book_view);
+ if (!closure)
+ return;
EBookBackendFile *bf = closure->bf;
const char *query;
DB *db;
@@ -652,6 +654,9 @@ e_book_backend_file_stop_book_view (EBoo
{
FileBackendSearchClosure *closure = get_closure (book_view);
gboolean need_join = FALSE;
+
+ if (!closure)
+ return;
d(printf ("stopping query\n"));
g_mutex_lock (closure->mutex);

View File

@ -0,0 +1,31 @@
Index: camel/providers/groupwise/camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.129
diff -u -p -r1.129 camel-groupwise-folder.c
--- camel/providers/groupwise/camel-groupwise-folder.c 17 Apr 2006 10:26:16 -0000 1.129
+++ camel/providers/groupwise/camel-groupwise-folder.c 18 Apr 2006 15:14:40 -0000
@@ -586,11 +586,7 @@ groupwise_sync (CamelFolder *folder, gbo
EGwConnectionStatus status;
EGwConnection *cnc;
int count, i;
-
- /* Sync-up the (un)read changes before getting updates,
- so that the getFolderList will reflect the most recent changes too */
- groupwise_sync (folder, FALSE, ex);
-
+
if (((CamelOfflineStore *) gw_store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL ||
((CamelService *)gw_store)->status == CAMEL_SERVICE_DISCONNECTED) {
groupwise_sync_summary (folder, ex);
@@ -896,6 +892,10 @@ groupwise_refresh_folder(CamelFolder *fo
char *time_string = NULL, *t_str = NULL;
struct _folder_update_msg *msg;
gboolean check_all = FALSE;
+
+ /* Sync-up the (un)read changes before getting updates,
+ so that the getFolderList will reflect the most recent changes too */
+ groupwise_sync (folder, FALSE, ex);
if (((CamelOfflineStore *) gw_store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
g_warning ("In offline mode. Cannot refresh!!!\n");

View File

@ -0,0 +1,19 @@
Index: camel/providers/groupwise/camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.128
retrieving revision 1.129
diff -u -r1.128 -r1.129
--- camel/providers/groupwise/camel-groupwise-folder.c 2006/04/06 09:43:14 1.128
+++ camel/providers/groupwise/camel-groupwise-folder.c 2006/04/17 10:26:16 1.129
@@ -587,6 +587,10 @@
EGwConnection *cnc;
int count, i;
+ /* Sync-up the (un)read changes before getting updates,
+ so that the getFolderList will reflect the most recent changes too */
+ groupwise_sync (folder, FALSE, ex);
+
if (((CamelOfflineStore *) gw_store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL ||
((CamelService *)gw_store)->status == CAMEL_SERVICE_DISCONNECTED) {
groupwise_sync_summary (folder, ex);

View File

@ -0,0 +1,19 @@
Index: calendar/backends/groupwise/e-cal-backend-groupwise-utils.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/backends/groupwise/e-cal-backend-groupwise-utils.c,v
retrieving revision 1.73
diff -u -p -r1.73 e-cal-backend-groupwise-utils.c
--- calendar/backends/groupwise/e-cal-backend-groupwise-utils.c 9 Dec 2005 11:21:49 -0000 1.73
+++ calendar/backends/groupwise/e-cal-backend-groupwise-utils.c 11 Apr 2006 09:12:09 -0000
@@ -300,9 +300,10 @@ e_cal_backend_groupwise_set_attachments_
/* FIXME the member does not follow the naming convention.
* Should be fixed in e-gw-item*/
attach_item->contentType = g_strdup (gnome_vfs_get_mime_type (attach_filename_full));
- g_free (attach_filename_full);
attach_item->name = g_strdup (filename + strlen(uid) + 1);
+ g_free (attach_filename_full);
+
/* do a base64 encoding so it can be embedded in a soap
* message */
encoded_data = soup_base64_encode (file_contents, file_len);

View File

@ -0,0 +1,107 @@
--- addressbook/backends/groupwise/e-book-backend-groupwise.c.orig 2006-04-16 20:19:03.086611569 +0200
+++ addressbook/backends/groupwise/e-book-backend-groupwise.c 2006-04-16 20:24:43.271873993 +0200
@@ -2814,8 +2814,41 @@ update_address_book_deltas (EBookBackend
printf("sequence differs but no changes found !!!\n");
break;
}
- printf("add_list size:%d\n", g_list_length(add_list));
- printf("delete_list size:%d\n", g_list_length(delete_list));
+ if (enable_debug) {
+ printf("add_list size:%d\n", g_list_length(add_list));
+ printf("delete_list size:%d\n", g_list_length(delete_list));
+ }
+
+ for (; delete_list != NULL; delete_list = g_list_next(delete_list)) {
+ const char *id;
+
+ /* deleted from the server */
+ contact = e_contact_new ();
+ fill_contact_from_gw_item (contact,
+ E_GW_ITEM (delete_list->data),
+ ebgw->priv->categories_by_id);
+ if (enable_debug)
+ printf("contact email:%s, contact name:%s\n", (char *) e_contact_get(contact, E_CONTACT_EMAIL_1), (char *) e_contact_get(contact, E_CONTACT_GIVEN_NAME));
+ e_contact_set (contact,
+ E_CONTACT_BOOK_URI,
+ priv->original_uri);
+ id = e_contact_get_const (contact, E_CONTACT_UID);
+
+ if (e_book_backend_cache_check_contact (ebgw->priv->cache, id)) {
+ contact_num++;
+
+ if (book_view) {
+ status_msg = g_strdup_printf (_("Updating contacts cache (%d)... "),
+ contact_num);
+ book_view_notify_status (book_view, status_msg);
+ g_free (status_msg);
+ }
+ e_book_backend_cache_remove_contact (ebgw->priv->cache, id);
+ e_book_backend_summary_remove_contact (ebgw->priv->summary, id);
+ }
+ g_object_unref(contact);
+ g_object_unref (delete_list->data);
+ }
for (; add_list != NULL; add_list = g_list_next(add_list)) {
const char *id;
@@ -2851,34 +2884,6 @@ update_address_book_deltas (EBookBackend
g_object_unref (add_list->data);
}
- for (; delete_list != NULL; delete_list = g_list_next(delete_list)) {
- const char *id;
-
- /* deleted from the server */
- contact = e_contact_new ();
- fill_contact_from_gw_item (contact,
- E_GW_ITEM (delete_list->data),
- ebgw->priv->categories_by_id);
- e_contact_set (contact,
- E_CONTACT_BOOK_URI,
- priv->original_uri);
- id = e_contact_get_const (contact, E_CONTACT_UID);
-
- if (e_book_backend_cache_check_contact (ebgw->priv->cache, id)) {
- contact_num++;
-
- if (book_view) {
- status_msg = g_strdup_printf (_("Updating contacts cache (%d)... "),
- contact_num);
- book_view_notify_status (book_view, status_msg);
- g_free (status_msg);
- }
- e_book_backend_cache_remove_contact (ebgw->priv->cache, id);
- e_book_backend_summary_remove_contact (ebgw->priv->summary, id);
- }
- g_object_unref(contact);
- g_object_unref (delete_list->data);
- }
cache_last_sequence += contact_num;
}
--- servers/groupwise/e-gw-connection.c.orig 2006-04-16 20:19:30.383515263 +0200
+++ servers/groupwise/e-gw-connection.c 2006-04-16 20:19:40.699856797 +0200
@@ -764,7 +764,7 @@ e_gw_connection_get_items_delta (EGwConn
SoupSoapMessage *msg;
SoupSoapResponse *response;
EGwConnectionStatus status;
- SoupSoapParameter *param, *subparam;
+ SoupSoapParameter *param, *subparam, *subsubparam;
g_return_val_if_fail (E_IS_GW_CONNECTION (cnc), E_GW_CONNECTION_STATUS_INVALID_OBJECT);
@@ -819,11 +819,11 @@ e_gw_connection_get_items_delta (EGwConn
item = e_gw_item_new_from_soap_parameter (cnc->priv->user_email, container, subparam);
- subparam = soup_soap_parameter_get_first_child_by_name(subparam, "sync");
- if (subparam) {
+ subsubparam = soup_soap_parameter_get_first_child_by_name(subparam, "sync");
+ if (subsubparam) {
char *value;
- value = soup_soap_parameter_get_string_value (subparam);
+ value = soup_soap_parameter_get_string_value (subsubparam);
if (!strcmp (value, "add") || !strcmp (value, "update")) {
*add_list = g_list_append (*add_list, item);
} else if (!strcmp (value, "delete")) {

View File

@ -0,0 +1,33 @@
Index: calendar/backends/groupwise/e-cal-backend-groupwise.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/backends/groupwise/e-cal-backend-groupwise.c,v
retrieving revision 1.173.2.1
diff -u -p -r1.173.2.1 e-cal-backend-groupwise.c
--- calendar/backends/groupwise/e-cal-backend-groupwise.c 6 Apr 2006 08:18:28 -0000 1.173.2.1
+++ calendar/backends/groupwise/e-cal-backend-groupwise.c 21 Apr 2006 06:23:23 -0000
@@ -1814,12 +1814,11 @@ e_cal_backend_groupwise_modify_object (E
in_offline (cbgw);
return GNOME_Evolution_Calendar_RepositoryOffline;
}
-
+
/* check the component for validity */
icalcomp = icalparser_parse_string (calobj);
if (!icalcomp)
return GNOME_Evolution_Calendar_InvalidObject;
-
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomp);
e_cal_component_get_uid (comp, &uid);
@@ -1844,9 +1843,8 @@ e_cal_backend_groupwise_modify_object (E
if (mod == CALOBJ_MOD_ALL && e_cal_component_is_instance (comp)) {
recur_key = uid;
- } else {
- id = e_gw_item_get_id (item);
- }
+ }
+ id = e_gw_item_get_id (item);
status = e_gw_connection_delegate_request (priv->cnc, item, id, NULL, NULL, recur_key);

View File

@ -0,0 +1,128 @@
Index: calendar/ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/ChangeLog,v
retrieving revision 1.568.2.16
diff -u -p -r1.568.2.16 ChangeLog
--- calendar/ChangeLog 14 Jun 2006 11:02:55 -0000 1.568.2.16
+++ calendar/ChangeLog 17 Jul 2006 06:05:27 -0000
@@ -1,3 +1,12 @@
+2006-07-17 Harish Krishnaswamy <kharish@novell.com>
+
+ * backends/groupwise/e-cal-backend-groupwise-utils.c:
+ (set_default_alarms), (e_gw_item_to_cal_component):
+ * backends/groupwise/e-cal-backend-groupwise-utils.h:
+ Apply default alarm client preference to GW events if
+ the event does not already have one. Fixes Bug
+ #167330 on bugzilla.novell.com.
+
2006-06-14 Wang Xin <jedy.wang@sun.com>
Fixes #344253
Index: calendar/backends/groupwise/e-cal-backend-groupwise-utils.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/backends/groupwise/e-cal-backend-groupwise-utils.c,v
retrieving revision 1.73
diff -u -p -r1.73 e-cal-backend-groupwise-utils.c
--- calendar/backends/groupwise/e-cal-backend-groupwise-utils.c 9 Dec 2005 11:21:49 -0000 1.73
+++ calendar/backends/groupwise/e-cal-backend-groupwise-utils.c 17 Jul 2006 06:05:27 -0000
@@ -803,6 +803,67 @@ set_attachments_to_cal_component (EGwIte
}
+static void
+set_default_alarms (ECalComponent *comp)
+{
+
+ GConfClient *gconf = gconf_client_get_default ();
+
+ if (gconf_client_get_bool (gconf, CALENDAR_CONFIG_DEFAULT_REMINDER, NULL)) {
+
+ ECalComponentAlarm *acomp;
+ int interval;
+ char * units;
+ enum {
+ DAYS,
+ HOURS,
+ MINUTES
+ } duration;
+ ECalComponentAlarmTrigger trigger;
+
+ interval = gconf_client_get_int (gconf, CALENDAR_CONFIG_DEFAULT_REMINDER_INTERVAL, NULL);
+ units = gconf_client_get_string (gconf, CALENDAR_CONFIG_DEFAULT_REMINDER_UNITS, NULL);
+ g_object_unref (gconf);
+
+ if (units && !strcmp (units, "days"))
+ duration = DAYS;
+ else if (units && !strcmp (units, "hours"))
+ duration = HOURS;
+ else
+ duration = MINUTES;
+ g_free (units);
+ acomp = e_cal_component_alarm_new ();
+
+ e_cal_component_alarm_set_action (acomp, E_CAL_COMPONENT_ALARM_DISPLAY);
+
+ trigger.type = E_CAL_COMPONENT_ALARM_TRIGGER_RELATIVE_START;
+ memset (&trigger.u.rel_duration, 0, sizeof (trigger.u.rel_duration));
+
+ trigger.u.rel_duration.is_neg = TRUE;
+
+ switch (duration) {
+ case MINUTES:
+ trigger.u.rel_duration.minutes = interval;
+ break;
+ case HOURS:
+ trigger.u.rel_duration.hours = interval;
+ break;
+ case DAYS:
+ trigger.u.rel_duration.days = interval;
+ break;
+ default:
+ e_cal_component_alarm_free (acomp);
+ return;
+ }
+
+ e_cal_component_alarm_set_trigger (acomp, trigger);
+ e_cal_component_add_alarm (comp, acomp);
+
+ e_cal_component_alarm_free (acomp);
+ }
+}
+
+
ECalComponent *
e_gw_item_to_cal_component (EGwItem *item, ECalBackendGroupwise *cbgw)
{
@@ -1111,9 +1172,9 @@ e_gw_item_to_cal_component (EGwItem *ite
trigger.u.rel_duration = icaldurationtype_from_int (alarm_duration);
e_cal_component_alarm_set_trigger (alarm, trigger);
e_cal_component_add_alarm (comp, alarm);
- }
-
+ } else
+ set_default_alarms (comp);
break;
case E_GW_ITEM_TYPE_TASK :
Index: calendar/backends/groupwise/e-cal-backend-groupwise-utils.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/calendar/backends/groupwise/e-cal-backend-groupwise-utils.h,v
retrieving revision 1.18
diff -u -p -r1.18 e-cal-backend-groupwise-utils.h
--- calendar/backends/groupwise/e-cal-backend-groupwise-utils.h 11 Oct 2005 07:56:18 -0000 1.18
+++ calendar/backends/groupwise/e-cal-backend-groupwise-utils.h 17 Jul 2006 06:05:27 -0000
@@ -33,6 +33,13 @@ G_BEGIN_DECLS
#define GW_EVENT_TYPE_ID "@4:"
#define GW_TODO_TYPE_ID "@3:"
+
+/* Default reminder */
+#define CALENDAR_CONFIG_PREFIX "/apps/evolution/calendar"
+#define CALENDAR_CONFIG_DEFAULT_REMINDER CALENDAR_CONFIG_PREFIX "/other/use_default_reminder"
+#define CALENDAR_CONFIG_DEFAULT_REMINDER_INTERVAL CALENDAR_CONFIG_PREFIX "/other/default_reminder_interval"
+#define CALENDAR_CONFIG_DEFAULT_REMINDER_UNITS CALENDAR_CONFIG_PREFIX "/other/default_reminder_units"
+
/*
* Items management
*/

95
bnc-167638.patch Normal file
View File

@ -0,0 +1,95 @@
Index: camel/camel.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/camel.c,v
retrieving revision 1.56
diff -u -r1.56 camel/camel.c
--- camel/camel.c 6 Dec 2005 04:21:56 -0000 1.56
+++ camel/camel.c 20 Apr 2006 21:12:40 -0000
@@ -44,6 +44,8 @@
static int initialised = FALSE;
+int camel_application_is_exiting = FALSE;
+
static void
camel_shutdown (void)
{
Index: camel/providers/imap/camel-imap-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/imap/camel-imap-folder.c,v
retrieving revision 1.358
diff -u -r1.358 camel/camel-imap-folder.c
--- camel/providers/imap/camel-imap-folder.c 10 Jan 2006 07:56:47 -0000 1.358
+++ camel/providers/imap/camel-imap-folder.c 20 Apr 2006 21:12:40 -0000
@@ -607,6 +607,7 @@
{
CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
CamelImapStore *store = CAMEL_IMAP_STORE (folder->parent_store);
+ extern int camel_application_is_exiting;
struct {
char *uid;
guint32 flags;
@@ -619,7 +620,10 @@
GArray *removed;
gboolean ok;
CamelFolderChangeInfo *changes = NULL;
-
+
+ if (camel_application_is_exiting)
+ return;
+
CAMEL_SERVICE_ASSERT_LOCKED (store, connect_lock);
imap_folder->need_rescan = FALSE;
@@ -2617,6 +2621,7 @@
GArray *expunged, CamelException *ex)
{
CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
+ extern int camel_application_is_exiting;
CamelFolderChangeInfo *changes;
CamelMessageInfo *info;
int len;
@@ -2646,7 +2651,7 @@
}
len = camel_folder_summary_count (folder->summary);
- if (exists > len)
+ if (exists > len && !camel_application_is_exiting)
imap_update_summary (folder, exists, changes, ex);
if (camel_folder_change_info_changed (changes))
Index: camel/providers/groupwise/camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.130
diff -u -p -r1.130 camel-groupwise-folder.c
--- camel/providers/groupwise/camel-groupwise-folder.c 18 Apr 2006 15:15:30 -0000 1.130
+++ camel/providers/groupwise/camel-groupwise-folder.c 21 Apr 2006 11:18:22 -0000
@@ -59,7 +59,7 @@
#define ADD_JUNK_ENTRY 1
#define REMOVE_JUNK_ENTRY -1
#define JUNK_FOLDER "Junk Mail"
-#define READ_CURSOR_MAX_IDS 500
+#define READ_CURSOR_MAX_IDS 50
#define MAX_ATTACHMENT_SIZE 1*1024*1024 /*In bytes*/
static CamelOfflineFolderClass *parent_class = NULL;
@@ -749,6 +749,9 @@ struct _folder_update_msg {
static void
update_update (CamelSession *session, CamelSessionThreadMsg *msg)
{
+
+ extern int camel_application_is_exiting;
+
struct _folder_update_msg *m = (struct _folder_update_msg *)msg;
EGwConnectionStatus status;
CamelException *ex = NULL;
@@ -767,7 +770,7 @@ update_update (CamelSession *session, Ca
done = FALSE;
m->slist = NULL;
- while (!done) {
+ while (!done && !camel_application_is_exiting) {
item_list = NULL;
status = e_gw_connection_get_all_mail_uids (m->cnc, m->container_id, cursor, FALSE, READ_CURSOR_MAX_IDS, position, &item_list);
if (status != E_GW_CONNECTION_STATUS_OK) {

View File

@ -0,0 +1,31 @@
Index: servers/exchange/storage/exchange-account.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/exchange/storage/exchange-account.c,v
retrieving revision 1.31
diff -u -p -r1.31 exchange-account.c
--- servers/exchange/storage/exchange-account.c 20 Apr 2006 13:04:12 -0000 1.31
+++ servers/exchange/storage/exchange-account.c 2 May 2006 11:22:10 -0000
@@ -1272,7 +1272,7 @@ setup_account_hierarchies (ExchangeAccou
account->priv->identity_name,
account->priv->identity_email,
account->priv->source_uri,
- FALSE);
+ TRUE);
setup_hierarchy (account, hier);
g_free (phys_uri_prefix);
Index: servers/exchange/storage/exchange-hierarchy-favorites.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/exchange/storage/exchange-hierarchy-favorites.c,v
retrieving revision 1.7
diff -u -p -r1.7 exchange-hierarchy-favorites.c
--- servers/exchange/storage/exchange-hierarchy-favorites.c 6 Feb 2006 08:01:53 -0000 1.7
+++ servers/exchange/storage/exchange-hierarchy-favorites.c 2 May 2006 11:27:16 -0000
@@ -336,6 +336,6 @@ exchange_hierarchy_favorites_new (Exchan
public_uri,
owner_name, owner_email,
source_uri,
- FALSE);
+ TRUE);
return hier;
}

View File

@ -0,0 +1,29 @@
--- addressbook/backends/groupwise/e-book-backend-groupwise.c.orig 2006-05-11 12:21:57.361493158 +0200
+++ addressbook/backends/groupwise/e-book-backend-groupwise.c 2006-05-11 12:15:45.055028496 +0200
@@ -2883,7 +2883,6 @@ update_address_book_deltas (EBookBackend
if (cache_last_sequence != server_last_sequence) {
- while (cache_last_sequence < server_last_sequence) {
if (enable_debug) {
printf("cache_last_sequence:%lf, server_last_sequence:%lf\n", cache_last_sequence, server_last_sequence);
printf("Calling get_items_delta\n");
@@ -2897,7 +2896,8 @@ update_address_book_deltas (EBookBackend
if (add_list == NULL && delete_list == NULL) {
if (enable_debug)
printf("sequence differs but no changes found !!!\n");
- break;
+ g_mutex_unlock (priv->update_mutex);
+ return TRUE;
}
sync_required = TRUE;
if (enable_debug) {
@@ -2976,7 +2976,7 @@ update_address_book_deltas (EBookBackend
g_object_unref (add_list->data);
}
cache_last_sequence += contact_num;
- }
+
/* cache is updated, now adding the sequence information to the cache */

184
bnc-170052-eds-crash.patch Normal file
View File

@ -0,0 +1,184 @@
--- addressbook/backends/groupwise/e-book-backend-groupwise.c 2006-06-09 15:05:45.000000000 +0530
+++ addressbook/backends/groupwise/e-book-backend-groupwise-new.c 2006-06-09 14:35:19.000000000 +0530
@@ -73,12 +73,12 @@ struct _EBookBackendGroupwisePrivate {
int mode;
int cache_timeout;
EBookBackendSummary *summary;
+ GMutex *update_cache_mutex;
GMutex *update_mutex;
DB *file_db;
DB_ENV *env;
/* for future use */
void *reserved1;
- void *reserved2;
};
static GStaticMutex global_env_lock = G_STATIC_MUTEX_INIT;
@@ -1170,6 +1170,7 @@ e_book_backend_groupwise_create_contact
e_contact_set (contact, E_CONTACT_UID, id);
g_free (id);
e_book_backend_db_cache_add_contact (egwb->priv->file_db, contact);
+ egwb->priv->file_db->sync(egwb->priv->file_db, 0);
e_book_backend_summary_add_contact (egwb->priv->summary, contact);
e_data_book_respond_create(book, opid, GNOME_Evolution_Addressbook_Success, contact);
@@ -1223,6 +1224,7 @@ e_book_backend_groupwise_remove_contacts
e_book_backend_db_cache_remove_contact (ebgw->priv->file_db, id);
e_book_backend_summary_remove_contact (ebgw->priv->summary, id);
}
+ ebgw->priv->file_db->sync(ebgw->priv->file_db, 0);
e_data_book_respond_remove_contacts (book, opid,
GNOME_Evolution_Addressbook_Success, deleted_ids);
return;
@@ -1358,6 +1360,7 @@ e_book_backend_groupwise_modify_contact
e_book_backend_db_cache_remove_contact (egwb->priv->file_db, id);
e_book_backend_summary_remove_contact (egwb->priv->summary, id);
e_book_backend_db_cache_add_contact (egwb->priv->file_db, contact);
+ egwb->priv->file_db->sync(egwb->priv->file_db, 0);
e_book_backend_summary_add_contact (egwb->priv->summary, contact);
}
else
@@ -2691,6 +2694,8 @@ update_cache (EBookBackendGroupwise *ebg
if (!ebgw)
return FALSE;
+ g_mutex_lock (ebgw->priv->update_cache_mutex);
+
if (enable_debug) {
g_get_current_time(&start);
printf("updating cache for %s\n", ebgw->priv->book_name);
@@ -2729,6 +2734,7 @@ update_cache (EBookBackendGroupwise *ebg
bonobo_object_unref (book_view);
if (enable_debug)
printf("No connection with the server \n");
+ g_mutex_unlock (ebgw->priv->update_cache_mutex);
return FALSE;
}
@@ -2738,6 +2744,7 @@ update_cache (EBookBackendGroupwise *ebg
contact = e_contact_new ();
fill_contact_from_gw_item (contact, E_GW_ITEM (gw_items->data),
ebgw->priv->categories_by_id);
+
e_contact_set (contact, E_CONTACT_BOOK_URI, ebgw->priv->original_uri);
id = e_contact_get_const (contact, E_CONTACT_UID);
@@ -2782,6 +2789,7 @@ update_cache (EBookBackendGroupwise *ebg
printf("updating the cache for %s complated in %ld.%03ld seconds for %d contacts\n",
ebgw->priv->book_name, diff / 1000, diff % 1000, contact_num);
}
+ g_mutex_unlock (ebgw->priv->update_cache_mutex);
return FALSE;
}
@@ -2797,6 +2805,7 @@ update_address_book_deltas (EBookBackend
EContact *contact;
EDataBookView *book_view;
GroupwiseBackendSearchClosure *closure;
+ EGwItem *item;
if (!ebgw)
return FALSE;
@@ -2827,6 +2836,9 @@ update_address_book_deltas (EBookBackend
if (enable_debug)
printf ("sequence is reset, rebuilding cache...\n");
build_cache (ebgw);
+ add_sequence_to_cache (priv->file_db, server_first_sequence,
+ server_last_sequence, server_last_po_rebuild_time);
+ ebgw->priv->file_db->sync (ebgw->priv->file_db, 0);
g_mutex_unlock (priv->update_mutex);
return TRUE;
}
@@ -2844,6 +2856,7 @@ update_address_book_deltas (EBookBackend
add_sequence_to_cache (priv->file_db, server_first_sequence,
server_last_sequence, server_last_po_rebuild_time);
ebgw->priv->file_db->sync (ebgw->priv->file_db, 0);
+ g_mutex_unlock (priv->update_mutex);
return TRUE;
}
@@ -2896,6 +2909,8 @@ update_address_book_deltas (EBookBackend
if (add_list == NULL && delete_list == NULL) {
if (enable_debug)
printf("sequence differs but no changes found !!!\n");
+ add_sequence_to_cache (priv->file_db, server_first_sequence,
+ server_last_sequence, server_last_po_rebuild_time);
g_mutex_unlock (priv->update_mutex);
return TRUE;
}
@@ -2945,6 +2960,20 @@ update_address_book_deltas (EBookBackend
E_GW_ITEM (add_list->data),
ebgw->priv->categories_by_id);
+ /* When a distribution list is modified the server sends me a delete and add response.
+ But it doesnt send me the members, so i have to explicitly request the server for the members of the distribution list */
+
+ if (e_contact_get (contact, E_CONTACT_IS_LIST)) {
+ if(enable_debug)
+ printf ("Contact List modified fetching the members of the contact list\n");
+
+ status = e_gw_connection_get_item (ebgw->priv->cnc, ebgw->priv->container_id, e_contact_get (contact, E_CONTACT_UID), "name email default members", &item);
+ g_object_unref (contact);
+ contact = e_contact_new ();
+ fill_contact_from_gw_item (contact, item, ebgw->priv->categories_by_id);
+ g_object_unref (item);
+ }
+
if (enable_debug)
printf("contact email:%s, contact name:%s\n", (char *)e_contact_get(contact, E_CONTACT_EMAIL_1),(char *) e_contact_get(contact, E_CONTACT_GIVEN_NAME));
e_contact_set (contact,
@@ -2977,7 +3006,6 @@ update_address_book_deltas (EBookBackend
}
cache_last_sequence += contact_num;
-
/* cache is updated, now adding the sequence information to the cache */
add_sequence_to_cache (priv->file_db, server_first_sequence,
@@ -3054,11 +3082,15 @@ e_book_backend_groupwise_authenticate_us
const char *cache_refresh_interval_set;
int cache_refresh_interval = CACHE_REFRESH_INTERVAL;
- if (enable_debug)
- printf ("authenticate user ............\n");
ebgw = E_BOOK_BACKEND_GROUPWISE (backend);
priv = ebgw->priv;
+ if (enable_debug) {
+ printf ("authenticate user ............\n");
+ if(priv->book_name)
+ printf("book_name:%s\n", priv->book_name);
+ }
+
switch (ebgw->priv->mode) {
case GNOME_Evolution_Addressbook_MODE_LOCAL:
@@ -3094,9 +3126,6 @@ e_book_backend_groupwise_authenticate_us
id = NULL;
is_writable = FALSE;
- if (enable_debug)
- if(priv->book_name)
- printf("book_name:%s\n", priv->book_name);
status = e_gw_connection_get_address_book_id (priv->cnc, priv->book_name, &id, &is_writable);
if (status == E_GW_CONNECTION_STATUS_INVALID_CONNECTION)
status = e_gw_connection_get_address_book_id (priv->cnc, priv->book_name, &id, &is_writable);
@@ -3632,6 +3661,8 @@ e_book_backend_groupwise_dispose (GObjec
}
if (bgw->priv->update_mutex)
g_mutex_free (bgw->priv->update_mutex);
+ if (bgw->priv->update_cache_mutex)
+ g_mutex_free (bgw->priv->update_cache_mutex);
g_free (bgw->priv);
bgw->priv = NULL;
@@ -3690,8 +3721,8 @@ e_book_backend_groupwise_init (EBookBack
priv->original_uri = NULL;
priv->cache_timeout = 0;
priv->update_mutex = g_mutex_new();
+ priv->update_cache_mutex = g_mutex_new ();
priv->reserved1 = NULL;
- priv->reserved2 = NULL;
backend->priv = priv;
if (g_getenv ("GROUPWISE_DEBUG")) {

437
bnc-173454.patch Normal file
View File

@ -0,0 +1,437 @@
Index: camel/providers/groupwise/camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.114.2.11
diff -u -r1.114.2.11 camel/providers/groupwise/camel-groupwise-folder.c
--- camel/providers/groupwise/camel-groupwise-folder.c 24 Apr 2006 09:59:12 -0000 1.114.2.11
+++ camel/providers/groupwise/camel-groupwise-folder.c 15 May 2006 18:01:10 -0000
@@ -1777,7 +1777,6 @@
CamelGroupwiseStore *gw_store= CAMEL_GROUPWISE_STORE(folder->parent_store);
CamelGroupwiseStorePrivate *priv = gw_store->priv;
CamelOfflineStore *offline = (CamelOfflineStore *) folder->parent_store;
- CamelAddress *recipients;
EGwConnectionStatus status;
EGwConnection *cnc;
EGwItem *item;
@@ -1804,14 +1803,8 @@
CAMEL_SERVICE_LOCK (folder->parent_store, connect_lock);
/*Get the container id*/
container_id = camel_groupwise_store_container_id_lookup (gw_store, folder->full_name) ;
-
- /* FIXME Separate To/CC/BCC? */
- recipients = CAMEL_ADDRESS (camel_internet_address_new ());
- camel_address_cat (recipients, CAMEL_ADDRESS (camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_TO)));
- camel_address_cat (recipients, CAMEL_ADDRESS (camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC)));
- camel_address_cat (recipients, CAMEL_ADDRESS (camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_BCC)));
-
- item = camel_groupwise_util_item_from_message (cnc, message, CAMEL_ADDRESS (message->from), recipients);
+
+ item = camel_groupwise_util_item_from_message (cnc, message, CAMEL_ADDRESS (message->from));
/*Set the source*/
if (!strcmp (folder->name, RECEIVED))
e_gw_item_set_source (item, "received");
Index: camel/providers/groupwise/camel-groupwise-transport.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-transport.c,v
retrieving revision 1.27
diff -u -r1.27 camel/providers/groupwise/camel-groupwise-transport.c
--- camel/providers/groupwise/camel-groupwise-transport.c 23 Jan 2006 10:37:24 -0000 1.27
+++ camel/providers/groupwise/camel-groupwise-transport.c 15 May 2006 18:01:10 -0000
@@ -180,7 +180,7 @@
}
- item = camel_groupwise_util_item_from_message (cnc, message, from, recipients);
+ item = camel_groupwise_util_item_from_message (cnc, message, from);
reply_request = (char *)camel_medium_get_header (CAMEL_MEDIUM (message), "In-Reply-To");
if (reply_request) {
Index: camel/providers/groupwise/camel-groupwise-utils.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-utils.c,v
retrieving revision 1.29.2.1
diff -u -r1.29.2.1 camel/providers/groupwise/camel-groupwise-utils.c
--- camel/providers/groupwise/camel-groupwise-utils.c 21 Mar 2006 10:41:51 -0000 1.29.2.1
+++ camel/providers/groupwise/camel-groupwise-utils.c 15 May 2006 18:01:10 -0000
@@ -35,6 +35,8 @@
#include "camel/camel-multipart.h"
#include "camel/camel-service.h"
#include "camel/camel-stream-mem.h"
+#include "camel/camel-stream-filter.h"
+#include "camel/camel-mime-filter-charset.h"
#include "camel-groupwise-utils.h"
@@ -261,7 +263,7 @@
return 0;
}
-GSList *
+static GSList *
add_recipients(GSList *recipient_list, CamelAddress *recipients, int recipient_type)
{
int total_add,i;
@@ -278,42 +280,31 @@
recipient->display_name = g_strdup (name);
recipient->type = recipient_type;
recipient->status = E_GW_ITEM_STAT_NONE;
- recipient_list= g_slist_append (recipient_list, recipient);
+ recipient_list = g_slist_prepend (recipient_list, recipient);
}
}
return recipient_list;
}
static void
-send_as_attachment (EGwConnection *cnc, EGwItem *item, CamelStreamMem *content, char *buffer, CamelContentType *type, CamelDataWrapper *dw, const char *filename, const char *encoding, const char *cid, GSList **attach_list)
+send_as_attachment (EGwConnection *cnc, EGwItem *item, CamelStreamMem *content, CamelContentType *type, CamelDataWrapper *dw, const char *filename, const char *cid, GSList **attach_list)
{
EGwItemLinkInfo *info = NULL;
EGwConnectionStatus status;
EGwItemAttachment *attachment;
EGwItem *temp_item;
-
- int len;
- len = content->buffer->len;
-
+
attachment = g_new0 (EGwItemAttachment, 1);
- attachment->contentType = g_strdup_printf ("%s/%s", type->type, type->subtype);
-
- if (cid) {
- gchar **t;
- //strip_lt_gt ((char **)&cid, 2, 3);
- t = g_strsplit_set (cid,"<>",-1);
- if (!t[1])
- attachment->contentid = g_strdup (cid);
- else
- attachment->contentid = g_strdup (t[1]);
- g_strfreev (t);
- }
-
+ attachment->contentType = camel_content_type_simple (type);
+
+ if (cid)
+ attachment->contentid = camel_header_contentid_decode (cid);
+
if (filename) {
- if (!strcmp (attachment->contentType, "application/pgp-signature")) {
+ if (camel_content_type_is (type, "application", "pgp-signature")) {
char *temp_str;
int temp_len;
- temp_str = soup_base64_encode (buffer, len);
+ temp_str = soup_base64_encode (content->buffer->data, content->buffer->len);
temp_len = strlen (temp_str);
attachment->data = g_strdup (temp_str);
attachment->size = temp_len;
@@ -321,23 +312,16 @@
temp_str = NULL;
temp_len = 0;
} else {
- if (strlen(encoding) > 0) {
- attachment->data = g_malloc0 (content->buffer->len+1);
- attachment->data = memcpy (attachment->data,
- content->buffer->data,
- content->buffer->len);
- attachment->size = content->buffer->len;
- } else {
- attachment->data = soup_base64_encode(content->buffer->data, content->buffer->len);
- attachment->size = strlen (attachment->data);
- }
+ attachment->data = soup_base64_encode(content->buffer->data, content->buffer->len);
+ attachment->size = strlen (attachment->data);
}
} else {
char *temp_str;
int temp_len;
if (!strcmp (attachment->contentType, "multipart/digest")) {
+ /* FIXME? */
} else {
- temp_str = soup_base64_encode (buffer, len);
+ temp_str = soup_base64_encode (content->buffer->data, content->buffer->len);
temp_len = strlen (temp_str);
attachment->data = g_strdup (temp_str);
attachment->size = temp_len;
@@ -347,28 +331,30 @@
}
}
- if (!strcmp (attachment->contentType, "text/html") || !(strcmp (attachment->contentType, "multipart/alternative"))) {
+ if (camel_content_type_is (type, "text", "html") || camel_content_type_is (type, "multipart", "alternative")) {
if (!filename)
filename = "text.htm";
- if (!(strcmp (attachment->contentType, "multipart/alternative"))) {
+ if (camel_content_type_is (type, "multipart", "alternative")) {
+ /* FIXME: this just feels so wrong... */
g_free (attachment->contentType);
attachment->contentType = g_strdup ("text/html");
}
}
attachment->name = g_strdup (filename ? filename : "");
- if (!g_ascii_strncasecmp (attachment->contentType, RFC_822, strlen (RFC_822))) {
- char *temp_id = NULL, *id = NULL;
- temp_id = (char *)camel_medium_get_header (CAMEL_MEDIUM ((CamelMimeMessage *)dw), "Message-Id");
- int len = strlen (temp_id);
-
- id = (char *)g_malloc0 (len-1);
- id = memcpy(id, temp_id+2, len-3);
-
- status = e_gw_connection_forward_item (cnc, id, NULL, TRUE, &temp_item);
- if (status != E_GW_CONNECTION_STATUS_OK)
+ if (camel_content_type_is (type, "message", "rfc822")) {
+ const char *message_id;
+ char *msgid;
+
+ message_id = camel_medium_get_header (CAMEL_MEDIUM (dw), "Message-Id");
+ msgid = camel_header_msgid_decode (message_id);
+
+ status = e_gw_connection_forward_item (cnc, msgid, NULL, TRUE, &temp_item);
+ g_free (msgid);
+
+ if (status != E_GW_CONNECTION_STATUS_OK) {
g_warning ("Could not send a forwardRequest...continuing without!!\n");
- else {
+ } else {
GSList *attach_list = e_gw_item_get_attach_id_list (temp_item);
EGwItemAttachment *temp_attach = (EGwItemAttachment *)attach_list->data;
attachment->id = g_strdup (temp_attach->id);
@@ -383,41 +369,36 @@
info = e_gw_item_get_link_info (temp_item);
e_gw_item_set_link_info (item, info);
}
- //attachment->id = g_strdup (id);
- g_free (id);
}
*attach_list = g_slist_append (*attach_list, attachment);
}
EGwItem *
-camel_groupwise_util_item_from_message (EGwConnection *cnc, CamelMimeMessage *message, CamelAddress *from, CamelAddress *recipients)
+camel_groupwise_util_item_from_message (EGwConnection *cnc, CamelMimeMessage *message, CamelAddress *from)
{
EGwItem *item;
EGwItemOrganizer *org = g_new0 (EGwItemOrganizer, 1);
-
const char *display_name = NULL, *email = NULL;
char *send_options = NULL;
CamelMultipart *mp;
- GSList *recipient_list = NULL, *attach_list = NULL;
+ GSList *recipient_list = NULL, *attach_list = NULL;
+ CamelAddress *recipients;
/*Egroupwise item*/
item = e_gw_item_new_empty ();
/*populate recipient list*/
- camel_address_remove(recipients,-1);
- camel_address_cat (recipients, CAMEL_ADDRESS (camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_TO)));
+ recipients = CAMEL_ADDRESS (camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_TO));
recipient_list=add_recipients(recipient_list,recipients,E_GW_ITEM_RECIPIENT_TO);
-
- camel_address_remove(recipients,-1);
- camel_address_cat (recipients, CAMEL_ADDRESS (camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC)));
+
+ recipients = CAMEL_ADDRESS (camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_CC));
recipient_list=add_recipients(recipient_list,recipients,E_GW_ITEM_RECIPIENT_CC);
- camel_address_remove(recipients,-1);
- camel_address_cat (recipients, CAMEL_ADDRESS (camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_BCC)));
+ recipients = CAMEL_ADDRESS (camel_mime_message_get_recipients (message, CAMEL_RECIPIENT_TYPE_BCC));
recipient_list=add_recipients(recipient_list,recipients,E_GW_ITEM_RECIPIENT_BC);
-
-
+ recipient_list = g_slist_reverse (recipient_list);
+
/** Get the mime parts from CamelMimemessge **/
mp = (CamelMultipart *)camel_medium_get_content_object (CAMEL_MEDIUM (message));
if(!mp) {
@@ -434,25 +415,43 @@
CamelStreamMem *content = (CamelStreamMem *)camel_stream_mem_new ();
CamelDataWrapper *dw = NULL;
CamelContentType *type;
- char *buffer = NULL;
- char *content_type = NULL;
-
+
dw = camel_medium_get_content_object (CAMEL_MEDIUM (message));
type = camel_mime_part_get_content_type((CamelMimePart *)message);
- content_type = g_strdup_printf ("%s/%s", type->type, type->subtype);
- camel_data_wrapper_write_to_stream(dw, (CamelStream *)content);
- buffer = g_malloc0 (content->buffer->len+1);
- buffer = memcpy (buffer, content->buffer->data, content->buffer->len);
- if (!strcmp(content_type, "text/plain")) {
- e_gw_item_set_content_type (item, content_type);
- e_gw_item_set_message (item, buffer);
+ if (camel_content_type_is (type, "text", "plain")) {
+ CamelStream *filtered_stream;
+ CamelMimeFilter *filter;
+ const char *charset;
+ char *content_type;
+
+ content_type = camel_content_type_simple (type);
+ e_gw_item_set_content_type (item, content_type);
+ g_free (content_type);
+
+ charset = camel_content_type_param (type, "charset");
+ if (charset && g_ascii_strcasecmp (charset, "US-ASCII") && g_ascii_strcasecmp (charset, "UTF-8")) {
+ filter = camel_mime_filter_charset_new_convert (charset, "UTF-8");
+ filtered_stream = camel_stream_filter_new_with_stream ((CamelStream *) content);
+ camel_stream_filter_add ((CamelStreamFilter *) filtered_stream, filter);
+ camel_object_unref (filter);
+ } else {
+ /* US-ASCII or UTF-8 */
+ filtered_stream = (CamelStream *) content;
+ camel_object_ref (content);
+ }
+
+ camel_data_wrapper_decode_to_stream (dw, filtered_stream);
+ camel_stream_flush (filtered_stream);
+ camel_object_unref (filtered_stream);
+
+ camel_stream_write ((CamelStream *) content, "", 1);
+ e_gw_item_set_message (item, content->buffer->data);
} else {
- send_as_attachment (cnc, item, content, buffer, type, dw, NULL, "", NULL, &attach_list);
+ camel_data_wrapper_decode_to_stream (dw, (CamelStream *) content);
+ send_as_attachment (cnc, item, content, type, dw, NULL, NULL, &attach_list);
}
-
- g_free (buffer);
- g_free (content_type);
+
camel_object_unref (content);
}
/*Populate EGwItem*/
@@ -589,10 +588,7 @@
CamelStreamMem *content = (CamelStreamMem *)camel_stream_mem_new ();
CamelDataWrapper *dw = NULL;
const char *disposition, *filename;
- char *buffer = NULL;
- char *mime_type = NULL;
const char *content_id = NULL;
- char *encoding;
gboolean is_alternative = FALSE;
/*
* XXX:
@@ -601,55 +597,71 @@
*/
part = camel_multipart_get_part (mp, i);
type = camel_mime_part_get_content_type(part);
- if (CAMEL_IS_MULTIPART ((CamelMultipart *)camel_medium_get_content_object (part))) {
- do_multipart (cnc, item, (CamelMultipart *)camel_medium_get_content_object (part), attach_list);
- continue;
- } else
dw = camel_medium_get_content_object (CAMEL_MEDIUM (part));
+
+ if (CAMEL_IS_MULTIPART (dw)) {
+ do_multipart (cnc, item, (CamelMultipart *) camel_medium_get_content_object ((CamelMedium *) part), attach_list);
+ continue;
+ }
+
if (type->subtype && !strcmp (type->subtype, "alternative")) {
+ /* eh... I don't think this code will ever get hit? */
CamelMimePart *temp_part;
const char *cid = NULL;
CamelStreamMem *temp_content = (CamelStreamMem *)camel_stream_mem_new ();
temp_part = camel_multipart_get_part ((CamelMultipart *)dw, 1);
CamelDataWrapper *temp_dw = NULL;
+
if (temp_part) {
is_alternative = TRUE;
temp_dw = camel_medium_get_content_object (CAMEL_MEDIUM (temp_part));
camel_data_wrapper_write_to_stream(temp_dw, (CamelStream *)temp_content);
- buffer = g_malloc0 (temp_content->buffer->len+1);
- buffer = memcpy (buffer, temp_content->buffer->data, temp_content->buffer->len);
filename = camel_mime_part_get_filename (temp_part);
disposition = camel_mime_part_get_disposition (temp_part);
- mime_type = camel_data_wrapper_get_mime_type (temp_dw);
cid = camel_mime_part_get_content_id (temp_part);
- g_print ("%s:%s\n",filename,camel_transfer_encoding_to_string(temp_part->encoding));
- send_as_attachment (cnc, item, temp_content, buffer, type, temp_dw, filename, "", cid, attach_list);
- g_free (buffer);
- g_free (mime_type);
+ send_as_attachment (cnc, item, temp_content, type, temp_dw, filename, cid, attach_list);
}
camel_object_unref (temp_content);
continue;
}
-
- camel_data_wrapper_write_to_stream(dw, (CamelStream *)content);
- buffer = g_malloc0 (content->buffer->len+1);
- encoding = camel_transfer_encoding_to_string (part->encoding);
- filename = camel_mime_part_get_filename (part);
- buffer = memcpy (buffer, content->buffer->data, content->buffer->len);
- disposition = camel_mime_part_get_disposition (part);
- mime_type = camel_data_wrapper_get_mime_type (dw);
- content_id = camel_mime_part_get_content_id (part);
-
- if (i == 0 && !strcmp (mime_type, "text/plain") ) {
- e_gw_item_set_content_type (item, mime_type);
- e_gw_item_set_message (item, buffer);
+ if (i == 0 && camel_content_type_is (type, "text", "plain")) {
+ CamelStream *filtered_stream;
+ CamelMimeFilter *filter;
+ const char *charset;
+ char *content_type;
+
+ content_type = camel_content_type_simple (type);
+ e_gw_item_set_content_type (item, content_type);
+ g_free (content_type);
+
+ charset = camel_content_type_param (type, "charset");
+ if (charset && g_ascii_strcasecmp (charset, "US-ASCII") && g_ascii_strcasecmp (charset, "UTF-8")) {
+ filter = camel_mime_filter_charset_new_convert (charset, "UTF-8");
+ filtered_stream = camel_stream_filter_new_with_stream ((CamelStream *) content);
+ camel_stream_filter_add ((CamelStreamFilter *) filtered_stream, filter);
+ camel_object_unref (filter);
+ } else {
+ /* US-ASCII or UTF-8 */
+ filtered_stream = (CamelStream *) content;
+ camel_object_ref (content);
+ }
+
+ camel_data_wrapper_decode_to_stream (dw, filtered_stream);
+ camel_stream_flush (filtered_stream);
+ camel_object_unref (filtered_stream);
+
+ camel_stream_write ((CamelStream *) content, "", 1);
+ e_gw_item_set_message (item, content->buffer->data);
} else {
- send_as_attachment (cnc, item, content, buffer, type, dw, filename, encoding, content_id, attach_list);
+ filename = camel_mime_part_get_filename (part);
+ disposition = camel_mime_part_get_disposition (part);
+ content_id = camel_mime_part_get_content_id (part);
+
+ camel_data_wrapper_decode_to_stream (dw, (CamelStream *) content);
+ send_as_attachment (cnc, item, content, type, dw, filename, content_id, attach_list);
}
-
- g_free (buffer);
- g_free (mime_type);
+
camel_object_unref (content);
} /*end of for*/
}
Index: camel/providers/groupwise/camel-groupwise-utils.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-utils.h,v
retrieving revision 1.10
diff -u -r1.10 camel/providers/groupwise/camel-groupwise-utils.h
--- camel/providers/groupwise/camel-groupwise-utils.h 4 Jan 2006 16:48:35 -0000 1.10
+++ camel/providers/groupwise/camel-groupwise-utils.h 15 May 2006 18:01:10 -0000
@@ -71,9 +71,9 @@
int e_path_rmdir (const char *prefix, const char *vpath);
-EGwItem *camel_groupwise_util_item_from_message (EGwConnection *cnc, CamelMimeMessage *message, CamelAddress *from, CamelAddress *recipients);
+EGwItem *camel_groupwise_util_item_from_message (EGwConnection *cnc, CamelMimeMessage *message, CamelAddress *from);
+
void do_flags_diff (flags_diff_t *diff, guint32 old, guint32 _new);
-GSList *add_recipients(GSList *recipient_list, CamelAddress *recipients, int recipient_type);
char *gw_concat ( const char *prefix, const char *suffix);
void strip_lt_gt (char **string, int s_offset, int e_offset);
#endif

View File

@ -0,0 +1,989 @@
--- libedataserver/Makefile.am
+++ libedataserver/Makefile.am
@@ -7,7 +7,8 @@
-DE_DATA_SERVER_EXTENSIONDIR=\"$(extensiondir)\" \
-DE_DATA_SERVER_IMAGESDIR=\"$(imagesdir)\" \
-DE_DATA_SERVER_UI_GLADEDIR=\""$(gladedir)"\" \
- $(E_DATA_SERVER_CFLAGS)
+ $(E_DATA_SERVER_CFLAGS) \
+ $(SOUP_CFLAGS)
# The marshallers
MARSHAL_GENERATED = e-data-server-marshal.c e-data-server-marshal.h
@@ -32,6 +33,7 @@
e-list-iterator.c \
e-memory.c \
e-msgport.c \
+ e-proxy.c \
e-sexp.c \
e-source-group.c \
e-source-list.c \
@@ -50,7 +52,8 @@
$(E_DATA_SERVER_LIBS) \
$(ICONV_LIBS) \
$(DB_LIBS) \
- $(SOCKET_LIBS)
+ $(SOCKET_LIBS) \
+ $(SOUP_LIBS)
libedataserver_1_2_la_LDFLAGS = \
-version-info $(LIBEDATASERVER_CURRENT):$(LIBEDATASERVER_REVISION):$(LIBEDATASERVER_AGE) $(NO_UNDEFINED)
@@ -72,6 +75,7 @@
e-list-iterator.h \
e-memory.h \
e-msgport.h \
+ e-proxy.h \
e-sexp.h \
e-source-group.h \
e-source-list.h \
--- libedataserver/e-proxy.c
+++ libedataserver/e-proxy.c
@@ -0,0 +1,647 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Authors: Jeffrey Stedfast <fejj@ximian.com>
+ * Veerapuram Varadhan <vvaradhan@novell.com>
+ *
+ * Copyright 2002 Ximian, Inc. (www.ximian.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 <netinet/in.h>
+#include <sys/socket.h>
+#include <string.h>
+#include <stdlib.h>
+#include <glib.h>
+#include <glib-object.h>
+
+#include <gconf/gconf.h>
+#include <gconf/gconf-client.h>
+
+#include <libsoup/soup-address.h>
+#include <libsoup/soup-uri.h>
+#include "e-proxy.h"
+
+/* Debug */
+#define d(x)
+
+/* GConf paths and keys */
+#define PATH_GCONF_GNOME_VFS "/system/http_proxy"
+#define KEY_GCONF_HTTP_PROXY_PORT (PATH_GCONF_GNOME_VFS "/" "port")
+#define KEY_GCONF_HTTP_PROXY_HOST (PATH_GCONF_GNOME_VFS "/" "host")
+
+#define KEY_GCONF_USE_HTTP_PROXY (PATH_GCONF_GNOME_VFS "/" "use_http_proxy")
+
+#define KEY_GCONF_HTTP_AUTH_USER (PATH_GCONF_GNOME_VFS "/" "authentication_user")
+#define KEY_GCONF_HTTP_AUTH_PW (PATH_GCONF_GNOME_VFS "/" "authentication_password")
+#define KEY_GCONF_HTTP_USE_AUTH (PATH_GCONF_GNOME_VFS "/" "use_authentication")
+
+#define KEY_GCONF_HTTP_PROXY_IGNORE_HOSTS (PATH_GCONF_GNOME_VFS "/" "ignore_hosts")
+
+struct _EProxyPrivate {
+ SoupUri* uri;
+ guint notify_id; /* conxn id of gconf_client_notify_add */
+ GSList* ign_hosts; /* List of hostnames. (Strings) */
+ GSList* ign_addrs; /* List of hostaddrs. (ProxyHostAddrs) */
+ gboolean use_proxy; /* Is system-proxy enabled? */
+};
+
+/* Enum definition is copied from gnome-vfs/modules/http-proxy.c */
+typedef enum {
+ PROXY_IPV4 = 4,
+ PROXY_IPV6 = 6
+} ProxyAddrType;
+
+typedef struct {
+ ProxyAddrType type; /* Specifies whether IPV4 or IPV6 */
+ void* addr; /* Either in_addr* or in6_addr* */
+ void* mask; /* Either in_addr* or in6_addr* */
+} ProxyHostAddr;
+
+/* Signals. */
+enum {
+ CHANGED,
+ LAST_SIGNAL
+};
+
+static GObjectClass *parent_class;
+static unsigned int signals[LAST_SIGNAL] = { 0 };
+
+/* Forward declarations. */
+
+static void ep_setting_changed (GConfClient *client, guint32 cnxn_id,
+ GConfEntry *entry, gpointer user_data);
+static void e_proxy_dispose (GObject* object);
+
+static void ipv6_network_addr (const struct in6_addr *addr,
+ const struct in6_addr *mask,
+ struct in6_addr *res);
+
+static void
+ep_free_proxy_host_addr (ProxyHostAddr* host)
+{
+ if (host) {
+ if (host->addr) {
+ g_free (host->addr);
+ host->addr = NULL;
+ }
+ if (host->mask) {
+ g_free (host->mask);
+ host->mask = NULL;
+ }
+ g_free (host);
+ }
+}
+
+
+static void
+e_proxy_class_init (EProxyClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ object_class->dispose = e_proxy_dispose;
+
+ /* signals */
+
+ /**
+ * EProxy::changed:
+ * @proxy: the proxy
+ *
+ * Emitted when proxy settings in gconf changes.
+ **/
+ signals[CHANGED] =
+ g_signal_new ("changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (EProxyClass, changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+
+}
+
+static void
+e_proxy_init (EProxy *pxy, EProxyClass *klass)
+{
+ EProxyPrivate *priv;
+
+ /* allocate internal structure */
+ priv = g_new0 (EProxyPrivate, 1);
+ pxy->priv = priv;
+ priv->ign_hosts = NULL;
+ priv->ign_addrs = NULL;
+ priv->uri = NULL;
+ priv->notify_id = 0;
+ priv->use_proxy = FALSE;
+}
+
+static void
+e_proxy_dispose (GObject *object)
+{
+ EProxy *proxy = (EProxy *)object;
+
+ if (!E_IS_PROXY (proxy))
+ return;
+
+ EProxyPrivate *priv = proxy->priv;
+
+ if (priv) {
+ GConfClient* client = NULL;
+
+ if ((client = gconf_client_get_default ())) {
+ if (priv->notify_id > 0)
+ gconf_client_notify_remove (client, priv->notify_id);
+ g_object_unref (client);
+ }
+
+ if (priv->uri)
+ soup_uri_free (priv->uri);
+
+ if (priv->ign_hosts) {
+ g_slist_foreach (priv->ign_hosts, (GFunc) ep_free_proxy_host_addr, NULL);
+ g_slist_free (priv->ign_hosts);
+ }
+
+ if (priv->ign_addrs) {
+ g_slist_foreach (priv->ign_addrs, (GFunc) g_free, NULL);
+ g_slist_free (priv->ign_addrs);
+ }
+
+ priv->notify_id = 0;
+
+ g_free (priv);
+ priv = NULL;
+ }
+}
+
+GType
+e_proxy_get_type (void)
+{
+ static GType type = 0;
+
+ if (!type) {
+ static GTypeInfo info = {
+ sizeof (EProxyClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) e_proxy_class_init,
+ NULL, NULL,
+ sizeof (EProxy),
+ 0,
+ (GInstanceInitFunc) e_proxy_init
+ };
+ type = g_type_register_static (G_TYPE_OBJECT, "EProxy", &info, 0);
+ }
+
+ return type;
+}
+
+static gboolean
+ep_need_proxy (EProxy* proxy, const char* host)
+{
+ SoupAddress *addr = NULL;
+ EProxyPrivate *priv = proxy->priv;
+ ProxyHostAddr *p_addr = NULL;
+ GSList *l;
+ guint status;
+
+ addr = soup_address_new (host, 0);
+ status = soup_address_resolve_sync (addr);
+ if (status == SOUP_STATUS_OK) {
+ gint addr_len;
+ struct sockaddr* s_addr = NULL;
+
+ s_addr = soup_address_get_sockaddr (addr, &addr_len);
+
+ /* This will never happen, since we have already called
+ soup_address_resolve_sync().
+ */
+ if (!s_addr)
+ return TRUE;
+
+ if (s_addr->sa_family == AF_INET) {
+ struct in_addr in, *mask, *addr_in;
+
+ in = ((struct sockaddr_in *)s_addr)->sin_addr;
+ for (l = priv->ign_addrs; l; l = l->next) {
+ p_addr = (ProxyHostAddr *)l->data;
+ if (p_addr->type == PROXY_IPV4) {
+ addr_in = ((struct in_addr *)p_addr->addr);
+ mask = ((struct in_addr *)p_addr->mask);
+ d(g_print ("ep_need_proxy:ipv4: in: %ul\t mask: %ul\t addr: %ul\n",
+ in.s_addr, mask->s_addr, addr_in->s_addr));
+ if ((in.s_addr & mask->s_addr) == addr_in->s_addr) {
+ d(g_print ("Host [%s] doesn't require proxy\n", host));
+ return FALSE;
+ }
+ }
+ }
+ } else {
+ struct in6_addr in6, net6;
+ struct in_addr *addr_in, *mask;
+
+ in6 = ((struct sockaddr_in6 *)s_addr)->sin6_addr;
+ for (l = priv->ign_addrs; l; l = l->next) {
+ p_addr = (ProxyHostAddr *)l->data;
+ ipv6_network_addr (&in6, (struct in6_addr *)p_addr->mask, &net6);
+ if (p_addr->type == PROXY_IPV6) {
+ if (IN6_ARE_ADDR_EQUAL (&net6, (struct in6_addr *)p_addr->addr)) {
+ d(g_print ("Host [%s] doesn't require proxy\n", host));
+ return FALSE;
+ }
+ } else if (p_addr->type == PROXY_IPV6 &&
+ IN6_IS_ADDR_V4MAPPED (&net6)) {
+ guint32 v4addr;
+
+ addr_in = ((struct in_addr *)p_addr->addr);
+ mask = ((struct in_addr *)p_addr->mask);
+
+ v4addr = net6.s6_addr[12] << 24
+ | net6.s6_addr[13] << 16
+ | net6.s6_addr[14] << 8
+ | net6.s6_addr[15];
+ if ((v4addr & mask->s_addr) != addr_in->s_addr) {
+ d(g_print ("Host [%s] doesn't require proxy\n", host));
+ return FALSE;
+ }
+ }
+ }
+ }
+ } else {
+ GSList* l;
+ gchar* hn = g_ascii_strdown (host, -1);
+
+ for (l = priv->ign_hosts; l; l = l->next) {
+ if (*((gchar *)l->data) == '*') {
+ if (g_str_has_suffix (hn, ((gchar *)l->data)+1)) {
+ g_free (hn);
+ return FALSE;
+ }
+ } else if (strcmp (hn, l->data) == 0) {
+ g_free (hn);
+ return FALSE;
+ }
+ }
+ g_free (hn);
+ }
+
+ d(g_print ("%s needs a proxy to connect to internet\n", host));
+ return TRUE;
+}
+
+static gboolean
+ep_manipulate_ipv4 (ProxyHostAddr *host_addr,
+ struct in_addr *addr_in,
+ gchar* netmask)
+{
+ gboolean has_error = FALSE;
+ struct in_addr *addr, *mask;
+
+ if (!addr_in)
+ return has_error;
+
+ host_addr->type = PROXY_IPV4;
+ addr = g_new0 (struct in_addr, 1);
+ memcpy (addr, addr_in, sizeof (struct in_addr));
+ mask = g_new0 (struct in_addr, 1);
+
+ if (netmask) {
+ gchar *endptr;
+ gint width = strtol (netmask, &endptr, 10);
+
+ if (*endptr != '\0' || width < 0 || width > 32) {
+ has_error = TRUE;
+ }
+ mask->s_addr = htonl (~0 << width);
+ addr->s_addr &= mask->s_addr;
+ } else {
+ mask->s_addr = 0xFFFFFFFF;
+ }
+
+ d(g_print ("ep_manipulate_ipv4: addr_in: %ul, addr: %ul, mask: %ul\n",
+ addr_in->s_addr, addr->s_addr, mask->s_addr));
+
+ host_addr->addr = addr;
+ host_addr->mask = mask;
+
+ return has_error;
+}
+
+static void
+ipv6_network_addr(const struct in6_addr *addr, const struct in6_addr *mask,
+ struct in6_addr *res)
+{
+ gint i;
+
+ for (i = 0; i < 16; ++i) {
+ res->s6_addr[i] = addr->s6_addr[i] & mask->s6_addr[i];
+ }
+}
+
+static gboolean
+ep_manipulate_ipv6 (ProxyHostAddr *host_addr,
+ struct in6_addr *addr_in6,
+ gchar* netmask)
+{
+ gboolean has_error = FALSE;
+ struct in6_addr *addr, *mask;
+ int i;
+
+ if (!addr_in6)
+ return has_error;
+
+ host_addr->type = PROXY_IPV6;
+
+ addr = g_new0 (struct in6_addr, 1);
+ mask = g_new0 (struct in6_addr, 1);
+
+ for (i = 0; i < 16; ++i) {
+ addr->s6_addr[i] = addr_in6->s6_addr[i];
+ }
+ if (netmask) {
+ gchar *endptr;
+ gint width = strtol(netmask, &endptr, 10);
+
+ if (*endptr != '\0' || width < 0 || width > 128) {
+ has_error = TRUE;
+ }
+ for (i = 0; i < 16; ++i) {
+ mask->s6_addr[i] = 0;
+ }
+ for (i = 0; i < width / 8; i++) {
+ mask->s6_addr[i] = 0xff;
+ }
+ mask->s6_addr[i] = (0xff << (8 - width % 8)) & 0xff;
+ ipv6_network_addr(addr, mask, addr);
+ } else {
+ for (i = 0; i < 16; ++i) {
+ mask->s6_addr[i] = 0xff;
+ }
+ }
+
+ host_addr->addr = addr;
+ host_addr->mask = mask;
+
+ return has_error;
+}
+
+static void
+ep_parse_ignore_host (gpointer data, gpointer user_data)
+{
+ EProxy* proxy = (EProxy *)user_data;
+ EProxyPrivate* priv = NULL;
+ SoupAddress *addr;
+ guint status;
+ gchar *input, *netmask, *hostname;
+ ProxyHostAddr *host_addr;
+ gboolean has_error = FALSE;
+
+ if (!proxy || !proxy->priv)
+ return;
+
+ priv = proxy->priv;
+ input = (gchar *)data;
+
+ if ((netmask = strrchr (input, '/')) != NULL) {
+ hostname = g_strndup (input, netmask - input);
+ ++netmask;
+ } else {
+ hostname = g_ascii_strdown (input, -1);
+ }
+
+ addr = soup_address_new (hostname, 0);
+ status = soup_address_resolve_sync (addr);
+ if (status == SOUP_STATUS_OK) {
+ gint addr_len;
+ struct sockaddr* s_addr = NULL;
+
+ host_addr = g_new0 (ProxyHostAddr, 1);
+
+ s_addr = soup_address_get_sockaddr (addr, &addr_len);
+
+ /* This will never happen, since we have already called
+ soup_address_resolve_sync().
+ */
+ if (!s_addr)
+ goto error;
+
+ if (s_addr->sa_family == AF_INET)
+ has_error = ep_manipulate_ipv4 (host_addr,
+ &((struct sockaddr_in *)s_addr)->sin_addr,
+ netmask);
+ else
+ has_error = ep_manipulate_ipv6 (host_addr,
+ &((struct sockaddr_in6 *)s_addr)->sin6_addr,
+ netmask);
+
+ if (!has_error)
+ priv->ign_addrs = g_slist_append (priv->ign_addrs, host_addr);
+
+ g_free (hostname);
+ } else {
+ d(g_print ("Unable to resolve %s\n", hostname));
+ priv->ign_hosts = g_slist_append (priv->ign_hosts, hostname);
+ }
+ error:
+ g_object_unref (addr);
+}
+
+static void
+ep_set_proxy (GConfClient *client,
+ gpointer user_data,
+ gboolean regen_ign_host_list,
+ gboolean set_auth)
+{
+ char *proxy_server = NULL, *proxy_user = NULL, *proxy_pw = NULL, *uri = NULL;
+ gboolean use_auth;
+ int proxy_port;
+ EProxy* proxy = (EProxy *)user_data;
+ EProxyPrivate* priv = proxy->priv;
+ GSList *ignore;
+
+ priv->use_proxy = gconf_client_get_bool (client, KEY_GCONF_USE_HTTP_PROXY, NULL);
+ if (priv->use_proxy == FALSE) {
+ if (priv->uri) {
+ soup_uri_free (priv->uri);
+ priv->uri = NULL;
+ }
+ goto emit_signal;
+ }
+
+ proxy_server = gconf_client_get_string (client, KEY_GCONF_HTTP_PROXY_HOST, NULL);
+ proxy_port = gconf_client_get_int (client, KEY_GCONF_HTTP_PROXY_PORT, NULL);
+ uri = g_strdup_printf ("http://%s:%d", proxy_server, proxy_port);
+ d(g_print ("ep_set_proxy: uri: %s\n", uri));
+
+ if (regen_ign_host_list) {
+ if (priv->ign_hosts) {
+ g_slist_foreach (priv->ign_hosts, (GFunc) g_free, NULL);
+ g_slist_free (priv->ign_hosts);
+ priv->ign_hosts = NULL;
+ }
+
+ if (priv->ign_addrs) {
+ g_slist_foreach (priv->ign_addrs, (GFunc) g_free, NULL);
+ g_slist_free (priv->ign_addrs);
+ priv->ign_addrs = NULL;
+ }
+
+ ignore = gconf_client_get_list (client, KEY_GCONF_HTTP_PROXY_IGNORE_HOSTS,
+ GCONF_VALUE_STRING, NULL);
+ if (ignore) {
+ g_slist_foreach (ignore, (GFunc) ep_parse_ignore_host, proxy);
+ g_slist_foreach (ignore, (GFunc) g_free, NULL);
+ g_slist_free (ignore);
+ }
+ } else if (set_auth) {
+
+ use_auth = gconf_client_get_bool (client, KEY_GCONF_HTTP_USE_AUTH, NULL);
+ if (use_auth == TRUE) {
+ proxy_user = gconf_client_get_string (client, KEY_GCONF_HTTP_AUTH_USER, NULL);
+ proxy_pw = gconf_client_get_string (client, KEY_GCONF_HTTP_AUTH_PW, NULL);
+
+ if (uri)
+ g_free (uri);
+
+ uri = g_strdup_printf ("http://%s:%s@%s:%d", proxy_user, proxy_pw, proxy_server, proxy_port);
+ }
+ }
+
+ if (priv->uri) {
+ soup_uri_free (priv->uri);
+ priv->uri = NULL;
+ }
+
+ if (uri)
+ priv->uri = soup_uri_new (uri);
+ d(g_print ("system-proxy: uri: %s\n", uri));
+
+ emit_signal:
+ g_signal_emit (proxy, signals[CHANGED], 0);
+
+ g_free (uri);
+
+ return;
+}
+
+static void
+ep_setting_changed (GConfClient *client, guint32 cnxn_id,
+ GConfEntry *entry, gpointer user_data)
+{
+ const char *key;
+ EProxy* proxy = (EProxy *)user_data;
+
+ if (!proxy || !proxy->priv)
+ return;
+
+ key = gconf_entry_get_key(entry);
+
+ if (strcmp(key, KEY_GCONF_USE_HTTP_PROXY) == 0
+ || strcmp(key, KEY_GCONF_HTTP_PROXY_IGNORE_HOSTS) == 0
+ || strcmp(key, KEY_GCONF_HTTP_PROXY_HOST) == 0
+ || strcmp(key, KEY_GCONF_HTTP_PROXY_PORT) == 0) {
+ gboolean regen_ign_host_list = FALSE;
+
+ if (strcmp(key, KEY_GCONF_HTTP_PROXY_IGNORE_HOSTS) == 0)
+ regen_ign_host_list = TRUE;
+ ep_set_proxy (client, user_data, regen_ign_host_list, FALSE);
+ d(g_print ("e-proxy.c:ep_settings_changed: proxy settings changed\n"));
+ } else if (strcmp(key, KEY_GCONF_HTTP_AUTH_USER) == 0
+ || strcmp(key, KEY_GCONF_HTTP_AUTH_PW) == 0
+ || strcmp(key, KEY_GCONF_HTTP_USE_AUTH) == 0) {
+ ep_set_proxy (client, user_data, FALSE, TRUE);
+ d(g_print ("e-proxy.c:ep_settings_changed: auth settings changed\n"));
+ }
+}
+
+EProxy*
+e_proxy_new (void)
+{
+ EProxy *proxy = NULL;
+
+ proxy = g_object_new (E_TYPE_PROXY, NULL);
+
+ return proxy;
+}
+
+void
+e_proxy_setup_proxy (EProxy* proxy)
+{
+ GConfClient *client;
+
+ /* We get the gnome-vfs proxy keys here
+ set soup up to use the proxy,
+ and listen to any changes */
+
+ if (!(client = gconf_client_get_default ()))
+ return;
+
+ if (!proxy || !proxy->priv)
+ return;
+
+ /* Listen to the changes in the gnome-vfs path */
+ gconf_client_add_dir (client, PATH_GCONF_GNOME_VFS,
+ GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+
+ if (proxy->priv->notify_id == 0)
+ proxy->priv->notify_id = gconf_client_notify_add (client, PATH_GCONF_GNOME_VFS,
+ ep_setting_changed, (gpointer)proxy,
+ NULL, NULL);
+
+ ep_set_proxy (client, proxy, TRUE, TRUE);
+
+ g_object_unref (client);
+}
+
+SoupUri*
+e_proxy_peek_uri (EProxy* proxy)
+{
+ if (!proxy || !proxy->priv)
+ return NULL;
+
+ return proxy->priv->uri;
+}
+
+gboolean
+e_proxy_require_proxy_for_uri (EProxy* proxy, const char* uri)
+{
+ SoupUri *srv_uri = NULL;
+ gboolean ret = FALSE;
+
+ if (!uri || !proxy || !proxy->priv)
+ return ret;
+
+ if (!proxy->priv->use_proxy) {
+ d(g_print ("[%s] don't need a proxy to connect to internet\n", uri));
+ return ret;
+ }
+
+ srv_uri = soup_uri_new (uri);
+
+ ret = ep_need_proxy (proxy, srv_uri->host);
+
+ soup_uri_free (srv_uri);
+
+ return ret;
+}
--- libedataserver/e-proxy.h
+++ libedataserver/e-proxy.h
@@ -0,0 +1,63 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Authors: Jeffrey Stedfast <fejj@ximian.com>
+ * Veerapuram Varadhan <vvaradhan@novell.com>
+ *
+ * Copyright 2002 Ximian, Inc. (www.ximian.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.
+ *
+ */
+
+
+#ifndef __E_PROXY_H__
+#define __E_PROXY_H__
+
+#include <libsoup/soup-uri.h>
+
+G_BEGIN_DECLS
+
+#define E_TYPE_PROXY (e_proxy_get_type ())
+#define E_PROXY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), E_TYPE_PROXY, EProxy))
+#define E_PROXY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), E_TYPE_PROXY, EProxyClass))
+#define E_IS_PROXY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), E_TYPE_PROXY))
+#define E_IS_PROXY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), E_TYPE_PROXY))
+
+typedef struct _EProxy EProxy;
+typedef struct _EProxyClass EProxyClass;
+typedef struct _EProxyPrivate EProxyPrivate;
+
+struct _EProxy {
+ GObject parent;
+ EProxyPrivate *priv;
+};
+
+struct _EProxyClass {
+ GObjectClass parent_class;
+ /* Signals. */
+
+ void (*changed) (EProxy *proxy);
+};
+
+EProxy* e_proxy_new (void);
+SoupUri* e_proxy_peek_uri (EProxy* proxy);
+void e_proxy_setup_proxy (EProxy* proxy);
+GType e_proxy_get_type (void);
+gboolean e_proxy_require_proxy_for_uri (EProxy *proxy,
+ const char* uri);
+
+G_END_DECLS
+
+#endif
--- servers/exchange/lib/e2k-context.c
+++ servers/exchange/lib/e2k-context.c
@@ -49,6 +49,7 @@
#include "e2k-utils.h"
#include "e2k-xml-utils.h"
+#include <libedataserver/e-proxy.h>
#include <libsoup/soup-address.h>
#include <libsoup/soup-message-filter.h>
#include <libsoup/soup-session-async.h>
@@ -104,6 +105,7 @@
/* Forms-based authentication */
char *cookie;
gboolean cookie_verified;
+ EProxy* proxy;
};
/* For operations with progress */
@@ -113,6 +115,9 @@
/* For soup sync session timeout */
#define E2K_SOUP_SESSION_TIMEOUT 30
+/* Soup session proxy-uri property */
+#define SOUP_SESSION_PROXY_URI "proxy-uri"
+
#ifdef E2K_DEBUG
char *e2k_debug;
int e2k_debug_level;
@@ -123,6 +128,31 @@
static gboolean do_notification (GIOChannel *source, GIOCondition condition, gpointer data);
static void setup_message (SoupMessageFilter *filter, SoupMessage *msg);
+static void proxy_settings_changed (EProxy *proxy, gpointer user_data);
+
+
+static void
+proxy_settings_changed (EProxy *proxy, gpointer user_data)
+{
+ SoupUri *proxy_uri = NULL;
+ E2kContext* ctx = (E2kContext *)user_data;
+ if (!ctx || !ctx->priv ||
+ (!ctx->priv->session && !ctx->priv->async_session) ||
+ (!ctx->priv->owa_uri))
+ return;
+
+ if (!e_proxy_require_proxy_for_uri (proxy, ctx->priv->owa_uri))
+ proxy_uri = NULL;
+ else
+ proxy_uri = e_proxy_peek_uri (proxy);
+
+ if (ctx->priv->session)
+ g_object_set (ctx->priv->session, SOUP_SESSION_PROXY_URI,
+ proxy_uri, NULL);
+ if (ctx->priv->async_session)
+ g_object_set (ctx->priv->async_session, SOUP_SESSION_PROXY_URI,
+ proxy_uri, NULL);
+}
static void
init (GObject *object)
@@ -134,6 +164,9 @@
g_hash_table_new (g_str_hash, g_str_equal);
ctx->priv->subscriptions_by_uri =
g_hash_table_new (g_str_hash, g_str_equal);
+ ctx->priv->proxy = e_proxy_new ();
+ e_proxy_setup_proxy (ctx->priv->proxy);
+ g_signal_connect (ctx->priv->proxy, "changed", G_CALLBACK (proxy_settings_changed), ctx);
}
static void
@@ -180,8 +213,13 @@
g_free (ctx->priv->cookie);
+ if (ctx->priv->proxy) {
+ g_object_unref (ctx->priv->proxy);
+ ctx->priv->proxy = NULL;
+ }
g_free (ctx->priv);
ctx->priv = NULL;
+
}
G_OBJECT_CLASS (parent_class)->dispose (object);
@@ -361,6 +399,7 @@
const char *password)
{
guint timeout = E2K_SOUP_SESSION_TIMEOUT;
+ SoupUri* uri = NULL;
g_return_if_fail (E2K_IS_CONTEXT (ctx));
@@ -390,10 +429,15 @@
*/
if (g_getenv ("SOUP_SESSION_TIMEOUT"))
timeout = atoi (g_getenv ("SOUP_SESSION_TIMEOUT"));
-
+
+ /* Check do we need a proxy to contact the server? */
+ if (e_proxy_require_proxy_for_uri (ctx->priv->proxy, ctx->priv->owa_uri))
+ uri = e_proxy_peek_uri (ctx->priv->proxy);
+
ctx->priv->session = soup_session_sync_new_with_options (
SOUP_SESSION_USE_NTLM, !authmech || !strcmp (authmech, "NTLM"),
SOUP_SESSION_TIMEOUT, timeout,
+ SOUP_SESSION_PROXY_URI, uri,
NULL);
g_signal_connect (ctx->priv->session, "authenticate",
G_CALLBACK (session_authenticate), ctx);
@@ -402,7 +446,7 @@
ctx->priv->async_session = soup_session_async_new_with_options (
SOUP_SESSION_USE_NTLM, !authmech || !strcmp (authmech, "NTLM"),
- NULL);
+ SOUP_SESSION_PROXY_URI, uri, NULL);
g_signal_connect (ctx->priv->async_session, "authenticate",
G_CALLBACK (session_authenticate), ctx);
soup_session_add_filter (ctx->priv->async_session,
--- servers/groupwise/Makefile.am
+++ servers/groupwise/Makefile.am
@@ -15,9 +15,10 @@
$(E_DATA_SERVER_LIBS)
soap_test_SOURCES = soap-test.c
-soap_test_LDADD = \
- $(SOUP_LIBS) \
- libegroupwise-1.2.la \
+soap_test_LDADD = \
+ $(top_builddir)/libedataserver/libedataserver-1.2.la \
+ $(SOUP_LIBS) \
+ libegroupwise-1.2.la \
$(E_DATA_SERVER_LIBS)
lib_LTLIBRARIES = libegroupwise-1.2.la
--- servers/groupwise/e-gw-connection.c
+++ servers/groupwise/e-gw-connection.c
@@ -27,6 +27,7 @@
#include <string.h>
#include <ctype.h>
#include <glib/gi18n-lib.h>
+#include <libedataserver/e-proxy.h>
#include <libsoup/soup-session-sync.h>
#include <libsoup/soup-soap-message.h>
#include <libsoup/soup-misc.h>
@@ -37,6 +38,9 @@
/* For soup sync session timeout */
#define GW_SOUP_SESSION_TIMEOUT 30
+/* Soup session proxy-uri property */
+#define SOUP_SESSION_PROXY_URI "proxy-uri"
+
static GObjectClass *parent_class = NULL;
static GHashTable *loaded_connections_permissions = NULL;
@@ -57,8 +61,37 @@
GList *book_list;
EGwSendOptions *opts;
GMutex *reauth_mutex;
+ EProxy *proxy;
};
+static void
+update_soup_session_proxy_settings (EProxy *proxy, SoupSession* session,
+ const char* uri)
+{
+ SoupUri *proxy_uri = NULL;
+
+ if (!session || !uri || !proxy)
+ return;
+
+ if (e_proxy_require_proxy_for_uri (proxy, uri))
+ proxy_uri = e_proxy_peek_uri (proxy);
+
+ g_object_set (session, SOUP_SESSION_PROXY_URI,
+ proxy_uri, NULL);
+}
+
+static void
+proxy_settings_changed (EProxy *proxy, gpointer user_data)
+{
+ EGwConnection* conn = (EGwConnection *)user_data;
+ if (!conn || !conn->priv || !conn->priv->soup_session)
+ return;
+
+ update_soup_session_proxy_settings (proxy,
+ conn->priv->soup_session,
+ conn->priv->uri);
+}
+
static EGwConnectionStatus
reauthenticate (EGwConnection *cnc)
{
@@ -319,6 +352,11 @@
g_free (priv->server_time) ;
priv->server_time = NULL ;
}
+
+ if (priv->proxy) {
+ g_object_unref (priv->proxy);
+ priv->proxy = NULL;
+ }
}
if (parent_class->dispose)
@@ -369,6 +407,11 @@
*/
if (g_getenv ("SOUP_SESSION_TIMEOUT"))
timeout = atoi (g_getenv ("SOUP_SESSION_TIMEOUT"));
+
+ /* Initialize proxy settings */
+ priv->proxy = e_proxy_new ();
+ e_proxy_setup_proxy (priv->proxy);
+ g_signal_connect (priv->proxy, "changed", G_CALLBACK (proxy_settings_changed), cnc);
/* create the SoupSession for this connection */
priv->soup_session = soup_session_sync_new_with_options (SOUP_SESSION_TIMEOUT, timeout, NULL);
@@ -448,11 +491,17 @@
return cnc;
}
}
-
/* not found, so create a new connection */
cnc = g_object_new (E_TYPE_GW_CONNECTION, NULL);
+ /* Set proxy details for the Soup session before any
+ communication.
+ */
+ update_soup_session_proxy_settings (cnc->priv->proxy,
+ cnc->priv->soup_session,
+ uri);
+
msg = form_login_request (uri, username, password);
/* send message to server */

208
bnc-176277-2.patch Normal file
View File

@ -0,0 +1,208 @@
Index: libedataserver/e-msgport.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/libedataserver/e-msgport.c,v
retrieving revision 1.6
diff -u -r1.6 e-msgport.c
--- libedataserver/e-msgport.c 10 Jan 2006 07:59:04 -0000 1.6
+++ libedataserver/e-msgport.c 31 May 2006 21:06:57 -0000
@@ -70,7 +70,13 @@
e_pipe (int *fds)
{
#ifndef G_OS_WIN32
- return pipe (fds);
+ if (pipe (fds) != -1)
+ return 0;
+
+ fds[0] = -1;
+ fds[1] = -1;
+
+ return -1;
#else
SOCKET temp, socket1 = -1, socket2 = -1;
struct sockaddr_in saddr;
@@ -180,8 +186,11 @@
closesocket (socket1);
out0:
closesocket (temp);
- errno = EIO; /* XXX */
-
+ errno = EMFILE; /* FIXME: use the real syscall errno? */
+
+ fds[0] = -1;
+ fds[1] = -1;
+
return -1;
#endif
@@ -487,9 +496,12 @@
} fd;
} pipe;
#ifdef HAVE_NSS
- struct {
- PRFileDesc *read;
- PRFileDesc *write;
+ union {
+ PRFileDesc *pipe[2];
+ struct {
+ PRFileDesc *read;
+ PRFileDesc *write;
+ } fd;
} prpipe;
#endif
/* @#@$#$ glib stuff */
@@ -497,6 +509,26 @@
GMutex *lock;
};
+
+#ifdef HAVE_NSS
+static int
+e_prpipe (PRFileDesc **fds)
+{
+#ifdef G_OS_WIN32
+ if (PR_NewTCPSocketPair (fds) != PR_FAILURE)
+ return 0;
+#else
+ if (PR_CreatePipe (&fds[0], &fds[1]) != PR_FAILURE)
+ return 0;
+#endif
+
+ fds[0] = NULL;
+ fds[1] = NULL;
+
+ return -1;
+}
+#endif
+
EMsgPort *e_msgport_new(void)
{
EMsgPort *mp;
@@ -505,11 +537,9 @@
e_dlist_init(&mp->queue);
mp->lock = g_mutex_new();
mp->cond = g_cond_new();
- mp->pipe.fd.read = -1;
- mp->pipe.fd.write = -1;
+ e_pipe (mp->pipe.pipe);
#ifdef HAVE_NSS
- mp->prpipe.read = NULL;
- mp->prpipe.write = NULL;
+ e_prpipe (mp->prpipe.pipe);
#endif
mp->condwait = 0;
@@ -525,9 +555,9 @@
E_CLOSE(mp->pipe.fd.write);
}
#ifdef HAVE_NSS
- if (mp->prpipe.read) {
- PR_Close(mp->prpipe.read);
- PR_Close(mp->prpipe.write);
+ if (mp->prpipe.fd.read) {
+ PR_Close(mp->prpipe.fd.read);
+ PR_Close(mp->prpipe.fd.write);
}
#endif
g_free(mp);
@@ -536,40 +566,13 @@
/* get a fd that can be used to wait on the port asynchronously */
int e_msgport_fd(EMsgPort *mp)
{
- int fd;
-
- g_mutex_lock(mp->lock);
- fd = mp->pipe.fd.read;
- if (fd == -1) {
- e_pipe(mp->pipe.pipe);
- fd = mp->pipe.fd.read;
- }
- g_mutex_unlock(mp->lock);
-
- return fd;
+ return mp->pipe.fd.read;
}
#ifdef HAVE_NSS
PRFileDesc *e_msgport_prfd(EMsgPort *mp)
{
- PRFileDesc *fd;
-
- g_mutex_lock(mp->lock);
- fd = mp->prpipe.read;
- if (fd == NULL) {
-#ifdef G_OS_WIN32
- PRFileDesc *fds[2];
- PR_NewTCPSocketPair (fds);
- mp->prpipe.read = fds[0];
- mp->prpipe.write = fds[1];
-#else
- PR_CreatePipe(&mp->prpipe.read, &mp->prpipe.write);
-#endif
- fd = mp->prpipe.read;
- }
- g_mutex_unlock(mp->lock);
-
- return fd;
+ return mp->prpipe.fd.read;
}
#endif
@@ -579,7 +582,7 @@
#ifdef HAVE_NSS
PRFileDesc *prfd;
#endif
-
+
m(printf("put:\n"));
g_mutex_lock(mp->lock);
e_dlist_addtail(&mp->queue, &msg->ln);
@@ -587,9 +590,10 @@
m(printf("put: condwait > 0, waking up\n"));
g_cond_signal(mp->cond);
}
+
fd = mp->pipe.fd.write;
#ifdef HAVE_NSS
- prfd = mp->prpipe.write;
+ prfd = mp->prpipe.fd.write;
#endif
g_mutex_unlock(mp->lock);
@@ -626,7 +630,7 @@
fd_set rfds;
int retry;
- m(printf("wait: waitng on pipe\n"));
+ m(printf("wait: waiting on pipe\n"));
g_mutex_unlock(mp->lock);
do {
FD_ZERO(&rfds);
@@ -637,14 +641,14 @@
g_mutex_lock(mp->lock);
m(printf("wait: got pipe\n"));
#ifdef HAVE_NSS
- } else if (mp->prpipe.read != NULL) {
+ } else if (mp->prpipe.fd.read != NULL) {
PRPollDesc polltable[1];
int retry;
m(printf("wait: waitng on pr pipe\n"));
g_mutex_unlock(mp->lock);
do {
- polltable[0].fd = mp->prpipe.read;
+ polltable[0].fd = mp->prpipe.fd.read;
polltable[0].in_flags = PR_POLL_READ|PR_POLL_ERR;
retry = PR_Poll(polltable, 1, PR_INTERVAL_NO_TIMEOUT) == -1 && PR_GetError() == PR_PENDING_INTERRUPT_ERROR;
pthread_testcancel();
@@ -681,9 +685,9 @@
if (mp->pipe.fd.read != -1)
E_READ(mp->pipe.fd.read, dummy, 1);
#ifdef HAVE_NSS
- if (mp->prpipe.read != NULL) {
+ if (mp->prpipe.fd.read != NULL) {
int c;
- c = PR_Read(mp->prpipe.read, dummy, 1);
+ c = PR_Read(mp->prpipe.fd.read, dummy, 1);
g_assert(c == 1);
}
#endif

20
bnc-177394.patch Normal file
View File

@ -0,0 +1,20 @@
Index: camel/providers/imap/camel-imap-command.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/imap/camel-imap-command.c,v
retrieving revision 1.76.2.2
diff -u -r1.76.2.2 camel/providers/imap/camel-imap-command.c
--- camel/providers/imap/camel-imap-command.c 19 May 2006 15:21:37 -0000 1.76.2.2
+++ camel/providers/imap/camel-imap-command.c 22 May 2006 16:00:09 -0000
@@ -438,10 +438,9 @@
fulllen += str->len;
g_ptr_array_add (data, str);
- p = strrchr (str->str, '{');
- if (!p)
+ if (!(p = strrchr (str->str, '{')) || p[1] == '-')
break;
-
+
/* HACK ALERT: We scan the non-literal part of the string, looking for possible s expression braces.
This assumes we're getting s-expressions, which we should be.
This is so if we get a blank line after a literal, in an s-expression, we can keep going, since

554
bnc-179350.patch Normal file
View File

@ -0,0 +1,554 @@
Index: camel/providers/groupwise/camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.114.2.12
diff -u -r1.114.2.12 camel-groupwise-folder.c
--- camel/providers/groupwise/camel-groupwise-folder.c 6 Jun 2006 19:51:03 -0000 1.114.2.12
+++ camel/providers/groupwise/camel-groupwise-folder.c 8 Jun 2006 15:32:24 -0000
@@ -63,15 +63,6 @@
#define GROUPWISE_BULK_DELETE_LIMIT 100
static CamelOfflineFolderClass *parent_class = NULL;
-struct _CamelGroupwiseFolderPrivate {
-
-#ifdef ENABLE_THREADS
- EMutex *search_lock; /* for locking the search object */
- EMutex *cache_lock; /* for locking the cache object */
-#endif
-
-};
-
/*prototypes*/
static void groupwise_transfer_messages_to (CamelFolder *source,
GPtrArray *uids,
@@ -94,9 +85,7 @@
#define d(x)
static CamelMimeMessage *
-groupwise_folder_get_message( CamelFolder *folder,
- const char *uid,
- CamelException *ex )
+groupwise_folder_get_message (CamelFolder *folder, const char *uid, CamelException *ex)
{
CamelMimeMessage *msg = NULL;
CamelGroupwiseFolder *gw_folder = CAMEL_GROUPWISE_FOLDER(folder);
@@ -107,11 +96,10 @@
EGwConnectionStatus status;
EGwConnection *cnc;
EGwItem *item;
- CamelStream *stream, *cache_stream;
+ CamelStream *stream;
int errno;
/* see if it is there in cache */
-
mi = (CamelGroupwiseMessageInfo *) camel_folder_summary_uid (folder->summary, uid);
if (mi == NULL) {
camel_exception_setv(ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
@@ -119,41 +107,38 @@
return NULL;
}
- cache_stream = camel_data_cache_get (gw_folder->cache, "cache", uid, ex);
- stream = camel_stream_mem_new ();
- if (cache_stream) {
+ CAMEL_SERVICE_LOCK (folder->parent_store, connect_lock);
+
+ if ((stream = camel_data_cache_get (gw_folder->cache, "cache", uid, ex))) {
msg = camel_mime_message_new ();
- camel_stream_reset (stream);
- camel_stream_write_to_stream (cache_stream, stream);
- camel_stream_reset (stream);
if (camel_data_wrapper_construct_from_stream ((CamelDataWrapper *) msg, stream) == -1) {
if (errno == EINTR) {
camel_exception_setv (ex, CAMEL_EXCEPTION_USER_CANCEL, _("User cancelled"));
camel_object_unref (msg);
- camel_object_unref (cache_stream);
camel_object_unref (stream);
camel_message_info_free (&mi->info);
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
return NULL;
- } else {
- camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot get message %s: %s"),
- uid, g_strerror (errno));
- camel_object_unref (msg);
- msg = NULL;
}
+
+ camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM, _("Cannot get message %s: %s"),
+ uid, g_strerror (errno));
+ camel_object_unref (stream);
+ camel_object_unref (msg);
+ msg = NULL;
+ } else {
+ camel_object_unref (stream);
+ camel_message_info_free (&mi->info);
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
+ return msg;
}
- camel_object_unref (cache_stream);
- }
- camel_object_unref (stream);
-
- if (msg != NULL) {
- camel_message_info_free (&mi->info);
- return msg;
}
if (((CamelOfflineStore *) gw_store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) {
camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
_("This message is not available in offline mode."));
camel_message_info_free (&mi->info);
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
return NULL;
}
@@ -162,6 +147,7 @@
camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
_("This message is not available in offline mode."));
camel_message_info_free (&mi->info);
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
return NULL;
}
@@ -173,6 +159,7 @@
g_free (container_id);
camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Could not get message"));
camel_message_info_free (&mi->info);
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
return NULL;
}
@@ -181,30 +168,30 @@
camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Could not get message"));
g_free (container_id);
camel_message_info_free (&mi->info);
-
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
return NULL;
}
- if (msg)
- camel_medium_set_header (CAMEL_MEDIUM (msg), "X-Evolution-Source", groupwise_base_url_lookup (priv));
+ camel_medium_set_header (CAMEL_MEDIUM (msg), "X-Evolution-Source", groupwise_base_url_lookup (priv));
- if(!strcmp (folder->full_name, "Sent Items"))
+ if (!strcmp (folder->full_name, "Sent Items"))
goto end; /*Dont cache if its sent items, since we need to Track Status*/
/* add to cache */
- CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
- if ((cache_stream = camel_data_cache_add (gw_folder->cache, "cache", uid, NULL))) {
- if (camel_data_wrapper_write_to_stream ((CamelDataWrapper *) msg, cache_stream) == -1
- || camel_stream_flush (cache_stream) == -1)
+ if ((stream = camel_data_cache_add (gw_folder->cache, "cache", uid, NULL))) {
+ if (camel_data_wrapper_write_to_stream ((CamelDataWrapper *) msg, stream) == -1
+ || camel_stream_flush (stream) == -1)
camel_data_cache_remove (gw_folder->cache, "cache", uid, NULL);
- camel_object_unref (cache_stream);
+ camel_object_unref (stream);
}
-
- CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
end:
+
camel_message_info_free (&mi->info);
g_free (container_id);
+
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
+
return msg;
}
@@ -411,18 +398,20 @@
summary_path = g_strdup_printf ("%s/summary", folder_dir);
- CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
+ CAMEL_SERVICE_LOCK (folder->parent_store, connect_lock);
+
g_free (gw_folder->cache->path);
gw_folder->cache->path = g_strdup (folder_dir);
- CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
-
+
((CamelFolderClass *)parent_class)->rename(folder, new);
camel_folder_summary_set_filename (folder->summary, summary_path);
-
+
state_file = g_strdup_printf ("%s/cmeta", folder_dir);
camel_object_set(folder, NULL, CAMEL_OBJECT_STATE_FILE, state_file, NULL);
g_free (state_file);
-
+
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
+
g_free (summary_path);
g_free (folder_dir);
}
@@ -433,10 +422,12 @@
CamelGroupwiseFolder *gw_folder = CAMEL_GROUPWISE_FOLDER(folder);
GPtrArray *matches;
- CAMEL_GROUPWISE_FOLDER_LOCK(folder, search_lock);
+ CAMEL_SERVICE_LOCK (folder->parent_store, connect_lock);
+
camel_folder_search_set_folder (gw_folder->search, folder);
matches = camel_folder_search_search(gw_folder->search, expression, NULL, ex);
- CAMEL_GROUPWISE_FOLDER_UNLOCK(gw_folder, search_lock);
+
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
return matches;
}
@@ -450,12 +441,12 @@
if (uids->len == 0)
return g_ptr_array_new();
- CAMEL_GROUPWISE_FOLDER_LOCK(folder, search_lock);
-
+ CAMEL_SERVICE_LOCK (folder->parent_store, connect_lock);
+
camel_folder_search_set_folder(gw_folder->search, folder);
matches = camel_folder_search_search(gw_folder->search, expression, uids, ex);
- CAMEL_GROUPWISE_FOLDER_UNLOCK(gw_folder, search_lock);
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
return matches;
}
@@ -467,12 +458,11 @@
g_return_if_fail (gw_folder->search);
- CAMEL_GROUPWISE_FOLDER_LOCK(folder, search_lock);
+ CAMEL_SERVICE_LOCK (folder->parent_store, connect_lock);
camel_folder_search_free_result (gw_folder->search, uids);
-
- CAMEL_GROUPWISE_FOLDER_UNLOCK(gw_folder, search_lock);
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
}
/******************* functions specific to Junk Mail Handling**************/
@@ -596,31 +586,29 @@
EGwConnectionStatus status;
EGwConnection *cnc;
int count, i;
-
GList *deleted_items, *deleted_head = NULL;
deleted_items = NULL;
-
-
+
+ CAMEL_SERVICE_LOCK (gw_store, connect_lock);
+
if (((CamelOfflineStore *) gw_store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL ||
((CamelService *)gw_store)->status == CAMEL_SERVICE_DISCONNECTED) {
groupwise_sync_summary (folder, ex);
+ CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
return;
}
cnc = cnc_lookup (priv);
container_id = camel_groupwise_store_container_id_lookup (gw_store, folder->full_name) ;
-
- CAMEL_SERVICE_LOCK (gw_store, connect_lock);
+
if (!camel_groupwise_store_connected (gw_store, ex)) {
CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
camel_exception_clear (ex);
return;
}
- CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
-
+
count = camel_folder_summary_count (folder->summary);
- CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
for (i=0 ; i <count ; i++) {
guint32 flags = 0;
info = camel_folder_summary_index (folder->summary, i);
@@ -659,17 +647,13 @@
}
if (g_list_length (deleted_items) == GROUPWISE_BULK_DELETE_LIMIT ) {
- CAMEL_SERVICE_LOCK (gw_store, connect_lock);
status = e_gw_connection_remove_items (cnc, container_id, deleted_items);
- CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
if (status == E_GW_CONNECTION_STATUS_OK) {
char *uid;
while (deleted_items) {
uid = (char *)deleted_items->data;
- CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
camel_folder_summary_remove_uid (folder->summary, uid);
camel_data_cache_remove(gw_folder->cache, "cache", uid, ex);
- CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
deleted_items = g_list_next (deleted_items);
count -= GROUPWISE_BULK_DELETE_LIMIT;
i -= GROUPWISE_BULK_DELETE_LIMIT;
@@ -681,19 +665,15 @@
}
camel_message_info_free (info);
}
- CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
+
if (deleted_items) {
- CAMEL_SERVICE_LOCK (gw_store, connect_lock);
status = e_gw_connection_remove_items (cnc, container_id, deleted_items);
- CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
if (status == E_GW_CONNECTION_STATUS_OK) {
char *uid;
while (deleted_items) {
uid = (char *)deleted_items->data;
- CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
camel_folder_summary_remove_uid (folder->summary, uid);
camel_data_cache_remove(gw_folder->cache, "cache", uid, ex);
- CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
deleted_items = g_list_next (deleted_items);
count -= GROUPWISE_BULK_DELETE_LIMIT;
i -= GROUPWISE_BULK_DELETE_LIMIT;
@@ -702,23 +682,17 @@
g_list_free (deleted_head);
}
- if (read_items && g_list_length (read_items)) {
- CAMEL_SERVICE_LOCK (gw_store, connect_lock);
+ if (read_items && g_list_length (read_items))
e_gw_connection_mark_read (cnc, read_items);
- CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
- }
-
+
if (expunge) {
- CAMEL_SERVICE_LOCK (gw_store, connect_lock);
status = e_gw_connection_purge_deleted_items (cnc);
- if (status == E_GW_CONNECTION_STATUS_OK) {
+ if (status == E_GW_CONNECTION_STATUS_OK)
g_message ("Purged deleted items in %s", folder->name);
- }
- CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
}
-
- CAMEL_SERVICE_LOCK (gw_store, connect_lock);
+
groupwise_sync_summary (folder, ex);
+
CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
}
@@ -732,7 +706,6 @@
char *summary_file, *state_file, *journal_file;
char *short_name;
-
folder = CAMEL_FOLDER (camel_object_new(camel_groupwise_folder_get_type ()) );
gw_folder = CAMEL_GROUPWISE_FOLDER(folder);
@@ -1063,7 +1036,7 @@
gw_update_cache (folder, list, ex, FALSE);
}
}
-
+
CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
is_locked = FALSE;
@@ -1097,7 +1070,6 @@
end1:
if (is_locked)
CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
- return;
}
static void
@@ -1318,7 +1290,6 @@
mail_msg = groupwise_folder_item_to_msg (folder, item, ex);
if (mail_msg)
camel_medium_set_header (CAMEL_MEDIUM (mail_msg), "X-Evolution-Source", groupwise_base_url_lookup (priv));
- CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
if ((cache_stream = camel_data_cache_add (gw_folder->cache, "cache", id, NULL))) {
if (camel_data_wrapper_write_to_stream ((CamelDataWrapper *) mail_msg, cache_stream) == -1 || camel_stream_flush (cache_stream) == -1)
camel_data_cache_remove (gw_folder->cache, "cache", id, NULL);
@@ -1326,7 +1297,6 @@
}
camel_object_unref (mail_msg);
- CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
}
/******************** Caching stuff ends *************************/
i++;
@@ -1720,6 +1690,7 @@
static void
gw_update_all_items ( CamelFolder *folder, GList *item_list, CamelException *ex)
{
+ CamelGroupwiseStore *gw_store = CAMEL_GROUPWISE_STORE (folder->parent_store);
CamelGroupwiseFolder *gw_folder = CAMEL_GROUPWISE_FOLDER (folder);
GPtrArray *summary = NULL;
int index = 0;
@@ -1741,11 +1712,11 @@
temp = g_list_find_custom (item_list, (const char *)info->uid, (GCompareFunc) strcmp);
}
if (!temp) {
- CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
+ CAMEL_SERVICE_LOCK (gw_store, connect_lock);
camel_folder_summary_remove_uid (folder->summary, info->uid);
camel_data_cache_remove (gw_folder->cache, "cache", info->uid, ex);
camel_folder_change_info_remove_uid (changes, info->uid);
- CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
+ CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
} else {
item_list = g_list_delete_link (item_list, temp);
}
@@ -1754,8 +1725,6 @@
camel_object_trigger_event (folder, "folder_changed", changes);
if (item_list) {
- CamelGroupwiseStore *gw_store = CAMEL_GROUPWISE_STORE (folder->parent_store);
-
CAMEL_SERVICE_LOCK (gw_store, connect_lock);
gw_update_cache (folder, item_list, ex, TRUE);
CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
@@ -1801,6 +1770,7 @@
cnc = cnc_lookup (priv);
CAMEL_SERVICE_LOCK (folder->parent_store, connect_lock);
+
/*Get the container id*/
container_id = camel_groupwise_store_container_id_lookup (gw_store, folder->full_name) ;
@@ -1974,15 +1944,15 @@
int i, max;
gboolean delete = FALSE;
GList *deleted_items, *deleted_head = NULL;
-
deleted_items = NULL;
cnc = cnc_lookup (priv);
if (!cnc)
return;
-
+
+ CAMEL_SERVICE_LOCK (groupwise_store, connect_lock);
+
if (!strcmp (folder->full_name, "Trash")) {
- CAMEL_SERVICE_LOCK (groupwise_store, connect_lock);
status = e_gw_connection_purge_deleted_items (cnc);
if (status == E_GW_CONNECTION_STATUS_OK) {
camel_folder_freeze (folder);
@@ -1997,7 +1967,7 @@
changes = camel_folder_change_info_new ();
container_id = g_strdup (camel_groupwise_store_container_id_lookup (groupwise_store, folder->full_name)) ;
-
+
max = camel_folder_summary_count (folder->summary);
for (i = 0; i < max; i++) {
info = camel_folder_summary_index (folder->summary, i);
@@ -2013,18 +1983,14 @@
}
if (g_list_length (deleted_items) == GROUPWISE_BULK_DELETE_LIMIT ) {
/* Read the FIXME below */
- CAMEL_SERVICE_LOCK (groupwise_store, connect_lock);
status = e_gw_connection_remove_items (cnc, container_id, deleted_items);
- CAMEL_SERVICE_UNLOCK (groupwise_store, connect_lock);
if (status == E_GW_CONNECTION_STATUS_OK) {
char *uid;
while (deleted_items) {
uid = (char *)deleted_items->data;
- CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
camel_folder_change_info_remove_uid (changes, uid);
camel_folder_summary_remove_uid (folder->summary, uid);
camel_data_cache_remove(gw_folder->cache, "cache", uid, ex);
- CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
deleted_items = g_list_next (deleted_items);
max -= GROUPWISE_BULK_DELETE_LIMIT;
i -= GROUPWISE_BULK_DELETE_LIMIT;
@@ -2038,18 +2004,14 @@
if (deleted_items) {
/* FIXME: Put these in a function and reuse it inside the above loop, here and in groupwise_sync*/
- CAMEL_SERVICE_LOCK (groupwise_store, connect_lock);
status = e_gw_connection_remove_items (cnc, container_id, deleted_items);
- CAMEL_SERVICE_UNLOCK (groupwise_store, connect_lock);
if (status == E_GW_CONNECTION_STATUS_OK) {
char *uid;
while (deleted_items) {
uid = (char *)deleted_items->data;
- CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
camel_folder_change_info_remove_uid (changes, uid);
camel_folder_summary_remove_uid (folder->summary, uid);
camel_data_cache_remove(gw_folder->cache, "cache", uid, ex);
- CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
deleted_items = g_list_next (deleted_items);
}
}
@@ -2063,6 +2025,8 @@
g_free (container_id);
camel_folder_change_info_free (changes);
+
+ CAMEL_SERVICE_UNLOCK (groupwise_store, connect_lock);
}
@@ -2093,18 +2057,11 @@
CamelGroupwiseFolder *gw_folder = CAMEL_GROUPWISE_FOLDER (object);
CamelFolder *folder = CAMEL_FOLDER (object);
-
folder->permanent_flags = CAMEL_MESSAGE_ANSWERED | CAMEL_MESSAGE_DELETED |
CAMEL_MESSAGE_DRAFT | CAMEL_MESSAGE_FLAGGED | CAMEL_MESSAGE_SEEN;
folder->folder_flags = CAMEL_FOLDER_HAS_SUMMARY_CAPABILITY | CAMEL_FOLDER_HAS_SEARCH_CAPABILITY;
- gw_folder->priv = g_malloc0 (sizeof(*gw_folder->priv));
-
-#ifdef ENABLE_THREADS
- gw_folder->priv->search_lock = e_mutex_new(E_MUTEX_SIMPLE);
- gw_folder->priv->cache_lock = e_mutex_new(E_MUTEX_REC);
-#endif
gw_folder->need_rescan = TRUE;
}
@@ -2112,21 +2069,17 @@
camel_groupwise_folder_finalize (CamelObject *object)
{
CamelGroupwiseFolder *gw_folder = CAMEL_GROUPWISE_FOLDER (object);
-
- if (gw_folder->priv)
- g_free(gw_folder->priv);
+
if (gw_folder->cache)
camel_object_unref (gw_folder->cache);
if (gw_folder->search)
camel_object_unref (gw_folder->search);
-
}
CamelType
camel_groupwise_folder_get_type (void)
{
static CamelType camel_groupwise_folder_type = CAMEL_INVALID_TYPE;
-
if (camel_groupwise_folder_type == CAMEL_INVALID_TYPE) {
camel_groupwise_folder_type =
Index: camel/providers/groupwise/camel-groupwise-folder.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.h,v
retrieving revision 1.8
diff -u -r1.8 camel-groupwise-folder.h
--- camel/providers/groupwise/camel-groupwise-folder.h 31 Aug 2005 04:26:07 -0000 1.8
+++ camel/providers/groupwise/camel-groupwise-folder.h 8 Jun 2006 15:32:24 -0000
@@ -54,8 +54,6 @@
struct _CamelGroupwiseFolder {
CamelOfflineFolder parent_object;
- struct _CamelGroupwiseFolderPrivate *priv;
-
CamelFolderSearch *search;
CamelOfflineJournal *journal;

View File

@ -0,0 +1,16 @@
Index: servers/exchange/storage/exchange-account.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/exchange/storage/exchange-account.c,v
retrieving revision 1.32
diff -u -p -r1.32 exchange-account.c
--- servers/exchange/storage/exchange-account.c 10 May 2006 08:55:24 -0000 1.32
+++ servers/exchange/storage/exchange-account.c 6 Jun 2006 08:24:29 -0000
@@ -1984,6 +1984,8 @@ exchange_account_new (EAccountList *acco
}
account = g_object_new (EXCHANGE_TYPE_ACCOUNT, NULL);
+ if (!account)
+ return NULL;
account->priv->account_list = account_list;
g_object_ref (account_list);
account->priv->account = adata;

View File

@ -0,0 +1,60 @@
--- camel/providers/groupwise/camel-groupwise-folder.c.orig 2006-06-16 01:25:47.000000000 +0530
+++ camel/providers/groupwise/camel-groupwise-folder.c 2006-06-16 10:52:22.000000000 +0530
@@ -795,16 +795,27 @@ update_update (CamelSession *session, Ca
struct _folder_update_msg *m = (struct _folder_update_msg *)msg;
EGwConnectionStatus status;
CamelException *ex = NULL;
+ CamelGroupwiseStore *gw_store = CAMEL_GROUPWISE_STORE (m->folder->parent_store);
GList *item_list, *items_full_list = NULL, *last_element=NULL;
int cursor = 0;
const char *position = E_GW_CURSOR_POSITION_END;
gboolean done;
+ /* Hold the connect_lock.
+ In case if user went offline, don't do anything.
+ m->cnc would have become invalid, as the store disconnect unrefs it.
+ */
+ CAMEL_SERVICE_LOCK (gw_store, connect_lock);
+ if (((CamelOfflineStore *) gw_store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL ||
+ ((CamelService *)gw_store)->status == CAMEL_SERVICE_DISCONNECTED) {
+ goto end1;
+ }
+
status = e_gw_connection_create_cursor (m->cnc, m->container_id, "id", NULL, &cursor);
if (status != E_GW_CONNECTION_STATUS_OK) {
g_warning ("ERROR update update\n");
- return ;
+ goto end1;
}
done = FALSE;
@@ -816,7 +827,7 @@ update_update (CamelSession *session, Ca
if (status != E_GW_CONNECTION_STATUS_OK) {
g_warning ("ERROR update update\n");
e_gw_connection_destroy_cursor (m->cnc, m->container_id, cursor);
- return;
+ goto end1;
}
if (!item_list || g_list_length (item_list) == 0)
@@ -839,6 +850,7 @@ update_update (CamelSession *session, Ca
}
e_gw_connection_destroy_cursor (m->cnc, m->container_id, cursor);
+ CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
/* Take out only the first part in the list until the @ since it is guaranteed
to be unique only until that symbol */
@@ -860,6 +872,11 @@ update_update (CamelSession *session, Ca
g_print ("\nNumber of items in the folder: %d \n", g_list_length(items_full_list));
gw_update_all_items (m->folder, items_full_list, ex);
+
+ return;
+ end1:
+ CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
+ return;
}
static void

View File

@ -0,0 +1,174 @@
--- calendar/backends/groupwise/e-cal-backend-groupwise.c.orig 2006-06-26 14:26:10.000000000 +0530
+++ calendar/backends/groupwise/e-cal-backend-groupwise.c 2006-06-26 14:30:26.000000000 +0530
@@ -132,13 +132,19 @@ populate_cache (ECalBackendGroupwise *cb
EGwConnectionStatus status;
ECalComponent *comp;
GList *list = NULL, *l;
- gboolean done = FALSE;
+ gboolean done = FALSE, forward = FALSE;
int cursor = 0;
guint32 total, num = 0;
- int percent = 0;
+ int percent = 0, i;
const char *position = E_GW_CURSOR_POSITION_END;
icalcomponent_kind kind;
const char *type;
+ EGwFilter* filter[3];
+ char l_str[26];
+ char h_str[26];
+ icaltimetype temp;
+ struct tm tm;
+ time_t h_time, l_time;
priv = cbgw->priv;
kind = e_cal_backend_get_kind (E_CAL_BACKEND (cbgw));
@@ -155,66 +161,101 @@ populate_cache (ECalBackendGroupwise *cb
else
type = "Task";
- status = e_gw_connection_create_cursor (priv->cnc,
- priv->container_id,
- "recipients message recipientStatus attachments default peek", NULL, &cursor);
- if (status != E_GW_CONNECTION_STATUS_OK) {
- e_cal_backend_groupwise_notify_error_code (cbgw, status);
- g_mutex_unlock (mutex);
- return status;
- }
-
- while (!done) {
-
- status = e_gw_connection_read_cursor (priv->cnc, priv->container_id, cursor, FALSE, CURSOR_ITEM_LIMIT, position, &list);
+ /* Fetch the data with a bias to present, near past/future */
+ temp = icaltime_current_time_with_zone (icaltimezone_get_utc_timezone ());
+ i = g_ascii_strtod (g_getenv ("PRELOAD_WINDOW_DAYS")? g_getenv ("PRELOAD_WINDOW_DAYS"):"15", NULL);
+ temp.day -= i;
+ icaltime_normalize (temp);
+ l_time = icaltime_as_timet_with_zone (temp, icaltimezone_get_utc_timezone ());
+ gmtime_r (&l_time, &tm);
+ strftime (l_str, 26, "%Y-%m-%dT%H:%M:%SZ", &tm);
+ temp.day += (2*i);
+ icaltime_normalize (temp);
+ h_time = icaltime_as_timet_with_zone (temp, icaltimezone_get_utc_timezone ());
+ gmtime_r (&h_time, &tm);
+ strftime (h_str, 26, "%Y-%m-%dT%H:%M:%SZ", &tm);
+
+ filter[0] = e_gw_filter_new ();
+ e_gw_filter_add_filter_component (filter[0], E_GW_FILTER_OP_GREATERTHAN_OR_EQUAL, "startDate", l_str);
+ e_gw_filter_add_filter_component (filter[0], E_GW_FILTER_OP_LESSTHAN_OR_EQUAL, "startDate", h_str);
+ e_gw_filter_group_conditions (filter[0], E_GW_FILTER_OP_AND, 2);
+ filter[1] = e_gw_filter_new ();
+ e_gw_filter_add_filter_component (filter[1], E_GW_FILTER_OP_GREATERTHAN, "startDate", h_str);
+ filter[2] = e_gw_filter_new ();
+ e_gw_filter_add_filter_component (filter[2], E_GW_FILTER_OP_LESSTHAN, "startDate", l_str);
+
+ for (i = 0; i < 3; i++) {
+ status = e_gw_connection_create_cursor (priv->cnc,
+ priv->container_id,
+ "recipients message recipientStatus attachments default peek", filter[i], &cursor);
if (status != E_GW_CONNECTION_STATUS_OK) {
e_cal_backend_groupwise_notify_error_code (cbgw, status);
g_mutex_unlock (mutex);
return status;
}
- for (l = list; l != NULL; l = g_list_next(l)) {
- EGwItem *item;
- char *progress_string = NULL;
+ done = FALSE;
+ if (i == 1) {
+ position = E_GW_CURSOR_POSITION_START;
+ forward = TRUE;
+
+ } else {
+ position = E_GW_CURSOR_POSITION_END;
+ forward = FALSE;
+ }
- item = E_GW_ITEM (l->data);
- comp = e_gw_item_to_cal_component (item, cbgw);
- g_object_unref (item);
+ while (!done) {
- /* Show the progress information */
- num++;
- percent = ((float) num/total) * 100;
-
- /* FIXME The total obtained from the server is wrong. Sometimes the num can
- be greater than the total. The following makes sure that the percentage is not >= 100 */
-
- if (percent > 100)
- percent = 99;
-
- progress_string = g_strdup_printf (_("Loading %s items"), type);
- e_cal_backend_notify_view_progress (E_CAL_BACKEND (cbgw), progress_string, percent);
+ status = e_gw_connection_read_cursor (priv->cnc, priv->container_id, cursor, forward, CURSOR_ITEM_LIMIT, position, &list);
+ if (status != E_GW_CONNECTION_STATUS_OK) {
+ e_cal_backend_groupwise_notify_error_code (cbgw, status);
+ g_mutex_unlock (mutex);
+ return status;
+ }
+ for (l = list; l != NULL; l = g_list_next(l)) {
+ EGwItem *item;
+ char *progress_string = NULL;
+
+ item = E_GW_ITEM (l->data);
+ comp = e_gw_item_to_cal_component (item, cbgw);
+ g_object_unref (item);
+
+ /* Show the progress information */
+ num++;
+ percent = ((float) num/total) * 100;
- if (E_IS_CAL_COMPONENT (comp)) {
- char *comp_str;
+ /* FIXME The total obtained from the server is wrong. Sometimes the num can
+ be greater than the total. The following makes sure that the percentage is not >= 100 */
+
+ if (percent > 100)
+ percent = 99;
+
+ progress_string = g_strdup_printf (_("Loading %s items"), type);
+ e_cal_backend_notify_view_progress (E_CAL_BACKEND (cbgw), progress_string, percent);
- e_cal_component_commit_sequence (comp);
- if (kind == icalcomponent_isa (e_cal_component_get_icalcomponent (comp))) {
- comp_str = e_cal_component_get_as_string (comp);
- e_cal_backend_notify_object_created (E_CAL_BACKEND (cbgw), (const char *) comp_str);
- g_free (comp_str);
+ if (E_IS_CAL_COMPONENT (comp)) {
+ char *comp_str;
+
+ e_cal_component_commit_sequence (comp);
+ if (kind == icalcomponent_isa (e_cal_component_get_icalcomponent (comp))) {
+ comp_str = e_cal_component_get_as_string (comp);
+ e_cal_backend_notify_object_created (E_CAL_BACKEND (cbgw), (const char *) comp_str);
+ g_free (comp_str);
+ }
+ e_cal_backend_cache_put_component (priv->cache, comp);
+ g_object_unref (comp);
}
- e_cal_backend_cache_put_component (priv->cache, comp);
- g_object_unref (comp);
+ g_free (progress_string);
}
- g_free (progress_string);
+
+ if (!list || g_list_length (list) == 0)
+ done = TRUE;
+ g_list_free (list);
+ list = NULL;
+ position = E_GW_CURSOR_POSITION_CURRENT;
}
-
- if (!list || g_list_length (list) == 0)
- done = TRUE;
- g_list_free (list);
- list = NULL;
- position = E_GW_CURSOR_POSITION_CURRENT;
- }
- e_gw_connection_destroy_cursor (priv->cnc, priv->container_id, cursor);
+ e_gw_connection_destroy_cursor (priv->cnc, priv->container_id, cursor);
+ g_object_unref (filter[i]);
+ }
e_cal_backend_notify_view_done (E_CAL_BACKEND (cbgw), GNOME_Evolution_Calendar_Success);
g_mutex_unlock (mutex);

190
bulk-delete.patch Normal file
View File

@ -0,0 +1,190 @@
Index: camel/providers/groupwise/camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.130
diff -u -p -r1.130 camel-groupwise-folder.c
--- camel/providers/groupwise/camel-groupwise-folder.c 18 Apr 2006 15:15:30 -0000 1.130
+++ camel/providers/groupwise/camel-groupwise-folder.c 24 Apr 2006 08:37:43 -0000
@@ -61,6 +61,7 @@
#define JUNK_FOLDER "Junk Mail"
#define READ_CURSOR_MAX_IDS 500
#define MAX_ATTACHMENT_SIZE 1*1024*1024 /*In bytes*/
+#define GROUPWISE_BULK_DELETE_LIMIT 100
static CamelOfflineFolderClass *parent_class = NULL;
@@ -586,7 +587,11 @@ groupwise_sync (CamelFolder *folder, gbo
EGwConnectionStatus status;
EGwConnection *cnc;
int count, i;
-
+
+ GList *deleted_items, *deleted_head=NULL;
+
+ deleted_items = NULL;
+
if (((CamelOfflineStore *) gw_store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL ||
((CamelService *)gw_store)->status == CAMEL_SERVICE_DISCONNECTED) {
groupwise_sync_summary (folder, ex);
@@ -606,7 +611,7 @@ groupwise_sync (CamelFolder *folder, gbo
count = camel_folder_summary_count (folder->summary);
CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
- for (i=0 ; i <count ; i++) {
+ for (i=0 ; i < count ; i++) {
guint32 flags = 0;
info = camel_folder_summary_index (folder->summary, i);
gw_info = (CamelGroupwiseMessageInfo *) info;
@@ -635,22 +640,57 @@ groupwise_sync (CamelFolder *folder, gbo
if (diff.changed & CAMEL_MESSAGE_SEEN)
read_items = g_list_append (read_items, (char *)uid);
if (diff.changed & CAMEL_MESSAGE_DELETED) {
- CAMEL_SERVICE_LOCK (gw_store, connect_lock);
- status = e_gw_connection_remove_item (cnc, container_id, uid);
- if (status == E_GW_CONNECTION_STATUS_OK) {
- CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
- camel_folder_summary_remove (folder->summary, info);
- camel_data_cache_remove(gw_folder->cache, "cache", uid, ex);
- CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
- i--; count--;
+ if (deleted_items)
+ deleted_items = g_list_prepend (deleted_items, (char *)camel_message_info_uid (info));
+ else {
+ g_list_free (deleted_head);
+ deleted_head = NULL;
+ deleted_head = deleted_items = g_list_prepend (deleted_items, (char *)camel_message_info_uid (info));
+ }
+
+ if (g_list_length (deleted_items) == GROUPWISE_BULK_DELETE_LIMIT ) {
+ CAMEL_SERVICE_LOCK (gw_store, connect_lock);
+ status = e_gw_connection_remove_items (cnc, container_id, deleted_items);
+ CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
+ if (status == E_GW_CONNECTION_STATUS_OK) {
+ char *uid;
+ while (deleted_items) {
+ uid = (char *)deleted_items->data;
+ CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
+ camel_folder_summary_remove_uid (folder->summary, uid);
+ camel_data_cache_remove(gw_folder->cache, "cache", uid, ex);
+ CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
+ deleted_items = g_list_next (deleted_items);
+ count -= GROUPWISE_BULK_DELETE_LIMIT;
+ i -= GROUPWISE_BULK_DELETE_LIMIT;
+ }
+ }
}
- CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
}
}
}
camel_message_info_free (info);
}
CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
+ if (deleted_items) {
+ CAMEL_SERVICE_LOCK (gw_store, connect_lock);
+ status = e_gw_connection_remove_items (cnc, container_id, deleted_items);
+ CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
+ if (status == E_GW_CONNECTION_STATUS_OK) {
+ char *uid;
+ while (deleted_items) {
+ uid = (char *)deleted_items->data;
+ CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
+ camel_folder_summary_remove_uid (folder->summary, uid);
+ camel_data_cache_remove(gw_folder->cache, "cache", uid, ex);
+ CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
+ deleted_items = g_list_next (deleted_items);
+ count -= GROUPWISE_BULK_DELETE_LIMIT;
+ i -= GROUPWISE_BULK_DELETE_LIMIT;
+ }
+ }
+ g_list_free (deleted_head);
+ }
if (read_items && g_list_length (read_items)) {
CAMEL_SERVICE_LOCK (gw_store, connect_lock);
@@ -1960,8 +2000,10 @@ groupwise_expunge (CamelFolder *folder,
CamelFolderChangeInfo *changes;
int i, max;
gboolean delete = FALSE;
+ GList *deleted_items, *deleted_head=NULL;
+
-
+ deleted_items = NULL;
cnc = cnc_lookup (priv);
if (!cnc)
return;
@@ -1988,26 +2030,62 @@ groupwise_expunge (CamelFolder *folder,
info = camel_folder_summary_index (folder->summary, i);
ginfo = (CamelGroupwiseMessageInfo *) info;
if (ginfo && (ginfo->info.flags & CAMEL_MESSAGE_DELETED)) {
- const char *uid = camel_message_info_uid (info);
- CAMEL_SERVICE_LOCK (groupwise_store, connect_lock);
- status = e_gw_connection_remove_item (cnc, container_id, uid);
- if (status == E_GW_CONNECTION_STATUS_OK) {
+
+ if (deleted_items)
+ deleted_items = g_list_prepend (deleted_items, (char *)camel_message_info_uid (info));
+ else {
+ g_list_free (deleted_head);
+ deleted_head = NULL;
+ deleted_head = deleted_items = g_list_prepend (deleted_items, (char *)camel_message_info_uid (info));
+ }
+ if (g_list_length (deleted_items) == GROUPWISE_BULK_DELETE_LIMIT ) {
+ /* Read the FIXME below */
+ CAMEL_SERVICE_LOCK (groupwise_store, connect_lock);
+ status = e_gw_connection_remove_items (cnc, container_id, deleted_items);
+ CAMEL_SERVICE_UNLOCK (groupwise_store, connect_lock);
+ if (status == E_GW_CONNECTION_STATUS_OK) {
+ char *uid;
+ while (deleted_items) {
+ uid = (char *)deleted_items->data;
+ CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
+ camel_folder_change_info_remove_uid (changes, uid);
+ camel_folder_summary_remove_uid (folder->summary, uid);
+ camel_data_cache_remove(gw_folder->cache, "cache", uid, ex);
+ CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
+ deleted_items = g_list_next (deleted_items);
+ max -= GROUPWISE_BULK_DELETE_LIMIT;
+ i -= GROUPWISE_BULK_DELETE_LIMIT;
+ }
+ }
+ delete = TRUE;
+ }
+ }
+ camel_message_info_free (info);
+ }
+
+ if (deleted_items) {
+ /* FIXME: Put these in a function and reuse it inside the above loop, here and in groupwise_sync*/
+ CAMEL_SERVICE_LOCK (groupwise_store, connect_lock);
+ status = e_gw_connection_remove_items (cnc, container_id, deleted_items);
+ CAMEL_SERVICE_UNLOCK (groupwise_store, connect_lock);
+ if (status == E_GW_CONNECTION_STATUS_OK) {
+ char *uid;
+ while (deleted_items) {
+ uid = (char *)deleted_items->data;
CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
- camel_folder_change_info_remove_uid (changes, (char *) uid);
- camel_folder_summary_remove (folder->summary, info);
+ camel_folder_change_info_remove_uid (changes, uid);
+ camel_folder_summary_remove_uid (folder->summary, uid);
camel_data_cache_remove(gw_folder->cache, "cache", uid, ex);
CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
- delete = TRUE;
- i--; max--;
+ deleted_items = g_list_next (deleted_items);
}
- CAMEL_SERVICE_UNLOCK (groupwise_store, connect_lock);
}
- camel_message_info_free (info);
+ delete = TRUE;
+ g_list_free (deleted_head);
}
if (delete)
camel_object_trigger_event (CAMEL_OBJECT (folder), "folder_changed", changes);
-
g_free (container_id);
camel_folder_change_info_free (changes);

View File

@ -0,0 +1,17 @@
Index: calendar/libical/src/libical/icalvalue.c
===================================================================
RCS file: /cvs/gnome/libical/src/libical/icalvalue.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -p -r1.22 -r1.23
--- calendar/libical/src/libical/icalvalue.c 15 Jun 2006 14:42:21 -0000 1.22
+++ calendar/libical/src/libical/icalvalue.c 3 Jul 2006 14:29:43 -0000 1.23
@@ -1346,7 +1346,7 @@ int icalvalue_decode_ical_string(const c
icalmemory_append_char(&str,&str_p,&buf_sz,'\0');
- if ((int)strlen(str) >= nMaxBufferLen) {
+ if ((int)strlen(str) > nMaxBufferLen) {
return 0;
}

298
camel-partha-gw-fixes.patch Normal file
View File

@ -0,0 +1,298 @@
diff -Nrup camel/providers/groupwise/camel-groupwise-folder.c /root/varadhan/2.5/mar-23/head/evolution-data-server-1.5.92/camel/providers/groupwise/camel-groupwise-folder.c
--- camel/providers/groupwise/camel-groupwise-folder.c 2006-03-23 14:08:09.734955209 +0100
+++ /root/varadhan/2.5/mar-23/head/evolution-data-server-1.5.92/camel/providers/groupwise/camel-groupwise-folder.c 2006-03-23 12:07:49.000000000 +0100
@@ -92,7 +92,7 @@ static void gw_update_cache ( CamelFolde
static CamelMimeMessage *groupwise_folder_item_to_msg ( CamelFolder *folder, EGwItem *item, CamelException *ex );
-#define d(x) x
+#define d(x)
static CamelMimeMessage *
groupwise_folder_get_message( CamelFolder *folder,
@@ -635,9 +635,10 @@ groupwise_sync (CamelFolder *folder, gbo
diff.changed &= folder->permanent_flags;
/* weed out flag changes that we can't sync to the server */
- if (!diff.changed)
+ if (!diff.changed) {
camel_message_info_free(info);
- else {
+ continue;
+ } else {
const char *uid = camel_message_info_uid (info);
if (diff.changed & CAMEL_MESSAGE_SEEN)
read_items = g_list_append (read_items, (char *)uid);
@@ -656,7 +657,6 @@ groupwise_sync (CamelFolder *folder, gbo
}
}
camel_message_info_free (info);
- info = NULL;
}
CAMEL_GROUPWISE_FOLDER_UNLOCK (folder, cache_lock);
@@ -989,7 +989,6 @@ groupwise_refresh_folder(CamelFolder *fo
/* The storing of time-stamp to summary code below should be commented if the
above commented code is uncommented */
-
if (summary->time_string)
g_free (summary->time_string);
@@ -1047,7 +1046,7 @@ end1:
return;
}
-void
+static void
gw_update_cache (CamelFolder *folder, GList *list, CamelException *ex, gboolean uid_flag)
{
CamelGroupwiseMessageInfo *mi = NULL;
@@ -1069,6 +1068,7 @@ gw_update_cache (CamelFolder *folder, GL
int total_items = g_list_length (item_list), i=0;
/*Assert lock*/
+ CAMEL_SERVICE_ASSERT_LOCKED (gw_store, connect_lock);
changes = camel_folder_change_info_new ();
container_id = g_strdup (camel_groupwise_store_container_id_lookup (gw_store, folder->full_name));
if (!container_id) {
@@ -1092,8 +1092,9 @@ gw_update_cache (CamelFolder *folder, GL
const char *id;
GSList *recp_list = NULL;
status_flags = 0;
- CamelStream *cache_stream;
+ CamelStream *cache_stream, *t_cache_stream;
CamelMimeMessage *mail_msg = NULL;
+ gboolean is_sent_folder = FALSE;
exists = FALSE;
@@ -1118,11 +1119,7 @@ gw_update_cache (CamelFolder *folder, GL
if (pmi) {
exists = TRUE;
camel_message_info_ref (pmi);
- mi = (CamelGroupwiseMessageInfo *)camel_message_info_clone(pmi);
- /*
- pmi->summary = folder->summary;
- mi->info.summary = folder->summary;
- */
+ mi = (CamelGroupwiseMessageInfo *)pmi;
}
if (!exists) {
@@ -1146,9 +1143,15 @@ gw_update_cache (CamelFolder *folder, GL
item_status = e_gw_item_get_item_status (item);
if (item_status & E_GW_ITEM_STAT_READ)
status_flags |= CAMEL_MESSAGE_SEEN;
+ else
+ mi->info.flags &= ~CAMEL_MESSAGE_SEEN;
+
if (item_status & E_GW_ITEM_STAT_REPLIED)
status_flags |= CAMEL_MESSAGE_ANSWERED;
- mi->info.flags |= status_flags;
+ if (exists)
+ mi->info.flags |= status_flags;
+ else
+ mi->info.flags = status_flags;
priority = e_gw_item_get_priority (item);
if (priority && !(g_ascii_strcasecmp (priority,"High"))) {
@@ -1222,12 +1225,7 @@ gw_update_cache (CamelFolder *folder, GL
mi->info.date_sent = mi->info.date_received = actual_time;
}
}
-#if 0
-
- if (exists)
- g_free(mi->info.uid);
- mi->info.uid = g_strdup(e_gw_item_get_id(item));
-#endif
+
if (!exists) {
mi->info.uid = g_strdup (e_gw_item_get_id(item));
mi->info.size = e_gw_item_get_mail_size (item);
@@ -1235,12 +1233,7 @@ gw_update_cache (CamelFolder *folder, GL
}
if (exists) {
- /*
camel_folder_change_info_change_uid (changes, mi->info.uid);
- camel_message_info_free (&mi->info);*/
- camel_folder_summary_remove(folder->summary, pmi);
- camel_folder_summary_add (folder->summary,(CamelMessageInfo *)mi);
- camel_folder_change_info_add_uid (changes, mi->info.uid);
camel_message_info_free (pmi);
} else {
camel_folder_summary_add (folder->summary,(CamelMessageInfo *)mi);
@@ -1253,13 +1246,17 @@ gw_update_cache (CamelFolder *folder, GL
continue;
if (!strcmp (folder->full_name, "Sent Items"))
- exists = FALSE;
+ is_sent_folder = TRUE;
/******************** Begine Caching ************************/
/* add to cache if its a new message*/
- if (!exists) {
+ t_cache_stream = camel_data_cache_get (gw_folder->cache, "cache", id, ex);
+ if (t_cache_stream && !is_sent_folder) {
+ camel_object_unref (t_cache_stream);
+
mail_msg = groupwise_folder_item_to_msg (folder, item, ex);
if (mail_msg)
camel_medium_set_header (CAMEL_MEDIUM (mail_msg), "X-Evolution-Source", groupwise_base_url_lookup (priv));
+
CAMEL_GROUPWISE_FOLDER_LOCK (folder, cache_lock);
if ((cache_stream = camel_data_cache_add (gw_folder->cache, "cache", id, NULL))) {
if (camel_data_wrapper_write_to_stream ((CamelDataWrapper *) mail_msg, cache_stream) == -1 || camel_stream_flush (cache_stream) == -1)
@@ -1579,7 +1576,6 @@ groupwise_folder_item_to_msg( CamelFolde
}
g_object_unref (temp_item);
} else {
- g_print ("%d:%d\n", attach->size, MAX_ATTACHMENT_SIZE);
if (attach->size > MAX_ATTACHMENT_SIZE) {
long count = 0;
int i, t_len=0, offset=0, t_offset=0;
@@ -1743,7 +1739,7 @@ groupwise_append_message (CamelFolder *f
CamelGroupwiseStorePrivate *priv = gw_store->priv;
CamelOfflineStore *offline = (CamelOfflineStore *) folder->parent_store;
CamelAddress *recipients;
- EGwConnectionStatus status = E_GW_CONNECTION_STATUS_OK;
+ EGwConnectionStatus status;
EGwConnection *cnc;
EGwItem *item;
char *id;
diff -Nrup camel/providers/groupwise/camel-groupwise-store.c /root/varadhan/2.5/mar-23/head/evolution-data-server-1.5.92/camel/providers/groupwise/camel-groupwise-store.c
--- camel/providers/groupwise/camel-groupwise-store.c 2006-03-23 14:08:09.722954807 +0100
+++ /root/varadhan/2.5/mar-23/head/evolution-data-server-1.5.92/camel/providers/groupwise/camel-groupwise-store.c 2006-03-23 10:26:40.000000000 +0100
@@ -461,16 +461,15 @@ groupwise_build_folder_info(CamelGroupwi
name = fi->full_name;
else
name++;
-
- if (!strcmp (folder_name, "Sent Items"))
- fi->flags |= CAMEL_FOLDER_TYPE_SENT;
- else if (!strcmp (folder_name, "Mailbox"))
- fi->flags |= CAMEL_FOLDER_TYPE_INBOX;
- else if (!strcmp (folder_name, "Trash"))
- fi->flags |= CAMEL_FOLDER_TYPE_TRASH;
- else if (!strcmp (folder_name, "Junk Mail"))
- fi->flags |= CAMEL_FOLDER_TYPE_JUNK;
-
+ if (!strcmp (folder_name, "Sent Items"))
+ fi->flags |= CAMEL_FOLDER_TYPE_SENT;
+ else if (!strcmp (folder_name, "Mailbox"))
+ fi->flags |= CAMEL_FOLDER_TYPE_INBOX;
+ else if (!strcmp (folder_name, "Trash"))
+ fi->flags |= CAMEL_FOLDER_TYPE_TRASH;
+ else if (!strcmp (folder_name, "Junk Mail"))
+ fi->flags |= CAMEL_FOLDER_TYPE_JUNK;
+
fi->name = g_strdup(name);
return fi;
}
@@ -690,7 +689,7 @@ gw_store_reload_folder (CamelGroupwiseSt
{
CamelGroupwiseStorePrivate *priv = gw_store->priv;
CamelGroupwiseSummary *summary;
- char *container_id, *folder_dir, *storage_path;
+ char *container_id;
EGwConnectionStatus status;
GList *list = NULL;
gboolean done = FALSE;
@@ -751,11 +750,9 @@ gw_store_reload_folder (CamelGroupwiseSt
if (status != E_GW_CONNECTION_STATUS_OK) {
CAMEL_SERVICE_UNLOCK (gw_store, connect_lock);
e_gw_connection_destroy_cursor (priv->cnc, container_id, cursor);
- camel_folder_summary_clear (folder->summary);
camel_folder_summary_save (folder->summary);
camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Authentication failed"));
camel_operation_end (NULL);
- camel_object_unref (folder);
g_free (container_id);
return;
}
@@ -981,6 +978,10 @@ groupwise_folders_sync (CamelGroupwiseSt
info = NULL;
}
}
+ if (store->current_folder && strcmp (store->current_folder->full_name, info->full_name) == 0) {
+ g_print ("Syncing up %s\n", info->full_name);
+ CAMEL_FOLDER_CLASS (CAMEL_OBJECT_GET_CLASS (store->current_folder))->sync(store->current_folder, FALSE, ex);
+ }
}
g_free ((char *)url);
@@ -1153,7 +1154,8 @@ groupwise_get_folder_info (CamelStore *s
}
CAMEL_SERVICE_LOCK (store, connect_lock);
- if ((groupwise_store->list_loaded == FALSE) && check_for_connection((CamelService *)store, ex)) {
+/* if ((groupwise_store->list_loaded == FALSE) && check_for_connection((CamelService *)store, ex)) {*/
+ if (check_for_connection((CamelService *)store, ex)) {
if (!priv->cnc) {
if (groupwise_connect ((CamelService *)store, ex)) {
g_warning ("Could connect!!!\n");
@@ -1161,7 +1163,7 @@ groupwise_get_folder_info (CamelStore *s
g_warning ("Could not connect..failure connecting\n");
}
if (camel_groupwise_store_connected ((CamelGroupwiseStore *)store, ex)) {
- groupwise_store->list_loaded = TRUE;
+ /*groupwise_store->list_loaded = TRUE;*/
groupwise_folders_sync (groupwise_store, ex);
if (camel_exception_is_set (ex)) {
CAMEL_SERVICE_UNLOCK (store, connect_lock);
@@ -1173,7 +1175,7 @@ groupwise_get_folder_info (CamelStore *s
}
CAMEL_SERVICE_UNLOCK (store, connect_lock);
- //camel_exception_clear (ex);
+ /*camel_exception_clear (ex);*/
info = groupwise_get_folder_info_offline (store, top, flags, ex);
return info;
}
diff -Nrup camel/providers/groupwise/camel-groupwise-utils.c /root/varadhan/2.5/mar-23/head/evolution-data-server-1.5.92/camel/providers/groupwise/camel-groupwise-utils.c
--- camel/providers/groupwise/camel-groupwise-utils.c 2006-03-23 14:08:09.702954138 +0100
+++ /root/varadhan/2.5/mar-23/head/evolution-data-server-1.5.92/camel/providers/groupwise/camel-groupwise-utils.c 2006-03-21 07:12:04.000000000 +0100
@@ -432,7 +432,7 @@ camel_groupwise_util_item_from_message (
} else {
/*only message*/
CamelStreamMem *content = (CamelStreamMem *)camel_stream_mem_new ();
- CamelDataWrapper *dw = camel_data_wrapper_new ();
+ CamelDataWrapper *dw = NULL;
CamelContentType *type;
char *buffer = NULL;
char *content_type = NULL;
@@ -587,7 +587,7 @@ do_multipart (EGwConnection *cnc, EGwIte
CamelContentType *type;
CamelMimePart *part;
CamelStreamMem *content = (CamelStreamMem *)camel_stream_mem_new ();
- CamelDataWrapper *dw = camel_data_wrapper_new ();
+ CamelDataWrapper *dw = NULL;
const char *disposition, *filename;
char *buffer = NULL;
char *mime_type = NULL;
@@ -611,7 +611,7 @@ do_multipart (EGwConnection *cnc, EGwIte
const char *cid = NULL;
CamelStreamMem *temp_content = (CamelStreamMem *)camel_stream_mem_new ();
temp_part = camel_multipart_get_part ((CamelMultipart *)dw, 1);
- CamelDataWrapper *temp_dw = camel_data_wrapper_new ();
+ CamelDataWrapper *temp_dw = NULL;
if (temp_part) {
is_alternative = TRUE;
temp_dw = camel_medium_get_content_object (CAMEL_MEDIUM (temp_part));
@@ -628,8 +628,6 @@ do_multipart (EGwConnection *cnc, EGwIte
g_free (mime_type);
}
camel_object_unref (temp_content);
- camel_object_unref (temp_dw);
- camel_object_unref (dw);
continue;
}
@@ -653,6 +651,5 @@ do_multipart (EGwConnection *cnc, EGwIte
g_free (buffer);
g_free (mime_type);
camel_object_unref (content);
- camel_object_unref (dw);
} /*end of for*/
}

393
camel-vfs-stream.diff Normal file
View File

@ -0,0 +1,393 @@
--- configure.in.old 2006-05-23 07:34:48.254719640 +0200
+++ configure.in 2006-05-23 07:35:07.050359111 +0200
@@ -1199,7 +1199,7 @@
AC_MSG_ERROR([*** zlib is required])
fi
-EVO_SET_COMPILE_FLAGS(CAMEL, gthread-2.0 gmodule-2.0 gobject-2.0 $mozilla_nss,
+EVO_SET_COMPILE_FLAGS(CAMEL, gthread-2.0 gmodule-2.0 gobject-2.0 $mozilla_nss gnome-vfs-2.0,
$THREADS_CFLAGS $KRB4_CFLAGS $KRB5_CFLAGS $MANUAL_NSS_CFLAGS,
-lz $THREADS_LIBS $KRB4_LDFLAGS $KRB5_LDFLAGS $MANUAL_NSS_LIBS)
AC_SUBST(CAMEL_CFLAGS)
Index: camel/Makefile.am
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/Makefile.am,v
retrieving revision 1.213
diff -u -p -r1.213 Makefile.am
--- camel/Makefile.am 4 Jan 2006 23:47:07 -0000 1.213
+++ camel/Makefile.am 23 May 2006 03:54:24 -0000
@@ -201,6 +201,7 @@ libcamel_1_2_la_SOURCES = \
camel-stream-fs.c \
camel-stream-mem.c \
camel-stream-null.c \
+ camel-stream-vfs.c \
camel-stream.c \
camel-string-utils.c \
camel-text-index.c \
@@ -270,6 +271,7 @@ libcamelinclude_HEADERS = \
camel-stream-mem.h \
camel-stream-null.h \
camel-stream-process.h \
+ camel-stream-vfs.h \
camel-stream.h \
camel-string-utils.h \
camel-text-index.h \
--- /dev/null 2006-04-26 01:42:37.000000000 +0530
+++ camel/camel-stream-vfs.c 2006-05-18 16:42:45.000000000 +0530
@@ -0,0 +1,281 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* camel-stream-vfs.c : file system based stream */
+
+/*
+ * Authors: Srinivasa Ragavan <sragavan@novell.com>
+ *
+ * Copyright 2006 Novell, Inc. (www.novell.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU Lesser General Public
+ * License as published by the Free Software Foundation.
+ *
+ * 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 Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <string.h>
+
+#include <glib/gstdio.h>
+
+#include "camel-file-utils.h"
+#include "camel-operation.h"
+#include "camel-private.h"
+#include "camel-stream-vfs.h"
+
+static CamelSeekableStreamClass *parent_class = NULL;
+
+/* Returns the class for a CamelStreamVFS */
+#define CSVFS_CLASS(so) CAMEL_STREAM_VFS_CLASS (CAMEL_OBJECT_GET_CLASS(so))
+
+static ssize_t stream_read (CamelStream *stream, char *buffer, size_t n);
+static ssize_t stream_write (CamelStream *stream, const char *buffer, size_t n);
+/* static int stream_flush (CamelStream *stream); */
+static int stream_close (CamelStream *stream);
+static off_t stream_seek (CamelSeekableStream *stream, off_t offset,
+ CamelStreamSeekPolicy policy);
+
+static void
+camel_stream_vfs_class_init (CamelStreamVFSClass *camel_stream_vfs_class)
+{
+ CamelSeekableStreamClass *camel_seekable_stream_class =
+ CAMEL_SEEKABLE_STREAM_CLASS (camel_stream_vfs_class);
+ CamelStreamClass *camel_stream_class =
+ CAMEL_STREAM_CLASS (camel_stream_vfs_class);
+
+ parent_class = CAMEL_SEEKABLE_STREAM_CLASS (camel_type_get_global_classfuncs (camel_seekable_stream_get_type ()));
+
+ /* virtual method overload */
+ camel_stream_class->read = stream_read;
+ camel_stream_class->write = stream_write;
+/* camel_stream_class->flush = stream_flush; */
+ camel_stream_class->close = stream_close;
+
+ camel_seekable_stream_class->seek = stream_seek;
+}
+
+static void
+camel_stream_vfs_init (gpointer object, gpointer klass)
+{
+ CamelStreamVFS *stream = CAMEL_STREAM_VFS (object);
+
+ stream->handle = (gpointer) -1;
+ ((CamelSeekableStream *)stream)->bound_end = CAMEL_STREAM_UNBOUND;
+}
+
+static void
+camel_stream_vfs_finalize (CamelObject *object)
+{
+ CamelStreamVFS *stream_vfs = CAMEL_STREAM_VFS (object);
+
+ if (stream_vfs->handle != -1)
+ close (stream_vfs->handle);
+}
+
+
+CamelType
+camel_stream_vfs_get_type (void)
+{
+ static CamelType camel_stream_vfs_type = CAMEL_INVALID_TYPE;
+
+ if (camel_stream_vfs_type == CAMEL_INVALID_TYPE) {
+ camel_stream_vfs_type = camel_type_register (camel_seekable_stream_get_type (), "CamelStreamVFS",
+ sizeof (CamelStreamVFS),
+ sizeof (CamelStreamVFSClass),
+ (CamelObjectClassInitFunc) camel_stream_vfs_class_init,
+ NULL,
+ (CamelObjectInitFunc) camel_stream_vfs_init,
+ (CamelObjectFinalizeFunc) camel_stream_vfs_finalize);
+ }
+
+ return camel_stream_vfs_type;
+}
+
+/**
+ * camel_stream_vfs_new_with_handle:
+ * @handle: a GnomeVFS handle
+ *
+ * Creates a new fs stream using the given GnomeVFS handle @handle as the
+ * backing store. When the stream is destroyed, the file descriptor
+ * will be closed.
+ *
+ * Returns a new #CamelStreamVFS
+ **/
+CamelStream *
+camel_stream_vfs_new_with_handle (GnomeVFSHandle *handle)
+{
+ CamelStreamVFS *stream_vfs;
+ off_t offset;
+ GnomeVFSResult result;
+
+ if (!handle)
+ return NULL;
+
+ stream_vfs = CAMEL_STREAM_VFS (camel_object_new (camel_stream_vfs_get_type ()));
+ stream_vfs->handle = handle;
+ gnome_vfs_seek (handle, GNOME_VFS_SEEK_CURRENT, 0);
+ offset = 0;
+ CAMEL_SEEKABLE_STREAM (stream_vfs)->position = offset;
+
+ return CAMEL_STREAM (stream_vfs);
+}
+
+/**
+ * camel_stream_vfs_new_with_uri:
+ * @name: a file uri
+ * @flags: flags as in open(2)
+ * @mode: a file mode
+ *
+ * Creates a new #CamelStreamVFS corresponding to the named file, flags,
+ * and mode.
+ *
+ * Returns the new stream, or %NULL on error.
+ **/
+CamelStream *
+camel_stream_vfs_new_with_uri (const char *name, int flags, mode_t mode)
+{
+ GnomeVFSResult result;
+ GnomeVFSHandle *handle;
+ int vfs_flag = 0;
+
+ if (flags & O_WRONLY)
+ vfs_flag = vfs_flag | GNOME_VFS_OPEN_WRITE;
+ if (flags & O_RDONLY)
+ vfs_flag = vfs_flag | GNOME_VFS_OPEN_READ;
+ if (flags & O_RDWR)
+ vfs_flag = vfs_flag | GNOME_VFS_OPEN_READ |GNOME_VFS_OPEN_WRITE;
+
+ if (flags & O_CREAT)
+ result = gnome_vfs_create (&handle, name, vfs_flag, flags & O_TRUNC, mode);
+ else
+ result = gnome_vfs_open (&handle, name, vfs_flag);
+
+ if (result != GNOME_VFS_OK) {
+ return NULL;
+ }
+
+ return camel_stream_vfs_new_with_handle (handle);
+}
+
+static ssize_t
+stream_read (CamelStream *stream, char *buffer, size_t n)
+{
+ CamelStreamVFS *stream_vfs = CAMEL_STREAM_VFS (stream);
+ CamelSeekableStream *seekable = CAMEL_SEEKABLE_STREAM (stream);
+ ssize_t nread = 0;
+ GnomeVFSResult result;
+
+ if (seekable->bound_end != CAMEL_STREAM_UNBOUND)
+ n = MIN (seekable->bound_end - seekable->position, n);
+
+ result = gnome_vfs_read (stream_vfs->handle, buffer, n, &nread);
+
+ if (nread > 0 && result == GNOME_VFS_OK)
+ seekable->position += nread;
+ else if (nread == 0)
+ stream->eos = TRUE;
+
+ return nread;
+}
+
+static ssize_t
+stream_write (CamelStream *stream, const char *buffer, size_t n)
+{
+ CamelStreamVFS *stream_vfs = CAMEL_STREAM_VFS (stream);
+ CamelSeekableStream *seekable = CAMEL_SEEKABLE_STREAM (stream);
+ ssize_t nwritten = 0;
+ GnomeVFSResult result;
+
+ if (seekable->bound_end != CAMEL_STREAM_UNBOUND)
+ n = MIN (seekable->bound_end - seekable->position, n);
+
+ result = gnome_vfs_write (stream_vfs->handle, buffer, n, &nwritten);
+
+ if (nwritten > 0 && result == GNOME_VFS_OK)
+ seekable->position += nwritten;
+
+ return nwritten;
+}
+
+/* static int */
+/* stream_flush (CamelStream *stream) */
+/* { */
+/* return fsync(((CamelStreamVFS *)stream)->handle); */
+/* } */
+
+static int
+stream_close (CamelStream *stream)
+{
+ GnomeVFSResult result;
+
+ result = gnome_vfs_close(((CamelStreamVFS *)stream)->handle);
+
+ if (result != GNOME_VFS_OK)
+ return -1;
+
+ ((CamelStreamVFS *)stream)->handle = NULL;
+ return 0;
+}
+
+static off_t
+stream_seek (CamelSeekableStream *stream, off_t offset, CamelStreamSeekPolicy policy)
+{
+ CamelStreamVFS *stream_vfs = CAMEL_STREAM_VFS (stream);
+ off_t real = 0;
+ GnomeVFSResult result;
+ GnomeVFSHandle *handle = stream_vfs->handle;
+
+ switch (policy) {
+ case CAMEL_STREAM_SET:
+ real = offset;
+ break;
+ case CAMEL_STREAM_CUR:
+ real = stream->position + offset;
+ break;
+ case CAMEL_STREAM_END:
+ if (stream->bound_end == CAMEL_STREAM_UNBOUND) {
+ result = gnome_vfs_seek (handle, GNOME_VFS_SEEK_END, offset);
+ if (result != GNOME_VFS_OK)
+ return -1;
+ gnome_vfs_tell (handle, &real);
+ if (real != -1) {
+ if (real<stream->bound_start)
+ real = stream->bound_start;
+ stream->position = real;
+ }
+ return real;
+ }
+ real = stream->bound_end + offset;
+ break;
+ }
+
+ if (stream->bound_end != CAMEL_STREAM_UNBOUND)
+ real = MIN (real, stream->bound_end);
+ real = MAX (real, stream->bound_start);
+
+ result = gnome_vfs_seek (handle, GNOME_VFS_SEEK_START, real);
+ if (result != GNOME_VFS_OK)
+ return -1;
+
+ if (real != stream->position && ((CamelStream *)stream)->eos)
+ ((CamelStream *)stream)->eos = FALSE;
+
+ stream->position = real;
+
+ return real;
+}
--- /dev/null 2006-04-26 01:42:37.000000000 +0530
+++ camel/camel-stream-vfs.h 2006-05-18 16:41:12.000000000 +0530
@@ -0,0 +1,72 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* camel-stream-vfs.h :stream based on unix filesystem */
+
+/*
+ * Author:
+ * Srinivasa Ragavan <sragavan@novell.com>
+ *
+ * Copyright 2006 Novell, Inc. (www.novell.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU Lesser General Public
+ * License as published by the Free Software Foundation.
+ *
+ * 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 Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ * USA
+ */
+
+
+#ifndef CAMEL_STREAM_VFS_H
+#define CAMEL_STREAM_VFS_H 1
+
+
+#ifdef __cplusplus
+extern "C" {
+#pragma }
+#endif /* __cplusplus */
+
+/* for open flags */
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <libgnomevfs/gnome-vfs.h>
+
+#include <camel/camel-seekable-stream.h>
+
+#define CAMEL_STREAM_VFS_TYPE (camel_stream_vfs_get_type ())
+#define CAMEL_STREAM_VFS(obj) (CAMEL_CHECK_CAST((obj), CAMEL_STREAM_VFS_TYPE, CamelStreamVFS))
+#define CAMEL_STREAM_VFS_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_STREAM_VFS_TYPE, CamelStreamVFSClass))
+#define CAMEL_IS_STREAM_VFS(o) (CAMEL_CHECK_TYPE((o), CAMEL_STREAM_VFS_TYPE))
+
+typedef struct _CamelStreamVFS CamelStreamVFS;
+
+struct _CamelStreamVFS {
+ CamelSeekableStream parent_object;
+
+ GnomeVFSHandle *handle;
+};
+
+typedef struct {
+ CamelSeekableStreamClass parent_class;
+
+} CamelStreamVFSClass;
+
+/* Standard Camel function */
+CamelType camel_stream_vfs_get_type (void);
+
+/* public methods */
+CamelStream * camel_stream_vfs_new_with_uri (const char *uri, int flags, mode_t mode);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* CAMEL_STREAM_VFS_H */

File diff suppressed because it is too large Load Diff

70
datarootdir.diff Normal file
View File

@ -0,0 +1,70 @@
--- addressbook/libebook/libebook.pc.in
+++ addressbook/libebook/libebook.pc.in
@@ -2,6 +2,7 @@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
+datarootdir=@datarootdir@
idldir=@idldir@
IDL_INCLUDES=-I ${idldir} @IDL_INCLUDES@
--- addressbook/libedata-book/libedata-book.pc.in
+++ addressbook/libedata-book/libedata-book.pc.in
@@ -2,6 +2,7 @@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
+datarootdir=@datarootdir@
idldir=@idldir@
IDL_INCLUDES=-I ${idldir} @IDL_INCLUDES@
--- calendar/libecal/libecal.pc.in
+++ calendar/libecal/libecal.pc.in
@@ -2,6 +2,7 @@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
+datarootdir=@datarootdir@
idldir=@idldir@
IDL_INCLUDES=-I ${idldir} @IDL_INCLUDES@
--- calendar/libedata-cal/libedata-cal.pc.in
+++ calendar/libedata-cal/libedata-cal.pc.in
@@ -2,6 +2,7 @@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
+datarootdir=@datarootdir@
idldir=@idldir@
IDL_INCLUDES=-I ${idldir} @IDL_INCLUDES@
--- evolution-data-server.pc.in
+++ evolution-data-server.pc.in
@@ -4,6 +4,7 @@
includedir=@includedir@
privlibdir=@privlibdir@
extensiondir=@extensiondir@
+datarootdir=@datarootdir@
datadir=@datadir@
privdatadir=@privdatadir@
--- servers/exchange/storage/libexchange-storage.pc.in
+++ servers/exchange/storage/libexchange-storage.pc.in
@@ -2,6 +2,7 @@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
+datarootdir=@datarootdir@
idldir=@idldir@
IDL_INCLUDES=-I ${idldir} @IDL_INCLUDES@
--- servers/groupwise/libegroupwise.pc.in
+++ servers/groupwise/libegroupwise.pc.in
@@ -2,6 +2,7 @@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
+datarootdir=@datarootdir@
idldir=@idldir@
IDL_INCLUDES=-I ${idldir} @IDL_INCLUDES@

View File

@ -0,0 +1,11 @@
--- configure.in.orig 2006-07-04 12:02:26.528729871 +0200
+++ configure.in 2006-07-04 13:33:54.123889885 +0200
@@ -310,7 +310,7 @@ int main(int argc, char **argv)
}],[
AC_DEFINE(HAVE_LKSTRFTIME, 1, [strftime supports use of l and k])
ac_cv_lkstrftime=yes
-],ac_cv_lkstrftime=no,ac_cv_lkstrftime=no])
+],ac_cv_lkstrftime=no,[ac_cv_lkstrftime=no])
AC_MSG_RESULT($ac_cv_lkstrftime)
PKG_PROG_PKG_CONFIG

View File

@ -0,0 +1,54 @@
--- addressbook/backends/ldap/e-book-backend-ldap.c
+++ addressbook/backends/ldap/e-book-backend-ldap.c
@@ -2285,7 +2285,9 @@
GTimeVal start, end;
unsigned long diff;
- if (enable_debug)
+ if (enable_debug) {
printf ("contact_list_handler ...\n");
+ g_get_current_time (&start);
+ }
ldap = bl->priv->ldap;
if (!ldap) {
@@ -2481,6 +2483,8 @@
if (enable_debug) {
g_get_current_time (&end);
printf ("e_book_backend_ldap_get_contact_list invoked contact_list_handler ");
+ diff = end.tv_sec * 1000 + end.tv_usec/1000;
+ diff -= start.tv_sec * 1000 + start.tv_usec/1000;
printf ("and took %ld.%03ld seconds\n", diff/1000, diff%1000);
}
}
--- camel/camel-stream-vfs.c
+++ camel/camel-stream-vfs.c
@@ -151,7 +151,7 @@
{
GnomeVFSResult result;
GnomeVFSHandle *handle;
- int vfs_flag;
+ int vfs_flag = 0;
if (flags & O_WRONLY)
vfs_flag = vfs_flag | GNOME_VFS_OPEN_WRITE;
--- libedataserverui/e-passwords.c
+++ libedataserverui/e-passwords.c
@@ -600,6 +600,7 @@
#endif
#if WITH_GNOME_KEYRING
+static void
ep_get_password (EPassMsg *msg)
{
char *path, *passwd;
--- servers/exchange/storage/exchange-account.c
+++ servers/exchange/storage/exchange-account.c
@@ -1846,7 +1846,7 @@
int
exchange_account_check_password_expiry (ExchangeAccount *account)
{
- E2kGlobalCatalogEntry *entry;
+ E2kGlobalCatalogEntry *entry = NULL;
int max_pwd_age_days = -1;
g_return_val_if_fail (EXCHANGE_IS_ACCOUNT (account), 0);

25
eds-kerb-check.diff Normal file
View File

@ -0,0 +1,25 @@
Index: servers/exchange/storage/exchange-account.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/exchange/storage/exchange-account.c,v
retrieving revision 1.30
diff -u -p -r1.30 exchange-account.c
--- servers/exchange/storage/exchange-account.c 6 Mar 2006 06:00:26 -0000 1.30
+++ servers/exchange/storage/exchange-account.c 19 Apr 2006 09:26:18 -0000
@@ -1000,7 +1000,7 @@ is_password_expired (ExchangeAccount *ac
result = e2k_kerberos_check_password (ac->username, domain,
ac->password);
- if (result != E2K_KERBEROS_OK ||
+ if (result != E2K_KERBEROS_OK &&
result != E2K_KERBEROS_PASSWORD_EXPIRED) {
/* try again with nt domain */
domain = ac->nt_domain;
@@ -1102,7 +1102,7 @@ exchange_account_set_password (ExchangeA
result = e2k_kerberos_change_password (account->priv->username, domain,
old_pass, new_pass);
- if (result != E2K_KERBEROS_OK || result != E2K_KERBEROS_PASSWORD_TOO_WEAK) {
+ if (result != E2K_KERBEROS_OK && result != E2K_KERBEROS_PASSWORD_TOO_WEAK) {
/* try with nt_domain */
domain = account->priv->nt_domain;
if (domain)

View File

@ -0,0 +1,64 @@
diff -up ../../602/build-eds/usr/src/packages/BUILD/evolution-data-server-1.6.0/po/it.po po/it.po
--- ../../602/build-eds/usr/src/packages/BUILD/evolution-data-server-1.6.0/po/it.po 2006-06-02 07:38:25.231210320 +0200
+++ po/it.po 2006-05-31 18:31:38.000000000 +0200
@@ -18,7 +18,7 @@ msgstr ""
"Project-Id-Version: evolution-data-server\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-05-04 06:53+0000\n"
-"PO-Revision-Date: 2006-05-17 14:47\n"
+"PO-Revision-Date: 2006-05-31 17:31\n"
"Last-Translator: Novell Language <language@novell.com>\n"
"Language-Team: Novell Language <language@novell.com>\n"
"MIME-Version: 1.0\n"
@@ -714,7 +714,7 @@ msgstr "Impossibile salvare i dati del c
#: ../calendar/backends/file/e-cal-backend-file.c:209
#,
msgid "Can't save calendar data: "
-msgstr "Can't save calendar data: "
+msgstr "Impossibile salvare i dati del calendario:"
#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:872
#: ../camel/providers/groupwise/camel-groupwise-folder.c:1582
@@ -2517,7 +2517,7 @@ msgstr "Certificato non corretto da %s:\
#: ../camel/camel-tcp-stream-ssl.c:896
#, c-format
msgid "SSL Certificate check for %s:\n\n%s\n\nDo you wish to accept?"
-msgstr "Controllo certificato SSL per %s:\n\n%s\n\nSi desidera accettare?"
+msgstr "Controllo certificato SSL per %s:\n\n%s\nSi desidera accettare?"
#: ../camel/camel-tcp-stream-ssl.c:940
#, c-format
@@ -2642,7 +2642,7 @@ msgstr "Impossibile caricare il sommario
#: ../camel/providers/groupwise/camel-groupwise-folder.c:966
msgid "Trash Folder Full. Please Empty."
-msgstr "Trash Folder Full. Please Empty."
+msgstr "La cartella del cestino è piena. Svuotarla."
# LF
#: ../camel/providers/groupwise/camel-groupwise-folder.c:1129
@@ -2767,7 +2767,7 @@ msgstr "Non è stata inserita la passwor
#: ../camel/providers/groupwise/camel-groupwise-store.c:226
#,
msgid "Unable to authenticate to GroupWise server. "
-msgstr "Unable to authenticate to GroupWise server. "
+msgstr "Impossibile autenticare il server Groupwise."
#: ../camel/providers/groupwise/camel-groupwise-store.c:304
msgid "Some features may not work correctly with your current server version"
@@ -4954,13 +4954,13 @@ msgstr "Eli_mina %s"
#: ../libedataserverui/e-passwords.c:472
#,
msgid "_Remember this passphrase"
-msgstr "_Remember this passphrase"
+msgstr "_Memorizza questa passphrase"
# LF
#: ../libedataserverui/e-passwords.c:473
#,
msgid "_Remember this passphrase for the remainder of this session"
-msgstr "_Remember this passphrase for the remainder of this session"
+msgstr "_Memorizza la passphrase per l'intera sessione"
# LF
#: ../libedataserverui/e-passwords.c:476

20805
eds-updated-translations.diff Normal file

File diff suppressed because it is too large Load Diff

110
eds-warnings.patch Normal file
View File

@ -0,0 +1,110 @@
Index: calendar/backends/contacts/e-cal-backend-contacts.c
================================================================================
--- calendar/backends/contacts/e-cal-backend-contacts.c
+++ calendar/backends/contacts/e-cal-backend-contacts.c
@@ -384,7 +384,7 @@
static struct icaltimetype
cdate_to_icaltime (EContactDate *cdate)
{
- struct icaltimetype ret;
+ struct icaltimetype ret = icaltime_null_time();
/*FIXME: this is a really _ugly_ (temporary) hack
* since several functions are still depending on the epoch,
--- calendar/backends/groupwise/e-cal-backend-groupwise-utils.h
+++ calendar/backends/groupwise/e-cal-backend-groupwise-utils.h
@@ -44,6 +44,7 @@
* Items management
*/
EGwItem *e_gw_item_new_from_cal_component (const char *container, ECalBackendGroupwise *cbgw, ECalComponent *comp);
+EGwItem *e_gw_item_new_for_delegate_from_cal (ECalBackendGroupwise *cbgw, ECalComponent *comp);
ECalComponent *e_gw_item_to_cal_component (EGwItem *item, ECalBackendGroupwise *cbgw);
void e_gw_item_set_changes (EGwItem *item, EGwItem *cached_item);
--- camel/providers/groupwise/camel-groupwise-folder.c
+++ camel/providers/groupwise/camel-groupwise-folder.c
@@ -1866,7 +1866,7 @@
CamelGroupwiseStore *gw_store= CAMEL_GROUPWISE_STORE(folder->parent_store);
CamelGroupwiseStorePrivate *priv = gw_store->priv;
CamelOfflineStore *offline = (CamelOfflineStore *) folder->parent_store;
- EGwConnectionStatus status;
+ EGwConnectionStatus status = E_GW_CONNECTION_STATUS_OK;
EGwConnection *cnc;
EGwItem *item;
char *id;
--- camel/providers/imap/camel-imap-store.c
+++ camel/providers/imap/camel-imap-store.c
@@ -693,6 +693,9 @@
}
#ifdef HAVE_SSL
+ /* as soon as we send a STARTTLS command, all hope is lost of a clean QUIT if problems arise */
+ clean_quit = FALSE;
+
if (!(store->capabilities & IMAP_CAPABILITY_STARTTLS)) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("Failed to connect to IMAP server %s in secure mode: %s"),
@@ -701,9 +704,6 @@
goto exception;
}
- /* as soon as we send a STARTTLS command, all hope is lost of a clean QUIT if problems arise */
- clean_quit = FALSE;
-
response = camel_imap_command (store, NULL, ex, "STARTTLS");
if (!response) {
camel_object_unref (store->istream);
--- camel/providers/pop3/camel-pop3-store.c
+++ camel/providers/pop3/camel-pop3-store.c
@@ -215,6 +215,9 @@
}
#ifdef HAVE_SSL
+ /* as soon as we send a STLS command, all hope is lost of a clean QUIT if problems arise */
+ clean_quit = FALSE;
+
if (!(store->engine->capa & CAMEL_POP3_CAP_STLS)) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("Failed to connect to POP server %s in secure mode: %s"),
@@ -222,9 +225,6 @@
goto stls_exception;
}
- /* as soon as we send a STLS command, all hope is lost of a clean QUIT if problems arise */
- clean_quit = FALSE;
-
pc = camel_pop3_engine_command_new (store->engine, 0, NULL, NULL, "STLS\r\n");
while (camel_pop3_engine_iterate (store->engine, NULL) > 0)
;
--- libdb/dbm/dbm.c
+++ libdb/dbm/dbm.c
@@ -128,7 +128,8 @@
if (__cur_db == NULL) {
__db_no_open();
- item.dptr = 0;
+ item.dptr = NULL;
+ item.dsize = 0;
return (item);
}
return (dbm_fetch(__cur_db, key));
@@ -141,7 +142,8 @@
if (__cur_db == NULL) {
__db_no_open();
- item.dptr = 0;
+ item.dptr = NULL;
+ item.dsize = 0;
return (item);
}
return (dbm_firstkey(__cur_db));
@@ -157,7 +159,8 @@
if (__cur_db == NULL) {
__db_no_open();
- item.dptr = 0;
+ item.dptr = NULL;
+ item.dsize = 0;
return (item);
}
return (dbm_nextkey(__cur_db));

65
email-appears-twice.patch Normal file
View File

@ -0,0 +1,65 @@
Index: camel/providers/groupwise/camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.135
diff -u -p -r1.135 camel-groupwise-folder.c
--- camel/providers/groupwise/camel-groupwise-folder.c 6 Jun 2006 20:07:47 -0000 1.135
+++ camel/providers/groupwise/camel-groupwise-folder.c 9 Jun 2006 09:41:02 -0000
@@ -374,9 +374,17 @@ groupwise_msg_set_recipient_list (CamelM
}
if (org) {
+ if (org->display_name && org->display_name[0] && org->email != NULL && org->email[0] != '\0') {
+ int i;
+ for (i = 0; org->display_name[i] != '<' &&
+ org->display_name[i] != '\0';
+ i++);
+
+ org->display_name[i] = '\0';
+ }
if (org->display_name && org->email)
- ha=camel_header_address_new_name(org->display_name,org->email);
- else
+ ha=camel_header_address_new_name(org->display_name, org->email);
+ else if (org->display_name)
ha=camel_header_address_new_group(org->display_name);
subs_email=camel_header_address_list_encode(ha);
@@ -1225,9 +1233,17 @@ gw_update_cache (CamelFolder *folder, GL
org = e_gw_item_get_organizer (item);
if (org) {
GString *str;
+ int i;
str = g_string_new ("");
- if (org->display_name && org->display_name[0])
+ if (org->display_name && org->display_name[0] && org->email != NULL && org->email[0] != '\0') {
+ for (i = 0; org->display_name[i] != '<' &&
+ org->display_name[i] != '\0';
+ i++);
+
+ org->display_name[i] = '\0';
str = g_string_append (str, org->display_name);
+ str = g_string_append (str, " ");
+ }
if (org->email && org->email[0]) {
g_string_append (str, "<");
str = g_string_append (str, org->email);
@@ -1428,9 +1444,17 @@ gw_update_summary ( CamelFolder *folder,
org = e_gw_item_get_organizer (item);
if (org) {
GString *str;
+ int i;
str = g_string_new ("");
- if (org->display_name && org->display_name[0])
+ if (org->display_name && org->display_name[0] && org->email != NULL && org->email[0] != '\0') {
+ for (i = 0; org->display_name[i] != '<' &&
+ org->display_name[i] != '\0';
+ i++);
+
+ org->display_name[i] = '\0';
str = g_string_append (str, org->display_name);
+ str = g_string_append (str, " ");
+ }
if (org->email && org->email[0]) {
g_string_append (str, "<");
str = g_string_append (str, org->email);

16
empty-trash-notify.patch Normal file
View File

@ -0,0 +1,16 @@
Index: camel/providers/groupwise/camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.132
diff -u -p -r1.132 camel-groupwise-folder.c
--- camel/providers/groupwise/camel-groupwise-folder.c 28 Apr 2006 13:21:23 -0000 1.132
+++ camel/providers/groupwise/camel-groupwise-folder.c 3 May 2006 05:21:39 -0000
@@ -963,6 +963,8 @@ groupwise_refresh_folder(CamelFolder *fo
if (status != E_GW_CONNECTION_STATUS_OK) {
if (status ==E_GW_CONNECTION_STATUS_OTHER) {
g_warning ("Trash full....Empty Trash!!!!\n");
+ camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Trash Folder Full. Please Empty."));
+ goto end1;
/*groupwise_expunge (folder, ex);*/
} else
camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Authentication failed"));

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0b02f78306b791233e2aa160c523484602133862a5668138f11db1881b81a84d
size 6972055

View File

@ -0,0 +1,11 @@
--- configure.in
+++ configure.in
@@ -295,6 +295,8 @@
],ac_cv_lkstrftime=no,ac_cv_lkstrftime=no])
AC_MSG_RESULT($ac_cv_lkstrftime)
+PKG_PROG_PKG_CONFIG
+
dnl ********************************************************************************
dnl security extension support (SSL and S/MIME)
dnl

View File

@ -0,0 +1,51 @@
--- docs/reference/addressbook/libebook/libebook.types
+++ docs/reference/addressbook/libebook/libebook.types
@@ -1,4 +1,10 @@
#include <glib-object.h>
+#include <libebook/e-book.h>
+#include <libebook/e-book-view.h>
+#include <libebook/e-book-listener.h>
+#include <libebook/e-book-view-listener.h>
+#include <libebook/e-contact.h>
+#include <libebook/e-vcard.h>
e_book_listener_get_type
e_book_view_listener_get_type
e_book_view_get_type
--- docs/reference/calendar/libecal/libecal.types
+++ docs/reference/calendar/libecal/libecal.types
@@ -1,4 +1,9 @@
#include <glib-object.h>
+#include <libecal/e-cal.h>
+#include <libecal/e-cal-component.h>
+#include <libecal/e-cal-listener.h>
+#include <libecal/e-cal-view.h>
+#include <libecal/e-cal-view-listener.h>
e_cal_get_type
e_cal_view_get_type
e_cal_listener_get_type
--- docs/reference/calendar/libedata-cal/libedata-cal.types
+++ docs/reference/calendar/libedata-cal/libedata-cal.types
@@ -1,4 +1,12 @@
#include <glib-object.h>
+#include <libedata-cal/e-cal-backend-cache.h>
+#include <libedata-cal/e-cal-backend-factory.h>
+#include <libedata-cal/e-cal-backend-sexp.h>
+#include <libedata-cal/e-cal-backend-sync.h>
+#include <libedata-cal/e-cal-backend.h>
+#include <libedata-cal/e-data-cal-factory.h>
+#include <libedata-cal/e-data-cal-view.h>
+#include <libedata-cal/e-data-cal.h>
e_cal_backend_cache_get_type
e_cal_backend_factory_get_type
e_cal_backend_sexp_get_type
--- libedataserverui/e-name-selector-dialog.c
+++ libedataserverui/e-name-selector-dialog.c
@@ -30,6 +30,8 @@
#include <gtk/gtklabel.h>
#include <gtk/gtkscrolledwindow.h>
#include <gtk/gtkstock.h>
+#include <gtk/gtkcellrenderertext.h>
+#include <glib/gstrfuncs.h>
#include <glib/gi18n-lib.h>
#include <libedataserverui/e-source-option-menu.h>
#include <libedataserverui/e-destination-store.h>

View File

@ -0,0 +1,21 @@
--- addressbook/backends/file/e-book-backend-file.c
+++ addressbook/backends/file/e-book-backend-file.c
@@ -523,7 +523,7 @@
EDataBookView *book_view = data;
FileBackendSearchClosure *closure = get_closure (book_view);
if (!closure)
- return;
+ return NULL;
EBookBackendFile *bf = closure->bf;
const char *query;
DB *db;
--- libedataserverui/e-passwords.c
+++ libedataserverui/e-passwords.c
@@ -270,6 +270,7 @@
}
#if WITH_GNOME_KEYRING
+static void
ep_forget_passwords(EPassMsg *msg)
{
GnomeKeyringAttributeList *attributes;

View File

@ -0,0 +1,815 @@
-------------------------------------------------------------------
Fri Dec 29 17:43:36 CET 2006 - sbrabec@suse.cz
- Use better libexecdir path.
- File list cleanup.
- Splitted evolution-data-server-doc from
evolution-data-server-devel.
-------------------------------------------------------------------
Fri Dec 29 12:18:27 GMT 2006 - james@usr-local-bin.org
- Re-enable custom configure options.
-------------------------------------------------------------------
Wed Dec 13 17:01:40 CST 2006 - maw@suse.de
- Move to /usr
- Do some specfile cleanup.
-------------------------------------------------------------------
Tue Nov 21 16:20:49 CET 2006 - sbrabec@suse.cz
- Do not explicitly require mDNSResponder-lib blocking avahi compat
package.
-------------------------------------------------------------------
Mon Nov 20 12:54:33 CET 2006 - vvaradhan@novell.com
- update to version 1.8.2
- translation updates
- Bug fixes: (bgo)
330157, 369259, 369168, 350576,350885, 358010, 350880, 347811,
312348, 328836, 365000, 353924
- Bug fixes: (bnc)
268412, 208395, 208318, 207960
- Removed upstreamed bgo-369168-buffer-overrun.patch
-------------------------------------------------------------------
Mon Nov 6 12:28:46 CEST 2006 - kharish@novell.com
- Fix for (bnc) Bug 217142. Patch submitted by Hans Petter Jansson.
-------------------------------------------------------------------
Fri Oct 27 17:27:44 CEST 2006 - vvaradhan@novell.com
- Fixes (bnc)
Bug 208519 - evolution groupwise crashes on start
- Commented "bnc-164323-random-mark-unread.patch" (patch46)
as it is a "to-be" reverted patch.
-------------------------------------------------------------------
Wed Oct 18 11:49:40 CEST 2006 - schwab@suse.de
- Fix missing declaration.
-------------------------------------------------------------------
Mon Oct 2 23:17:53 CEST 2006 - jhargadon@suse.de
- update to version 1.8.1
- translation updates
- Bug fixes:
350907, 350617, 347811, 357666, 351330, 352596, 352872, 356051
-------------------------------------------------------------------
Sat Sep 30 07:49:31 CEST 2006 - aj@suse.de
- Do not require libgnomeui-devel for building.
-------------------------------------------------------------------
Tue Sep 12 11:42:47 CEST 2006 - ro@suse.de
- fix two cases of missing return values (retval.patch)
-------------------------------------------------------------------
Mon Sep 4 19:56:41 CEST 2006 - aj@suse.de
- update to 1.8.0:
* updated translation
* bugfixes
-------------------------------------------------------------------
Sat Aug 19 01:34:30 CEST 2006 - jhargadon@suse.de
- update to version 1.7.91
- Add filters to Groupwise SOAP calls so that each component
fetches items of its own type and none other
- Memory fixes in Addressbook
- Updated Translations
- Support for GW Reminder Notes
- Split cache for less memory, better performance
- Support for security-classifications in GW send options
- Support for default alarms in GW
- Support for Gadu Gadu IM in Contact Entries
- Memory reduction and Performance improvements in Contacts
- Removed patches that were incorporated upstream.
------------------------------------------------------------------
Thu Jul 20 05:52:31 CEST 2006 - kharish@novell.com
- Patch to add alarms to GW meetings by default based on customer
preference. Fixes bnc 167330.
------------------------------------------------------------------
Wed Jul 19 04:06:42 CEST 2006 - kharish@novell.com
- Patch to correctly handle calendar attachment filenames that do
not require special characters handling. They were being parsed
incorrectly and ignored by clients.
-------------------------------------------------------------------
Wed Jul 5 10:20:25 CEST 2006 - aj@suse.de
- Handle datarootdir in pkgconfig files.
------------------------------------------------------------------
Wed Jul 5 08:06:11 CEST 2006 - psankar@novell.com
- Enables forwarding of mails
Fixes bnc 167517
------------------------------------------------------------------
Tue Jul 4 13:36:29 CEST 2006 - vvaradhan@novell.com
- Fixes a build break - Added e-d-s-configure-break-fix.patch
------------------------------------------------------------------
Mon Jun 26 11:19:11 CEST 2006 - kharish@novell.com
- Fixes (bnc)
187529 - Sequence cache population requests for better
performance.
------------------------------------------------------------------
Fri Jun 16 08:16:15 CEST 2006 - vvaradhan@novell.com
- Fixes (bnc)
183819 - Evolution crashed while closing in offline mode
182310 - Evolution crashed when going offline
183816 - Evolution crashed when swtiched from online to offline...
------------------------------------------------------------------
Thu Jun 15 13:39:38 CEST 2006 - psankar@novell.com
- Added the fix to display the email address
only once for the gw accounts
Fixes bnc #168013, #179622
------------------------------------------------------------------
Fri Jun 9 14:51:30 CEST 2006 - sdevashish@novell.com
- Added bnc-170052-eds-crash.patch.
-------------------------------------------------------------------
Thu Jun 8 17:34:59 CEST 2006 - fejj@suse.de
- Added bnc-179350.patch which fixes a critical deadlock bug in the
GroupWise provider.
-------------------------------------------------------------------
Thu Jun 8 11:02:30 CEST 2006 - sragavan@novell.com
- Updated some translation fixes
- Committed patch for bug 181906, which solves a exchange crash.
-------------------------------------------------------------------
Fri Jun 2 12:48:15 CEST 2006 - sragavan@novell.com
- Updated German Translations.
-------------------------------------------------------------------
Wed May 31 23:23:11 CEST 2006 - fejj@suse.de
- Added bnc-176277-2.patch which fixes a deadlock condition
-------------------------------------------------------------------
Mon May 29 13:23:30 CEST 2006 - vvaradhan@novell.com
- Fixes (bnc)
174255 - Honour desktop proxy setting.
-------------------------------------------------------------------
Mon May 29 07:53:12 CEST 2006 - sragavan@novell.com
- Added reworked patch for bug 176615 as per fejj's comment.
-------------------------------------------------------------------
Thu May 25 09:22:49 CEST 2006 - sragavan@novell.com
- Fixes (bnc)
176615 - Added a new camel stream vfs for saving to remote shares.
-------------------------------------------------------------------
Tue May 23 05:58:46 CEST 2006 - sragavan@novell.com
- Updated translations (Srini)
-------------------------------------------------------------------
Mon May 22 19:53:30 CEST 2006 - fejj@suse.de
- Added bnc-177394.patch to fix a crasher when an IMAP server replies
that the size of a literal is negative.
-------------------------------------------------------------------
Fri May 19 17:43:26 CEST 2006 - fejj@suse.de
- Added imap-locking.patch which fixes bug #171502 and bug #176277
which are both deadlock conditions in the imap code.
-------------------------------------------------------------------
Thu May 18 11:23:56 CEST 2006 - sragavan@novell.com
- gw-trash-fix.diff: Show trash folder contents to user. (Sankar)
-------------------------------------------------------------------
Tue May 16 17:15:24 CEST 2006 - fejj@suse.de
- Added bnc-173454.patch: Fixes double-base64 encoding of non-7bit MIME
part data.
-------------------------------------------------------------------
Thu May 11 12:36:53 CEST 2006 - sragavan@novell.com
- Fixes (bnc)
169997 - Fixes a issue where the groupwise server crashes due to infinite loop.
-------------------------------------------------------------------
Fri May 5 06:13:11 CEST 2006 - sragavan@novell.com
- Added empty-trash-notify.patch: Fixes missing trash folder.
- Fixes (bnc)
169034 - Fixed the failure to download exchange public folder.
- Removed gw-force-use-imap.patch as it was decided to default to soap.
-------------------------------------------------------------------
Tue May 2 21:40:52 CEST 2006 - fejj@suse.de
- Added bnc-167638.patch: Fixes long shutdown times due to the imap/gw providers trying to sync data at exit time.
-------------------------------------------------------------------
Mon May 1 23:24:29 CEST 2006 - fejj@suse.de
- Added bgo-315976-INBOX-not-shown-when-override-namespace.patch
-------------------------------------------------------------------
Tue Apr 25 17:15:39 CEST 2006 - sragavan@novell.com
- Fixes (bnc)
169228 - Retract GNOME Keyring Integration from the build (Srini)
-------------------------------------------------------------------
Mon Apr 24 19:05:15 CEST 2006 - fejj@suse.de
- bgo-321797: Fix SSL/TLS options to not be able to fallback to
cleartext connections on failure to connect via encrypted channels.
--------------------------------------------------------------------
Mon Apr 24 11:21:38 CEST 2006 - sragavan@novell.com
- bulk-delete.patch: Uses new SOAP API for removing bulk items (Sankar)
- imap-perf.patch: Get onloy the used headers and not all (Sankar)
- nameselectorlist-keychange.diff: Change the keybinding for list (Srini)
- imap4-removal.diff: Remove IMAP4 from the build (harish)
--------------------------------------------------------------------
Fri Apr 21 12:44:25 CEST 2006 - sragavan@novell.com
- Fixes (bgo)
310433 - Should not allow renaming standard folders. - Sushma
329371 - Use name in email format doesnot work.
- Fixes (bnc)
164323 - Updated the previous patch for randomly marking messages unread.
--------------------------------------------------------------------
Fri Apr 21 07:31:29 CEST 2006 - sragavan@novell.com
- Fixes (bnc)
159934 - Fix for eds CPU high usage (Devashish)
165714 - Send item id while delegating multiple events. (Harish)
- eds-kerb-check.diff - Ensure checks for expiry take effect while
trying for nt domain. (Harish)
--------------------------------------------------------------------
Tue Apr 20 11:44:24 CEST 2006 - psankar@novell.com
- Fixes (bnc)
167566 - Crash on disable account - Sankar
167640 - Syntax error missing space - Partha
-------------------------------------------------------------------
Tue Apr 18 10:44:24 CEST 2006 - sragavan@novell.com
- Fixes (bnc)
1643232 - Randomly marking read messages as unread - Sankar
- Fix to make groupwise use IMAP as default for mails (Harish)
-------------------------------------------------------------------
Sun Apr 16 20:35:22 CEST 2006 - vvaradhan@novell.com
- Fixes (bnc)
152070 evolution-data-server-1.6 crash - Devashish
160915 Evolution crashed when clicked on 'Goto' date in
calendar view - Chenthill
163982 While saving appointment system hanged with 126
error popups - Chenthill
164140 EDS Crashed when starting 'evolution --offline' - Devashish
164367 GW: Attachment to appointments/meetings throws 'Unknown Error'
- Chenthill
164676 evolution-data-server stuck in tight loop - Devashish
-------------------------------------------------------------------
Fri Apr 7 08:41:09 CEST 2006 - vvaradhan@novell.com
- Fixes (bnc)
163664 E-D-S crashes if a contact has invalid UTF-8 - Federico
-------------------------------------------------------------------
Wed Apr 5 14:15:31 CEST 2006 - vvaradhan@novell.com
- Fixes (bnc)
161290 EDS crashed while forwarding a mail - Devashish
162005 evolution-data-server crashed when deleting a recurring
appointment in my groupwise calendar - Chenthill
- Disable beagle-meta-summary patch
-------------------------------------------------------------------
Tue Apr 4 10:27:29 CEST 2006 - vvaradhan@novell.com
- Updated bnc-158107-no-notification-canceled-mtgs.patch - Fixes
sending user specified comments during cancellation of meetings.
- Fixes (bnc)
161000 Junk mail features in evolution cannot be shut off. - Sankar
158617 Evolution crashed after few minutes after marking few
mails junk - Sankar - (single patch)
- GW Proxy optimizations - Do not do GetQM while refreshing on proxy.
-------------------------------------------------------------------
Mon Apr 3 15:14:45 CEST 2006 - vvaradhan@novell.com
- Fixes (bnc)
160889 Evolution shows summary folders in tree
-------------------------------------------------------------------
Tue Mar 28 11:40:48 CEST 2006 - ro@suse.de
- replace mDNSResponder by mDNSResponder-devel in BuildReq
-------------------------------------------------------------------
Mon Mar 27 18:57:05 CEST 2006 - vvaradhan@novell.com
- Fixes (bnc)
160147 Can't delete calendar accounts once they are created
158107 No notification of cancelled meetings
-------------------------------------------------------------------
Mon Mar 27 17:00:10 CEST 2006 - vvaradhan@novell.com
- Fixes (bgo)
334416 Evolution crashed while traversing mails
(crash-while-browsing-through-mails.patch)
-------------------------------------------------------------------
Thu Mar 23 14:54:10 CET 2006 - vvaradhan@novell.com
- Fixes (bgo)
334807 EDS Crasher
323275 EDS Crash @ Startup Of Evolution
334000 Unexpected dialog while creating appointment/meeting
272307 groupwise: mail headers are all screwed up with mailing lists
- Fixes (bnc)
152070 evolution-data-server-1.6 crash (collection of random crashes)
158112 Send/Receive Dialog can take several minutes to go away
- GW specific SOAP mailer improvements
-------------------------------------------------------------------
Mon Mar 20 14:34:06 CET 2006 - vvaradhan@novell.com
- Fixes (bnc)
138047 Evolution: Message Inconsistency with Passphrase/Password
153522 Evolution doesn't update message status if two clients
are running against the same account
152062 Evolution won't show an attachment
158093 Evolution: Groupwise "Sent Items" folder should have a
"To:" column instead of a "From:" column
-------------------------------------------------------------------
Wed Mar 15 22:02:09 CET 2006 - vvaradhan@novell.com
- Fixes (bnc)
157323 Messages deleted from Groupwise folder remain in Evo.
156559 Evolution won't show me 827 messages
153522 Evolution doesn't update message status if two clients
are running against the same account
-------------------------------------------------------------------
Mon Mar 13 16:04:51 CET 2006 - vvaradhan@novell.com
- Fixes (bnc)
137357 Configur groupwise account 'You must be working in
online ...' message displayed
152355 Mails in mailbox was not displayed unless .evolution
folder contents where deleted
156584 Evolution won't shut down
156823 Newly configured groupwise accounts don't work
115042 Evolution crashes when accessing my cabinet folder
- Feature - Meta summary support for beagle
- Keyring support enabled
- Update to version 1.6.0 - Fixes (bgo)
329244 Crash when editing To/CC/BCC fields of a mail
331870 Crashes on addition of two or more email addresses of
same person in name-selector-dialog
327592 [PATCH] Evolution crashes on exit
332726 Crash when saving event with recurrence rule
273060 Recu Meeting: updates accepted for one instance gets deleted
331633 Evolution crashes upon starting up on Solaris
329669 Recurring events go crazy
260346 Evolution is not storing the email ids with the respective
fields for exchange
-------------------------------------------------------------------
Mon Mar 6 14:22:50 CET 2006 - vvaradhan@novell.com
- Fixes #155362 - No symbol table information in the generated
debuginfo packages.
Remove '-g0' from CFLAGS in evolution-data-server.spec
-------------------------------------------------------------------
Mon Feb 27 16:25:41 CET 2006 - vvaradhan@novell.com
- Update to version 1.5.92
- Fixes: (in bgo)
327413: Crash when evolution shuts down
329306: Crash when entering password multiple times
331680: Crashes on opening New message compose window
323384: Email ids from bugzilla mails gets added with a "|"
260889: Evolution is crashing when clicked clear botton in
search bar in contacts view
331127: weather calendar crashes e-d-s, use g_free instead
of g_object_unref
326428: EDS crashed after changing 'Anniversary' field in
contacts UI
301116: libedataserverui needs to specify the translation
domain explicitly
- Fixes: (in bnc)
150427: evo 2.6 - hang on calendar
- Add a patch to integrate with gnome-keyring
-------------------------------------------------------------------
Sun Feb 12 15:20:12 CET 2006 - aj@suse.de
- Reduce BuildRequires.
-------------------------------------------------------------------
Fri Feb 10 12:28:03 CET 2006 - vvaradhan@novell.com
- Update to version 1.5.90
-------------------------------------------------------------------
Tue Jan 31 12:25:52 CET 2006 - ro@suse.de
- reduced BuildRequires
-------------------------------------------------------------------
Wed Jan 25 21:31:25 CET 2006 - mls@suse.de
- converted neededforbuild to BuildRequires
-------------------------------------------------------------------
Mon Dec 12 13:05:09 CET 2005 - sbrabec@suse.cz
- Fixed devel dependencies for older products.
-------------------------------------------------------------------
Tue Dec 6 16:35:09 CET 2005 - sbrabec@suse.cz
- Degrade to version 1.4.1.1.
http://bugzilla.gnome.org/show_bug.cgi?id=323106
- Fixed devel dependencies.
-------------------------------------------------------------------
Thu Dec 1 18:11:03 CET 2005 - gekker@suse.de
- Update to version 1.4.2.1
-------------------------------------------------------------------
Wed Nov 2 22:45:48 CET 2005 - dmueller@suse.de
- don't build as root
-------------------------------------------------------------------
Thu Oct 13 17:47:02 CEST 2005 - gekker@suse.de
- Update to version 1.4.1
- Fix more warnings
-------------------------------------------------------------------
Mon Sep 26 01:33:03 CEST 2005 - ro@suse.de
- added LDAP_DEPRECATED to CFLAGS
-------------------------------------------------------------------
Fri Sep 9 16:23:59 CEST 2005 - aj@suse.de
- Change last patch.
-------------------------------------------------------------------
Wed Sep 7 15:12:38 CEST 2005 - schwab@suse.de
- Fix missing declarations.
-------------------------------------------------------------------
Mon Sep 5 11:09:50 CEST 2005 - rodrigo@suse.de
- Update to version 1.4.0
- Removed upstreamed patches
-------------------------------------------------------------------
Wed Aug 24 22:34:01 CEST 2005 - gekker@suse.de
- Update to version 1.3.8
- Fix brokeness inlibical
-------------------------------------------------------------------
Sat Aug 13 07:46:16 CEST 2005 - aj@suse.de
- Add lzo and lzo-devel to nfb.
-------------------------------------------------------------------
Fri Aug 12 01:13:36 CEST 2005 - gekker@suse.de
- Update to version 1.3.7
-------------------------------------------------------------------
Mon Aug 1 18:32:44 CEST 2005 - gekker@suse.de
- Update to version 1.3.6.1
-------------------------------------------------------------------
Fri Jul 29 15:13:19 CEST 2005 - sbrabec@suse.cz
- Require mozilla-nss (#98002).
-------------------------------------------------------------------
Wed Jul 27 00:59:35 CEST 2005 - ro@suse.de
- fix typo in specfile
-------------------------------------------------------------------
Mon Jul 25 23:43:28 CEST 2005 - gekker@suse.de
- Update to version 1.3.5
-------------------------------------------------------------------
Thu Jul 14 14:09:11 CEST 2005 - schwab@suse.de
- Fix missing declarations again.
-------------------------------------------------------------------
Fri Jul 1 21:06:07 CEST 2005 - gekker@suse.de
- Update to version 1.3.3
- Remove upstreamed patches
- Fix compiler warnings
-------------------------------------------------------------------
Tue Jun 21 15:04:09 CEST 2005 - schwab@suse.de
- Fix missing declarations.
-------------------------------------------------------------------
Fri Jun 10 18:17:57 CEST 2005 - sbrabec@suse.cz
- Build with system nspr and nss libraries.
- Build with Kerberos 5 support.
- Build documentation.
-------------------------------------------------------------------
Fri Jun 10 15:24:33 CEST 2005 - sbrabec@suse.cz
- Build with mozilla-nss.
-------------------------------------------------------------------
Wed Jun 1 17:54:58 CEST 2005 - sbrabec@suse.cz
- Fixed devel requirements.
-------------------------------------------------------------------
Thu May 19 01:52:18 CEST 2005 - ro@suse.de
- fix build with current pkgconfig
-------------------------------------------------------------------
Fri Apr 29 15:09:42 CEST 2005 - sbrabec@suse.cz
- Yet another mail crasher fix (#66996).
http://bugzilla.gnome.org/show_bug.cgi?id=273945
-------------------------------------------------------------------
Thu Apr 14 15:19:20 CEST 2005 - sbrabec@suse.cz
- Fixed serious GCC 4 warnings.
-------------------------------------------------------------------
Sat Mar 19 19:08:26 CET 2005 - clahey@suse.de
- Fixes 72916.
-------------------------------------------------------------------
Fri Mar 18 17:10:37 CET 2005 - gekker@suse.de
- Fix x-evolution-header (x73401).
-------------------------------------------------------------------
Wed Mar 16 13:52:04 CET 2005 - gekker@suse.de
- Update to version 1.2.1
- Add 64bit-warn.patch
-------------------------------------------------------------------
Tue Mar 8 23:04:46 CET 2005 - gekker@suse.de
- Update to version 1.2.0 (GNOME 2.10)
- remove upstreamed dest.patch
-------------------------------------------------------------------
Wed Mar 2 19:50:38 CET 2005 - gekker@suse.de
- add dest.patch
-------------------------------------------------------------------
Wed Mar 2 17:19:19 CET 2005 - gekker@suse.de
- update to version 1.1.6
-------------------------------------------------------------------
Sun Feb 27 23:44:53 CET 2005 - ro@suse.de
- fix build on lib64
-------------------------------------------------------------------
Fri Feb 25 21:53:46 CET 2005 - gekker@suse.de
- fix libexecdir, so that e-d-s will actually get launched
- enable ssl support now that camel has been moved to e-d-s
-------------------------------------------------------------------
Wed Feb 9 18:27:21 CET 2005 - gekker@suse.de
- Update to version 1.1.5
- Remove upstreamed patch.
-------------------------------------------------------------------
Sat Feb 5 20:55:37 CET 2005 - gekker@suse.de
- Update to version 1.1.4.2
- Remove upsteamed patches, including security fix mentioned below.
-------------------------------------------------------------------
Mon Jan 24 16:06:58 CET 2005 - sbrabec@suse.cz
- Fixed integer overflow (arbitrary code execution with elevated
privileges) in lock helper (CAN-2005-0102, #50116).
-------------------------------------------------------------------
Mon Jan 24 15:46:44 CET 2005 - meissner@suse.de
- Fixed some gcc 4 warnings/error that show code problems.
-------------------------------------------------------------------
Fri Jan 14 22:13:56 CET 2005 - clahey@suse.de
- Update to version 1.1.3.
-------------------------------------------------------------------
Thu Jan 6 21:49:52 CET 2005 - gekker@suse.de
- Update to version 1.1.2
-------------------------------------------------------------------
Tue Dec 7 17:32:04 CET 2004 - gekker@suse.de
- Update to version 1.0.3 (Ximian 70057)
-------------------------------------------------------------------
Tue Nov 30 15:48:00 CET 2004 - ro@suse.de
- re-diffed libdb.patch
-------------------------------------------------------------------
Mon Nov 29 20:03:32 CET 2004 - gekker@suse.de
- Update to version 1.0.2
- Removed patches included in this update
-------------------------------------------------------------------
Fri Nov 12 18:05:45 CET 2004 - sbrabec@suse.cz
- Fixed libdb on x86_64 (broken local contacts in Evolution, #46845).
http://bugzilla.ximian.com/show_bug.cgi?id=67600
-------------------------------------------------------------------
Tue Nov 2 17:09:46 CET 2004 - ro@suse.de
- locale rename: no -> nb
-------------------------------------------------------------------
Thu Sep 30 21:54:35 CEST 2004 - dobey@suse.de
- Add patch to fix bug 66368 in bugzilla.ximian.com
-------------------------------------------------------------------
Thu Sep 30 00:03:07 CEST 2004 - dobey@suse.de
- Add patch to fix bug 66230 in bugzilla.ximian.com
-------------------------------------------------------------------
Fri Sep 24 19:51:40 CEST 2004 - dobey@suse.de
- Updated to version 1.0.1
- Removed evolution-data-server-0.0.99.dif which is in upstream source
-------------------------------------------------------------------
Fri Sep 17 02:17:00 CEST 2004 - ro@suse.de
- readd evolution-data-server-0.0.99.dif to fix parallel build
-------------------------------------------------------------------
Mon Sep 13 22:00:49 CEST 2004 - dobey@suse.de
- Updated to version 1.0.0
- Removed evolution-data-server-0.0.99.dif which was not changelogged,
and seems to not actually change anything
-------------------------------------------------------------------
Sat Sep 4 12:41:37 CEST 2004 - coolo@suse.de
- use %jobs (OOo is waiting on it)
-------------------------------------------------------------------
Fri Aug 27 21:53:34 CEST 2004 - dobey@suse.de
- Update to version 0.0.99
-------------------------------------------------------------------
Wed Aug 18 20:07:44 CEST 2004 - dobey@suse.de
- Fix LDAP support and remove unused configure options
-------------------------------------------------------------------
Fri Aug 13 22:43:52 CEST 2004 - dobey@suse.de
- Update to version 0.0.98
- Add dependencies to the evolution-data-server-devel package
-------------------------------------------------------------------
Thu Aug 5 21:15:31 CEST 2004 - dobey@suse.de
- Add build deps for gnutls libs from libsoup
-------------------------------------------------------------------
Tue Aug 3 17:54:52 CEST 2004 - dobey@suse.de
- Don't run any autotools when building with no patches
-------------------------------------------------------------------
Tue Aug 3 17:23:50 CEST 2004 - dobey@suse.de
- Patch is in tarball for gnome_segv2 now
- Updated to version 0.0.97
-------------------------------------------------------------------
Thu Jul 29 18:27:39 CEST 2004 - dobey@suse.de
- Add patch from CVS to detect path to gnome_segv2 better
-------------------------------------------------------------------
Wed Jul 28 20:25:32 CEST 2004 - dobey@suse.de
- Updated to version 0.0.96
-------------------------------------------------------------------
Tue Jul 13 20:31:41 CEST 2004 - clahey@suse.de
- Updated to version 0.0.95.
-------------------------------------------------------------------
Mon Jun 21 19:13:23 CEST 2004 - clahey@suse.de
- Updated to version 0.0.94.1.
-------------------------------------------------------------------
Fri Jun 4 03:52:11 CEST 2004 - mibarra@suse.de
- Updated to version 0.0.94.
-------------------------------------------------------------------
Mon May 24 16:17:53 CEST 2004 - ro@suse.de
- fix lib64 issue
-------------------------------------------------------------------
Sat May 22 03:49:56 CEST 2004 - mibarra@suse.de
- Updated to 0.0.93.
-------------------------------------------------------------------
Tue May 18 18:54:04 CEST 2004 - clahey@suse.de
- Don't install to /opt/gnome/libexec
-------------------------------------------------------------------
Tue May 18 04:32:40 CEST 2004 - clahey@suse.de
- Initial import of evolution-data-server.

721
evolution-data-server.spec Normal file
View File

@ -0,0 +1,721 @@
#
# spec file for package evolution-data-server (Version 1.8.2)
#
# Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
# package are under the same license as the package itself.
#
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
# norootforbuild
Name: evolution-data-server
BuildRequires: gcc-c++ gnome-common gnome-keyring-devel gtk-doc intltool krb5-devel libglade2-devel libgnome-devel libidl-devel libsoup-devel mDNSResponder-devel mozilla-nss-devel openldap2 openldap2-devel perl-XML-Parser python-devel sgml-skel
License: GNU General Public License (GPL)
Group: Development/Libraries/GNOME
Autoreqprov: on
Summary: Evolution Data Server
Version: 1.8.2
Release: 14
Source: ftp://ftp.gnome.org/pub/gnome/sources/evolution-data-server/1.8/%{name}-%{version}.tar.bz2
#Patch3: evolution-data-server-gcc4.patch
Patch5: evolution-data-server-configure.patch
Patch6: nss-nspr.patch
Patch7: evolution-data-server-decl.patch
Patch8: eds-warnings.patch
Patch9: evolution-fix-function-declarations.patch
# FIXME: After upgrade, use patch# - 100
#Patch108: eds-1.5.5-warnings.patch
#Patch10: keyring-integration.patch
Patch11: backend-timeout-fix.patch
Patch12: bnc-156823-newly-configured-gw-dont-work.patch
Patch13: bnc-156584-evo-wont-shutdown.patch
Patch14: beagle-meta-summary.patch
Patch15: bnc-137357-newly-configured-gw-dont-work.patch
Patch16: bnc-152355-mails-doesnt-show-gw.patch
Patch17: bnc-157323-messages-deleted-from-gw-remain-in-evo.patch
Patch18: bnc-153522-evolution-doesnt-update-message-status.patch
Patch19: bnc-158093-sent-folder-have-to-not-from.patch
Patch20: bnc-138047-password-passphrase-msg-inconsistency.patch
Patch21: bnc-153522-evo-doesnt-update-msg-status-workaround.patch
Patch22: bnc-152062-evolution-wont-show-attachment.patch
Patch23: bgo-272307-evolution-clobbers-mail-address.patch
Patch24: bgo-331146-eds-crash-at-startup.patch
Patch25: bgo-334807-eds-crasher.patch
Patch26: bgo-323275-eds-crash-at-startup.patch
Patch27: bgo-334000-unexpected-dialog-creating-appt.patch
Patch28: patch-for-random-eds-addr-crashes.patch
Patch29: camel-partha-gw-fixes.patch
Patch30: bnc-158112-send-receive-dlg-takes-time.patch
Patch31: crash-while-browsing-through-mails.patch
Patch32: bnc-158107-no-notification-canceled-mtgs.patch
Patch33: bnc-160147-cant-delete-created-calendar-accounts.patch
Patch34: bnc-161000-junk-mail-dont-work.patch
Patch35: gw-proxy-issues.patch
Patch36: bnc-161290-eds-crashed-forwarding-mail.patch
Patch37: bnc-162005-e-d-s-crash-deleting-recur-appt.patch
Patch38: bnc-163664-eds-crashes-on-invalid-utf8-contacts.patch
Patch39: bnc-160915-evolution-crash-clickng-goto-cal-view.patch
Patch40: bnc-164367-gw-attachments-appts-throw-error.patch
Patch41: bnc-163982-system-hang-with-126-error-popups.patch
Patch42: bnc-164676-eds-stuck-tight-loop.patch
Patch43: bnc-152070-eds-crash.patch
Patch44: bnc-164140-eds-crash-evolution--offline.patch
#Patch45: gw-force-use-imap.patch
Patch46: bnc-164323-random-mark-unread.patch
Patch47: 167566-camel-groupwise-summary.patch
Patch48: 167640-camel-groupwise-store.patch
Patch49: bnc-159934-eds-CPU-spikes.patch
Patch50: eds-kerb-check.diff
Patch51: bnc-165714-eds-delegate-multiple-events.diff
Patch52: bgo-310433-eds-deny-rename-stdfolders.diff
Patch53: bgo-329371-eds-fix-full-username-email-format.patch
Patch54: bnc-164323-random-mark-unread-updated.patch
Patch55: bulk-delete.patch
Patch56: imap-perf.patch
Patch57: nameselectorlist-keychange.diff
Patch58: imap4-removal.diff
Patch59: bgo-321797.patch
Patch60: bgo-315976-INBOX-not-shown-when-override-namespace.patch
Patch61: bnc-167638.patch
Patch62: empty-trash-notify.patch
Patch63: bnc-169034-eds-pub-folder-download.diff
Patch64: bnc-169997-eds-infinite-loop.diff
Patch65: bnc-173454.patch
Patch66: gw-trash-fix.diff
Patch67: imap-locking.patch
Patch68: bnc-177394.patch
Patch69: eds-updated-translations.diff
Patch70: camel-vfs-stream.diff
Patch71: bnc-174255-honour-system-proxy-settings.patch
Patch72: bnc-176277-2.patch
Patch73: german-translation-eds.diff
Patch74: bnc-181906-eds-ex-crash.diff
Patch75: eds-translations-updated.diff
Patch76: bnc-179350.patch
Patch77: bnc-170052-eds-crash.patch
Patch78: email-appears-twice.patch
Patch79: bnc-183819-evo-crashed-closing-offline.patch
Patch80: bnc-187529-calendar-cache-population.patch
Patch81: e-d-s-configure-break-fix.patch
Patch82: fwd-mail.patch
Patch83: datarootdir.diff
Patch84: cal-attachment-filename-handling.patch
Patch85: bnc-167330-default-GW-alarms.patch
Patch86: eds-compiler-warning.patch
Patch87: evolution-data-server-retval.patch
Patch88: implicit-declaration.diff
Patch89: bgo-369168-buffer-overrun.patch
# Change patch below if we move away from /opt/gnome
# It avoids a build dependency on libgnomeui to speed up bootstrap
Patch99: libgnomeui-dep.patch
Url: http://www.gnome.org
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Requires: libsoup >= 2.2.6 mozilla-nss
%description
Evolution Data Server provides a central location for your address book
and calendar in the GNOME Desktop.
%package devel
Summary: Evolution Data Server Development Files
Group: Development/Libraries/GNOME
Requires: evolution-data-server = %{?epoch:%{epoch}:}%{version}-%{release}
Requires: libsoup-devel libbonobo-devel libgnome-devel gnome-vfs2-devel libxml2-devel orbit2-devel openldap2-devel libglade2-devel
Requires: gtk2-devel gconf2-devel glib2-devel gnome-keyring-devel
%if %suse_version >= 930
Requires: krb5-devel
%endif
%if %suse_version >= 1000
Requires: libcom_err
%endif
%description devel
The Evolution Data Server development files provide the necessary
libraries, headers, and other files for developing applications which
use the Evolution Data Server for storing contact and calendar
information.
%package doc
Summary: Additional Package Documentation.
Group: Development/Libraries/GNOME
Requires: %{name} = %{version}
%description doc
Evolution Data Server provides a central location for your address book
and calendar in the GNOME Desktop.
%prep
%setup -q
#%patch3
%patch5
#%patch6
%patch7
#%patch108
%patch8
%patch9
#%patch10
#%patch11
#%patch12
#%patch13
#%patch14
#%patch15
#%patch16
#%patch17
#%patch18
#%patch19
#%patch20
#%patch21
#%patch22
#%patch23
#%patch24
#%patch25
#%patch26
#%patch27
#%patch28 -p0
#%patch29
#%patch30
#%patch31
#%patch32
#%patch33
#%patch34
#%patch35
#%patch36
#%patch37
#%patch38
%patch39
%patch40
%patch41
#%patch42
%patch43
%patch44
#%patch45
#%patch46
#%patch47
#%patch48
#%patch49
#%patch50
#%patch51
#%patch52
#%patch53
#%patch54
#%patch55
#%patch56
#%patch57
#%patch58
#%patch59
#%patch60
%patch61
#%patch62
#%patch63
#%patch64
#%patch65
#%patch66
#%patch67
#%patch68
#%patch69
#%patch70
%patch71
#%patch72
#%patch73
#%patch74
#%patch75
#%patch77
#%patch78
%patch79
#%patch80
#%patch81
#%patch82
#%patch83
%patch86
%patch87
%patch88
#%patch89
%patch99 -p1
%build
libtoolize --force --copy
intltoolize --force --copy
aclocal
autoconf
automake
autoheader
# needed for evolution-data-server-1.8.2:
export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
%configure\
--libexecdir=%{_prefix}/lib/evolution-data-server\
--with-openldap\
--with-krb5=/usr\
--enable-gnome-keyring\
--enable-gtk-doc\
--enable-ssl
make %{?jobs:-j%jobs}
%install
make DESTDIR=$RPM_BUILD_ROOT install
%find_lang evolution-data-server-1.8
rm $RPM_BUILD_ROOT%{_libdir}/*/*/*.*a
%clean
rm -rf $RPM_BUILD_ROOT
%files -f evolution-data-server-1.8.lang
%defattr(-,root,root)
%doc README COPYING ChangeLog NEWS TODO AUTHORS INSTALL
%{_datadir}/evolution-data-server-1.8
%{_datadir}/idl/evolution-data-server-1.2
%{_datadir}/pixmaps/evolution-data-server-1.8
%{_libdir}/*.so.*
%{_libdir}/bonobo/servers/*
%{_libdir}/evolution-data-server-1.2
%{_prefix}/lib/evolution-data-server
%files devel
%defattr(-, root, root)
%{_includedir}/evolution-data-server-1.8
%{_libdir}/*.so
%{_libdir}/*.*a
%{_libdir}/pkgconfig/*.pc
%files doc
%defattr(-, root, root)
%{_datadir}/gtk-doc/html/*
%changelog -n evolution-data-server
* Fri Dec 29 2006 - sbrabec@suse.cz
- Use better libexecdir path.
- File list cleanup.
- Splitted evolution-data-server-doc from
evolution-data-server-devel.
* Fri Dec 29 2006 - james@usr-local-bin.org
- Re-enable custom configure options.
* Wed Dec 13 2006 - maw@suse.de
- Move to /usr
- Do some specfile cleanup.
* Tue Nov 21 2006 - sbrabec@suse.cz
- Do not explicitly require mDNSResponder-lib blocking avahi compat
package.
* Mon Nov 20 2006 - vvaradhan@novell.com
- update to version 1.8.2
- translation updates
- Bug fixes: (bgo)
330157, 369259, 369168, 350576,350885, 358010, 350880, 347811,
312348, 328836, 365000, 353924
- Bug fixes: (bnc)
268412, 208395, 208318, 207960
- Removed upstreamed bgo-369168-buffer-overrun.patch
* Mon Nov 06 2006 - kharish@novell.com
- Fix for (bnc) Bug 217142. Patch submitted by Hans Petter Jansson.
* Fri Oct 27 2006 - vvaradhan@novell.com
- Fixes (bnc)
Bug 208519 - evolution groupwise crashes on start
- Commented "bnc-164323-random-mark-unread.patch" (patch46)
as it is a "to-be" reverted patch.
* Wed Oct 18 2006 - schwab@suse.de
- Fix missing declaration.
* Mon Oct 02 2006 - jhargadon@suse.de
- update to version 1.8.1
- translation updates
- Bug fixes:
350907, 350617, 347811, 357666, 351330, 352596, 352872, 356051
* Sat Sep 30 2006 - aj@suse.de
- Do not require libgnomeui-devel for building.
* Tue Sep 12 2006 - ro@suse.de
- fix two cases of missing return values (retval.patch)
* Mon Sep 04 2006 - aj@suse.de
- update to 1.8.0:
* updated translation
* bugfixes
* Sat Aug 19 2006 - jhargadon@suse.de
- update to version 1.7.91
- Add filters to Groupwise SOAP calls so that each component
fetches items of its own type and none other
- Memory fixes in Addressbook
- Updated Translations
- Support for GW Reminder Notes
- Split cache for less memory, better performance
- Support for security-classifications in GW send options
- Support for default alarms in GW
- Support for Gadu Gadu IM in Contact Entries
- Memory reduction and Performance improvements in Contacts
- Removed patches that were incorporated upstream.
* Thu Jul 20 2006 - kharish@novell.com
- Patch to add alarms to GW meetings by default based on customer
preference. Fixes bnc 167330.
* Wed Jul 19 2006 - kharish@novell.com
- Patch to correctly handle calendar attachment filenames that do
not require special characters handling. They were being parsed
incorrectly and ignored by clients.
* Wed Jul 05 2006 - aj@suse.de
- Handle datarootdir in pkgconfig files.
* Wed Jul 05 2006 - psankar@novell.com
- Enables forwarding of mails
Fixes bnc 167517
* Tue Jul 04 2006 - vvaradhan@novell.com
- Fixes a build break - Added e-d-s-configure-break-fix.patch
* Mon Jun 26 2006 - kharish@novell.com
- Fixes (bnc)
187529 - Sequence cache population requests for better
performance.
* Fri Jun 16 2006 - vvaradhan@novell.com
- Fixes (bnc)
183819 - Evolution crashed while closing in offline mode
182310 - Evolution crashed when going offline
183816 - Evolution crashed when swtiched from online to offline...
* Thu Jun 15 2006 - psankar@novell.com
- Added the fix to display the email address
only once for the gw accounts
Fixes bnc #168013, #179622
* Fri Jun 09 2006 - sdevashish@novell.com
- Added bnc-170052-eds-crash.patch.
* Thu Jun 08 2006 - fejj@suse.de
- Added bnc-179350.patch which fixes a critical deadlock bug in the
GroupWise provider.
* Thu Jun 08 2006 - sragavan@novell.com
- Updated some translation fixes
- Committed patch for bug 181906, which solves a exchange crash.
* Fri Jun 02 2006 - sragavan@novell.com
- Updated German Translations.
* Wed May 31 2006 - fejj@suse.de
- Added bnc-176277-2.patch which fixes a deadlock condition
* Mon May 29 2006 - vvaradhan@novell.com
- Fixes (bnc)
174255 - Honour desktop proxy setting.
* Mon May 29 2006 - sragavan@novell.com
- Added reworked patch for bug 176615 as per fejj's comment.
* Thu May 25 2006 - sragavan@novell.com
- Fixes (bnc)
176615 - Added a new camel stream vfs for saving to remote shares.
* Tue May 23 2006 - sragavan@novell.com
- Updated translations (Srini)
* Mon May 22 2006 - fejj@suse.de
- Added bnc-177394.patch to fix a crasher when an IMAP server replies
that the size of a literal is negative.
* Fri May 19 2006 - fejj@suse.de
- Added imap-locking.patch which fixes bug #171502 and bug #176277
which are both deadlock conditions in the imap code.
* Thu May 18 2006 - sragavan@novell.com
- gw-trash-fix.diff: Show trash folder contents to user. (Sankar)
* Tue May 16 2006 - fejj@suse.de
- Added bnc-173454.patch: Fixes double-base64 encoding of non-7bit MIME
part data.
* Thu May 11 2006 - sragavan@novell.com
- Fixes (bnc)
169997 - Fixes a issue where the groupwise server crashes due to infinite loop.
* Fri May 05 2006 - sragavan@novell.com
- Added empty-trash-notify.patch: Fixes missing trash folder.
- Fixes (bnc)
169034 - Fixed the failure to download exchange public folder.
- Removed gw-force-use-imap.patch as it was decided to default to soap.
* Tue May 02 2006 - fejj@suse.de
- Added bnc-167638.patch: Fixes long shutdown times due to the imap/gw providers trying to sync data at exit time.
* Mon May 01 2006 - fejj@suse.de
- Added bgo-315976-INBOX-not-shown-when-override-namespace.patch
* Tue Apr 25 2006 - sragavan@novell.com
- Fixes (bnc)
169228 - Retract GNOME Keyring Integration from the build (Srini)
* Mon Apr 24 2006 - fejj@suse.de
- bgo-321797: Fix SSL/TLS options to not be able to fallback to
cleartext connections on failure to connect via encrypted channels.
* Mon Apr 24 2006 - sragavan@novell.com
- bulk-delete.patch: Uses new SOAP API for removing bulk items (Sankar)
- imap-perf.patch: Get onloy the used headers and not all (Sankar)
- nameselectorlist-keychange.diff: Change the keybinding for list (Srini)
- imap4-removal.diff: Remove IMAP4 from the build (harish)
* Fri Apr 21 2006 - sragavan@novell.com
- Fixes (bgo)
310433 - Should not allow renaming standard folders. - Sushma
329371 - Use name in email format doesnot work.
- Fixes (bnc)
164323 - Updated the previous patch for randomly marking messages unread.
* Fri Apr 21 2006 - sragavan@novell.com
- Fixes (bnc)
159934 - Fix for eds CPU high usage (Devashish)
165714 - Send item id while delegating multiple events. (Harish)
- eds-kerb-check.diff - Ensure checks for expiry take effect while
trying for nt domain. (Harish)
* Thu Apr 20 2006 - psankar@novell.com
- Fixes (bnc)
167566 - Crash on disable account - Sankar
167640 - Syntax error missing space - Partha
* Tue Apr 18 2006 - sragavan@novell.com
- Fixes (bnc)
1643232 - Randomly marking read messages as unread - Sankar
- Fix to make groupwise use IMAP as default for mails (Harish)
* Sun Apr 16 2006 - vvaradhan@novell.com
- Fixes (bnc)
152070 evolution-data-server-1.6 crash - Devashish
160915 Evolution crashed when clicked on 'Goto' date in
calendar view - Chenthill
163982 While saving appointment system hanged with 126
error popups - Chenthill
164140 EDS Crashed when starting 'evolution --offline' - Devashish
164367 GW: Attachment to appointments/meetings throws 'Unknown Error'
- Chenthill
164676 evolution-data-server stuck in tight loop - Devashish
* Fri Apr 07 2006 - vvaradhan@novell.com
- Fixes (bnc)
163664 E-D-S crashes if a contact has invalid UTF-8 - Federico
* Wed Apr 05 2006 - vvaradhan@novell.com
- Fixes (bnc)
161290 EDS crashed while forwarding a mail - Devashish
162005 evolution-data-server crashed when deleting a recurring
appointment in my groupwise calendar - Chenthill
- Disable beagle-meta-summary patch
* Tue Apr 04 2006 - vvaradhan@novell.com
- Updated bnc-158107-no-notification-canceled-mtgs.patch - Fixes
sending user specified comments during cancellation of meetings.
- Fixes (bnc)
161000 Junk mail features in evolution cannot be shut off. - Sankar
158617 Evolution crashed after few minutes after marking few
mails junk - Sankar - (single patch)
- GW Proxy optimizations - Do not do GetQM while refreshing on proxy.
* Mon Apr 03 2006 - vvaradhan@novell.com
- Fixes (bnc)
160889 Evolution shows summary folders in tree
* Tue Mar 28 2006 - ro@suse.de
- replace mDNSResponder by mDNSResponder-devel in BuildReq
* Mon Mar 27 2006 - vvaradhan@novell.com
- Fixes (bnc)
160147 Can't delete calendar accounts once they are created
158107 No notification of cancelled meetings
* Mon Mar 27 2006 - vvaradhan@novell.com
- Fixes (bgo)
334416 Evolution crashed while traversing mails
(crash-while-browsing-through-mails.patch)
* Thu Mar 23 2006 - vvaradhan@novell.com
- Fixes (bgo)
334807 EDS Crasher
323275 EDS Crash @ Startup Of Evolution
334000 Unexpected dialog while creating appointment/meeting
272307 groupwise: mail headers are all screwed up with mailing lists
- Fixes (bnc)
152070 evolution-data-server-1.6 crash (collection of random crashes)
158112 Send/Receive Dialog can take several minutes to go away
- GW specific SOAP mailer improvements
* Mon Mar 20 2006 - vvaradhan@novell.com
- Fixes (bnc)
138047 Evolution: Message Inconsistency with Passphrase/Password
153522 Evolution doesn't update message status if two clients
are running against the same account
152062 Evolution won't show an attachment
158093 Evolution: Groupwise "Sent Items" folder should have a
"To:" column instead of a "From:" column
* Wed Mar 15 2006 - vvaradhan@novell.com
- Fixes (bnc)
157323 Messages deleted from Groupwise folder remain in Evo.
156559 Evolution won't show me 827 messages
153522 Evolution doesn't update message status if two clients
are running against the same account
* Mon Mar 13 2006 - vvaradhan@novell.com
- Fixes (bnc)
137357 Configur groupwise account 'You must be working in
online ...' message displayed
152355 Mails in mailbox was not displayed unless .evolution
folder contents where deleted
156584 Evolution won't shut down
156823 Newly configured groupwise accounts don't work
115042 Evolution crashes when accessing my cabinet folder
- Feature - Meta summary support for beagle
- Keyring support enabled
- Update to version 1.6.0 - Fixes (bgo)
329244 Crash when editing To/CC/BCC fields of a mail
331870 Crashes on addition of two or more email addresses of
same person in name-selector-dialog
327592 [PATCH] Evolution crashes on exit
332726 Crash when saving event with recurrence rule
273060 Recu Meeting: updates accepted for one instance gets deleted
331633 Evolution crashes upon starting up on Solaris
329669 Recurring events go crazy
260346 Evolution is not storing the email ids with the respective
fields for exchange
* Mon Mar 06 2006 - vvaradhan@novell.com
- Fixes #155362 - No symbol table information in the generated
debuginfo packages.
Remove '-g0' from CFLAGS in evolution-data-server.spec
* Mon Feb 27 2006 - vvaradhan@novell.com
- Update to version 1.5.92
- Fixes: (in bgo)
327413: Crash when evolution shuts down
329306: Crash when entering password multiple times
331680: Crashes on opening New message compose window
323384: Email ids from bugzilla mails gets added with a "|"
260889: Evolution is crashing when clicked clear botton in
search bar in contacts view
331127: weather calendar crashes e-d-s, use g_free instead
of g_object_unref
326428: EDS crashed after changing 'Anniversary' field in
contacts UI
301116: libedataserverui needs to specify the translation
domain explicitly
- Fixes: (in bnc)
150427: evo 2.6 - hang on calendar
- Add a patch to integrate with gnome-keyring
* Sun Feb 12 2006 - aj@suse.de
- Reduce BuildRequires.
* Fri Feb 10 2006 - vvaradhan@novell.com
- Update to version 1.5.90
* Tue Jan 31 2006 - ro@suse.de
- reduced BuildRequires
* Wed Jan 25 2006 - mls@suse.de
- converted neededforbuild to BuildRequires
* Mon Dec 12 2005 - sbrabec@suse.cz
- Fixed devel dependencies for older products.
* Tue Dec 06 2005 - sbrabec@suse.cz
- Degrade to version 1.4.1.1.
http://bugzilla.gnome.org/show_bug.cgi?id=323106
- Fixed devel dependencies.
* Thu Dec 01 2005 - gekker@suse.de
- Update to version 1.4.2.1
* Wed Nov 02 2005 - dmueller@suse.de
- don't build as root
* Thu Oct 13 2005 - gekker@suse.de
- Update to version 1.4.1
- Fix more warnings
* Mon Sep 26 2005 - ro@suse.de
- added LDAP_DEPRECATED to CFLAGS
* Fri Sep 09 2005 - aj@suse.de
- Change last patch.
* Wed Sep 07 2005 - schwab@suse.de
- Fix missing declarations.
* Mon Sep 05 2005 - rodrigo@suse.de
- Update to version 1.4.0
- Removed upstreamed patches
* Wed Aug 24 2005 - gekker@suse.de
- Update to version 1.3.8
- Fix brokeness inlibical
* Sat Aug 13 2005 - aj@suse.de
- Add lzo and lzo-devel to nfb.
* Fri Aug 12 2005 - gekker@suse.de
- Update to version 1.3.7
* Mon Aug 01 2005 - gekker@suse.de
- Update to version 1.3.6.1
* Fri Jul 29 2005 - sbrabec@suse.cz
- Require mozilla-nss (#98002).
* Wed Jul 27 2005 - ro@suse.de
- fix typo in specfile
* Mon Jul 25 2005 - gekker@suse.de
- Update to version 1.3.5
* Thu Jul 14 2005 - schwab@suse.de
- Fix missing declarations again.
* Fri Jul 01 2005 - gekker@suse.de
- Update to version 1.3.3
- Remove upstreamed patches
- Fix compiler warnings
* Tue Jun 21 2005 - schwab@suse.de
- Fix missing declarations.
* Fri Jun 10 2005 - sbrabec@suse.cz
- Build with system nspr and nss libraries.
- Build with Kerberos 5 support.
- Build documentation.
* Fri Jun 10 2005 - sbrabec@suse.cz
- Build with mozilla-nss.
* Wed Jun 01 2005 - sbrabec@suse.cz
- Fixed devel requirements.
* Thu May 19 2005 - ro@suse.de
- fix build with current pkgconfig
* Fri Apr 29 2005 - sbrabec@suse.cz
- Yet another mail crasher fix (#66996).
http://bugzilla.gnome.org/show_bug.cgi?id=273945
* Thu Apr 14 2005 - sbrabec@suse.cz
- Fixed serious GCC 4 warnings.
* Sat Mar 19 2005 - clahey@suse.de
- Fixes 72916.
* Fri Mar 18 2005 - gekker@suse.de
- Fix x-evolution-header (x73401).
* Wed Mar 16 2005 - gekker@suse.de
- Update to version 1.2.1
- Add 64bit-warn.patch
* Tue Mar 08 2005 - gekker@suse.de
- Update to version 1.2.0 (GNOME 2.10)
- remove upstreamed dest.patch
* Wed Mar 02 2005 - gekker@suse.de
- add dest.patch
* Wed Mar 02 2005 - gekker@suse.de
- update to version 1.1.6
* Sun Feb 27 2005 - ro@suse.de
- fix build on lib64
* Fri Feb 25 2005 - gekker@suse.de
- fix libexecdir, so that e-d-s will actually get launched
- enable ssl support now that camel has been moved to e-d-s
* Wed Feb 09 2005 - gekker@suse.de
- Update to version 1.1.5
- Remove upstreamed patch.
* Sat Feb 05 2005 - gekker@suse.de
- Update to version 1.1.4.2
- Remove upsteamed patches, including security fix mentioned below.
* Mon Jan 24 2005 - sbrabec@suse.cz
- Fixed integer overflow (arbitrary code execution with elevated
privileges) in lock helper (CAN-2005-0102, #50116).
* Mon Jan 24 2005 - meissner@suse.de
- Fixed some gcc 4 warnings/error that show code problems.
* Fri Jan 14 2005 - clahey@suse.de
- Update to version 1.1.3.
* Thu Jan 06 2005 - gekker@suse.de
- Update to version 1.1.2
* Tue Dec 07 2004 - gekker@suse.de
- Update to version 1.0.3 (Ximian 70057)
* Tue Nov 30 2004 - ro@suse.de
- re-diffed libdb.patch
* Mon Nov 29 2004 - gekker@suse.de
- Update to version 1.0.2
- Removed patches included in this update
* Fri Nov 12 2004 - sbrabec@suse.cz
- Fixed libdb on x86_64 (broken local contacts in Evolution, #46845).
http://bugzilla.ximian.com/show_bug.cgi?id=67600
* Tue Nov 02 2004 - ro@suse.de
- locale rename: no -> nb
* Thu Sep 30 2004 - dobey@suse.de
- Add patch to fix bug 66368 in bugzilla.ximian.com
* Thu Sep 30 2004 - dobey@suse.de
- Add patch to fix bug 66230 in bugzilla.ximian.com
* Fri Sep 24 2004 - dobey@suse.de
- Updated to version 1.0.1
- Removed evolution-data-server-0.0.99.dif which is in upstream source
* Fri Sep 17 2004 - ro@suse.de
- readd evolution-data-server-0.0.99.dif to fix parallel build
* Mon Sep 13 2004 - dobey@suse.de
- Updated to version 1.0.0
- Removed evolution-data-server-0.0.99.dif which was not changelogged,
and seems to not actually change anything
* Sat Sep 04 2004 - coolo@suse.de
- use %%jobs (OOo is waiting on it)
* Fri Aug 27 2004 - dobey@suse.de
- Update to version 0.0.99
* Wed Aug 18 2004 - dobey@suse.de
- Fix LDAP support and remove unused configure options
* Fri Aug 13 2004 - dobey@suse.de
- Update to version 0.0.98
- Add dependencies to the evolution-data-server-devel package
* Thu Aug 05 2004 - dobey@suse.de
- Add build deps for gnutls libs from libsoup
* Tue Aug 03 2004 - dobey@suse.de
- Don't run any autotools when building with no patches
* Tue Aug 03 2004 - dobey@suse.de
- Patch is in tarball for gnome_segv2 now
- Updated to version 0.0.97
* Thu Jul 29 2004 - dobey@suse.de
- Add patch from CVS to detect path to gnome_segv2 better
* Wed Jul 28 2004 - dobey@suse.de
- Updated to version 0.0.96
* Tue Jul 13 2004 - clahey@suse.de
- Updated to version 0.0.95.
* Mon Jun 21 2004 - clahey@suse.de
- Updated to version 0.0.94.1.
* Fri Jun 04 2004 - mibarra@suse.de
- Updated to version 0.0.94.
* Mon May 24 2004 - ro@suse.de
- fix lib64 issue
* Sat May 22 2004 - mibarra@suse.de
- Updated to 0.0.93.
* Tue May 18 2004 - clahey@suse.de
- Don't install to /opt/gnome/libexec
* Tue May 18 2004 - clahey@suse.de
- Initial import of evolution-data-server.

View File

@ -0,0 +1,16 @@
--- docs/reference/libedataserver/libedataserver.types
+++ docs/reference/libedataserver/libedataserver.types
@@ -1,4 +1,13 @@
#include <glib-object.h>
+#include <e-account.h>
+#include <e-component-listener.h>
+#include <e-file-cache.h>
+#include <e-iterator.h>
+#include <e-list-iterator.h>
+#include <e-list.h>
+#include <e-source-group.h>
+#include <e-source-list.h>
+#include <e-source.h>
e_account_get_type
e_component_listener_get_type
e_file_cache_get_type

63
fwd-mail.patch Normal file
View File

@ -0,0 +1,63 @@
Index: servers/groupwise/e-gw-item.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/groupwise/e-gw-item.c,v
retrieving revision 1.100
diff -u -p -r1.100 e-gw-item.c
--- servers/groupwise/e-gw-item.c 13 Jun 2006 07:15:37 -0000 1.100
+++ servers/groupwise/e-gw-item.c 13 Jun 2006 10:54:23 -0000
@@ -72,6 +72,7 @@ struct _EGwItemPrivate {
char *msg_body_id;
int item_status;
/*Attachments*/
+ gboolean has_attachment;
GSList *attach_list ;
/*linkInfo for replies*/
EGwItemLinkInfo *link_info;
@@ -525,6 +526,7 @@ e_gw_item_init (EGwItem *item, EGwItemCl
priv->self_status = 0;
priv->link_info = NULL;
priv->msg_body_id = NULL;
+ priv->has_attachment = FALSE;
item->priv = priv;
@@ -1795,6 +1797,9 @@ e_gw_item_new_from_soap_parameter (const
} else if (!g_ascii_strcasecmp (name, "size")) {
item->priv->size = soup_soap_parameter_get_int_value (child);
+ } else if (!g_ascii_strcasecmp (name, "hasAttachment")) {
+ item->priv->has_attachment = soup_soap_parameter_get_int_value (child);
+
} else if (!g_ascii_strcasecmp (name, "options")) {
SoupSoapParameter *subparam;
char *value = NULL;
@@ -2065,6 +2070,14 @@ e_gw_item_get_mail_size (EGwItem *item)
return item->priv->size;
}
+gboolean
+e_gw_item_has_attachment (EGwItem *item)
+{
+ g_return_val_if_fail (E_IS_GW_ITEM (item), 0);
+
+ return item->priv->has_attachment;
+}
+
char *
e_gw_item_get_creation_date (EGwItem *item)
{
Index: servers/groupwise/e-gw-item.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/groupwise/e-gw-item.h,v
retrieving revision 1.40
diff -u -p -r1.40 e-gw-item.h
--- servers/groupwise/e-gw-item.h 6 Dec 2005 10:05:57 -0000 1.40
+++ servers/groupwise/e-gw-item.h 13 Jun 2006 10:54:23 -0000
@@ -298,6 +298,7 @@ void e_gw_item_set_source (EGwItem *item
int e_gw_item_get_trigger (EGwItem *item);
void e_gw_item_set_trigger (EGwItem *item, int trigger);
+gboolean e_gw_item_has_attachment (EGwItem *item);
typedef struct {
char *email;

View File

@ -0,0 +1,53 @@
--- /root/sragavan/602/build-eds/usr/src/packages/BUILD/evolution-data-server-1.6.0/po/de.po 2006-06-02 06:39:20.962276877 +0200
+++ po/de.po 2006-05-25 12:28:10.000000000 +0200
@@ -12,7 +12,7 @@
"Project-Id-Version: evolution-data-server\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-05-04 06:53+0000\n"
-"PO-Revision-Date: 2006-05-17 11:25\n"
+"PO-Revision-Date: 2006-05-25 11:28\n"
"Last-Translator: Novell Language <language@novell.com>\n"
"Language-Team: Novell Language <language@novell.com>\n"
"MIME-Version: 1.0\n"
@@ -656,7 +656,7 @@
#: ../calendar/backends/file/e-cal-backend-file.c:209
#,
msgid "Can't save calendar data: "
-msgstr "Can't save calendar data: "
+msgstr "Kalenderdaten können nicht gespeichert werden: "
#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:872
#: ../camel/providers/groupwise/camel-groupwise-folder.c:1582
@@ -2485,7 +2485,7 @@
#: ../camel/providers/groupwise/camel-groupwise-folder.c:966
msgid "Trash Folder Full. Please Empty."
-msgstr "Trash Folder Full. Please Empty."
+msgstr "Müllordner voll. Bitte leeren."
#: ../camel/providers/groupwise/camel-groupwise-folder.c:1129
#: ../camel/providers/groupwise/camel-groupwise-store.c:632
@@ -2605,7 +2605,7 @@
#: ../camel/providers/groupwise/camel-groupwise-store.c:226
#,
msgid "Unable to authenticate to GroupWise server. "
-msgstr "Unable to authenticate to GroupWise server. "
+msgstr "Authentifizierung beim GroupWise-Server nicht möglich. "
#: ../camel/providers/groupwise/camel-groupwise-store.c:304
msgid "Some features may not work correctly with your current server version"
@@ -4662,12 +4662,12 @@
#: ../libedataserverui/e-passwords.c:472
#,
msgid "_Remember this passphrase"
-msgstr "_Remember this passphrase"
+msgstr "_An diesen Passwortsatz erinnern"
#: ../libedataserverui/e-passwords.c:473
#,
msgid "_Remember this passphrase for the remainder of this session"
-msgstr "_Remember this passphrase for the remainder of this session"
+msgstr "_Für den Rest dieser Sitzung an diesen Passwortsatz erinnern"
#: ../libedataserverui/e-passwords.c:476
msgid "_Remember this password"

141
gw-proxy-issues.patch Normal file
View File

@ -0,0 +1,141 @@
--- camel/providers/groupwise/camel-groupwise-folder.c.orig 2006-04-04 17:00:02.054008863 +0200
+++ camel/providers/groupwise/camel-groupwise-folder.c 2006-04-04 17:00:05.509122536 +0200
@@ -914,7 +914,7 @@ groupwise_refresh_folder(CamelFolder *fo
if (!camel_groupwise_store_connected (gw_store, ex))
goto end1;
- if (!strcmp (folder->full_name, "Trash") || is_proxy) {
+ if (!strcmp (folder->full_name, "Trash")) {
status = e_gw_connection_get_items (cnc, container_id, "peek recipient distribution created delivered attachments subject status size", NULL, &list);
if (status != E_GW_CONNECTION_STATUS_OK) {
if (status ==E_GW_CONNECTION_STATUS_OTHER) {
@@ -939,71 +939,73 @@ groupwise_refresh_folder(CamelFolder *fo
/*Get the New Items*/
- status = e_gw_connection_get_quick_messages (cnc, container_id,
- "peek id",
- &t_str, "New", NULL, NULL, -1, &slist);
- if (status != E_GW_CONNECTION_STATUS_OK) {
- camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Authentication failed"));
- goto end2;
- }
+ if (!is_proxy) {
+ status = e_gw_connection_get_quick_messages (cnc, container_id,
+ "peek id",
+ &t_str, "New", NULL, NULL, -1, &slist);
+ if (status != E_GW_CONNECTION_STATUS_OK) {
+ camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Authentication failed"));
+ goto end2;
+ }
- /*
- * The value in t_str is the one that has to be used for the next set of calls.
- * so store this value in the summary.
- */
- if (summary->time_string)
- g_free (summary->time_string);
+ /*
+ * The value in t_str is the one that has to be used for the next set of calls.
+ * so store this value in the summary.
+ */
+ if (summary->time_string)
+ g_free (summary->time_string);
- summary->time_string = g_strdup (t_str);
- g_free (t_str);
- t_str = NULL;
+ summary->time_string = g_strdup (t_str);
+ g_free (t_str);
+ t_str = NULL;
- /*
- for ( sl = slist ; sl != NULL; sl = sl->next)
- list = g_list_append (list, sl->data);*/
+ /*
+ for ( sl = slist ; sl != NULL; sl = sl->next)
+ list = g_list_append (list, sl->data);*/
- if (slist && g_slist_length(slist) != 0)
- check_all = TRUE;
+ if (slist && g_slist_length(slist) != 0)
+ check_all = TRUE;
- g_slist_free (slist);
- slist = NULL;
+ g_slist_free (slist);
+ slist = NULL;
- t_str = g_strdup (time_string);
+ t_str = g_strdup (time_string);
- /*Get those items which have been modifed*/
+ /*Get those items which have been modifed*/
- status = e_gw_connection_get_quick_messages (cnc, container_id,
- "peek id",
- &t_str, "Modified", NULL, NULL, -1, &slist);
+ status = e_gw_connection_get_quick_messages (cnc, container_id,
+ "peek id",
+ &t_str, "Modified", NULL, NULL, -1, &slist);
- if (status != E_GW_CONNECTION_STATUS_OK) {
- camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Authentication failed"));
- goto end3;
- }
+ if (status != E_GW_CONNECTION_STATUS_OK) {
+ camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_INVALID, _("Authentication failed"));
+ goto end3;
+ }
- /* The storing of time-stamp to summary code below should be commented if the
- above commented code is uncommented */
+ /* The storing of time-stamp to summary code below should be commented if the
+ above commented code is uncommented */
- /* if (summary->time_string)
- g_free (summary->time_string);
+ /* if (summary->time_string)
+ g_free (summary->time_string);
- summary->time_string = g_strdup (t_str);
+ summary->time_string = g_strdup (t_str);
- g_free (t_str), t_str = NULL;*/
+ g_free (t_str), t_str = NULL;*/
- for ( sl = slist ; sl != NULL; sl = sl->next)
- list = g_list_prepend (list, sl->data);
+ for ( sl = slist ; sl != NULL; sl = sl->next)
+ list = g_list_prepend (list, sl->data);
- g_slist_free (slist);
- slist = NULL;
+ g_slist_free (slist);
+ slist = NULL;
- if (gw_store->current_folder != folder) {
- gw_store->current_folder = folder;
- }
+ if (gw_store->current_folder != folder) {
+ gw_store->current_folder = folder;
+ }
- if (list) {
- gw_update_cache (folder, list, ex, FALSE);
+ if (list) {
+ gw_update_cache (folder, list, ex, FALSE);
+ }
}
@@ -1017,7 +1019,7 @@ groupwise_refresh_folder(CamelFolder *fo
* this folder, and update the summary.
*/
/*create a new session thread for the update all operation*/
- if (check_all) {
+ if (check_all || is_proxy) {
msg = camel_session_thread_msg_new (session, &update_ops, sizeof(*msg));
msg->cnc = cnc;
msg->t_str = g_strdup (time_string);

41
gw-trash-fix.diff Normal file
View File

@ -0,0 +1,41 @@
Index: camel/providers/imap/camel-imap-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/imap/camel-imap-folder.c,v
retrieving revision 1.359
retrieving revision 1.360
diff -u -r1.359 -r1.360
--- camel/providers/imap/camel-imap-folder.c 2006/04/21 09:15:50 1.359
+++ camel/providers/imap/camel-imap-folder.c 2006/05/10 08:49:18 1.360
@@ -2322,7 +2322,7 @@
}
-#define CAMEL_MESSAGE_INFO_HEADERS "DATE FROM TO CC SUBJECT REFERENCES IN-REPLY-TO MESSAGE-ID MIME-VERSION CONTENT-TYPE"
+#define CAMEL_MESSAGE_INFO_HEADERS "DATE FROM TO CC SUBJECT REFERENCES IN-REPLY-TO MESSAGE-ID MIME-VERSION CONTENT-TYPE "
/* FIXME: this needs to be kept in sync with camel-mime-utils.c's list
of mailing-list headers and so might be best if this were
Index: camel/providers/groupwise/camel-groupwise-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c,v
retrieving revision 1.133
diff -u -p -r1.133 camel-groupwise-folder.c
--- camel/providers/groupwise/camel-groupwise-folder.c 17 May 2006 08:48:19 -0000 1.133
+++ camel/providers/groupwise/camel-groupwise-folder.c 17 May 2006 08:52:17 -0000
@@ -959,6 +959,7 @@ groupwise_refresh_folder(CamelFolder *fo
goto end1;
if (!strcmp (folder->full_name, "Trash")) {
+#if 0
status = e_gw_connection_get_items (cnc, container_id, "peek recipient distribution created delivered attachments subject status size", NULL, &list);
if (status != E_GW_CONNECTION_STATUS_OK) {
if (status ==E_GW_CONNECTION_STATUS_OTHER) {
@@ -978,6 +979,8 @@ groupwise_refresh_folder(CamelFolder *fo
list = NULL;
}
goto end1;
+#endif
+ is_proxy = TRUE;
}
time_string = g_strdup (((CamelGroupwiseSummary *) folder->summary)->time_string);

720
imap-locking.patch Normal file
View File

@ -0,0 +1,720 @@
Index: camel/providers/imap/camel-imap-command.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/imap/camel-imap-command.c,v
retrieving revision 1.76.2.1
diff -u -r1.76.2.1 camel-imap-command.c
--- camel/providers/imap/camel-imap-command.c 12 Apr 2006 19:08:32 -0000 1.76.2.1
+++ camel/providers/imap/camel-imap-command.c 19 May 2006 15:19:00 -0000
@@ -38,7 +38,6 @@
#include "camel-imap-folder.h"
#include "camel-imap-store.h"
#include "camel-imap-store-summary.h"
-#include "camel-imap-private.h"
#include <camel/camel-exception.h>
#include <camel/camel-private.h>
#include <camel/camel-utf8.h>
Index: camel/providers/imap/camel-imap-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/imap/camel-imap-folder.c,v
retrieving revision 1.358.2.1
diff -u -r1.358.2.1 camel-imap-folder.c
--- camel/providers/imap/camel-imap-folder.c 21 Apr 2006 09:21:20 -0000 1.358.2.1
+++ camel/providers/imap/camel-imap-folder.c 19 May 2006 15:19:00 -0000
@@ -37,11 +37,11 @@
/*#include "libedataserver/e-path.h"*/
#include "libedataserver/e-time-utils.h"
#include "libedataserver/e-data-server-util.h"
+#include "libedataserver/e-msgport.h"
#include "camel-imap-folder.h"
#include "camel-imap-command.h"
#include "camel-imap-message-cache.h"
-#include "camel-imap-private.h"
#include "camel-imap-search.h"
#include "camel-imap-store.h"
#include "camel-imap-summary.h"
@@ -70,6 +70,7 @@
#include "camel-i18n.h"
#include "camel/camel-store-summary.h"
+
#define d(x)
/* set to -1 for infinite size (suggested max command-line length is
@@ -189,12 +190,6 @@
folder->folder_flags |= (CAMEL_FOLDER_HAS_SUMMARY_CAPABILITY |
CAMEL_FOLDER_HAS_SEARCH_CAPABILITY);
- imap_folder->priv = g_malloc0(sizeof(*imap_folder->priv));
-#ifdef ENABLE_THREADS
- imap_folder->priv->search_lock = e_mutex_new(E_MUTEX_SIMPLE);
- imap_folder->priv->cache_lock = e_mutex_new(E_MUTEX_REC);
-#endif
-
imap_folder->need_rescan = TRUE;
}
@@ -347,9 +342,7 @@
else if (validity != imap_summary->validity) {
imap_summary->validity = validity;
camel_folder_summary_clear (folder->summary);
- CAMEL_IMAP_FOLDER_LOCK (imap_folder, cache_lock);
camel_imap_message_cache_clear (imap_folder->cache);
- CAMEL_IMAP_FOLDER_UNLOCK (imap_folder, cache_lock);
imap_folder->need_rescan = FALSE;
camel_imap_folder_changed (folder, exists, NULL, ex);
return;
@@ -423,12 +416,6 @@
camel_object_unref (CAMEL_OBJECT (imap_folder->search));
if (imap_folder->cache)
camel_object_unref (CAMEL_OBJECT (imap_folder->cache));
-
-#ifdef ENABLE_THREADS
- e_mutex_destroy(imap_folder->priv->search_lock);
- e_mutex_destroy(imap_folder->priv->cache_lock);
-#endif
- g_free(imap_folder->priv);
}
static int
@@ -475,26 +462,28 @@
CamelImapStore *imap_store = (CamelImapStore *)folder->parent_store;
char *folder_dir, *summary_path, *state_file;
char *folders;
-
+
+ CAMEL_SERVICE_LOCK (imap_store, connect_lock);
+
folders = g_strconcat (imap_store->storage_path, "/folders", NULL);
folder_dir = imap_path_to_physical (folders, new);
g_free (folders);
summary_path = g_strdup_printf("%s/summary", folder_dir);
-
- CAMEL_IMAP_FOLDER_LOCK (folder, cache_lock);
+
camel_imap_message_cache_set_path(imap_folder->cache, folder_dir);
- CAMEL_IMAP_FOLDER_UNLOCK (folder, cache_lock);
-
+
camel_folder_summary_set_filename(folder->summary, summary_path);
-
+
state_file = g_strdup_printf ("%s/cmeta", folder_dir);
camel_object_set(folder, NULL, CAMEL_OBJECT_STATE_FILE, state_file, NULL);
g_free(state_file);
-
+
g_free(summary_path);
g_free(folder_dir);
-
+
((CamelFolderClass *)disco_folder_class)->rename(folder, new);
+
+ CAMEL_SERVICE_UNLOCK (imap_store, connect_lock);
}
static void
@@ -1202,21 +1191,23 @@
char *uid;
uid = get_temp_uid ();
-
+
+ CAMEL_SERVICE_LOCK (imap_store, connect_lock);
+
camel_imap_summary_add_offline (folder->summary, uid, message, info);
- CAMEL_IMAP_FOLDER_LOCK (folder, cache_lock);
camel_imap_message_cache_insert_wrapper (cache, uid, "",
CAMEL_DATA_WRAPPER (message), ex);
- CAMEL_IMAP_FOLDER_UNLOCK (folder, cache_lock);
-
+
changes = camel_folder_change_info_new ();
camel_folder_change_info_add_uid (changes, uid);
- camel_object_trigger_event (CAMEL_OBJECT (folder), "folder_changed",
- changes);
+ camel_object_trigger_event (CAMEL_OBJECT (folder), "folder_changed", changes);
camel_folder_change_info_free (changes);
camel_disco_diary_log (CAMEL_DISCO_STORE (imap_store)->diary,
CAMEL_DISCO_DIARY_FOLDER_APPEND, folder, uid);
+
+ CAMEL_SERVICE_UNLOCK (imap_store, connect_lock);
+
if (appended_uid)
*appended_uid = uid;
else
@@ -1327,21 +1318,22 @@
CamelImapResponse *response;
char *uid;
int count;
-
+
+ CAMEL_SERVICE_LOCK (store, connect_lock);
+
count = camel_folder_summary_count (folder->summary);
- response = do_append (folder, message, info, &uid, ex);
- if (!response)
+ if (!(response = do_append (folder, message, info, &uid, ex))) {
+ CAMEL_SERVICE_UNLOCK (store, connect_lock);
return;
+ }
if (uid) {
/* Cache first, since freeing response may trigger a
* summary update that will want this information.
*/
- CAMEL_IMAP_FOLDER_LOCK (folder, cache_lock);
camel_imap_message_cache_insert_wrapper (
CAMEL_IMAP_FOLDER (folder)->cache, uid,
"", CAMEL_DATA_WRAPPER (message), ex);
- CAMEL_IMAP_FOLDER_UNLOCK (folder, cache_lock);
if (appended_uid)
*appended_uid = uid;
else
@@ -1352,10 +1344,10 @@
camel_imap_response_free (store, response);
/* Make sure a "folder_changed" is emitted. */
- CAMEL_SERVICE_LOCK (store, connect_lock);
if (store->current_folder != folder ||
camel_folder_summary_count (folder->summary) == count)
imap_refresh_info (folder, ex);
+
CAMEL_SERVICE_UNLOCK (store, connect_lock);
}
@@ -1368,19 +1360,20 @@
CamelImapResponse *response;
char *uid;
- response = do_append (folder, message, info, &uid, ex);
- if (!response)
+ CAMEL_SERVICE_LOCK (store, connect_lock);
+
+ if (!(response = do_append (folder, message, info, &uid, ex))) {
+ CAMEL_SERVICE_UNLOCK (store, connect_lock);
return;
+ }
if (uid) {
CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
const char *olduid = camel_message_info_uid (info);
- CAMEL_IMAP_FOLDER_LOCK (imap_folder, cache_lock);
camel_imap_message_cache_copy (imap_folder->cache, olduid,
imap_folder->cache, uid, ex);
- CAMEL_IMAP_FOLDER_UNLOCK (imap_folder, cache_lock);
-
+
if (appended_uid)
*appended_uid = uid;
else
@@ -1389,6 +1382,8 @@
*appended_uid = NULL;
camel_imap_response_free (store, response);
+
+ CAMEL_SERVICE_UNLOCK (store, connect_lock);
}
@@ -1405,17 +1400,9 @@
CamelMessageInfo *mi;
char *uid, *destuid;
int i;
-
- /* We grab the store's command lock first, and then grab the
- * source and destination cache_locks. This way we can't
- * deadlock in the case where we're simultaneously also trying
- * to copy messages in the other direction from another thread.
- */
+
CAMEL_SERVICE_LOCK (store, connect_lock);
- CAMEL_IMAP_FOLDER_LOCK (source, cache_lock);
- CAMEL_IMAP_FOLDER_LOCK (dest, cache_lock);
- CAMEL_SERVICE_UNLOCK (store, connect_lock);
-
+
if (transferred_uids) {
*transferred_uids = g_ptr_array_new ();
g_ptr_array_set_size (*transferred_uids, uids->len);
@@ -1451,16 +1438,15 @@
if (delete_originals)
camel_folder_delete_message (source, uid);
}
-
- CAMEL_IMAP_FOLDER_UNLOCK (dest, cache_lock);
- CAMEL_IMAP_FOLDER_UNLOCK (source, cache_lock);
-
+
camel_object_trigger_event (CAMEL_OBJECT (dest), "folder_changed", changes);
camel_folder_change_info_free (changes);
camel_disco_diary_log (CAMEL_DISCO_STORE (store)->diary,
CAMEL_DISCO_DIARY_FOLDER_TRANSFER,
source, dest, uids, delete_originals);
+
+ CAMEL_SERVICE_UNLOCK (store, connect_lock);
}
static void
@@ -1490,22 +1476,14 @@
src = imap_uid_set_to_array (source->summary, srcset);
dest = imap_uid_set_to_array (destination->summary, destset);
-
+
if (src && dest && src->len == dest->len) {
- /* We don't have to worry about deadlocking on the
- * cache locks here, because we've got the store's
- * command lock too, so no one else could be here.
- */
- CAMEL_IMAP_FOLDER_LOCK (source, cache_lock);
- CAMEL_IMAP_FOLDER_LOCK (destination, cache_lock);
for (i = 0; i < src->len; i++) {
camel_imap_message_cache_copy (scache, src->pdata[i],
dcache, dest->pdata[i],
NULL);
}
- CAMEL_IMAP_FOLDER_UNLOCK (source, cache_lock);
- CAMEL_IMAP_FOLDER_UNLOCK (destination, cache_lock);
-
+
imap_uid_array_free (src);
imap_uid_array_free (dest);
return;
@@ -1567,7 +1545,9 @@
qsort (uids->pdata, uids->len, sizeof (void *), uid_compar);
/* Now copy the messages */
+ CAMEL_SERVICE_LOCK (store, connect_lock);
do_copy(source, uids, dest, delete_originals, ex);
+ CAMEL_SERVICE_UNLOCK (store, connect_lock);
if (camel_exception_is_set (ex))
return;
@@ -1587,12 +1567,15 @@
gboolean delete_originals, CamelException *ex)
{
CamelDiscoDiary *diary = CAMEL_DISCO_STORE (source->parent_store)->diary;
+ CamelStore *store = source->parent_store;
GPtrArray *realuids;
int first, i;
const char *uid;
CamelMimeMessage *message;
CamelMessageInfo *info;
+ CAMEL_SERVICE_LOCK (store, connect_lock);
+
qsort (uids->pdata, uids->len, sizeof (void *), uid_compar);
/* This is trickier than append_resyncing, because some of
@@ -1649,10 +1632,12 @@
}
g_ptr_array_free (realuids, FALSE);
-
+
/* FIXME */
if (transferred_uids)
*transferred_uids = NULL;
+
+ CAMEL_SERVICE_UNLOCK (store, connect_lock);
}
static GPtrArray *
@@ -1660,36 +1645,36 @@
{
CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
GPtrArray *matches;
-
+
/* we could get around this by creating a new search object each time,
but i doubt its worth it since any long operation would lock the
command channel too */
- CAMEL_IMAP_FOLDER_LOCK(folder, search_lock);
-
+ CAMEL_SERVICE_LOCK (folder->parent_store, connect_lock);
+
camel_folder_search_set_folder (imap_folder->search, folder);
matches = camel_folder_search_search(imap_folder->search, expression, NULL, ex);
-
- CAMEL_IMAP_FOLDER_UNLOCK(folder, search_lock);
-
+
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
+
return matches;
}
static GPtrArray *
-imap_search_by_uids(CamelFolder *folder, const char *expression, GPtrArray *uids, CamelException *ex)
+imap_search_by_uids (CamelFolder *folder, const char *expression, GPtrArray *uids, CamelException *ex)
{
- CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER(folder);
+ CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
GPtrArray *matches;
-
+
if (uids->len == 0)
- return g_ptr_array_new();
-
- CAMEL_IMAP_FOLDER_LOCK(folder, search_lock);
-
+ return g_ptr_array_new ();
+
+ CAMEL_SERVICE_LOCK (folder->parent_store, connect_lock);
+
camel_folder_search_set_folder(imap_folder->search, folder);
matches = camel_folder_search_search(imap_folder->search, expression, uids, ex);
-
- CAMEL_IMAP_FOLDER_UNLOCK(folder, search_lock);
-
+
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
+
return matches;
}
@@ -1697,14 +1682,14 @@
imap_search_free (CamelFolder *folder, GPtrArray *uids)
{
CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
-
+
g_return_if_fail (imap_folder->search);
-
- CAMEL_IMAP_FOLDER_LOCK(folder, search_lock);
-
+
+ CAMEL_SERVICE_LOCK (folder->parent_store, connect_lock);
+
camel_folder_search_free_result (imap_folder->search, uids);
-
- CAMEL_IMAP_FOLDER_UNLOCK(folder, search_lock);
+
+ CAMEL_SERVICE_UNLOCK (folder->parent_store, connect_lock);
}
static CamelMimeMessage *get_message (CamelImapFolder *imap_folder,
@@ -2056,7 +2041,7 @@
CamelMimeMessage *msg = NULL;
CamelStream *stream = NULL;
int retry;
-
+
mi = (CamelImapMessageInfo *)camel_folder_summary_uid (folder->summary, uid);
if (mi == NULL) {
camel_exception_setv(ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
@@ -2066,7 +2051,7 @@
/* If its cached in full, just get it as is, this is only a shortcut,
since we get stuff from the cache anyway. It affects a busted connection though. */
- if ( (stream = camel_imap_folder_fetch_data(imap_folder, uid, "", TRUE, NULL))
+ if ((stream = camel_imap_folder_fetch_data(imap_folder, uid, "", TRUE, NULL))
&& (msg = get_message_simple(imap_folder, uid, stream, ex)))
goto done;
@@ -2095,7 +2080,7 @@
char *body, *found_uid;
int i;
- CAMEL_SERVICE_LOCK(store, connect_lock);
+ CAMEL_SERVICE_LOCK (store, connect_lock);
if (!camel_imap_store_connected(store, ex)) {
CAMEL_SERVICE_UNLOCK(store, connect_lock);
camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
@@ -2104,8 +2089,7 @@
}
response = camel_imap_command (store, folder, ex, "UID FETCH %s BODY", uid);
- CAMEL_SERVICE_UNLOCK(store, connect_lock);
-
+
if (response) {
for (i = 0, body = NULL; i < response->untagged->len; i++) {
fetch_data = parse_fetch_response (imap_folder, response->untagged->pdata[i]);
@@ -2125,7 +2109,7 @@
imap_parse_body ((const char **) &body, folder, mi->info.content);
camel_folder_summary_touch (folder->summary);
}
-
+
if (fetch_data)
g_datalist_clear (&fetch_data);
@@ -2133,6 +2117,8 @@
} else {
camel_exception_clear(ex);
}
+
+ CAMEL_SERVICE_UNLOCK (store, connect_lock);
}
if (camel_debug_start("imap:folder")) {
@@ -2637,9 +2623,7 @@
}
camel_folder_change_info_remove_uid (changes, camel_message_info_uid (info));
- CAMEL_IMAP_FOLDER_LOCK (imap_folder, cache_lock);
camel_imap_message_cache_remove (imap_folder->cache, camel_message_info_uid (info));
- CAMEL_IMAP_FOLDER_UNLOCK (imap_folder, cache_lock);
camel_folder_summary_remove (folder->summary, info);
camel_message_info_free(info);
}
@@ -2686,36 +2670,23 @@
char *found_uid;
int i;
- /* EXPUNGE responses have to modify the cache, which means
- * they have to grab the cache_lock while holding the
- * connect_lock.
-
- * Because getting the service lock may cause MUCH unecessary
- * delay when we already have the data locally, we do the
- * locking separately. This could cause a race
- * getting the same data from the cache, but that is only
- * an inefficiency, and bad luck.
- */
- CAMEL_IMAP_FOLDER_LOCK (imap_folder, cache_lock);
+ CAMEL_SERVICE_LOCK (store, connect_lock);
stream = camel_imap_message_cache_get (imap_folder->cache, uid, section_text, ex);
if (!stream && (!strcmp (section_text, "HEADER") || !strcmp (section_text, "0"))) {
camel_exception_clear (ex);
stream = camel_imap_message_cache_get (imap_folder->cache, uid, "", ex);
}
- CAMEL_IMAP_FOLDER_UNLOCK (imap_folder, cache_lock);
- if (stream || cache_only)
+ if (stream || cache_only) {
+ CAMEL_SERVICE_UNLOCK (store, connect_lock);
return stream;
-
+ }
+
camel_exception_clear(ex);
-
- CAMEL_SERVICE_LOCK (store, connect_lock);
- CAMEL_IMAP_FOLDER_LOCK (imap_folder, cache_lock);
-
+
if (!camel_imap_store_connected(store, ex)) {
camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
_("This message is not currently available"));
- CAMEL_IMAP_FOLDER_UNLOCK (imap_folder, cache_lock);
CAMEL_SERVICE_UNLOCK (store, connect_lock);
return NULL;
}
@@ -2730,11 +2701,9 @@
"UID FETCH %s BODY.PEEK[%s]",
uid, section_text);
}
- /* We won't need the connect_lock again after this. */
- CAMEL_SERVICE_UNLOCK (store, connect_lock);
if (!response) {
- CAMEL_IMAP_FOLDER_UNLOCK (imap_folder, cache_lock);
+ CAMEL_SERVICE_UNLOCK (store, connect_lock);
return NULL;
}
@@ -2748,8 +2717,9 @@
g_datalist_clear (&fetch_data);
stream = NULL;
}
+
camel_imap_response_free (store, response);
- CAMEL_IMAP_FOLDER_UNLOCK (imap_folder, cache_lock);
+
if (!stream) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
_("Could not find message body in FETCH response."));
@@ -2758,6 +2728,8 @@
g_datalist_clear (&fetch_data);
}
+ CAMEL_SERVICE_UNLOCK (store, connect_lock);
+
return stream;
}
@@ -2769,6 +2741,8 @@
gboolean cache_header = TRUE, header = FALSE;
size_t body_len = 0;
+ CAMEL_SERVICE_ASSERT_LOCKED (((CamelFolder *) imap_folder)->parent_store, connect_lock);
+
if (*response != '(') {
long seq;
@@ -2887,11 +2861,9 @@
if (header && !cache_header) {
stream = camel_stream_mem_new_with_buffer (body, body_len);
} else {
- CAMEL_IMAP_FOLDER_LOCK (imap_folder, cache_lock);
stream = camel_imap_message_cache_insert (imap_folder->cache,
uid, part_spec,
body, body_len, NULL);
- CAMEL_IMAP_FOLDER_UNLOCK (imap_folder, cache_lock);
if (stream == NULL)
stream = camel_stream_mem_new_with_buffer (body, body_len);
}
Index: camel/providers/imap/camel-imap-folder.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/imap/camel-imap-folder.h,v
retrieving revision 1.43
diff -u -r1.43 camel-imap-folder.h
--- camel/providers/imap/camel-imap-folder.h 31 Aug 2005 04:26:02 -0000 1.43
+++ camel/providers/imap/camel-imap-folder.h 19 May 2006 15:19:00 -0000
@@ -44,9 +44,7 @@
struct _CamelImapFolder {
CamelDiscoFolder parent_object;
-
- struct _CamelImapFolderPrivate *priv;
-
+
CamelFolderSearch *search;
CamelImapMessageCache *cache;
Index: camel/providers/imap/camel-imap-private.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/imap/camel-imap-private.h,v
retrieving revision 1.12
diff -u -r1.12 camel-imap-private.h
--- camel/providers/imap/camel-imap-private.h 31 Aug 2005 04:26:02 -0000 1.12
+++ camel/providers/imap/camel-imap-private.h 19 May 2006 15:19:00 -0000
@@ -28,46 +28,6 @@
#pragma }
#endif /* __cplusplus */
-/* need a way to configure and save this data, if this header is to
- be installed. For now, dont install it */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifdef ENABLE_THREADS
-#include "libedataserver/e-msgport.h"
-#endif
-
-struct _CamelImapFolderPrivate {
-#ifdef ENABLE_THREADS
- EMutex *search_lock; /* for locking the search object */
- EMutex *cache_lock; /* for locking the cache object */
-#endif
-};
-
-#ifdef ENABLE_THREADS
-#define CAMEL_IMAP_FOLDER_LOCK(f, l) (e_mutex_lock(((CamelImapFolder *)f)->priv->l))
-#define CAMEL_IMAP_FOLDER_UNLOCK(f, l) (e_mutex_unlock(((CamelImapFolder *)f)->priv->l))
-#else
-#define CAMEL_IMAP_FOLDER_LOCK(f, l)
-#define CAMEL_IMAP_FOLDER_UNLOCK(f, l)
-#endif
-
-struct _CamelImapWrapperPrivate {
-#ifdef ENABLE_THREADS
- GMutex *lock;
-#endif
-};
-
-#ifdef ENABLE_THREADS
-#define CAMEL_IMAP_WRAPPER_LOCK(f, l) (g_mutex_lock(((CamelImapWrapper *)f)->priv->l))
-#define CAMEL_IMAP_WRAPPER_UNLOCK(f, l) (g_mutex_unlock(((CamelImapWrapper *)f)->priv->l))
-#else
-#define CAMEL_IMAP_WRAPPER_LOCK(f, l)
-#define CAMEL_IMAP_WRAPPER_UNLOCK(f, l)
-#endif
-
#ifdef __cplusplus
}
#endif /* __cplusplus */
Index: camel/providers/imap/camel-imap-search.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/imap/camel-imap-search.c,v
retrieving revision 1.21
diff -u -r1.21 camel-imap-search.c
--- camel/providers/imap/camel-imap-search.c 15 Sep 2005 17:54:00 -0000 1.21
+++ camel/providers/imap/camel-imap-search.c 19 May 2006 15:19:00 -0000
@@ -34,7 +34,6 @@
#include "camel-imap-folder.h"
#include "camel-imap-store.h"
#include "camel-imap-search.h"
-#include "camel-imap-private.h"
#include "camel-imap-utils.h"
#include "camel-imap-summary.h"
Index: camel/providers/imap/camel-imap-store.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/imap/camel-imap-store.c,v
retrieving revision 1.340.2.4
diff -u -r1.340.2.4 camel-imap-store.c
--- camel/providers/imap/camel-imap-store.c 1 May 2006 21:15:19 -0000 1.340.2.4
+++ camel/providers/imap/camel-imap-store.c 19 May 2006 15:19:00 -0000
@@ -58,7 +58,6 @@
#include "camel-imap-command.h"
#include "camel-imap-folder.h"
#include "camel-imap-message-cache.h"
-#include "camel-imap-private.h"
#include "camel-imap-store-summary.h"
#include "camel-imap-store.h"
#include "camel-imap-summary.h"
Index: camel/providers/imap/camel-imap-wrapper.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/imap/camel-imap-wrapper.c,v
retrieving revision 1.14
diff -u -r1.14 camel-imap-wrapper.c
--- camel/providers/imap/camel-imap-wrapper.c 15 Sep 2005 18:08:50 -0000 1.14
+++ camel/providers/imap/camel-imap-wrapper.c 19 May 2006 15:19:00 -0000
@@ -30,7 +30,6 @@
#include "camel-imap-folder.h"
#include "camel-imap-wrapper.h"
-#include "camel-imap-private.h"
#include "camel-exception.h"
#include "camel-stream-filter.h"
#include "camel-mime-filter-basic.h"
@@ -38,6 +37,17 @@
#include "camel-mime-filter-charset.h"
#include "camel-mime-part.h"
+#include "libedataserver/e-msgport.h"
+
+
+struct _CamelImapWrapperPrivate {
+ GMutex *lock;
+};
+
+#define CAMEL_IMAP_WRAPPER_LOCK(f, l) (g_mutex_lock(((CamelImapWrapper *)f)->priv->l))
+#define CAMEL_IMAP_WRAPPER_UNLOCK(f, l) (g_mutex_unlock(((CamelImapWrapper *)f)->priv->l))
+
+
static CamelDataWrapperClass *parent_class = NULL;
/* Returns the class for a CamelDataWrapper */
@@ -68,10 +78,9 @@
g_free (imap_wrapper->uid);
if (imap_wrapper->part)
g_free (imap_wrapper->part_spec);
-
-#ifdef ENABLE_THREADS
+
g_mutex_free (imap_wrapper->priv->lock);
-#endif
+
g_free (imap_wrapper->priv);
}
@@ -81,9 +90,7 @@
CamelImapWrapper *imap_wrapper = CAMEL_IMAP_WRAPPER (object);
imap_wrapper->priv = g_new0 (struct _CamelImapWrapperPrivate, 1);
-#ifdef ENABLE_THREADS
imap_wrapper->priv->lock = g_mutex_new ();
-#endif
}
CamelType

16
imap-perf.patch Normal file
View File

@ -0,0 +1,16 @@
Index: camel/providers/imap/camel-imap-folder.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/imap/camel-imap-folder.c,v
retrieving revision 1.358
diff -u -p -r1.358 camel-imap-folder.c
--- camel/providers/imap/camel-imap-folder.c 10 Jan 2006 07:56:47 -0000 1.358
+++ camel/providers/imap/camel-imap-folder.c 21 Apr 2006 09:14:56 -0000
@@ -2348,7 +2348,7 @@ imap_update_summary (CamelFolder *folder
CAMEL_SERVICE_ASSERT_LOCKED (store, connect_lock);
if (store->server_level >= IMAP_LEVEL_IMAP4REV1)
- header_spec = "HEADER";
+ header_spec = "HEADER.FIELDS (" CAMEL_MESSAGE_INFO_HEADERS MAILING_LIST_HEADERS ")";
else
header_spec = "0";

30
imap4-removal.diff Normal file
View File

@ -0,0 +1,30 @@
Index: configure.in
===================================================================
RCS file: /cvs/gnome/evolution-data-server/configure.in,v
retrieving revision 1.160
diff -u -p -r1.160 configure.in
--- configure.in 20 Mar 2006 13:53:00 -0000 1.160
+++ configure.in 24 Apr 2006 13:18:39 -0000
@@ -1331,7 +1331,6 @@ camel/providers/groupwise/Makefile
camel/providers/hula/Makefile
camel/providers/imap/Makefile
camel/providers/imapp/Makefile
-camel/providers/imap4/Makefile
camel/providers/local/Makefile
camel/providers/nntp/Makefile
camel/providers/pop3/Makefile
Index: camel/providers/Makefile.am
===================================================================
RCS file: /cvs/gnome/evolution-data-server/camel/providers/Makefile.am,v
retrieving revision 1.38
diff -u -p -r1.38 Makefile.am
--- camel/providers/Makefile.am 14 Nov 2005 19:15:31 -0000 1.38
+++ camel/providers/Makefile.am 24 Apr 2006 13:18:39 -0000
@@ -13,6 +13,6 @@ else
SENDMAIL_DIR=sendmail
endif
-SUBDIRS = pop3 $(SENDMAIL_DIR) smtp imap imap4 $(NNTP_DIR) local $(IMAPP_DIR) groupwise hula
+SUBDIRS = pop3 $(SENDMAIL_DIR) smtp imap $(NNTP_DIR) local $(IMAPP_DIR) groupwise hula

10
implicit-declaration.diff Normal file
View File

@ -0,0 +1,10 @@
--- docs/reference/addressbook/libebook/libebook.types
+++ docs/reference/addressbook/libebook/libebook.types
@@ -4,6 +4,7 @@
#include <libebook/e-book-listener.h>
#include <libebook/e-book-view-listener.h>
#include <libebook/e-contact.h>
+#include <libebook/e-destination.h>
#include <libebook/e-vcard.h>
e_book_listener_get_type
e_book_view_listener_get_type

11
libgnomeui-dep.patch Normal file
View File

@ -0,0 +1,11 @@
--- evolution-data-server-1.8.0/configure.in 2006/09/30 05:44:59 1.3
+++ evolution-data-server-1.8.0/configure.in 2006/09/30 05:46:47
@@ -1227,7 +1227,7 @@
AC_SUBST(IDL_INCLUDES)
AC_MSG_CHECKING(for libgnomeui server directory)
-GNOMEUI_SERVERDIR="`$PKG_CONFIG --variable=libgnomeui_serverdir libgnomeui-2.0`"
+GNOMEUI_SERVERDIR="/opt/gnome/lib/libgnomeui"
AC_MSG_RESULT($GNOMEUI_SERVERDIR)
AC_DEFINE_UNQUOTED(GNOMEUI_SERVERDIR, "$GNOMEUI_SERVERDIR", [Path where we can find gnome_segv2])

View File

@ -0,0 +1,16 @@
Index: libedataserverui/e-name-selector-list.c
===================================================================
RCS file: /cvs/gnome/evolution-data-server/libedataserverui/e-name-selector-list.c,v
retrieving revision 1.1
diff -u -p -r1.1 e-name-selector-list.c
--- libedataserverui/e-name-selector-list.c 16 Jan 2006 13:32:30 -0000 1.1
+++ libedataserverui/e-name-selector-list.c 24 Apr 2006 08:31:57 -0000
@@ -216,7 +216,7 @@ enl_entry_key_press_event (ENameSelector
GdkEventKey *event,
gpointer dummy)
{
- if ( (event->state & GDK_CONTROL_MASK) && (event->keyval == GDK_Right)) {
+ if ( (event->state & GDK_CONTROL_MASK) && (event->keyval == GDK_Down)) {
enl_popup_position (list);
gtk_widget_show_all (GTK_WIDGET (list->popup));
enl_popup_grab (list);

21
nss-nspr.patch Normal file
View File

@ -0,0 +1,21 @@
--- configure.in
+++ configure.in
@@ -288,15 +288,15 @@
fi
if test "x${check_manually}" = "xno"; then
- PKG_CHECK_MODULES(NSS, mozilla-nss, have_nss="yes", have_nss="no")
+ PKG_CHECK_MODULES(NSS, nss, have_nss="yes", have_nss="no")
if test "x${have_nss}" = "xyes"; then
msg_ssl="yes (Mozilla NSS)"
if test "x$enable_smime" = "xyes"; then
AC_DEFINE(ENABLE_SMIME,1,[Define if SMIME should be enabled])
msg_smime="yes (Mozilla NSS)"
fi
- mozilla_nspr="mozilla-nspr"
- mozilla_nss="mozilla-nss"
+ mozilla_nspr="nspr"
+ mozilla_nss="nss"
AC_DEFINE(HAVE_NSS,1,[Define if you have NSS])
AC_DEFINE(HAVE_SSL,1,[Define if you have a supported SSL library])
MANUAL_NSPR_CFLAGS=""

View File

@ -0,0 +1,384 @@
--- addressbook/backends/groupwise/e-book-backend-groupwise.c.orig 2006-01-10 08:54:45.000000000 +0100
+++ addressbook/backends/groupwise/e-book-backend-groupwise.c 2006-03-23 16:10:25.226981271 +0100
@@ -2330,6 +2330,8 @@ static EDataBookView *
find_book_view (EBookBackendGroupwise *ebgw)
{
EList *views = e_book_backend_get_book_views (E_BOOK_BACKEND (ebgw));
+ if (!views)
+ return NULL;
EIterator *iter = e_list_get_iterator (views);
EDataBookView *rv = NULL;
@@ -2348,28 +2350,28 @@ find_book_view (EBookBackendGroupwise *e
static void
add_sequence_to_cache (EBookBackendCache *cache,
- guint first_sequence,
- guint last_sequence,
- guint last_po_rebuild_time)
+ gdouble first_sequence,
+ gdouble last_sequence,
+ gdouble last_po_rebuild_time)
{
gchar *tmp;
/* This is the system address book. Let try add the sequence to maintain deltas */
- tmp = g_strdup_printf("%d", first_sequence);
+ tmp = g_strdup_printf("%lf", first_sequence);
if (!e_file_cache_get_object (E_FILE_CACHE(cache), "firstSequence"))
e_file_cache_add_object (E_FILE_CACHE(cache), "firstSequence", tmp);
else
e_file_cache_replace_object (E_FILE_CACHE(cache), "firstSequence", tmp);
g_free (tmp);
- tmp = g_strdup_printf("%d", last_sequence);
+ tmp = g_strdup_printf("%lf", last_sequence);
if (!e_file_cache_get_object (E_FILE_CACHE(cache), "lastSequence"))
e_file_cache_add_object (E_FILE_CACHE(cache), "lastSequence", tmp);
else
e_file_cache_replace_object (E_FILE_CACHE(cache), "lastSequence", tmp);
g_free (tmp);
- tmp = g_strdup_printf("%d", last_po_rebuild_time);
+ tmp = g_strdup_printf("%lf", last_po_rebuild_time);
if (!e_file_cache_get_object (E_FILE_CACHE(cache), "lastTimePORebuild"))
e_file_cache_add_object (E_FILE_CACHE(cache), "lastTimePORebuild", tmp);
else
@@ -2439,6 +2441,10 @@ build_cache (EBookBackendGroupwise *ebgw
GTimeVal tstart, tend;
unsigned long diff;
+ if(!ebgw)
+ return FALSE;
+
+ printf("build cache\n");
if (enable_debug) {
g_get_current_time(&start);
printf("Building the cache for %s \n", ebgw->priv->book_name);
@@ -2456,10 +2462,11 @@ build_cache (EBookBackendGroupwise *ebgw
if (book_view) {
closure = get_closure (book_view);
bonobo_object_ref (book_view);
-
- g_mutex_lock (closure->mutex);
- g_cond_signal (closure->cond);
- g_mutex_unlock (closure->mutex);
+ if (closure) {
+ g_mutex_lock (closure->mutex);
+ g_cond_signal (closure->cond);
+ g_mutex_unlock (closure->mutex);
+ }
}
e_file_cache_freeze_changes (E_FILE_CACHE (priv->cache));
@@ -2590,6 +2597,10 @@ update_cache (EBookBackendGroupwise *ebg
GTimeVal start, end;
unsigned long diff;
+ if (!ebgw)
+ return FALSE;
+
+ printf("Inside update cache\n");
if (enable_debug) {
g_get_current_time(&start);
printf("updating cache for %s\n", ebgw->priv->book_name);
@@ -2599,10 +2610,11 @@ update_cache (EBookBackendGroupwise *ebg
if (book_view) {
closure = get_closure (book_view);
bonobo_object_ref (book_view);
-
- g_mutex_lock (closure->mutex);
- g_cond_signal (closure->cond);
- g_mutex_unlock (closure->mutex);
+ if (closure) {
+ g_mutex_lock (closure->mutex);
+ g_cond_signal (closure->cond);
+ g_mutex_unlock (closure->mutex);
+ }
}
cache_file_name = e_file_cache_get_filename (E_FILE_CACHE(ebgw->priv->cache));
@@ -2680,7 +2692,6 @@ update_cache (EBookBackendGroupwise *ebg
printf("updating the cache for %s complated in %ld.%03ld seconds for %d contacts\n",
ebgw->priv->book_name, diff / 1000, diff % 1000, contact_num);
}
-
return FALSE;
}
@@ -2688,8 +2699,8 @@ static gboolean
update_address_book_deltas (EBookBackendGroupwise *ebgw)
{
int status, contact_num = 0;
- guint server_first_sequence = -1, server_last_sequence = -1, server_last_po_rebuild_time = -1;
- guint cache_last_sequence = -1, cache_last_po_rebuild_time = -1;
+ gdouble server_first_sequence = -1, server_last_sequence = -1, server_last_po_rebuild_time = -1;
+ gdouble cache_last_sequence = -1, cache_last_po_rebuild_time = -1;
const char *cache_obj;
char *tmp, *count, *sequence, *status_msg;
GList *add_list = NULL, *delete_list = NULL;
@@ -2697,6 +2708,9 @@ update_address_book_deltas (EBookBackend
EDataBookView *book_view;
GroupwiseBackendSearchClosure *closure;
+ if (!ebgw)
+ return FALSE;
+
EBookBackendGroupwisePrivate *priv = ebgw->priv;
EBookBackendCache *cache = priv->cache;
@@ -2727,11 +2741,11 @@ update_address_book_deltas (EBookBackend
/* Read the last sequence and last poa rebuild time from cache */
cache_obj = e_file_cache_get_object (E_FILE_CACHE (cache), "lastSequence");
if (cache_obj)
- cache_last_sequence = atoi (cache_obj);
+ cache_last_sequence = strtod (cache_obj, NULL);
cache_obj = e_file_cache_get_object (E_FILE_CACHE (cache), "lastTimePORebuild");
if (cache_obj)
- cache_last_po_rebuild_time = atoi (cache_obj);
+ cache_last_po_rebuild_time = strtod (cache_obj, NULL);
/* check whether the all the sequences are available and also whether the PO is rebuilt */
if (server_first_sequence > cache_last_sequence || cache_last_sequence == -1 ||
@@ -2758,14 +2772,15 @@ update_address_book_deltas (EBookBackend
if (book_view) {
closure = get_closure (book_view);
bonobo_object_ref (book_view);
-
- g_mutex_lock (closure->mutex);
- g_cond_signal (closure->cond);
- g_mutex_unlock (closure->mutex);
+ if (closure){
+ g_mutex_lock (closure->mutex);
+ g_cond_signal (closure->cond);
+ g_mutex_unlock (closure->mutex);
+ }
}
/* update the cache */
- sequence = g_strdup_printf ("%d", cache_last_sequence +1);
+ sequence = g_strdup_printf ("%lf", cache_last_sequence +1);
count = g_strdup_printf ("%d", CURSOR_ITEM_LIMIT);
/* load summary file */
@@ -2782,6 +2797,7 @@ update_address_book_deltas (EBookBackend
e_file_cache_freeze_changes (E_FILE_CACHE (cache));
while (cache_last_sequence < server_last_sequence) {
+ printf("Calling get_items_delta\n");
e_gw_connection_get_items_delta (priv->cnc,
ebgw->priv->container_id,
"name email sync", count,
@@ -2793,6 +2809,8 @@ update_address_book_deltas (EBookBackend
printf("sequence differs but no changes found !!!\n");
break;
}
+ printf("add_list size:%d\n", g_list_length(add_list));
+ printf("delete_list size:%d\n", g_list_length(delete_list));
for (; add_list != NULL; add_list = g_list_next(add_list)) {
const char *id;
@@ -2861,15 +2879,15 @@ update_address_book_deltas (EBookBackend
/* cache is updated, now adding the sequence information to the cache */
- tmp = g_strdup_printf("%d", server_first_sequence);
+ tmp = g_strdup_printf("%lf", server_first_sequence);
e_file_cache_replace_object (E_FILE_CACHE(cache), "firstSequence", tmp);
g_free (tmp);
- tmp = g_strdup_printf("%d", server_last_sequence);
+ tmp = g_strdup_printf("%lf", server_last_sequence);
e_file_cache_replace_object (E_FILE_CACHE(cache), "lastSequence", tmp);
g_free (tmp);
- tmp = g_strdup_printf("%d", server_last_po_rebuild_time);
+ tmp = g_strdup_printf("%lf", server_last_po_rebuild_time);
e_file_cache_replace_object (E_FILE_CACHE(cache), "lastTimePORebuild", tmp);
g_free (tmp);
@@ -2940,7 +2958,7 @@ e_book_backend_groupwise_authenticate_us
gboolean is_writable;
const char *cache_refresh_interval_set;
int cache_refresh_interval = CACHE_REFRESH_INTERVAL;
-
+
printf ("authenticate user ............\n");
ebgw = E_BOOK_BACKEND_GROUPWISE (backend);
priv = ebgw->priv;
@@ -2962,6 +2980,7 @@ e_book_backend_groupwise_authenticate_us
case GNOME_Evolution_Addressbook_MODE_REMOTE:
if (priv->cnc) { /*we have already authenticated to server */
+ printf("already authenticated\n");
e_data_book_respond_authenticate_user (book, opid, GNOME_Evolution_Addressbook_Success);
return;
}
@@ -2979,6 +2998,8 @@ e_book_backend_groupwise_authenticate_us
id = NULL;
is_writable = FALSE;
+ if(priv->book_name)
+ printf("book_name:%s\n", priv->book_name);
status = e_gw_connection_get_address_book_id (priv->cnc, priv->book_name, &id, &is_writable);
if (status == E_GW_CONNECTION_STATUS_INVALID_CONNECTION)
status = e_gw_connection_get_address_book_id (priv->cnc, priv->book_name, &id, &is_writable);
@@ -3015,17 +3036,23 @@ e_book_backend_groupwise_authenticate_us
SUMMARY_FLUSH_TIMEOUT);
if (e_book_backend_cache_is_populated (priv->cache)) {
- if (priv->is_writable)
+ printf("cache is populated\n");
+ if (priv->is_writable){
+ printf("is writable\n");
+ printf("creating update_cache thread\n");
g_thread_create ((GThreadFunc) update_cache, ebgw, FALSE, NULL);
+ }
else if (priv->marked_for_offline) {
+ printf("marked for offline\n");
GThread *t;
+ printf("creating update_address_book_deltas thread\n");
t = g_thread_create ((GThreadFunc) update_address_book_deltas, ebgw, TRUE, NULL);
/* spawn a thread to update the system address book cache
* at given intervals
*/
- cache_refresh_interval_set = g_getenv ("BOOK_CACHE_REFESH_INTERVAL");
+ cache_refresh_interval_set = g_getenv ("BOOK_CACHE_REFRESH_INTERVAL");
if (cache_refresh_interval_set) {
cache_refresh_interval = g_ascii_strtod (cache_refresh_interval_set,
NULL); /* use this */
@@ -3043,12 +3070,16 @@ e_book_backend_groupwise_authenticate_us
}
else if (priv->is_writable) { /* for personal books we always cache */
/* Personal address book and frequent contacts */
+ printf("else if is _writable");
+ printf("build_cahe thread");
g_thread_create ((GThreadFunc) build_cache, ebgw, FALSE, NULL);
}
else if(priv->marked_for_offline) {
+ printf("else if marked_for_offline\n");
GThread *t;
/* System address book */
/* cache is not populated and book is not writable and marked for offline usage */
+ printf("creating update_address_book_deltas thread\n");
t = g_thread_create ((GThreadFunc) update_address_book_deltas, ebgw, TRUE, NULL);
g_thread_join (t);
/* set the cache refresh time */
@@ -3429,6 +3460,7 @@ e_book_backend_groupwise_init (EBookBack
priv->marked_for_offline = FALSE;
priv->use_ssl = NULL;
priv->cache=NULL;
+ priv->cnc = NULL;
priv->original_uri = NULL;
priv->cache_timeout = 0;
priv->reserved1 = NULL;
--- servers/groupwise/e-gw-connection.c.orig 2006-03-23 16:08:44.842634384 +0100
+++ servers/groupwise/e-gw-connection.c 2006-03-23 16:10:25.228981338 +0100
@@ -685,8 +685,8 @@ e_gw_connection_get_container_id (EGwCon
}
EGwConnectionStatus
-e_gw_connection_get_items_delta_info (EGwConnection *cnc, const char *container, guint *first_sequence,
- guint *last_sequence, guint *last_po_rebuild_time )
+e_gw_connection_get_items_delta_info (EGwConnection *cnc, const char *container, gdouble *first_sequence,
+ gdouble *last_sequence, gdouble *last_po_rebuild_time )
{
SoupSoapMessage *msg;
SoupSoapResponse *response;
@@ -734,21 +734,21 @@ e_gw_connection_get_items_delta_info (EG
subparam = soup_soap_parameter_get_first_child_by_name (param, "firstSequence");
if (subparam)
- *first_sequence = soup_soap_parameter_get_int_value(subparam);
+ *first_sequence = strtod (soup_soap_parameter_get_string_value(subparam), NULL);
else
*first_sequence = -1;
subparam = soup_soap_parameter_get_first_child_by_name (param, "lastSequence");
if (subparam)
- *last_sequence = soup_soap_parameter_get_int_value(subparam);
+ *last_sequence = strtod (soup_soap_parameter_get_string_value(subparam), NULL);
else
*last_sequence = -1;
subparam = soup_soap_parameter_get_first_child_by_name (param, "lastTimePORebuild");
if (subparam)
- *last_po_rebuild_time = soup_soap_parameter_get_int_value(subparam);
+ *last_po_rebuild_time = strtod (soup_soap_parameter_get_string_value(subparam), NULL);
else
*last_po_rebuild_time = -1;
Index: servers/groupwise/e-gw-connection.h
===================================================================
RCS file: /cvs/gnome/evolution-data-server/servers/groupwise/e-gw-connection.h,v
retrieving revision 1.68
diff -u -p -r1.68 e-gw-connection.h
--- servers/groupwise/e-gw-connection.h 31 Aug 2005 04:26:07 -0000 1.68
+++ servers/groupwise/e-gw-connection.h 20 Mar 2006 14:11:38 -0000
@@ -100,7 +100,7 @@ EGwConnectionStatus e_gw_connection_get_
EGwConnectionStatus e_gw_connection_send_item (EGwConnection *cnc, EGwItem *item, GSList **id_list);
EGwConnectionStatus e_gw_connection_remove_item (EGwConnection *cnc, const char *container, const char *id);
EGwConnectionStatus e_gw_connection_remove_items (EGwConnection *cnc, const char *container, GList *item_ids);
-EGwConnectionStatus e_gw_connection_get_items_delta_info (EGwConnection *cnc, const char *container, guint *first_sequence, guint *last_sequence, guint *last_po_rebuild_time);
+EGwConnectionStatus e_gw_connection_get_items_delta_info (EGwConnection *cnc, const char *container, gdouble *first_sequence, gdouble *last_sequence, gdouble *last_po_rebuild_time);
EGwConnectionStatus e_gw_connection_get_items_delta (EGwConnection *cnc, const char *container, const char *view, const char *count, const char * start_sequence, GList **add_list, GList **delete_list);
--- addressbook/libedata-book/e-data-book.c.orig 2005-05-14 08:36:47.000000000 +0200
+++ addressbook/libedata-book/e-data-book.c 2006-03-23 16:10:48.391753634 +0100
@@ -912,7 +912,7 @@ e_data_book_construct (EDataBook
g_object_ref (source);
- priv->backend = backend;
+ priv->backend = g_object_ref(backend);
priv->source = source;
}
@@ -965,6 +965,7 @@ e_data_book_dispose (GObject *object)
CORBA_exception_free (&ev);
g_object_unref (book->priv->source);
+ g_object_unref (book->priv->backend);
g_free (book->priv);
book->priv = NULL;
}
--- libedataserver/e-list.c.orig 2005-11-17 12:38:47.000000000 +0100
+++ libedataserver/e-list.c 2006-03-23 16:10:48.392753667 +0100
@@ -74,10 +74,11 @@ e_list_duplicate (EList *old)
EIterator *
e_list_get_iterator (EList *list)
{
- EIterator *iterator;
+ EIterator *iterator = NULL;
g_return_val_if_fail (list != NULL, NULL);
iterator = e_list_iterator_new(list);
- list->iterators = g_list_append(list->iterators, iterator);
+ if (iterator)
+ list->iterators = g_list_append(list->iterators, iterator);
return iterator;
}
--- libedataserver/e-list-iterator.c.orig 2005-11-17 12:38:47.000000000 +0100
+++ libedataserver/e-list-iterator.c 2006-03-23 16:10:48.392753667 +0100
@@ -66,11 +66,13 @@ e_list_iterator_init (EListIterator *lis
EIterator *
e_list_iterator_new (EList *list)
{
- EListIterator *iterator;
+ EListIterator *iterator = NULL;
g_return_val_if_fail (list != NULL, NULL);
iterator = g_object_new (E_TYPE_LIST_ITERATOR, NULL);
+ if (!iterator)
+ return NULL;
iterator->list = list;
g_object_ref(list);
iterator->iterator = list->list;

0
ready Normal file
View File