OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/evolution-data-server?expand=0&rev=52
This commit is contained in:
parent
948c5f5c81
commit
3d896aade1
@ -1,336 +0,0 @@
|
|||||||
Index: camel/camel-store.c
|
|
||||||
===================================================================
|
|
||||||
--- camel/camel-store.c (revision 9841)
|
|
||||||
+++ camel/camel-store.c (revision 9842)
|
|
||||||
@@ -322,6 +322,21 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!folder) {
|
|
||||||
+
|
|
||||||
+ if (flags & CAMEL_STORE_IS_MIGRATING) {
|
|
||||||
+ if ((store->flags & CAMEL_STORE_VTRASH) && strcmp(folder_name, CAMEL_VTRASH_NAME) == 0) {
|
|
||||||
+ if (store->folders)
|
|
||||||
+ camel_object_bag_abort(store->folders, folder_name);
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if ((store->flags & CAMEL_STORE_VJUNK) && strcmp(folder_name, CAMEL_VJUNK_NAME) == 0) {
|
|
||||||
+ if (store->folders)
|
|
||||||
+ camel_object_bag_abort(store->folders, folder_name);
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if ((store->flags & CAMEL_STORE_VTRASH) && strcmp(folder_name, CAMEL_VTRASH_NAME) == 0) {
|
|
||||||
folder = CS_CLASS(store)->get_trash(store, ex);
|
|
||||||
} else if ((store->flags & CAMEL_STORE_VJUNK) && strcmp(folder_name, CAMEL_VJUNK_NAME) == 0) {
|
|
||||||
Index: camel/camel-store.h
|
|
||||||
===================================================================
|
|
||||||
--- camel/camel-store.h (revision 9841)
|
|
||||||
+++ camel/camel-store.h (revision 9842)
|
|
||||||
@@ -115,6 +115,7 @@
|
|
||||||
#define CAMEL_STORE_FILTER_INBOX (1 << 2)
|
|
||||||
#define CAMEL_STORE_VJUNK (1 << 3)
|
|
||||||
#define CAMEL_STORE_PROXY (1 << 4)
|
|
||||||
+#define CAMEL_STORE_IS_MIGRATING (1 << 5)
|
|
||||||
|
|
||||||
struct _CamelDB;
|
|
||||||
|
|
||||||
Index: camel/providers/local/camel-local-folder.c
|
|
||||||
===================================================================
|
|
||||||
--- camel/providers/local/camel-local-folder.c (revision 9841)
|
|
||||||
+++ camel/providers/local/camel-local-folder.c (revision 9842)
|
|
||||||
@@ -289,7 +289,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
folder->summary = (CamelFolderSummary *)CLOCALF_CLASS(lf)->create_summary(lf, lf->summary_path, lf->folder_path, lf->index);
|
|
||||||
- if (camel_local_summary_load((CamelLocalSummary *)folder->summary, forceindex, NULL) == -1) {
|
|
||||||
+ if (!(flags & CAMEL_STORE_IS_MIGRATING) && camel_local_summary_load((CamelLocalSummary *)folder->summary, forceindex, NULL) == -1) {
|
|
||||||
/* ? */
|
|
||||||
if (camel_local_summary_check((CamelLocalSummary *)folder->summary, lf->changes, ex) == 0) {
|
|
||||||
/* we sync here so that any hard work setting up the folder isn't lost */
|
|
||||||
Index: camel/camel-db.c
|
|
||||||
===================================================================
|
|
||||||
--- camel/camel-db.c (revision 9841)
|
|
||||||
+++ camel/camel-db.c (revision 9842)
|
|
||||||
@@ -47,6 +47,8 @@
|
|
||||||
|
|
||||||
static GStaticRecMutex trans_lock = G_STATIC_REC_MUTEX_INIT;
|
|
||||||
|
|
||||||
+static int write_mir (CamelDB *cdb, const char *folder_name, CamelMIRecord *record, CamelException *ex, gboolean delete_old_record);
|
|
||||||
+
|
|
||||||
static int
|
|
||||||
cdb_sql_exec (sqlite3 *db, const char* stmt, CamelException *ex)
|
|
||||||
{
|
|
||||||
@@ -812,13 +814,29 @@
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+camel_db_write_fresh_message_info_record (CamelDB *cdb, const char *folder_name, CamelMIRecord *record, CamelException *ex)
|
|
||||||
+{
|
|
||||||
+ return write_mir (cdb, folder_name, record, ex, FALSE);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
int
|
|
||||||
camel_db_write_message_info_record (CamelDB *cdb, const char *folder_name, CamelMIRecord *record, CamelException *ex)
|
|
||||||
{
|
|
||||||
+ return write_mir (cdb, folder_name, record, ex, TRUE);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int
|
|
||||||
+write_mir (CamelDB *cdb, const char *folder_name, CamelMIRecord *record, CamelException *ex, gboolean delete_old_record)
|
|
||||||
+{
|
|
||||||
int ret;
|
|
||||||
char *del_query;
|
|
||||||
char *ins_query;
|
|
||||||
|
|
||||||
+ /* FIXME: We should migrate from this DELETE followed by INSERT model to an INSERT OR REPLACE model as pointed out by pvanhoof */
|
|
||||||
+
|
|
||||||
/* NB: UGLIEST Hack. We can't modify the schema now. We are using msg_security (an unsed one to notify of FLAGGED/Dirty infos */
|
|
||||||
|
|
||||||
ins_query = sqlite3_mprintf ("INSERT INTO %Q VALUES (%Q, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %ld, %ld, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q, %Q )",
|
|
||||||
@@ -832,7 +850,8 @@
|
|
||||||
record->part, record->labels, record->usertags,
|
|
||||||
record->cinfo, record->bdata);
|
|
||||||
|
|
||||||
- del_query = sqlite3_mprintf ("DELETE FROM %Q WHERE uid = %Q", folder_name, record->uid);
|
|
||||||
+ if (delete_old_record)
|
|
||||||
+ del_query = sqlite3_mprintf ("DELETE FROM %Q WHERE uid = %Q", folder_name, record->uid);
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
char *upd_query;
|
|
||||||
@@ -842,12 +861,14 @@
|
|
||||||
g_free (upd_query);
|
|
||||||
#else
|
|
||||||
|
|
||||||
- ret = camel_db_add_to_transaction (cdb, del_query, ex);
|
|
||||||
+ if (delete_old_record)
|
|
||||||
+ ret = camel_db_add_to_transaction (cdb, del_query, ex);
|
|
||||||
ret = camel_db_add_to_transaction (cdb, ins_query, ex);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
- sqlite3_free (del_query);
|
|
||||||
+ if (delete_old_record)
|
|
||||||
+ sqlite3_free (del_query);
|
|
||||||
sqlite3_free (ins_query);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
@@ -1198,3 +1219,39 @@
|
|
||||||
CAMEL_DB_RELEASE_SQLITE_MEMORY;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+int camel_db_start_in_memory_transactions (CamelDB *cdb, CamelException *ex)
|
|
||||||
+{
|
|
||||||
+ int ret;
|
|
||||||
+ char *cmd = sqlite3_mprintf ("ATTACH DATABASE ':memory:' AS %s", CAMEL_DB_IN_MEMORY_DB);
|
|
||||||
+
|
|
||||||
+ ret = camel_db_command (cdb, cmd, ex);
|
|
||||||
+ sqlite3_free (cmd);
|
|
||||||
+
|
|
||||||
+ cmd = sqlite3_mprintf ("CREATE TEMPORARY TABLE %Q ( uid TEXT PRIMARY KEY , flags INTEGER , msg_type INTEGER , read INTEGER , deleted INTEGER , replied INTEGER , important INTEGER , junk INTEGER , attachment INTEGER , msg_security INTEGER , size INTEGER , dsent NUMERIC , dreceived NUMERIC , subject TEXT , mail_from TEXT , mail_to TEXT , mail_cc TEXT , mlist TEXT , followup_flag TEXT , followup_completed_on TEXT , followup_due_by TEXT , part TEXT , labels TEXT , usertags TEXT , cinfo TEXT , bdata TEXT )", CAMEL_DB_IN_MEMORY_TABLE);
|
|
||||||
+ ret = camel_db_command (cdb, cmd, ex);
|
|
||||||
+ if (ret != 0 )
|
|
||||||
+ abort ();
|
|
||||||
+ sqlite3_free (cmd);
|
|
||||||
+
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int camel_db_flush_in_memory_transactions (CamelDB *cdb, const char * folder_name, CamelException *ex)
|
|
||||||
+{
|
|
||||||
+ int ret;
|
|
||||||
+ char *cmd = sqlite3_mprintf ("INSERT INTO %Q SELECT * FROM %Q", folder_name, CAMEL_DB_IN_MEMORY_TABLE);
|
|
||||||
+
|
|
||||||
+ ret = camel_db_command (cdb, cmd, ex);
|
|
||||||
+ sqlite3_free (cmd);
|
|
||||||
+
|
|
||||||
+ cmd = sqlite3_mprintf ("DROP TABLE %Q", CAMEL_DB_IN_MEMORY_TABLE);
|
|
||||||
+ ret = camel_db_command (cdb, cmd, ex);
|
|
||||||
+ sqlite3_free (cmd);
|
|
||||||
+
|
|
||||||
+ cmd = sqlite3_mprintf ("DETACH %Q", CAMEL_DB_IN_MEMORY_DB);
|
|
||||||
+ ret = camel_db_command (cdb, cmd, ex);
|
|
||||||
+ sqlite3_free (cmd);
|
|
||||||
+
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
Index: camel/camel-db.h
|
|
||||||
===================================================================
|
|
||||||
--- camel/camel-db.h (revision 9841)
|
|
||||||
+++ camel/camel-db.h (revision 9842)
|
|
||||||
@@ -4,8 +4,14 @@
|
|
||||||
#define __CAMEL_DB_H
|
|
||||||
#include <sqlite3.h>
|
|
||||||
#include <glib.h>
|
|
||||||
+
|
|
||||||
#define CAMEL_DB_FILE "folders.db"
|
|
||||||
|
|
||||||
+/* Hopefully no one will create a folder named EVO_IN_meM_hAnDlE */
|
|
||||||
+#define CAMEL_DB_IN_MEMORY_TABLE "EVO_IN_meM_hAnDlE.temp"
|
|
||||||
+#define CAMEL_DB_IN_MEMORY_DB "EVO_IN_meM_hAnDlE"
|
|
||||||
+#define CAMEL_DB_IN_MEMORY_TABLE_LIMIT 100000
|
|
||||||
+
|
|
||||||
#include "camel-exception.h"
|
|
||||||
|
|
||||||
typedef struct _CamelDBPrivate CamelDBPrivate;
|
|
||||||
@@ -132,6 +138,7 @@
|
|
||||||
int camel_db_prepare_message_info_table (CamelDB *cdb, const char *folder_name, CamelException *ex);
|
|
||||||
|
|
||||||
int camel_db_write_message_info_record (CamelDB *cdb, const char *folder_name, CamelMIRecord *record, CamelException *ex);
|
|
||||||
+int camel_db_write_fresh_message_info_record (CamelDB *cdb, const char *folder_name, CamelMIRecord *record, CamelException *ex);
|
|
||||||
int camel_db_read_message_info_records (CamelDB *cdb, const char *folder_name, gpointer p, CamelDBSelectCB read_mir_callback, CamelException *ex);
|
|
||||||
int camel_db_read_message_info_record_with_uid (CamelDB *cdb, const char *folder_name, const char *uid, gpointer p, CamelDBSelectCB read_mir_callback, CamelException *ex);
|
|
||||||
|
|
||||||
@@ -168,5 +175,9 @@
|
|
||||||
int camel_db_set_collate (CamelDB *cdb, const char *col, const char *collate, CamelDBCollate func);
|
|
||||||
/* Migration APIS */
|
|
||||||
int camel_db_migrate_vfolders_to_14(CamelDB *cdb, const char *folder, CamelException *ex);
|
|
||||||
+
|
|
||||||
+int camel_db_start_in_memory_transactions (CamelDB *cdb, CamelException *ex);
|
|
||||||
+int camel_db_flush_in_memory_transactions (CamelDB *cdb, const char * folder_name, CamelException *ex);
|
|
||||||
+
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Index: camel/camel-folder-summary.c
|
|
||||||
===================================================================
|
|
||||||
--- camel/camel-folder-summary.c (revision 9841)
|
|
||||||
+++ camel/camel-folder-summary.c (revision 9842)
|
|
||||||
@@ -129,7 +129,7 @@
|
|
||||||
static int content_info_save(CamelFolderSummary *, FILE *, CamelMessageContentInfo *);
|
|
||||||
static void content_info_free(CamelFolderSummary *, CamelMessageContentInfo *);
|
|
||||||
|
|
||||||
-static int save_message_infos_to_db (CamelFolderSummary *s, CamelException *ex);
|
|
||||||
+static int save_message_infos_to_db (CamelFolderSummary *s, gboolean fresh_mir, CamelException *ex);
|
|
||||||
static int camel_read_mir_callback (void * ref, int ncol, char ** cols, char ** name);
|
|
||||||
|
|
||||||
static char *next_uid_string(CamelFolderSummary *s);
|
|
||||||
@@ -1237,23 +1237,20 @@
|
|
||||||
if (fclose (in) != 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
+ record = (((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->summary_header_to_db (s, &ex));
|
|
||||||
+ if (!record) {
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- camel_db_begin_transaction (cdb, &ex);
|
|
||||||
+ ret = save_message_infos_to_db (s, TRUE, &ex);
|
|
||||||
|
|
||||||
- ret = save_message_infos_to_db (s, &ex);
|
|
||||||
-
|
|
||||||
if (ret != 0) {
|
|
||||||
- camel_db_abort_transaction (cdb, &ex);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
- camel_db_end_transaction (cdb, &ex);
|
|
||||||
-
|
|
||||||
- record = (((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->summary_header_to_db (s, &ex));
|
|
||||||
- if (!record) {
|
|
||||||
- return -1;
|
|
||||||
- }
|
|
||||||
|
|
||||||
+ camel_db_begin_transaction (cdb, &ex);
|
|
||||||
ret = camel_db_write_folder_info_record (cdb, record, &ex);
|
|
||||||
+ camel_db_end_transaction (cdb, &ex);
|
|
||||||
|
|
||||||
g_free (record->bdata);
|
|
||||||
g_free (record);
|
|
||||||
@@ -1321,17 +1318,24 @@
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+typedef struct {
|
|
||||||
+ CamelException *ex;
|
|
||||||
+ gboolean migration;
|
|
||||||
+ int progress;
|
|
||||||
+} SaveToDBArgs;
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
save_to_db_cb (gpointer key, gpointer value, gpointer data)
|
|
||||||
{
|
|
||||||
- CamelException *ex = (CamelException *)data;
|
|
||||||
+ SaveToDBArgs *args = (SaveToDBArgs *) data;
|
|
||||||
+ CamelException *ex = args->ex;
|
|
||||||
CamelMessageInfoBase *mi = (CamelMessageInfoBase *)value;
|
|
||||||
CamelFolderSummary *s = (CamelFolderSummary *)mi->summary;
|
|
||||||
char *folder_name = s->folder->full_name;
|
|
||||||
CamelDB *cdb = s->folder->parent_store->cdb_w;
|
|
||||||
CamelMIRecord *mir;
|
|
||||||
|
|
||||||
- if (!mi->dirty)
|
|
||||||
+ if (!args->migration && !mi->dirty)
|
|
||||||
return;
|
|
||||||
|
|
||||||
mir = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->message_info_to_db (s, (CamelMessageInfo *)mi);
|
|
||||||
@@ -1345,30 +1349,52 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (camel_db_write_message_info_record (cdb, folder_name, mir, ex) != 0) {
|
|
||||||
- camel_db_camel_mir_free (mir);
|
|
||||||
- return;
|
|
||||||
+ if (!args->migration) {
|
|
||||||
+ if (camel_db_write_message_info_record (cdb, folder_name, mir, ex) != 0) {
|
|
||||||
+ camel_db_camel_mir_free (mir);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ if (camel_db_write_fresh_message_info_record (cdb, CAMEL_DB_IN_MEMORY_TABLE, mir, ex) != 0) {
|
|
||||||
+ camel_db_camel_mir_free (mir);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (args->progress > CAMEL_DB_IN_MEMORY_TABLE_LIMIT) {
|
|
||||||
+ g_print ("BULK INsert limit reached \n");
|
|
||||||
+ camel_db_flush_in_memory_transactions (cdb, folder_name, ex);
|
|
||||||
+ camel_db_start_in_memory_transactions (cdb, ex);
|
|
||||||
+ args->progress = 0;
|
|
||||||
+ } else {
|
|
||||||
+ args->progress ++;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Reset the flags */
|
|
||||||
mi->dirty = FALSE;
|
|
||||||
+ mi->flags &= ~CAMEL_MESSAGE_FOLDER_FLAGGED;
|
|
||||||
|
|
||||||
camel_db_camel_mir_free (mir);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
-save_message_infos_to_db (CamelFolderSummary *s, CamelException *ex)
|
|
||||||
+save_message_infos_to_db (CamelFolderSummary *s, gboolean fresh_mirs, CamelException *ex)
|
|
||||||
{
|
|
||||||
CamelDB *cdb = s->folder->parent_store->cdb_w;
|
|
||||||
char *folder_name;
|
|
||||||
+ SaveToDBArgs args;
|
|
||||||
|
|
||||||
+ args.ex = ex;
|
|
||||||
+ args.migration = fresh_mirs;
|
|
||||||
+ args.progress = 0;
|
|
||||||
+
|
|
||||||
folder_name = s->folder->full_name;
|
|
||||||
if (camel_db_prepare_message_info_table (cdb, folder_name, ex) != 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
CAMEL_SUMMARY_LOCK(s, summary_lock);
|
|
||||||
/* Push MessageInfo-es */
|
|
||||||
- g_hash_table_foreach (s->loaded_infos, save_to_db_cb, ex);
|
|
||||||
+ g_hash_table_foreach (s->loaded_infos, save_to_db_cb, &args);
|
|
||||||
CAMEL_SUMMARY_UNLOCK(s, summary_lock);
|
|
||||||
/* FIXME[disk-summary] make sure we free the message infos that are loaded
|
|
||||||
* are freed if not used anymore or should we leave that to the timer? */
|
|
||||||
@@ -1398,7 +1424,7 @@
|
|
||||||
|
|
||||||
camel_db_begin_transaction (cdb, ex);
|
|
||||||
|
|
||||||
- ret = save_message_infos_to_db (s, ex);
|
|
||||||
+ ret = save_message_infos_to_db (s, FALSE, ex);
|
|
||||||
if (ret != 0) {
|
|
||||||
camel_db_abort_transaction (cdb, ex);
|
|
||||||
/* Failed, so lets reset the flag */
|
|
@ -1,40 +0,0 @@
|
|||||||
Index: servers/exchange/lib/e2k-autoconfig.c
|
|
||||||
===================================================================
|
|
||||||
--- servers/exchange/lib/e2k-autoconfig.c (revision 9780)
|
|
||||||
+++ servers/exchange/lib/e2k-autoconfig.c (working copy)
|
|
||||||
@@ -1516,6 +1516,8 @@ validate (const char *owa_url, char *use
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*result == E2K_AUTOCONFIG_OK) {
|
|
||||||
+ int len;
|
|
||||||
+
|
|
||||||
*result = e2k_autoconfig_check_global_catalog (ac, &op);
|
|
||||||
e2k_operation_free (&op);
|
|
||||||
|
|
||||||
@@ -1524,6 +1526,13 @@ validate (const char *owa_url, char *use
|
|
||||||
path = g_strdup (euri->path + 1);
|
|
||||||
e2k_uri_free (euri);
|
|
||||||
|
|
||||||
+ /* no slash at the end of path */
|
|
||||||
+ len = strlen (path);
|
|
||||||
+ while (len && path [len - 1] == '/') {
|
|
||||||
+ path [len - 1] = '\0';
|
|
||||||
+ len--;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* change a mailbox only if not set by the caller */
|
|
||||||
if (!exchange_params->mailbox || !*exchange_params->mailbox) {
|
|
||||||
mailbox = strrchr (path, '/');
|
|
||||||
@@ -1536,6 +1545,12 @@ validate (const char *owa_url, char *use
|
|
||||||
|
|
||||||
g_free (exchange_params->mailbox);
|
|
||||||
exchange_params->mailbox = g_strdup (mailbox);
|
|
||||||
+ } else {
|
|
||||||
+ /* always strip the mailbox part from the path */
|
|
||||||
+ char *slash = strrchr (path, '/');
|
|
||||||
+
|
|
||||||
+ if (slash)
|
|
||||||
+ *slash = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
exchange_params->owa_path = g_strdup_printf ("%s%s", "/", path);
|
|
@ -1,17 +0,0 @@
|
|||||||
--- camel/providers/groupwise/camel-groupwise-folder.c
|
|
||||||
+++ camel/providers/groupwise/camel-groupwise-folder.c
|
|
||||||
@@ -925,7 +925,13 @@ update_update (CamelSession *session, CamelSessionThreadMsg *msg)
|
|
||||||
done = FALSE;
|
|
||||||
m->slist = NULL;
|
|
||||||
|
|
||||||
- while (!done && !camel_application_is_exiting) {
|
|
||||||
+ while (!done) {
|
|
||||||
+
|
|
||||||
+ if (camel_application_is_exiting) {
|
|
||||||
+ CAMEL_SERVICE_REC_UNLOCK (gw_store, connect_lock);
|
|
||||||
+ return ;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
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) {
|
|
@ -1,11 +0,0 @@
|
|||||||
--- camel/camel-vee-summary.c
|
|
||||||
+++ camel/camel-vee-summary.c
|
|
||||||
@@ -42,7 +42,7 @@
|
|
||||||
#define d(x)
|
|
||||||
|
|
||||||
static CamelFolderSummaryClass *camel_vee_summary_parent;
|
|
||||||
-const char *unread_str = " (and\n \n (match-all (not (system-flag \"Seen\")))\n \n )\n; (match-threads \"all\" (and\n \n (match-all (not (system-flag \"Seen\")))\n \n )\n)\n;";
|
|
||||||
+const char *unread_str = " (and\n \n (match-all (not (system-flag \"Seen\")))\n \n )\n; (or\n \n (match-all (not (system-flag \"Seen\")))\n \n )\n; (match-threads \"all\" (and\n \n (match-all (not (system-flag \"Seen\")))\n \n )\n)\n; (match-threads \"all\" (or\n \n (match-all (not (system-flag \"Seen\")))\n \n )\n)\n;";
|
|
||||||
|
|
||||||
static void
|
|
||||||
vee_message_info_free(CamelFolderSummary *s, CamelMessageInfo *info)
|
|
@ -1,55 +0,0 @@
|
|||||||
Index: addressbook/backends/groupwise/e-book-backend-groupwise.c
|
|
||||||
===================================================================
|
|
||||||
--- addressbook/backends/groupwise/e-book-backend-groupwise.c (revision 9761)
|
|
||||||
+++ addressbook/backends/groupwise/e-book-backend-groupwise.c (working copy)
|
|
||||||
@@ -1168,7 +1168,9 @@
|
|
||||||
int element_type;
|
|
||||||
int i;
|
|
||||||
gboolean is_contact_list;
|
|
||||||
+ gboolean is_organization;
|
|
||||||
|
|
||||||
+ is_organization = e_gw_item_get_item_type (item) == E_GW_ITEM_TYPE_ORGANISATION ? TRUE: FALSE;
|
|
||||||
is_contact_list = e_gw_item_get_item_type (item) == E_GW_ITEM_TYPE_GROUP ? TRUE: FALSE;
|
|
||||||
e_contact_set (contact, E_CONTACT_IS_LIST, GINT_TO_POINTER (is_contact_list));
|
|
||||||
if (is_contact_list)
|
|
||||||
@@ -1179,9 +1181,11 @@
|
|
||||||
|
|
||||||
if(element_type == ELEMENT_TYPE_SIMPLE) {
|
|
||||||
if (mappings[i].field_id != E_CONTACT_BOOK_URI) {
|
|
||||||
- value = e_gw_item_get_field_value (item, mappings[i].element_name);
|
|
||||||
- if(value != NULL)
|
|
||||||
- e_contact_set (contact, mappings[i].field_id, value);
|
|
||||||
+ if (!is_organization) {
|
|
||||||
+ value = e_gw_item_get_field_value (item, mappings[i].element_name);
|
|
||||||
+ if(value != NULL)
|
|
||||||
+ e_contact_set (contact, mappings[i].field_id, value);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
} else if (element_type == ELEMENT_TYPE_COMPLEX) {
|
|
||||||
if (mappings[i].field_id == E_CONTACT_CATEGORIES) {
|
|
||||||
@@ -1251,10 +1255,6 @@
|
|
||||||
element_type = mappings[i].element_type;
|
|
||||||
if (element_type == ELEMENT_TYPE_SIMPLE) {
|
|
||||||
value = e_contact_get(contact, mappings[i].field_id);
|
|
||||||
- if (mappings[i].field_id == E_CONTACT_ORG) {
|
|
||||||
- set_organization_in_gw_item (item, contact, egwb);
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
if (value != NULL)
|
|
||||||
e_gw_item_set_field_value (item, mappings[i].element_name, value);
|
|
||||||
} else if (element_type == ELEMENT_TYPE_COMPLEX) {
|
|
||||||
@@ -1453,14 +1453,7 @@
|
|
||||||
|
|
||||||
if (e_contact_get (contact, E_CONTACT_IS_LIST))
|
|
||||||
set_member_changes (new_item, old_item, egwb);
|
|
||||||
- new_org = e_gw_item_get_field_value (new_item, "organization");
|
|
||||||
- old_org = e_gw_item_get_field_value (old_item, "organization");
|
|
||||||
- if (new_org && *new_org) {
|
|
||||||
|
|
||||||
- if ((old_org == NULL) || (old_org && strcmp (new_org, old_org)) != 0)
|
|
||||||
- set_organization_in_gw_item (new_item, contact, egwb);
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
set_changes_in_gw_item (new_item, old_item);
|
|
||||||
|
|
||||||
e_gw_item_set_item_type (new_item, e_gw_item_get_item_type (old_item));
|
|
@ -1,10 +0,0 @@
|
|||||||
--- addressbook/libedata-book/e-data-book-view.c
|
|
||||||
+++ addressbook/libedata-book/e-data-book-view.c
|
|
||||||
@@ -247,7 +247,6 @@ e_data_book_view_notify_update (EDataBookView *book_view,
|
|
||||||
|
|
||||||
id = e_contact_get_const (contact, E_CONTACT_UID);
|
|
||||||
if (!id) {
|
|
||||||
- g_object_unref (contact);
|
|
||||||
g_mutex_unlock (book_view->priv->pending_mutex);
|
|
||||||
return;
|
|
||||||
}
|
|
@ -1,36 +0,0 @@
|
|||||||
--- camel/camel-folder-summary.c
|
|
||||||
+++ camel/camel-folder-summary.c
|
|
||||||
@@ -67,6 +67,7 @@
|
|
||||||
|
|
||||||
/* Make 5 minutes as default cache drop */
|
|
||||||
#define SUMMARY_CACHE_DROP 300
|
|
||||||
+#define dd(x) if (camel_debug("sync")) x
|
|
||||||
|
|
||||||
static pthread_mutex_t info_lock = PTHREAD_MUTEX_INITIALIZER;
|
|
||||||
|
|
||||||
@@ -823,12 +824,13 @@ remove_cache (CamelSession *session, CamelSessionThreadMsg *msg)
|
|
||||||
CamelFolderSummary *s = m->summary;
|
|
||||||
|
|
||||||
CAMEL_DB_RELEASE_SQLITE_MEMORY;
|
|
||||||
-
|
|
||||||
+ camel_folder_sync (s->folder, FALSE, NULL);
|
|
||||||
+
|
|
||||||
if (time(NULL) - s->cache_load_time < SUMMARY_CACHE_DROP)
|
|
||||||
return;
|
|
||||||
|
|
||||||
- d(printf("removing cache for %s %d %p\n", s->folder ? s->folder->full_name : s->summary_path, g_hash_table_size (s->loaded_infos), s->loaded_infos));
|
|
||||||
- #warning "hack. fix it"
|
|
||||||
+ dd(printf("removing cache for %s %d %p\n", s->folder ? s->folder->full_name : s->summary_path, g_hash_table_size (s->loaded_infos), s->loaded_infos));
|
|
||||||
+
|
|
||||||
CAMEL_SUMMARY_LOCK (s, summary_lock);
|
|
||||||
g_hash_table_foreach_remove (s->loaded_infos, (GHRFunc) remove_item, s);
|
|
||||||
CAMEL_SUMMARY_UNLOCK (s, summary_lock);
|
|
||||||
@@ -1378,7 +1380,7 @@ camel_folder_summary_save_to_db (CamelFolderSummary *s, CamelException *ex)
|
|
||||||
if (!count)
|
|
||||||
return camel_folder_summary_header_save_to_db (s, ex);
|
|
||||||
|
|
||||||
- d(printf("Saving %d/%d dirty records of %s\n", count, g_hash_table_size (s->loaded_infos), s->folder->full_name));
|
|
||||||
+ dd(printf("Saving %d/%d dirty records of %s\n", count, g_hash_table_size (s->loaded_infos), s->folder->full_name));
|
|
||||||
|
|
||||||
camel_db_begin_transaction (cdb, ex);
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
|||||||
--- calendar/backends/groupwise/e-cal-backend-groupwise.c
|
|
||||||
+++ calendar/backends/groupwise/e-cal-backend-groupwise.c
|
|
||||||
@@ -2581,8 +2581,12 @@ receive_object (ECalBackendGroupwise *cbgw, EDataCal *cal, icalcomponent *icalco
|
|
||||||
e_cal_component_free_id (id);
|
|
||||||
} else {
|
|
||||||
char *comp_str = NULL;
|
|
||||||
+ ECalComponentTransparency transp;
|
|
||||||
|
|
||||||
change_status (component, pstatus, e_gw_connection_get_user_email (priv->cnc));
|
|
||||||
+ e_cal_component_get_transparency (comp, &transp);
|
|
||||||
+ e_cal_component_set_transparency (component, transp);
|
|
||||||
+
|
|
||||||
e_cal_backend_cache_put_component (priv->cache, component);
|
|
||||||
comp_str = e_cal_component_get_as_string (component);
|
|
||||||
|
|
@ -1,96 +0,0 @@
|
|||||||
--- addressbook/backends/groupwise/e-book-backend-groupwise.c
|
|
||||||
+++ addressbook/backends/groupwise/e-book-backend-groupwise.c
|
|
||||||
@@ -44,6 +44,7 @@
|
|
||||||
#include "libedataserver/e-flag.h"
|
|
||||||
#include "libedataserver/e-url.h"
|
|
||||||
#include "libebook/e-contact.h"
|
|
||||||
+#include "libebook/e-destination.h"
|
|
||||||
#include "libedata-book/e-book-backend-sexp.h"
|
|
||||||
#include "libedata-book/e-data-book.h"
|
|
||||||
#include "libedata-book/e-data-book-view.h"
|
|
||||||
@@ -798,7 +799,7 @@ populate_contact_members (EContact *contact, gpointer data)
|
|
||||||
static void
|
|
||||||
set_members_in_gw_item (EGwItem *item, EContact *contact, EBookBackendGroupwise *egwb)
|
|
||||||
{
|
|
||||||
- GList *members, *temp, *items, *p, *emails_without_ids;
|
|
||||||
+ GList *members, *temp, *dtemp, *items, *p, *emails_without_ids, *dest_without_ids;
|
|
||||||
GList *group_members;
|
|
||||||
char *email;
|
|
||||||
EGwFilter *filter;
|
|
||||||
@@ -816,10 +817,12 @@ set_members_in_gw_item (EGwItem *item, EContact *contact, EBookBackendGroupwise
|
|
||||||
filter = e_gw_filter_new ();
|
|
||||||
group_members = NULL;
|
|
||||||
emails_without_ids = NULL;
|
|
||||||
+ dest_without_ids = NULL;
|
|
||||||
|
|
||||||
for ( ;temp != NULL; temp = g_list_next (temp)) {
|
|
||||||
EVCardAttribute *attr = temp->data;
|
|
||||||
id = email = NULL;
|
|
||||||
+ EDestination *dest = e_destination_new ();
|
|
||||||
|
|
||||||
for (p = e_vcard_attribute_get_params (attr); p; p = p->next) {
|
|
||||||
EVCardAttributeParam *param = p->data;
|
|
||||||
@@ -856,8 +859,11 @@ set_members_in_gw_item (EGwItem *item, EContact *contact, EBookBackendGroupwise
|
|
||||||
member->id = g_strdup (id);
|
|
||||||
group_members = g_list_append (group_members, member);
|
|
||||||
} else if (email) {
|
|
||||||
+ e_destination_set_raw (dest, email);
|
|
||||||
e_gw_filter_add_filter_component (filter, E_GW_FILTER_OP_EQUAL, "emailList/@primary", email);
|
|
||||||
emails_without_ids = g_list_append (emails_without_ids, g_strdup (email));
|
|
||||||
+ dest_without_ids = g_list_append (dest_without_ids, dest);
|
|
||||||
+
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -874,8 +880,15 @@ set_members_in_gw_item (EGwItem *item, EContact *contact, EBookBackendGroupwise
|
|
||||||
temp_item = E_GW_ITEM (items->data);
|
|
||||||
emails = e_gw_item_get_email_list (temp_item);
|
|
||||||
if (emails_without_ids && (ptr = g_list_find_custom (emails_without_ids, emails->data, (GCompareFunc)strcasecmp ))) {
|
|
||||||
+ int pos = g_list_position (emails_without_ids, ptr);
|
|
||||||
emails_without_ids = g_list_remove_link (emails_without_ids, ptr);
|
|
||||||
g_list_free (ptr);
|
|
||||||
+
|
|
||||||
+ ptr = g_list_nth (dest_without_ids, pos);
|
|
||||||
+ dest_without_ids = g_list_remove_link (dest_without_ids, ptr);
|
|
||||||
+ g_object_unref (ptr->data);
|
|
||||||
+ g_list_free (ptr);
|
|
||||||
+
|
|
||||||
id = g_strdup (e_gw_item_get_id (temp_item));
|
|
||||||
member = g_new0 (EGroupMember , 1);
|
|
||||||
member->id = id;
|
|
||||||
@@ -893,19 +906,21 @@ set_members_in_gw_item (EGwItem *item, EContact *contact, EBookBackendGroupwise
|
|
||||||
*/
|
|
||||||
|
|
||||||
temp = emails_without_ids ;
|
|
||||||
- for (; temp != NULL; temp = g_list_next (temp)) {
|
|
||||||
+ dtemp = dest_without_ids;
|
|
||||||
+ for (; temp != NULL && dtemp != NULL ; temp = g_list_next (temp), dtemp = g_list_next(dtemp)) {
|
|
||||||
EContact *new_contact = e_contact_new ();
|
|
||||||
EGwItem *new_item = e_gw_item_new_empty ();
|
|
||||||
FullName *full_name;
|
|
||||||
+ EDestination *tdest = (EDestination *)dtemp->data;
|
|
||||||
|
|
||||||
- e_contact_set (new_contact,E_CONTACT_FULL_NAME, e_contact_name_from_string (strdup (temp->data)));
|
|
||||||
- e_contact_set (new_contact, E_CONTACT_EMAIL_1, strdup (temp->data));
|
|
||||||
+ e_contact_set (new_contact,E_CONTACT_FULL_NAME, e_contact_name_from_string (strdup (e_destination_get_email(tdest))));
|
|
||||||
+ e_contact_set (new_contact, E_CONTACT_EMAIL_1, strdup (e_destination_get_email(tdest)));
|
|
||||||
e_contact_set (new_contact, E_CONTACT_IS_LIST, GINT_TO_POINTER (FALSE));
|
|
||||||
e_gw_item_set_item_type (new_item, E_GW_ITEM_TYPE_CONTACT);
|
|
||||||
e_gw_item_set_container_id (new_item, g_strdup(egwb->priv->container_id));
|
|
||||||
full_name = g_new0 (FullName, 1);
|
|
||||||
full_name->name_prefix = NULL;
|
|
||||||
- full_name->first_name = g_strdup(temp->data);
|
|
||||||
+ full_name->first_name = g_strdup(e_destination_get_name(tdest));
|
|
||||||
full_name->middle_name = NULL;
|
|
||||||
full_name->last_name = NULL;
|
|
||||||
full_name->name_suffix = NULL;
|
|
||||||
@@ -959,6 +974,9 @@ set_members_in_gw_item (EGwItem *item, EContact *contact, EBookBackendGroupwise
|
|
||||||
g_list_free (members);
|
|
||||||
g_list_foreach (emails_without_ids, (GFunc) g_free, NULL);
|
|
||||||
g_list_free (emails_without_ids);
|
|
||||||
+ g_list_foreach (dest_without_ids, (GFunc) g_object_unref, NULL);
|
|
||||||
+ g_list_free (dest_without_ids);
|
|
||||||
+
|
|
||||||
g_list_free (items);
|
|
||||||
e_gw_item_set_member_list (item, group_members);
|
|
||||||
}
|
|
@ -1,12 +0,0 @@
|
|||||||
--- addressbook/backends/groupwise/e-book-backend-groupwise.c
|
|
||||||
+++ addressbook/backends/groupwise/e-book-backend-groupwise.c
|
|
||||||
@@ -848,6 +848,9 @@ set_members_in_gw_item (EGwItem *item, EContact *contact, EBookBackendGroupwise
|
|
||||||
email = v ? v->data : NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ if (!id && !email)
|
|
||||||
+ email = e_vcard_attribute_get_value (attr);
|
|
||||||
if (id) {
|
|
||||||
member = g_new0 (EGroupMember , 1);
|
|
||||||
member->id = g_strdup (id);
|
|
@ -1,90 +0,0 @@
|
|||||||
Index: camel/providers/imap/camel-imap-store.c
|
|
||||||
===================================================================
|
|
||||||
--- camel/providers/imap/camel-imap-store.c (revision 9761)
|
|
||||||
+++ camel/providers/imap/camel-imap-store.c (working copy)
|
|
||||||
@@ -2385,7 +2385,7 @@ parse_list_response_as_folder_info (Came
|
|
||||||
if (si == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
- newflags = (si->info.flags & CAMEL_STORE_INFO_FOLDER_SUBSCRIBED) | (flags & ~CAMEL_STORE_INFO_FOLDER_SUBSCRIBED);
|
|
||||||
+ newflags = (si->info.flags & (CAMEL_STORE_INFO_FOLDER_SUBSCRIBED | CAMEL_STORE_INFO_FOLDER_CHECK_FOR_NEW)) | (flags & ~CAMEL_STORE_INFO_FOLDER_SUBSCRIBED);
|
|
||||||
if (si->info.flags != newflags) {
|
|
||||||
si->info.flags = newflags;
|
|
||||||
camel_store_summary_touch((CamelStoreSummary *)imap_store->summary);
|
|
||||||
@@ -3074,12 +3074,19 @@ imap_can_refresh_folder (CamelStore *sto
|
|
||||||
(camel_url_get_param (((CamelService *)store)->url, "check_all") != NULL) ||
|
|
||||||
(camel_url_get_param (((CamelService *)store)->url, "check_lsub") != NULL && (info->flags & CAMEL_FOLDER_SUBSCRIBED) != 0);
|
|
||||||
|
|
||||||
- if (!res && !camel_exception_is_set (ex)) {
|
|
||||||
- CamelFolder *folder;
|
|
||||||
+ if (!res && !camel_exception_is_set (ex) && CAMEL_IS_IMAP_STORE (store)) {
|
|
||||||
+ CamelStoreInfo *si;
|
|
||||||
+ CamelStoreSummary *sm = CAMEL_STORE_SUMMARY (((CamelImapStore *)(store))->summary);
|
|
||||||
|
|
||||||
- folder = camel_store_get_folder (store, info->full_name, 0, ex);
|
|
||||||
- if (folder && CAMEL_IS_IMAP_FOLDER (folder))
|
|
||||||
- res = CAMEL_IMAP_FOLDER (folder)->check_folder;
|
|
||||||
+ if (!sm)
|
|
||||||
+ return FALSE;
|
|
||||||
+
|
|
||||||
+ si = camel_store_summary_path (sm, info->full_name);
|
|
||||||
+ if (si) {
|
|
||||||
+ res = (si->flags & CAMEL_STORE_INFO_FOLDER_CHECK_FOR_NEW) != 0 ? TRUE : FALSE;
|
|
||||||
+
|
|
||||||
+ camel_store_summary_info_free (sm, si);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
Index: camel/providers/imap/camel-imap-folder.c
|
|
||||||
===================================================================
|
|
||||||
--- camel/providers/imap/camel-imap-folder.c (revision 9761)
|
|
||||||
+++ camel/providers/imap/camel-imap-folder.c (working copy)
|
|
||||||
@@ -473,6 +473,7 @@ imap_getv(CamelObject *object, CamelExce
|
|
||||||
break; }
|
|
||||||
/* imap args */
|
|
||||||
case CAMEL_IMAP_FOLDER_ARG_CHECK_FOLDER:
|
|
||||||
+ /* The internal value has precedence before the one stored in the summary. */
|
|
||||||
*arg->ca_int = ((CamelImapFolder *)object)->check_folder;
|
|
||||||
break;
|
|
||||||
/* CamelObject args */
|
|
||||||
@@ -514,8 +515,27 @@ imap_setv (CamelObject *object, CamelExc
|
|
||||||
switch (tag & CAMEL_ARG_TAG) {
|
|
||||||
case CAMEL_IMAP_FOLDER_ARG_CHECK_FOLDER:
|
|
||||||
if (((CamelImapFolder *)object)->check_folder != arg->ca_int) {
|
|
||||||
+ CamelFolder *folder = (CamelFolder *)object;
|
|
||||||
+
|
|
||||||
((CamelImapFolder *)object)->check_folder = arg->ca_int;
|
|
||||||
save = 1;
|
|
||||||
+
|
|
||||||
+ /* store both to the summary and to folder cmeta, to have this value restored correctly next time folder is fully loaded */
|
|
||||||
+ if (folder->parent_store && CAMEL_IS_IMAP_STORE (folder->parent_store)) {
|
|
||||||
+ CamelStoreInfo *si;
|
|
||||||
+ CamelStoreSummary *sm = CAMEL_STORE_SUMMARY (((CamelImapStore *)(folder->parent_store))->summary);
|
|
||||||
+
|
|
||||||
+ si = camel_store_summary_path (sm, folder->full_name);
|
|
||||||
+ if (si) {
|
|
||||||
+ if ((si->flags & CAMEL_STORE_INFO_FOLDER_CHECK_FOR_NEW) != 0 ? 1 : 0 != (arg->ca_int) ? 1 : 0) {
|
|
||||||
+ si->flags = (si->flags & (~CAMEL_STORE_INFO_FOLDER_CHECK_FOR_NEW)) | ((arg->ca_int) ? CAMEL_STORE_INFO_FOLDER_CHECK_FOR_NEW : 0);
|
|
||||||
+ camel_store_summary_touch (sm);
|
|
||||||
+ camel_store_summary_save (sm);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ camel_store_summary_info_free (sm, si);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
Index: camel/camel-store-summary.h
|
|
||||||
===================================================================
|
|
||||||
--- camel/camel-store-summary.h (revision 9761)
|
|
||||||
+++ camel/camel-store-summary.h (working copy)
|
|
||||||
@@ -57,6 +57,7 @@ typedef enum _CamelStoreInfoFlags {
|
|
||||||
|
|
||||||
/* not in camle-store.h yet */
|
|
||||||
CAMEL_STORE_INFO_FOLDER_READONLY = 1<<13,
|
|
||||||
+ CAMEL_STORE_INFO_FOLDER_CHECK_FOR_NEW = 1<<14,
|
|
||||||
|
|
||||||
CAMEL_STORE_INFO_FOLDER_FLAGGED = 1<<31
|
|
||||||
} CamelStoreInfoFlags;
|
|
@ -1,32 +0,0 @@
|
|||||||
--- camel/camel-db.c
|
|
||||||
+++ camel/camel-db.c
|
|
||||||
@@ -190,7 +190,8 @@ camel_db_begin_transaction (CamelDB *cdb, CamelException *ex)
|
|
||||||
{
|
|
||||||
if (!cdb)
|
|
||||||
return -1;
|
|
||||||
- g_static_rec_mutex_lock (&trans_lock);
|
|
||||||
+ if (g_getenv("SQLITE_TRANSLOCK"))
|
|
||||||
+ g_static_rec_mutex_lock (&trans_lock);
|
|
||||||
|
|
||||||
g_mutex_lock (cdb->lock);
|
|
||||||
return (cdb_sql_exec (cdb->db, "BEGIN", ex));
|
|
||||||
@@ -207,7 +208,8 @@ camel_db_end_transaction (CamelDB *cdb, CamelException *ex)
|
|
||||||
ret = cdb_sql_exec (cdb->db, "COMMIT", ex);
|
|
||||||
END;
|
|
||||||
g_mutex_unlock (cdb->lock);
|
|
||||||
- g_static_rec_mutex_unlock (&trans_lock);
|
|
||||||
+ if (g_getenv("SQLITE_TRANSLOCK"))
|
|
||||||
+ g_static_rec_mutex_unlock (&trans_lock);
|
|
||||||
|
|
||||||
CAMEL_DB_RELEASE_SQLITE_MEMORY;
|
|
||||||
|
|
||||||
@@ -221,7 +223,8 @@ camel_db_abort_transaction (CamelDB *cdb, CamelException *ex)
|
|
||||||
|
|
||||||
ret = cdb_sql_exec (cdb->db, "ROLLBACK", ex);
|
|
||||||
g_mutex_unlock (cdb->lock);
|
|
||||||
- g_static_rec_mutex_unlock (&trans_lock);
|
|
||||||
+ if (g_getenv("SQLITE_TRANSLOCK"))
|
|
||||||
+ g_static_rec_mutex_unlock (&trans_lock);
|
|
||||||
CAMEL_DB_RELEASE_SQLITE_MEMORY;
|
|
||||||
|
|
||||||
return ret;
|
|
@ -1,80 +0,0 @@
|
|||||||
--- /home/psankar/svn/gnome224/evolution-data-server/camel/providers/groupwise/camel-groupwise-folder.c 2008-10-31 15:59:21.000000000 +0530
|
|
||||||
+++ camel/providers/groupwise/camel-groupwise-folder.c 2008-11-03 13:58:27.000000000 +0530
|
|
||||||
@@ -1342,6 +1342,9 @@ gw_update_cache (CamelFolder *folder, GL
|
|
||||||
mi->info.content = camel_folder_summary_content_info_new (folder->summary);
|
|
||||||
mi->info.content->type = camel_content_type_new ("multipart", "mixed");
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ if (type == E_GW_ITEM_TYPE_APPOINTMENT || type == E_GW_ITEM_TYPE_TASK || type == E_GW_ITEM_TYPE_NOTE)
|
|
||||||
+ camel_message_info_set_user_flag ((CamelMessageInfo*)mi, "$has_cal", TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
rk = e_gw_item_get_recurrence_key (item);
|
|
||||||
@@ -1567,6 +1570,9 @@ gw_update_summary ( CamelFolder *folder,
|
|
||||||
mi->info.content = camel_folder_summary_content_info_new (folder->summary);
|
|
||||||
mi->info.content->type = camel_content_type_new ("multipart", "mixed");
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ if (type == E_GW_ITEM_TYPE_APPOINTMENT || type == E_GW_ITEM_TYPE_TASK || type == E_GW_ITEM_TYPE_NOTE)
|
|
||||||
+ camel_message_info_set_user_flag ((CamelMessageInfo*)mi, "$has_cal", TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
rk = e_gw_item_get_recurrence_key (item);
|
|
||||||
--- /home/psankar/svn/gnome224/evolution-data-server/camel/camel-folder-summary.c 2008-10-31 15:59:21.000000000 +0530
|
|
||||||
+++ camel/camel-folder-summary.c 2008-10-31 15:52:43.000000000 +0530
|
|
||||||
@@ -3600,6 +3607,7 @@ summary_build_content_info(CamelFolderSu
|
|
||||||
struct _CamelFolderSummaryPrivate *p = _PRIVATE(s);
|
|
||||||
CamelMimeFilterCharset *mfc;
|
|
||||||
CamelMessageContentInfo *part;
|
|
||||||
+ const char *calendar_header;
|
|
||||||
|
|
||||||
d(printf("building content info\n"));
|
|
||||||
|
|
||||||
@@ -3622,6 +3630,16 @@ summary_build_content_info(CamelFolderSu
|
|
||||||
)
|
|
||||||
camel_message_info_set_flags(msginfo, CAMEL_MESSAGE_SECURE, CAMEL_MESSAGE_SECURE);
|
|
||||||
|
|
||||||
+ calendar_header = camel_mime_parser_header (mp, "Content-class", NULL);
|
|
||||||
+ if (calendar_header && g_ascii_strcasecmp (calendar_header, "urn:content-classes:calendarmessage") != 0)
|
|
||||||
+ calendar_header = NULL;
|
|
||||||
+
|
|
||||||
+ if (!calendar_header)
|
|
||||||
+ calendar_header = camel_mime_parser_header (mp, "X-Calendar-Attachment", NULL);
|
|
||||||
+
|
|
||||||
+ if (calendar_header)
|
|
||||||
+ camel_message_info_set_user_flag (msginfo, "$has_cal", TRUE);
|
|
||||||
+
|
|
||||||
if (p->index && camel_content_type_is(ct, "text", "*")) {
|
|
||||||
char *encoding;
|
|
||||||
const char *charset;
|
|
||||||
@@ -3751,6 +3769,7 @@ summary_build_content_info_message(Camel
|
|
||||||
struct _CamelFolderSummaryPrivate *p = _PRIVATE(s);
|
|
||||||
CamelMessageContentInfo *info = NULL, *child;
|
|
||||||
CamelContentType *ct;
|
|
||||||
+ const struct _camel_header_raw *header;
|
|
||||||
|
|
||||||
if (s->build_content)
|
|
||||||
info = ((CamelFolderSummaryClass *)(CAMEL_OBJECT_GET_CLASS(s)))->content_info_new_from_message(s, object);
|
|
||||||
@@ -3780,6 +3799,22 @@ summary_build_content_info_message(Camel
|
|
||||||
camel_message_info_set_flags(msginfo, CAMEL_MESSAGE_SECURE, CAMEL_MESSAGE_SECURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ for (header = object->headers; header; header = header->next) {
|
|
||||||
+ const char *value = header->value;
|
|
||||||
+
|
|
||||||
+ /* skip preceding spaces in the value */
|
|
||||||
+ while (value && *value && isspace (*value))
|
|
||||||
+ value++;
|
|
||||||
+
|
|
||||||
+ if (header->name && value && (
|
|
||||||
+ (g_ascii_strcasecmp (header->name, "Content-class") == 0 && g_ascii_strcasecmp (value, "urn:content-classes:calendarmessage") == 0) ||
|
|
||||||
+ (g_ascii_strcasecmp (header->name, "X-Calendar-Attachment") == 0)))
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (header)
|
|
||||||
+ camel_message_info_set_user_flag (msginfo, "$has_cal", TRUE);
|
|
||||||
+
|
|
||||||
/* using the object types is more accurate than using the mime/types */
|
|
||||||
if (CAMEL_IS_MULTIPART(containee)) {
|
|
||||||
parts = camel_multipart_get_number(CAMEL_MULTIPART(containee));
|
|
@ -1,491 +0,0 @@
|
|||||||
--- camel/camel-folder.c 2008-12-15 09:10:26 +0000
|
|
||||||
+++ camel/camel-folder.c 2008-12-16 06:57:35 +0000
|
|
||||||
@@ -88,6 +88,7 @@
|
|
||||||
CamelException *ex);
|
|
||||||
|
|
||||||
static GPtrArray *get_uids (CamelFolder *folder);
|
|
||||||
+static GPtrArray *get_uncached_uids (CamelFolder *, GPtrArray * uids, CamelException *);
|
|
||||||
static void free_uids (CamelFolder *folder,
|
|
||||||
GPtrArray *array);
|
|
||||||
static void sort_uids (CamelFolder *folder,
|
|
||||||
@@ -148,6 +149,7 @@
|
|
||||||
camel_folder_class->set_message_user_tag = set_message_user_tag;
|
|
||||||
camel_folder_class->get_message = get_message;
|
|
||||||
camel_folder_class->get_uids = get_uids;
|
|
||||||
+ camel_folder_class->get_uncached_uids = get_uncached_uids;
|
|
||||||
camel_folder_class->free_uids = free_uids;
|
|
||||||
camel_folder_class->sort_uids = sort_uids;
|
|
||||||
camel_folder_class->get_summary = get_summary;
|
|
||||||
@@ -163,6 +165,7 @@
|
|
||||||
camel_folder_class->delete = delete;
|
|
||||||
camel_folder_class->rename = folder_rename;
|
|
||||||
camel_folder_class->freeze = freeze;
|
|
||||||
+ camel_folder_class->sync_message = NULL;
|
|
||||||
camel_folder_class->thaw = thaw;
|
|
||||||
camel_folder_class->is_frozen = is_frozen;
|
|
||||||
camel_folder_class->get_quota_info = get_quota_info;
|
|
||||||
@@ -1137,6 +1140,35 @@
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/**
|
|
||||||
+ * camel_folder_sync_message:
|
|
||||||
+ * @folder: a #CamelFolder object
|
|
||||||
+ * @uid: the UID
|
|
||||||
+ * @ex: a #CamelException
|
|
||||||
+ *
|
|
||||||
+ * Ensure that a message identified by UID has been synced in the folder (so
|
|
||||||
+ * that camel_folder_get_message on it later will work in offline mode).
|
|
||||||
+ *
|
|
||||||
+ * Returns: void.
|
|
||||||
+ **/
|
|
||||||
+void
|
|
||||||
+camel_folder_sync_message (CamelFolder *folder, const char *uid, CamelException *ex)
|
|
||||||
+{
|
|
||||||
+ g_return_if_fail (CAMEL_IS_FOLDER (folder));
|
|
||||||
+ CAMEL_FOLDER_REC_LOCK(folder, lock);
|
|
||||||
+
|
|
||||||
+ /* Use the sync_message method if the class implements it. */
|
|
||||||
+ if (CF_CLASS (folder)->sync_message)
|
|
||||||
+ CF_CLASS (folder)->sync_message (folder, uid, ex);
|
|
||||||
+ else {
|
|
||||||
+ CamelMimeMessage *message;
|
|
||||||
+ message = CF_CLASS (folder)->get_message (folder, uid, ex);
|
|
||||||
+ if (message)
|
|
||||||
+ camel_object_unref(message);
|
|
||||||
+ }
|
|
||||||
+ CAMEL_FOLDER_REC_UNLOCK(folder, lock);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static GPtrArray *
|
|
||||||
get_uids(CamelFolder *folder)
|
|
||||||
{
|
|
||||||
@@ -1200,6 +1232,41 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
+/**
|
|
||||||
+ * Default: return the uids we are given.
|
|
||||||
+ */
|
|
||||||
+static GPtrArray *
|
|
||||||
+get_uncached_uids (CamelFolder *folder, GPtrArray * uids, CamelException *ex)
|
|
||||||
+{
|
|
||||||
+ GPtrArray *result;
|
|
||||||
+ int i;
|
|
||||||
+
|
|
||||||
+ result = g_ptr_array_new();
|
|
||||||
+
|
|
||||||
+ g_ptr_array_set_size(result, uids->len);
|
|
||||||
+ for (i = 0; i < uids->len; i++)
|
|
||||||
+ result->pdata[i] = (char *)camel_pstring_strdup(uids->pdata[i]);
|
|
||||||
+ return result;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * camel_folder_get_uncached_uids:
|
|
||||||
+ * @folder: a #CamelFolder object
|
|
||||||
+ * @uids: the array of uids to filter down to uncached ones.
|
|
||||||
+ *
|
|
||||||
+ * Returns the known-uncached uids from a list of uids. It may return uids
|
|
||||||
+ * which are locally cached but should never filter out a uid which is not
|
|
||||||
+ * locally cached. Free the result by called #camel_folder_free_uids.
|
|
||||||
+ * Frees the array of UIDs returned by #camel_folder_get_uids.
|
|
||||||
+ **/
|
|
||||||
+GPtrArray *
|
|
||||||
+camel_folder_get_uncached_uids (CamelFolder *folder, GPtrArray * uids, CamelException *ex)
|
|
||||||
+{
|
|
||||||
+ g_return_if_fail (CAMEL_IS_FOLDER (folder));
|
|
||||||
+ return CF_CLASS (folder)->get_uncached_uids(folder, uids, ex);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
static int
|
|
||||||
uidcmp (const void *v0, const void *v1)
|
|
||||||
{
|
|
||||||
|
|
||||||
--- camel/camel-folder.h 2008-10-06 09:27:15 +0000
|
|
||||||
+++ camel/camel-folder.h 2008-12-16 06:57:35 +0000
|
|
||||||
@@ -211,6 +211,10 @@
|
|
||||||
|
|
||||||
CamelFolderQuotaInfo * (*get_quota_info) (CamelFolder *folder);
|
|
||||||
guint32 (*count_by_expression) (CamelFolder *, const char *, CamelException *);
|
|
||||||
+ void (*sync_message) (CamelFolder *folder,
|
|
||||||
+ const char *uid,
|
|
||||||
+ CamelException *ex);
|
|
||||||
+ GPtrArray * (*get_uncached_uids)(CamelFolder *, GPtrArray * uids, CamelException *);
|
|
||||||
} CamelFolderClass;
|
|
||||||
|
|
||||||
/* Standard Camel function */
|
|
||||||
@@ -303,12 +307,18 @@
|
|
||||||
CamelMimeMessage * camel_folder_get_message (CamelFolder *folder,
|
|
||||||
const char *uid,
|
|
||||||
CamelException *ex);
|
|
||||||
+void camel_folder_sync_message (CamelFolder *folder,
|
|
||||||
+ const char *uid,
|
|
||||||
+ CamelException *ex);
|
|
||||||
#define camel_folder_delete_message(folder, uid) \
|
|
||||||
camel_folder_set_message_flags (folder, uid, CAMEL_MESSAGE_DELETED|CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_DELETED|CAMEL_MESSAGE_SEEN)
|
|
||||||
|
|
||||||
GPtrArray * camel_folder_get_uids (CamelFolder *folder);
|
|
||||||
void camel_folder_free_uids (CamelFolder *folder,
|
|
||||||
GPtrArray *array);
|
|
||||||
+GPtrArray * camel_folder_get_uncached_uids (CamelFolder *,
|
|
||||||
+ GPtrArray * uids,
|
|
||||||
+ CamelException *);
|
|
||||||
void camel_folder_sort_uids (CamelFolder *folder,
|
|
||||||
GPtrArray *uids);
|
|
||||||
|
|
||||||
|
|
||||||
--- camel/camel-offline-folder.c 2008-06-20 22:32:12 +0000
|
|
||||||
+++ camel/camel-offline-folder.c 2008-12-16 06:57:35 +0000
|
|
||||||
@@ -247,8 +247,7 @@
|
|
||||||
offline_folder_downsync (CamelOfflineFolder *offline, const char *expression, CamelException *ex)
|
|
||||||
{
|
|
||||||
CamelFolder *folder = (CamelFolder *) offline;
|
|
||||||
- CamelMimeMessage *message;
|
|
||||||
- GPtrArray *uids;
|
|
||||||
+ GPtrArray *uids, *uncached_uids;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
camel_operation_start (NULL, _("Syncing messages in folder '%s' to disk"), folder->full_name);
|
|
||||||
@@ -257,27 +256,29 @@
|
|
||||||
uids = camel_folder_search_by_expression (folder, expression, ex);
|
|
||||||
else
|
|
||||||
uids = camel_folder_get_uids (folder);
|
|
||||||
-
|
|
||||||
- if (!uids) {
|
|
||||||
- camel_operation_end (NULL);
|
|
||||||
- return;
|
|
||||||
+
|
|
||||||
+ if (!uids)
|
|
||||||
+ goto done;
|
|
||||||
+ uncached_uids = camel_folder_get_uncached_uids(folder, uids, ex);
|
|
||||||
+ if (uids) {
|
|
||||||
+ if (expression)
|
|
||||||
+ camel_folder_search_free (folder, uids);
|
|
||||||
+ else
|
|
||||||
+ camel_folder_free_uids (folder, uids);
|
|
||||||
}
|
|
||||||
|
|
||||||
- for (i = 0; i < uids->len; i++) {
|
|
||||||
- int pc = i * 100 / uids->len;
|
|
||||||
-
|
|
||||||
- message = camel_folder_get_message (folder, uids->pdata[i], ex);
|
|
||||||
+ if (!uncached_uids)
|
|
||||||
+ goto done;
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < uncached_uids->len; i++) {
|
|
||||||
+ int pc = i * 100 / uncached_uids->len;
|
|
||||||
+ camel_folder_sync_message (folder, uncached_uids->pdata[i], ex);
|
|
||||||
camel_operation_progress (NULL, pc);
|
|
||||||
- if (message == NULL)
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- camel_object_unref (message);
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- if (expression)
|
|
||||||
- camel_folder_search_free (folder, uids);
|
|
||||||
- else
|
|
||||||
- camel_folder_free_uids (folder, uids);
|
|
||||||
+
|
|
||||||
+done:
|
|
||||||
+ if (uncached_uids)
|
|
||||||
+ camel_folder_free_uids(folder, uncached_uids);
|
|
||||||
|
|
||||||
camel_operation_end (NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
--- camel/providers/imap/camel-imap-folder.c 2008-12-05 12:10:12 +0000
|
|
||||||
+++ camel/providers/imap/camel-imap-folder.c 2008-12-16 06:57:35 +0000
|
|
||||||
@@ -102,10 +102,13 @@
|
|
||||||
static void imap_expunge (CamelFolder *folder, CamelException *ex);
|
|
||||||
//static void imap_cache_message (CamelDiscoFolder *disco_folder, const char *uid, CamelException *ex);
|
|
||||||
static void imap_rename (CamelFolder *folder, const char *new);
|
|
||||||
+static GPtrArray * imap_get_uncached_uids (CamelFolder *folder, GPtrArray * uids, CamelException *ex);
|
|
||||||
|
|
||||||
/* message manipulation */
|
|
||||||
static CamelMimeMessage *imap_get_message (CamelFolder *folder, const gchar *uid,
|
|
||||||
CamelException *ex);
|
|
||||||
+static void imap_sync_message (CamelFolder *folder, const gchar *uid,
|
|
||||||
+ CamelException *ex);
|
|
||||||
static void imap_append_online (CamelFolder *folder, CamelMimeMessage *message,
|
|
||||||
const CamelMessageInfo *info, char **appended_uid,
|
|
||||||
CamelException *ex);
|
|
||||||
@@ -135,6 +138,12 @@
|
|
||||||
|
|
||||||
static GData *parse_fetch_response (CamelImapFolder *imap_folder, char *msg_att);
|
|
||||||
|
|
||||||
+/* internal helpers */
|
|
||||||
+static CamelImapMessageInfo * imap_folder_summary_uid_or_error(
|
|
||||||
+ CamelFolderSummary *summary,
|
|
||||||
+ const char * uid,
|
|
||||||
+ CamelException *ex);
|
|
||||||
+
|
|
||||||
#ifdef G_OS_WIN32
|
|
||||||
/* The strtok() in Microsoft's C library is MT-safe (but still uses
|
|
||||||
* only one buffer pointer per thread, but for the use of strtok_r()
|
|
||||||
@@ -166,7 +175,9 @@
|
|
||||||
camel_folder_class->expunge = imap_expunge;
|
|
||||||
camel_folder_class->sync= imap_sync;
|
|
||||||
camel_folder_class->append_message = imap_append_online;
|
|
||||||
+ camel_folder_class->sync_message = imap_sync_message;
|
|
||||||
camel_folder_class->transfer_messages_to = imap_transfer_online;
|
|
||||||
+ camel_folder_class->get_uncached_uids = imap_get_uncached_uids;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -2809,24 +2820,33 @@
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static CamelMimeMessage *
|
|
||||||
-imap_get_message (CamelFolder *folder, const char *uid, CamelException *ex)
|
|
||||||
+static CamelImapMessageInfo *
|
|
||||||
+imap_folder_summary_uid_or_error(CamelFolderSummary *summary, const char * uid, CamelException *ex)
|
|
||||||
{
|
|
||||||
- CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
|
|
||||||
- CamelImapStore *store = CAMEL_IMAP_STORE (folder->parent_store);
|
|
||||||
- CamelImapMessageInfo *mi;
|
|
||||||
- CamelMimeMessage *msg = NULL;
|
|
||||||
- CamelStream *stream = NULL;
|
|
||||||
- int retry;
|
|
||||||
-
|
|
||||||
- mi = (CamelImapMessageInfo *)camel_folder_summary_uid (folder->summary, uid);
|
|
||||||
+ CamelImapMessageInfo *mi;
|
|
||||||
+ mi = (CamelImapMessageInfo *)camel_folder_summary_uid (summary, uid);
|
|
||||||
if (mi == NULL) {
|
|
||||||
camel_exception_setv (
|
|
||||||
ex, CAMEL_EXCEPTION_FOLDER_INVALID_UID,
|
|
||||||
_("Cannot get message with message ID %s: %s"),
|
|
||||||
uid, _("No such message available."));
|
|
||||||
- return NULL;
|
|
||||||
}
|
|
||||||
+ return mi;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static CamelMimeMessage *
|
|
||||||
+imap_get_message (CamelFolder *folder, const char *uid, CamelException *ex)
|
|
||||||
+{
|
|
||||||
+ CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
|
|
||||||
+ CamelImapStore *store = CAMEL_IMAP_STORE (folder->parent_store);
|
|
||||||
+ CamelImapMessageInfo *mi;
|
|
||||||
+ CamelMimeMessage *msg = NULL;
|
|
||||||
+ CamelStream *stream = NULL;
|
|
||||||
+ int retry;
|
|
||||||
+
|
|
||||||
+ mi = imap_folder_summary_uid_or_error(folder->summary, uid, ex);
|
|
||||||
+ if (!mi)
|
|
||||||
+ return NULL;
|
|
||||||
|
|
||||||
/* 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. */
|
|
||||||
@@ -2947,6 +2967,44 @@
|
|
||||||
return msg;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/**
|
|
||||||
+ * imap_sync_message
|
|
||||||
+ *
|
|
||||||
+ * Ensure that a message is cached locally, but don't retrieve the content if
|
|
||||||
+ * it is already local.
|
|
||||||
+ */
|
|
||||||
+static void
|
|
||||||
+imap_sync_message (CamelFolder *folder, const char *uid, CamelException *ex)
|
|
||||||
+{
|
|
||||||
+ CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
|
|
||||||
+ CamelImapMessageInfo *mi;
|
|
||||||
+ CamelMimeMessage *msg = NULL;
|
|
||||||
+ CamelStream *stream = NULL;
|
|
||||||
+
|
|
||||||
+ mi = imap_folder_summary_uid_or_error(folder->summary, uid, ex);
|
|
||||||
+ if (!mi)
|
|
||||||
+ /* No such UID - is this duplicate work? The sync process selects
|
|
||||||
+ * UIDs to start with.
|
|
||||||
+ */
|
|
||||||
+ return;
|
|
||||||
+ camel_message_info_free(&mi->info);
|
|
||||||
+
|
|
||||||
+ /* If we can get a stream, assume its fully cached. This may be false
|
|
||||||
+ * if partial streams are saved elsewhere in the code - but that seems
|
|
||||||
+ * best solved by knowning more about whether a given message is fully
|
|
||||||
+ * available locally or not,
|
|
||||||
+ */
|
|
||||||
+ /* 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))) {
|
|
||||||
+ camel_object_unref (stream);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ msg = imap_get_message(folder, uid, ex);
|
|
||||||
+ if (msg)
|
|
||||||
+ camel_object_unref(msg);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* FIXME Remove it after confirming
|
|
||||||
static void
|
|
||||||
imap_cache_message (CamelDiscoFolder *disco_folder, const char *uid,
|
|
||||||
@@ -3919,3 +3977,19 @@
|
|
||||||
CAMEL_SERVICE_REC_UNLOCK (imap_store, connect_lock);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * Scan for messages that are local and return the rest.
|
|
||||||
+ */
|
|
||||||
+static GPtrArray *
|
|
||||||
+imap_get_uncached_uids (CamelFolder *folder, GPtrArray * uids, CamelException *ex)
|
|
||||||
+{
|
|
||||||
+ GPtrArray *result;
|
|
||||||
+ CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder);
|
|
||||||
+
|
|
||||||
+ CAMEL_IMAP_FOLDER_REC_LOCK (imap_folder, cache_lock);
|
|
||||||
+ result = camel_imap_message_cache_filter_cached (imap_folder->cache, uids, ex);
|
|
||||||
+ CAMEL_IMAP_FOLDER_REC_UNLOCK (imap_folder, cache_lock);
|
|
||||||
+ return result;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
|
|
||||||
--- camel/providers/imap/camel-imap-message-cache.c 2008-10-16 03:42:34 +0000
|
|
||||||
+++ camel/providers/imap/camel-imap-message-cache.c 2008-12-16 06:57:35 +0000
|
|
||||||
@@ -35,6 +35,7 @@
|
|
||||||
#include "camel-data-wrapper.h"
|
|
||||||
#include "camel-exception.h"
|
|
||||||
#include "camel-stream-fs.h"
|
|
||||||
+#include "camel-string-utils.h"
|
|
||||||
|
|
||||||
#include "camel-imap-message-cache.h"
|
|
||||||
|
|
||||||
@@ -42,9 +43,27 @@
|
|
||||||
#define O_BINARY 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+/* Common define to start reducing duplication of base-part handling on win32.
|
|
||||||
+ */
|
|
||||||
+#ifdef G_OS_WIN32
|
|
||||||
+/* See comment in insert_setup() */
|
|
||||||
+#define BASE_PART_SUFFIX ".~"
|
|
||||||
+#else
|
|
||||||
+#define BASE_PART_SUFFIX "."
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
static void finalize (CamelImapMessageCache *cache);
|
|
||||||
static void stream_finalize (CamelObject *stream, gpointer event_data, gpointer user_data);
|
|
||||||
|
|
||||||
+struct _part_find {
|
|
||||||
+ /* UID name on disk - e.g. "0." or "0.HEADERS". On windows "0." is
|
|
||||||
+ * stored as "0.~"
|
|
||||||
+ */
|
|
||||||
+ char *disk_part_name;
|
|
||||||
+ /* Was the part found? */
|
|
||||||
+ int found;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
|
|
||||||
CamelType
|
|
||||||
camel_imap_message_cache_get_type (void)
|
|
||||||
@@ -142,6 +161,8 @@
|
|
||||||
* Return value: a new CamelImapMessageCache object using @path for
|
|
||||||
* storage. If cache files already exist in @path, then any that do not
|
|
||||||
* correspond to messages in @summary will be deleted.
|
|
||||||
+ * @path is scanned for its contents, which means creating a cache object can be
|
|
||||||
+ * expensive, but the parts hash is immediately usable.
|
|
||||||
**/
|
|
||||||
CamelImapMessageCache *
|
|
||||||
camel_imap_message_cache_new (const char *path, CamelFolderSummary *summary,
|
|
||||||
@@ -591,3 +612,67 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+_match_part(gpointer part_name, gpointer user_data)
|
|
||||||
+{
|
|
||||||
+ struct _part_find *part_find = (struct _part_find *) user_data;
|
|
||||||
+ if (g_str_equal(part_name, part_find->disk_part_name))
|
|
||||||
+ part_find->found = 1;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * Filter uids by the uids cached in cache.
|
|
||||||
+ * The intent is that only uids fully cached are returned, but that may not be
|
|
||||||
+ * what is achieved. An additional constraint is that this check should be
|
|
||||||
+ * cheap, so that going offline is not an expensive operation. Filtering all
|
|
||||||
+ * uids is inefficient in the first place; significant processing per uid
|
|
||||||
+ * makes synchronisation very expensive. At the suggestion of Srinivasa Ragavan
|
|
||||||
+ * (see http://bugzilla.gnome.org/show_bug.cgi?id=564339) the cache->parts hash
|
|
||||||
+ * table is consulted. If there is a parts-list in the hash table containing
|
|
||||||
+ * the part "", then we assume the message has been completely downloaded. This
|
|
||||||
+ * is incorrect (see http://bugzilla.gnome.org/show_bug.cgi?id=561211 for the
|
|
||||||
+ * symptoms). The code this replaces, a loop over all uids asking for the ""
|
|
||||||
+ * part of the message has the same flaw: it is no /less/ accurate to assess
|
|
||||||
+ * 'cached' in the manner this method does (assuming no concurrent process is
|
|
||||||
+ * removing messages from the cache).
|
|
||||||
+ *
|
|
||||||
+ * In the future, fixing bug 561211 needs a check for *all* the parts of a
|
|
||||||
+ * given uid. If the complete list of parts is available in the folder summary
|
|
||||||
+ * information then it can be done cheaply, otherwise some redesign will be
|
|
||||||
+ * needed.
|
|
||||||
+ */
|
|
||||||
+GPtrArray *
|
|
||||||
+camel_imap_message_cache_filter_cached(CamelImapMessageCache *cache, GPtrArray *uids, CamelException *ex)
|
|
||||||
+{
|
|
||||||
+ GPtrArray *result, *parts_list;
|
|
||||||
+ int i;
|
|
||||||
+ struct _part_find part_find;
|
|
||||||
+ /* Look for a part "" for each uid. */
|
|
||||||
+ result = g_ptr_array_sized_new(uids->len);
|
|
||||||
+ for (i = 0; i < uids->len; i++) {
|
|
||||||
+ if ((parts_list = g_hash_table_lookup(cache->parts, uids->pdata[i]))) {
|
|
||||||
+ /* At least one part locally present; look for "" (the
|
|
||||||
+ * HEADERS part can be present without anything else,
|
|
||||||
+ * and that part is not useful for users wanting to
|
|
||||||
+ * read the message).
|
|
||||||
+ */
|
|
||||||
+ part_find.found = 0;
|
|
||||||
+ part_find.disk_part_name = g_strdup_printf("%s" BASE_PART_SUFFIX,
|
|
||||||
+ (char *)uids->pdata[i]);
|
|
||||||
+ g_ptr_array_foreach(parts_list, _match_part, &part_find);
|
|
||||||
+ g_free(part_find.disk_part_name);
|
|
||||||
+ if (part_find.found)
|
|
||||||
+ /* The message is cached locally, do not
|
|
||||||
+ * include it in the result.
|
|
||||||
+ */
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
+ /* No message parts, or message part "" not found: include the
|
|
||||||
+ * uid in the result.
|
|
||||||
+ */
|
|
||||||
+ g_ptr_array_add(result, (char *)camel_pstring_strdup(uids->pdata[i]));
|
|
||||||
+ }
|
|
||||||
+ return result;
|
|
||||||
+}
|
|
||||||
|
|
||||||
--- camel/providers/imap/camel-imap-message-cache.h 2008-07-31 09:31:51 +0000
|
|
||||||
+++ camel/providers/imap/camel-imap-message-cache.h 2008-12-16 06:57:35 +0000
|
|
||||||
@@ -41,6 +41,13 @@
|
|
||||||
CamelObject parent_object;
|
|
||||||
|
|
||||||
char *path;
|
|
||||||
+ /* parts contains two sorts of objects.
|
|
||||||
+ * If the key contains '.' then it is a stream (also reverse-indexed in
|
|
||||||
+ * cached).
|
|
||||||
+ * Otherwise it is a g_ptr_array containing the subparts the message
|
|
||||||
+ * has. (e.g. 0., or 0.MIME.1).
|
|
||||||
+ */
|
|
||||||
+ /* cached contains streams for recently accessed messages */
|
|
||||||
GHashTable *parts, *cached;
|
|
||||||
guint32 max_uid;
|
|
||||||
};
|
|
||||||
@@ -98,6 +105,9 @@
|
|
||||||
CamelException *ex);
|
|
||||||
gboolean camel_imap_message_cache_delete (const char *path,
|
|
||||||
CamelException *ex);
|
|
||||||
+GPtrArray * camel_imap_message_cache_filter_cached(CamelImapMessageCache *,
|
|
||||||
+ GPtrArray *uids,
|
|
||||||
+ CamelException *ex);
|
|
||||||
|
|
||||||
/* Standard Camel function */
|
|
||||||
CamelType camel_imap_message_cache_get_type (void);
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
|||||||
Index: calendar/backends/groupwise/e-cal-backend-groupwise-utils.c
|
|
||||||
===================================================================
|
|
||||||
--- calendar/backends/groupwise/e-cal-backend-groupwise-utils.c (revision 9879)
|
|
||||||
+++ calendar/backends/groupwise/e-cal-backend-groupwise-utils.c (revision 9881)
|
|
||||||
@@ -1785,6 +1785,7 @@
|
|
||||||
ECalComponentAttendee attendee;
|
|
||||||
GSList *attendee_list = NULL;
|
|
||||||
icalcomponent *icalcomp = NULL;
|
|
||||||
+ icaltimetype start_time, end_time;
|
|
||||||
|
|
||||||
tmp = soup_soap_parameter_get_first_child_by_name (subparam, "email");
|
|
||||||
if (tmp)
|
|
||||||
@@ -1801,6 +1802,11 @@
|
|
||||||
e_cal_component_commit_sequence (comp);
|
|
||||||
icalcomp = e_cal_component_get_icalcomponent (comp);
|
|
||||||
|
|
||||||
+ start_time = icaltime_from_timet_with_zone (start, 0, default_zone ? default_zone : NULL);
|
|
||||||
+ end_time = icaltime_from_timet_with_zone (end, 0, default_zone ? default_zone : NULL);
|
|
||||||
+ icalcomponent_set_dtstart (icalcomp, start_time);
|
|
||||||
+ icalcomponent_set_dtend (icalcomp, end_time);
|
|
||||||
+
|
|
||||||
memset (&attendee, 0, sizeof (ECalComponentAttendee));
|
|
||||||
if (name)
|
|
||||||
attendee.cn = name;
|
|
||||||
@@ -1829,7 +1835,24 @@
|
|
||||||
return E_GW_CONNECTION_STATUS_INVALID_RESPONSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
- for (subparam_block = soup_soap_parameter_get_first_child_by_name (param_blocks, "block");
|
|
||||||
+ subparam_block = soup_soap_parameter_get_first_child_by_name (param_blocks, "block");
|
|
||||||
+ /* The GW server only returns 'Busy', 'OOF' and 'Tentative' periods. The rest are
|
|
||||||
+ * assumed to be 'Free' periods. In case of an attendee having only 'Free' periods,
|
|
||||||
+ * ensure to send a block to the frontend saying so. */
|
|
||||||
+ if (subparam_block == NULL) {
|
|
||||||
+ struct icalperiodtype ipt;
|
|
||||||
+ icaltimetype sitt, eitt;
|
|
||||||
+ icalproperty *icalprop;
|
|
||||||
+ sitt = icaltime_from_timet_with_zone (start, 0, default_zone ? default_zone : NULL);
|
|
||||||
+ ipt.start = sitt;
|
|
||||||
+ eitt = icaltime_from_timet_with_zone (end, 0, default_zone ? default_zone : NULL);
|
|
||||||
+ ipt.end = eitt;
|
|
||||||
+ icalprop = icalproperty_new_freebusy (ipt);
|
|
||||||
+ icalproperty_set_parameter_from_string (icalprop, "FBTYPE", "FREE");
|
|
||||||
+ icalcomponent_add_property(icalcomp, icalprop);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ for (;
|
|
||||||
subparam_block != NULL;
|
|
||||||
subparam_block = soup_soap_parameter_get_next_child_by_name (subparam_block, "block")) {
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
|||||||
--- camel/providers/imap/camel-imap-folder.c
|
|
||||||
+++ camel/providers/imap/camel-imap-folder.c
|
|
||||||
@@ -2256,12 +2256,12 @@ do_copy (CamelFolder *source, GPtrArray *uids,
|
|
||||||
if (response)
|
|
||||||
handle_copyuid_copy_user_tags (response, source, destination);
|
|
||||||
camel_imap_response_free (store, response);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (!camel_exception_is_set(ex) && delete_originals) {
|
|
||||||
- for (i=last;i<uid;i++)
|
|
||||||
- camel_folder_delete_message(source, uids->pdata[i]);
|
|
||||||
- last = uid;
|
|
||||||
- }
|
|
||||||
+ if (!camel_exception_is_set(ex) && delete_originals) {
|
|
||||||
+ for (i=last;i<uid;i++)
|
|
||||||
+ camel_folder_delete_message(source, uids->pdata[i]);
|
|
||||||
+ last = uid;
|
|
||||||
}
|
|
||||||
g_free (uidset);
|
|
||||||
}
|
|
@ -1,102 +0,0 @@
|
|||||||
Index: camel/providers/groupwise/camel-groupwise-folder.c
|
|
||||||
===================================================================
|
|
||||||
--- camel/providers/groupwise/camel-groupwise-folder.c (revision 9858)
|
|
||||||
+++ camel/providers/groupwise/camel-groupwise-folder.c (revision 9859)
|
|
||||||
@@ -1200,10 +1200,6 @@
|
|
||||||
if (gw_store->current_folder != folder) {
|
|
||||||
gw_store->current_folder = folder;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- if (list) {
|
|
||||||
- gw_update_cache (folder, list, ex, FALSE);
|
|
||||||
- }
|
|
||||||
|
|
||||||
if (check_all && !is_proxy) {
|
|
||||||
EGwContainer *container;
|
|
||||||
@@ -1214,8 +1210,15 @@
|
|
||||||
|
|
||||||
if (camel_folder_summary_count (folder->summary) == e_gw_container_get_total_count (container))
|
|
||||||
check_all = FALSE;
|
|
||||||
+
|
|
||||||
+ folder->summary->unread_count = e_gw_container_get_unread_count (container);
|
|
||||||
+ folder->summary->visible_count = e_gw_container_get_total_count (container);
|
|
||||||
g_object_unref (container);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ if (list) {
|
|
||||||
+ gw_update_cache (folder, list, ex, FALSE);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1352,6 +1355,8 @@
|
|
||||||
mi->info.content->type = camel_content_type_new ("multipart", "mixed");
|
|
||||||
}
|
|
||||||
|
|
||||||
+ mi->info.flags = 0;
|
|
||||||
+
|
|
||||||
if (type == E_GW_ITEM_TYPE_APPOINTMENT || type == E_GW_ITEM_TYPE_TASK || type == E_GW_ITEM_TYPE_NOTE)
|
|
||||||
camel_message_info_set_user_flag ((CamelMessageInfo*)mi, "$has_cal", TRUE);
|
|
||||||
}
|
|
||||||
@@ -1368,16 +1373,12 @@
|
|
||||||
|
|
||||||
item_status = e_gw_item_get_item_status (item);
|
|
||||||
if (item_status & E_GW_ITEM_STAT_READ)
|
|
||||||
- status_flags |= CAMEL_MESSAGE_SEEN;
|
|
||||||
+ mi->info.flags |= CAMEL_MESSAGE_SEEN;
|
|
||||||
else
|
|
||||||
mi->info.flags &= ~CAMEL_MESSAGE_SEEN;
|
|
||||||
|
|
||||||
if (item_status & E_GW_ITEM_STAT_REPLIED)
|
|
||||||
- status_flags |= CAMEL_MESSAGE_ANSWERED;
|
|
||||||
- if (exists)
|
|
||||||
- mi->info.flags |= status_flags;
|
|
||||||
- else
|
|
||||||
- mi->info.flags = status_flags;
|
|
||||||
+ mi->info.flags |= CAMEL_MESSAGE_ANSWERED;
|
|
||||||
|
|
||||||
priority = e_gw_item_get_priority (item);
|
|
||||||
if (priority && !(g_ascii_strcasecmp (priority,"High"))) {
|
|
||||||
@@ -1468,6 +1469,7 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ mi->info.dirty = TRUE;
|
|
||||||
if (exists) {
|
|
||||||
camel_folder_change_info_change_uid (changes, mi->info.uid);
|
|
||||||
camel_message_info_free (pmi);
|
|
||||||
@@ -1475,12 +1477,7 @@
|
|
||||||
mi->info.uid = camel_pstring_strdup (e_gw_item_get_id(item));
|
|
||||||
mi->info.size = e_gw_item_get_mail_size (item);
|
|
||||||
mi->info.subject = camel_pstring_strdup(e_gw_item_get_subject(item));
|
|
||||||
- mi->info.dirty = TRUE;
|
|
||||||
|
|
||||||
- folder->summary->visible_count ++;
|
|
||||||
- if (!(mi->info.flags & CAMEL_MESSAGE_SEEN))
|
|
||||||
- folder->summary->unread_count ++;
|
|
||||||
-
|
|
||||||
camel_folder_summary_add (folder->summary,(CamelMessageInfo *)mi);
|
|
||||||
camel_folder_change_info_add_uid (changes, mi->info.uid);
|
|
||||||
camel_folder_change_info_recent_uid (changes, mi->info.uid);
|
|
||||||
Index: servers/groupwise/e-gw-connection.c
|
|
||||||
===================================================================
|
|
||||||
--- servers/groupwise/e-gw-connection.c (revision 9858)
|
|
||||||
+++ servers/groupwise/e-gw-connection.c (revision 9859)
|
|
||||||
@@ -840,7 +840,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
e_gw_message_write_string_parameter (msg, "uid", NULL, uid);
|
|
||||||
- e_gw_message_write_string_parameter (msg, "view", NULL, "count");
|
|
||||||
+ e_gw_message_write_string_parameter (msg, "view", NULL, "count unreadCount");
|
|
||||||
e_gw_message_write_footer (msg);
|
|
||||||
|
|
||||||
/* send message to server */
|
|
||||||
@@ -2772,7 +2772,7 @@
|
|
||||||
|
|
||||||
if (buffer && buf_length && atoi (buf_length) > 0) {
|
|
||||||
gsize len = atoi (buf_length) ;
|
|
||||||
- *attachment = g_base64_decode (buffer,&len) ;
|
|
||||||
+ *attachment = (char *) g_base64_decode (buffer,&len) ;
|
|
||||||
*attach_length = len ;
|
|
||||||
} else {
|
|
||||||
*attachment = NULL;
|
|
@ -1,26 +0,0 @@
|
|||||||
--- camel/camel-search-sql-sexp.c
|
|
||||||
+++ camel/camel-search-sql-sexp.c
|
|
||||||
@@ -150,8 +150,12 @@ func_not(ESExp *f, int argc, struct _ESExpTerm **argv, void *data)
|
|
||||||
|
|
||||||
if (r1->type == ESEXP_RES_STRING) {
|
|
||||||
r = e_sexp_result_new(f, ESEXP_RES_STRING);
|
|
||||||
- r->value.string = g_strdup_printf ("(NOT (%s))",
|
|
||||||
- r1->value.string);
|
|
||||||
+ /* HACK: Fix and handle completed-on better. */
|
|
||||||
+ if (strcmp(r1->value.string, "( (usertags LIKE '%completed-on 0%' AND usertags LIKE '%completed-on%') )") == 0)
|
|
||||||
+ r->value.string = g_strdup ("( (not (usertags LIKE '%completed-on 0%')) AND usertags LIKE '%completed-on%' )");
|
|
||||||
+ else
|
|
||||||
+ r->value.string = g_strdup_printf ("(NOT (%s))",
|
|
||||||
+ r1->value.string);
|
|
||||||
}
|
|
||||||
e_sexp_result_free (f, r1);
|
|
||||||
|
|
||||||
@@ -439,7 +443,7 @@ user_tag(struct _ESExp *f, int argc, struct _ESExpResult **argv, void *data)
|
|
||||||
r = e_sexp_result_new(f, ESEXP_RES_STRING);
|
|
||||||
/* Hacks no otherway to fix these really :( */
|
|
||||||
if (strcmp(argv[0]->value.string, "completed-on") == 0)
|
|
||||||
- r->value.string = g_strdup_printf("usertags NOT LIKE '%ccompleted-on%c'", '%', '%');
|
|
||||||
+ r->value.string = g_strdup_printf("(usertags LIKE '%ccompleted-on 0%c' AND usertags LIKE '%ccompleted-on%c')", '%', '%', '%', '%');
|
|
||||||
else if (strcmp(argv[0]->value.string, "follow-up") == 0)
|
|
||||||
r->value.string = g_strdup_printf("usertags NOT LIKE '%cfollow-up%c'", '%', '%');
|
|
||||||
else
|
|
@ -1,11 +0,0 @@
|
|||||||
--- camel/providers/imap/camel-imap-folder.c
|
|
||||||
+++ camel/providers/imap/camel-imap-folder.c
|
|
||||||
@@ -1587,6 +1587,8 @@ imap_expunge (CamelFolder *folder, CamelException *ex)
|
|
||||||
|
|
||||||
camel_folder_summary_save_to_db (folder->summary, ex);
|
|
||||||
uids = camel_db_get_folder_deleted_uids (folder->parent_store->cdb_r, folder->full_name, ex);
|
|
||||||
+ if (!uids)
|
|
||||||
+ return;
|
|
||||||
|
|
||||||
if (CAMEL_OFFLINE_STORE (store)->state == CAMEL_OFFLINE_STORE_NETWORK_AVAIL)
|
|
||||||
imap_expunge_uids_online (folder, uids, ex);
|
|
@ -1,57 +0,0 @@
|
|||||||
--- camel/camel-folder-summary.c
|
|
||||||
+++ camel/camel-folder-summary.c
|
|
||||||
@@ -2074,25 +2074,24 @@ camel_folder_summary_touch(CamelFolderSummary *s)
|
|
||||||
void
|
|
||||||
camel_folder_summary_clear(CamelFolderSummary *s)
|
|
||||||
{
|
|
||||||
-#if 0
|
|
||||||
- int i;
|
|
||||||
+ d(printf ("\ncamel_folder_summary_clearcalled \n"));
|
|
||||||
+ s->flags &= ~CAMEL_SUMMARY_DIRTY;
|
|
||||||
|
|
||||||
CAMEL_SUMMARY_LOCK(s, summary_lock);
|
|
||||||
if (camel_folder_summary_count(s) == 0) {
|
|
||||||
CAMEL_SUMMARY_UNLOCK(s, summary_lock);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ g_ptr_array_foreach (s->uids, (GFunc) camel_pstring_free, NULL);
|
|
||||||
+ g_ptr_array_free (s->uids, TRUE);
|
|
||||||
+ s->uids = g_ptr_array_new ();
|
|
||||||
+ s->visible_count = s->deleted_count = s->unread_count = 0;
|
|
||||||
|
|
||||||
- for (i=0;i<s->messages->len;i++)
|
|
||||||
- camel_message_info_free(s->messages->pdata[i]);
|
|
||||||
+ g_hash_table_destroy(s->loaded_infos);
|
|
||||||
+ s->loaded_infos = g_hash_table_new(g_str_hash, g_str_equal);
|
|
||||||
|
|
||||||
- g_ptr_array_set_size(s->messages, 0);
|
|
||||||
- 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);
|
|
||||||
-#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FIXME: This is non-sense. Neither an exception is passed,
|
|
||||||
--- camel/camel-vee-folder.c
|
|
||||||
+++ camel/camel-vee-folder.c
|
|
||||||
@@ -2064,8 +2064,16 @@ vee_set_expression(CamelVeeFolder *vf, const char *query)
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Recreate the table when the query changes, only if we are not setting it first */
|
|
||||||
- if (vf->expression)
|
|
||||||
+ if (vf->expression) {
|
|
||||||
+ CamelFolderSummary *s = ((CamelFolder *)vf)->summary;
|
|
||||||
+ camel_folder_summary_clear (s);
|
|
||||||
camel_db_recreate_vfolder (((CamelFolder *) vf)->parent_store->cdb_w, ((CamelFolder *) vf)->full_name, NULL);
|
|
||||||
+ s->junk_count = 0;
|
|
||||||
+ s->deleted_count = 0;
|
|
||||||
+ s->unread_count = 0;
|
|
||||||
+ s->visible_count = 0;
|
|
||||||
+ s->junk_not_deleted_count = 0;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
|
|
||||||
g_free(vf->expression);
|
|
@ -1,11 +0,0 @@
|
|||||||
--- addressbook/backends/groupwise/e-book-backend-groupwise.c
|
|
||||||
+++ addressbook/backends/groupwise/e-book-backend-groupwise.c
|
|
||||||
@@ -2020,7 +2020,7 @@ e_book_backend_groupwise_get_contact_list (EBookBackend *backend,
|
|
||||||
g_object_unref (contact);
|
|
||||||
}
|
|
||||||
g_ptr_array_free (ids, TRUE);
|
|
||||||
- ids->len = 0;
|
|
||||||
+ ids = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
@ -1,137 +0,0 @@
|
|||||||
--- camel/providers/groupwise/camel-groupwise-folder.c
|
|
||||||
+++ camel/providers/groupwise/camel-groupwise-folder.c
|
|
||||||
@@ -229,8 +229,11 @@ groupwise_populate_details_from_item (CamelMimeMessage *msg, EGwItem *item)
|
|
||||||
time_t actual_time;
|
|
||||||
int offset = 0;
|
|
||||||
dtstring = e_gw_item_get_creation_date (item);
|
|
||||||
- time = e_gw_connection_get_date_from_string (dtstring);
|
|
||||||
- actual_time = camel_header_decode_date (ctime(&time), NULL);
|
|
||||||
+ if (dtstring) {
|
|
||||||
+ time = e_gw_connection_get_date_from_string (dtstring);
|
|
||||||
+ actual_time = camel_header_decode_date (ctime(&time), NULL);
|
|
||||||
+ } else
|
|
||||||
+ actual_time = (time_t) 0;
|
|
||||||
camel_mime_message_set_date (msg, actual_time, offset);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1270,7 +1273,7 @@ gw_update_cache (CamelFolder *folder, GList *list, CamelException *ex, gboolean
|
|
||||||
|
|
||||||
int folder_needs_caching;
|
|
||||||
|
|
||||||
- camel_object_get (folder, NULL, CAMEL_OFFLINE_FOLDER_ARG_SYNC_OFFLINE, &folder_needs_caching, NULL);
|
|
||||||
+ camel_object_get (folder, NULL, CAMEL_OFFLINE_FOLDER_SYNC_OFFLINE, &folder_needs_caching, NULL);
|
|
||||||
|
|
||||||
changes = camel_folder_change_info_new ();
|
|
||||||
container_id = g_strdup (camel_groupwise_store_container_id_lookup (gw_store, folder->full_name));
|
|
||||||
@@ -1449,8 +1452,12 @@ gw_update_cache (CamelFolder *folder, GList *list, CamelException *ex, gboolean
|
|
||||||
time_t time;
|
|
||||||
time_t actual_time;
|
|
||||||
temp_date = e_gw_item_get_creation_date (item);
|
|
||||||
- time = e_gw_connection_get_date_from_string (temp_date);
|
|
||||||
- actual_time = camel_header_decode_date (ctime(&time), NULL);
|
|
||||||
+ if (temp_date) {
|
|
||||||
+ /* Creation date can be returned as null for auto-generated meetings */
|
|
||||||
+ time = e_gw_connection_get_date_from_string (temp_date);
|
|
||||||
+ actual_time = camel_header_decode_date (ctime(&time), NULL);
|
|
||||||
+ } else
|
|
||||||
+ actual_time = (time_t) 0;
|
|
||||||
mi->info.date_sent = mi->info.date_received = actual_time;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1670,8 +1677,11 @@ gw_update_summary ( CamelFolder *folder, GList *list,CamelException *ex)
|
|
||||||
time_t time;
|
|
||||||
time_t actual_time;
|
|
||||||
temp_date = e_gw_item_get_creation_date (item);
|
|
||||||
- time = e_gw_connection_get_date_from_string (temp_date);
|
|
||||||
- actual_time = camel_header_decode_date (ctime(&time), NULL);
|
|
||||||
+ if (temp_date) {
|
|
||||||
+ time = e_gw_connection_get_date_from_string (temp_date);
|
|
||||||
+ actual_time = camel_header_decode_date (ctime(&time), NULL);
|
|
||||||
+ } else
|
|
||||||
+ actual_time = (time_t) 0;
|
|
||||||
mi->info.date_sent = mi->info.date_received = actual_time;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
--- servers/groupwise/e-gw-item.c
|
|
||||||
+++ servers/groupwise/e-gw-item.c
|
|
||||||
@@ -307,6 +307,11 @@ e_gw_item_dispose (GObject *object)
|
|
||||||
priv->classification = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (priv->security) {
|
|
||||||
+ g_free (priv->security);
|
|
||||||
+ priv->security = NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
if (priv->accept_level) {
|
|
||||||
g_free (priv->accept_level);
|
|
||||||
priv->accept_level = NULL;
|
|
||||||
--- servers/groupwise/e-gw-connection.c
|
|
||||||
+++ servers/groupwise/e-gw-connection.c
|
|
||||||
@@ -1813,39 +1813,41 @@ e_gw_connection_get_server_time (EGwConnection *cnc)
|
|
||||||
static time_t
|
|
||||||
timet_from_string (const char *str)
|
|
||||||
{
|
|
||||||
- struct tm date;
|
|
||||||
- int len, i;
|
|
||||||
+ struct tm date;
|
|
||||||
+ int len, i;
|
|
||||||
|
|
||||||
- g_return_val_if_fail (str != NULL, -1);
|
|
||||||
+ g_return_val_if_fail (str != NULL, -1);
|
|
||||||
|
|
||||||
- /* yyyymmdd[Thhmmss[Z]] */
|
|
||||||
- len = strlen (str);
|
|
||||||
+ /* yyyymmdd[Thhmmss[Z]] */
|
|
||||||
+ len = strlen (str);
|
|
||||||
|
|
||||||
- if (!(len == 8 || len == 15 || len == 16))
|
|
||||||
- return -1;
|
|
||||||
+ if (!(len == 8 || len == 15 || len == 16))
|
|
||||||
+ return -1;
|
|
||||||
|
|
||||||
- for (i = 0; i < len; i++)
|
|
||||||
- if (!((i != 8 && i != 15 && isdigit (str[i]))
|
|
||||||
- || (i == 8 && str[i] == 'T')
|
|
||||||
- || (i == 15 && str[i] == 'Z')))
|
|
||||||
- return -1;
|
|
||||||
+ for (i = 0; i < len; i++)
|
|
||||||
+ if (!((i != 8 && i != 15 && isdigit (str[i]))
|
|
||||||
+ || (i == 8 && str[i] == 'T')
|
|
||||||
+ || (i == 15 && str[i] == 'Z')))
|
|
||||||
+ return -1;
|
|
||||||
|
|
||||||
#define digit_at(x,y) (x[y] - '0')
|
|
||||||
|
|
||||||
- date.tm_year = digit_at (str, 0) * 1000
|
|
||||||
- + digit_at (str, 1) * 100
|
|
||||||
- + digit_at (str, 2) * 10
|
|
||||||
- + digit_at (str, 3) -1900;
|
|
||||||
- date.tm_mon = digit_at (str, 4) * 10 + digit_at (str, 5) -1;
|
|
||||||
- date.tm_mday = digit_at (str, 6) * 10 + digit_at (str, 7);
|
|
||||||
- if (len > 8) {
|
|
||||||
- date.tm_hour = digit_at (str, 9) * 10 + digit_at (str, 10);
|
|
||||||
- date.tm_min = digit_at (str, 11) * 10 + digit_at (str, 12);
|
|
||||||
- date.tm_sec = digit_at (str, 13) * 10 + digit_at (str, 14);
|
|
||||||
- } else
|
|
||||||
- date.tm_hour = date.tm_min = date.tm_sec = 0;
|
|
||||||
+ date.tm_year = digit_at (str, 0) * 1000
|
|
||||||
+ + digit_at (str, 1) * 100
|
|
||||||
+ + digit_at (str, 2) * 10
|
|
||||||
+ + digit_at (str, 3) -1900;
|
|
||||||
+ date.tm_mon = digit_at (str, 4) * 10 + digit_at (str, 5) -1;
|
|
||||||
+ date.tm_mday = digit_at (str, 6) * 10 + digit_at (str, 7);
|
|
||||||
+ if (len > 8) {
|
|
||||||
+ date.tm_hour = digit_at (str, 9) * 10 + digit_at (str, 10);
|
|
||||||
+ date.tm_min = digit_at (str, 11) * 10 + digit_at (str, 12);
|
|
||||||
+ date.tm_sec = digit_at (str, 13) * 10 + digit_at (str, 14);
|
|
||||||
+ } else
|
|
||||||
+ date.tm_hour = date.tm_min = date.tm_sec = 0;
|
|
||||||
+
|
|
||||||
+ date.tm_wday = date.tm_yday = date.tm_isdst = 0;
|
|
||||||
|
|
||||||
- return mktime (&date);
|
|
||||||
+ return mktime (&date);
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
|
@ -1,58 +0,0 @@
|
|||||||
Index: camel/providers/groupwise/camel-groupwise-folder.c
|
|
||||||
===================================================================
|
|
||||||
--- camel/providers/groupwise/camel-groupwise-folder.c (revision 9780)
|
|
||||||
+++ camel/providers/groupwise/camel-groupwise-folder.c (working copy)
|
|
||||||
@@ -2686,7 +2686,21 @@
|
|
||||||
g_string_append_printf (gstr, "UID:%s\n",e_gw_item_get_icalid (item));
|
|
||||||
g_string_append_printf (gstr, "DTSTART:%s\n",e_gw_item_get_start_date (item));
|
|
||||||
g_string_append_printf (gstr, "SUMMARY:%s\n", e_gw_item_get_subject (item));
|
|
||||||
- g_string_append_printf (gstr, "DESCRIPTION:%s\n", e_gw_item_get_message (item));
|
|
||||||
+
|
|
||||||
+ temp = e_gw_item_get_message (item);
|
|
||||||
+ if (temp) {
|
|
||||||
+ g_string_append(gstr, "DESCRIPTION:");
|
|
||||||
+ while (*temp) {
|
|
||||||
+ if (*temp == '\n')
|
|
||||||
+ g_string_append(gstr, "\\n");
|
|
||||||
+ else
|
|
||||||
+ g_string_append_c(gstr, *temp);
|
|
||||||
+ temp++;
|
|
||||||
+ }
|
|
||||||
+ g_string_append(gstr, "\n");
|
|
||||||
+ }
|
|
||||||
+ temp = NULL;
|
|
||||||
+
|
|
||||||
g_string_append_printf (gstr, "DTSTAMP:%s\n", e_gw_item_get_creation_date (item));
|
|
||||||
g_string_append_printf (gstr, "X-GWMESSAGEID:%s\n", e_gw_item_get_id (item));
|
|
||||||
g_string_append_printf (gstr, "X-GWSHOW-AS:BUSY\n");
|
|
||||||
@@ -2741,6 +2755,7 @@
|
|
||||||
EGwItemOrganizer *org = NULL;
|
|
||||||
GString *gstr = g_string_new (NULL);
|
|
||||||
char **tmp = NULL;
|
|
||||||
+ const char *temp = NULL;
|
|
||||||
|
|
||||||
tmp = g_strsplit (e_gw_item_get_id (item), "@", -1);
|
|
||||||
|
|
||||||
@@ -2750,7 +2765,21 @@
|
|
||||||
g_string_append_printf (gstr, "UID:%s\n",e_gw_item_get_icalid (item));
|
|
||||||
g_string_append_printf (gstr, "DTSTART:%s\n",e_gw_item_get_start_date (item));
|
|
||||||
g_string_append_printf (gstr, "SUMMARY:%s\n", e_gw_item_get_subject (item));
|
|
||||||
- g_string_append_printf (gstr, "DESCRIPTION:%s\n", e_gw_item_get_message (item));
|
|
||||||
+
|
|
||||||
+ temp = e_gw_item_get_message (item);
|
|
||||||
+ if (temp) {
|
|
||||||
+ g_string_append(gstr, "DESCRIPTION:");
|
|
||||||
+ while (*temp) {
|
|
||||||
+ if (*temp == '\n')
|
|
||||||
+ g_string_append(gstr, "\\n");
|
|
||||||
+ else
|
|
||||||
+ g_string_append_c(gstr, *temp);
|
|
||||||
+ temp++;
|
|
||||||
+ }
|
|
||||||
+ g_string_append(gstr, "\n");
|
|
||||||
+ }
|
|
||||||
+ temp = NULL;
|
|
||||||
+
|
|
||||||
g_string_append_printf (gstr, "DTSTAMP:%s\n", e_gw_item_get_creation_date (item));
|
|
||||||
g_string_append_printf (gstr, "X-GWMESSAGEID:%s\n", e_gw_item_get_id (item));
|
|
||||||
g_string_append_printf (gstr, "X-GWRECORDID:%s\n", tmp[0]);
|
|
@ -1,27 +0,0 @@
|
|||||||
--- addressbook/libedata-book/e-book-backend.c
|
|
||||||
+++ addressbook/libedata-book/e-book-backend.c
|
|
||||||
@@ -476,12 +476,21 @@ book_destroy_cb (gpointer data, GObject *where_book_was)
|
|
||||||
e_book_backend_remove_client (backend, (EDataBook *)where_book_was);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void
|
|
||||||
-listener_died_cb (gpointer cnx, gpointer user_data)
|
|
||||||
+static gboolean
|
|
||||||
+idle_remove_client (gpointer data)
|
|
||||||
{
|
|
||||||
- EDataBook *book = E_DATA_BOOK (user_data);
|
|
||||||
+ EDataBook *book = (EDataBook *) data;
|
|
||||||
|
|
||||||
e_book_backend_remove_client (e_data_book_get_backend (book), book);
|
|
||||||
+ g_object_unref ((GObject *) book);
|
|
||||||
+
|
|
||||||
+ return FALSE;
|
|
||||||
+}
|
|
||||||
+static void
|
|
||||||
+listener_died_cb (gpointer cnx, gpointer user_data)
|
|
||||||
+{
|
|
||||||
+ g_object_ref ((GObject *)user_data);
|
|
||||||
+ g_idle_add (idle_remove_client, user_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
@ -1,13 +0,0 @@
|
|||||||
Index: camel/providers/groupwise/camel-groupwise-provider.c
|
|
||||||
===================================================================
|
|
||||||
--- camel/providers/groupwise/camel-groupwise-provider.c (revision 9852)
|
|
||||||
+++ camel/providers/groupwise/camel-groupwise-provider.c (working copy)
|
|
||||||
@@ -73,7 +73,7 @@
|
|
||||||
N_("SOAP Settings") },
|
|
||||||
|
|
||||||
{ CAMEL_PROVIDER_CONF_ENTRY, "soap_port", NULL,
|
|
||||||
- N_("Post Office Agent SOAP Port:"), "7191" },
|
|
||||||
+ N_("Post Office Agent SOAP _Port:"), "7191" },
|
|
||||||
|
|
||||||
{ CAMEL_PROVIDER_CONF_HIDDEN, "auth-domain", NULL,
|
|
||||||
NULL, "Groupwise" },
|
|
@ -1,33 +0,0 @@
|
|||||||
--- camel/providers/groupwise/camel-groupwise-store.c 2008-12-23 09:25:44.000000000 +0100
|
|
||||||
+++ camel/providers/groupwise/camel-groupwise-store.c 2008-12-23 09:38:58.000000000 +0100
|
|
||||||
@@ -1430,6 +1430,17 @@
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static gboolean
|
|
||||||
+groupwise_can_refresh_folder (CamelStore *store, CamelFolderInfo *info, CamelException *ex)
|
|
||||||
+{
|
|
||||||
+ gboolean res;
|
|
||||||
+
|
|
||||||
+ res = CAMEL_STORE_CLASS(parent_class)->can_refresh_folder (store, info, ex) ||
|
|
||||||
+ (camel_url_get_param (((CamelService *)store)->url, "check_all") != NULL);
|
|
||||||
+
|
|
||||||
+ return res;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* Function to check if we are both connected and are _actually_
|
|
||||||
* online. Based on an equivalient function in IMAP
|
|
||||||
@@ -1498,6 +1509,7 @@
|
|
||||||
camel_store_class->get_folder_info = groupwise_get_folder_info;
|
|
||||||
camel_store_class->free_folder_info = camel_store_free_folder_info_full;
|
|
||||||
camel_store_class->get_trash = groupwise_get_trash;
|
|
||||||
+ camel_store_class->can_refresh_folder = groupwise_can_refresh_folder;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1597,3 +1609,4 @@
|
|
||||||
|
|
||||||
return camel_groupwise_store_type;
|
|
||||||
}
|
|
||||||
+
|
|
@ -1,17 +0,0 @@
|
|||||||
--- camel/providers/groupwise/camel-groupwise-summary.c.orig 2008-12-31 14:53:07.000000000 +0100
|
|
||||||
+++ camel/providers/groupwise/camel-groupwise-summary.c 2008-12-31 15:05:26.000000000 +0100
|
|
||||||
@@ -317,8 +317,13 @@
|
|
||||||
guint32 type=0;
|
|
||||||
|
|
||||||
if (part) {
|
|
||||||
- EXTRACT_FIRST_DIGIT (type);
|
|
||||||
+ if (*part == ' ')
|
|
||||||
+ part++;
|
|
||||||
+ if (part) {
|
|
||||||
+ EXTRACT_FIRST_DIGIT (type);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
+ mir->cinfo = part;
|
|
||||||
if (type)
|
|
||||||
return camel_groupwise_summary_parent->content_info_from_db (s, mir);
|
|
||||||
else
|
|
@ -1,192 +0,0 @@
|
|||||||
diff -Nupr 1-eds/addressbook/libedata-book/e-book-backend-db-cache.c 2-eds/addressbook/libedata-book/e-book-backend-db-cache.c
|
|
||||||
--- 1-eds/addressbook/libedata-book/e-book-backend-db-cache.c 2008-10-01 16:11:20.000000000 +0530
|
|
||||||
+++ 2-eds/addressbook/libedata-book/e-book-backend-db-cache.c 2008-07-01 22:08:59.000000000 +0530
|
|
||||||
@@ -420,3 +420,41 @@ e_book_backend_db_cache_is_populated (DB
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+e_book_backend_db_cache_set_time(DB *db, const char *t)
|
|
||||||
+{
|
|
||||||
+ DBT uid_dbt, vcard_dbt ;
|
|
||||||
+ int db_error ;
|
|
||||||
+
|
|
||||||
+ string_to_dbt ("last_update_time", &uid_dbt);
|
|
||||||
+ string_to_dbt (t, &vcard_dbt);
|
|
||||||
+
|
|
||||||
+ db_error = db->put (db, NULL, &uid_dbt, &vcard_dbt, 0);
|
|
||||||
+ if (db_error != 0) {
|
|
||||||
+ g_warning ("db->put failed with %d", db_error);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+char *
|
|
||||||
+e_book_backend_db_cache_get_time (DB *db)
|
|
||||||
+{
|
|
||||||
+ DBT uid_dbt, vcard_dbt;
|
|
||||||
+ int db_error;
|
|
||||||
+ char *t;
|
|
||||||
+
|
|
||||||
+ string_to_dbt ("last_update_time", &uid_dbt);
|
|
||||||
+ memset (&vcard_dbt, 0, sizeof(vcard_dbt));
|
|
||||||
+ vcard_dbt.flags = DB_DBT_MALLOC;
|
|
||||||
+
|
|
||||||
+ db_error = db->get (db, NULL, &uid_dbt, &vcard_dbt, 0);
|
|
||||||
+ if (db_error != 0) {
|
|
||||||
+ g_warning ("db->get failed with %d", db_error);
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+ else {
|
|
||||||
+ t = g_strdup (vcard_dbt.data);
|
|
||||||
+ g_free (vcard_dbt.data);
|
|
||||||
+ return t;
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
diff -Nupr 1-eds/addressbook/libedata-book/e-book-backend-db-cache.h 2-eds/addressbook/libedata-book/e-book-backend-db-cache.h
|
|
||||||
--- 1-eds/addressbook/libedata-book/e-book-backend-db-cache.h 2008-10-01 16:11:20.000000000 +0530
|
|
||||||
+++ 2-eds/addressbook/libedata-book/e-book-backend-db-cache.h 2008-09-05 11:24:08.000000000 +0530
|
|
||||||
@@ -25,6 +25,8 @@
|
|
||||||
#include <libebook/e-contact.h>
|
|
||||||
#include "db.h"
|
|
||||||
|
|
||||||
+G_BEGIN_DECLS
|
|
||||||
+
|
|
||||||
EContact* e_book_backend_db_cache_get_contact (DB *db, const char *uid);
|
|
||||||
void string_to_dbt(const char *str, DBT *dbt);
|
|
||||||
char *e_book_backend_db_cache_get_filename(DB *db);
|
|
||||||
@@ -39,9 +41,8 @@ gboolean e_book_backend_db_cache_exists
|
|
||||||
void e_book_backend_db_cache_set_populated (DB *db);
|
|
||||||
gboolean e_book_backend_db_cache_is_populated (DB *db);
|
|
||||||
GPtrArray* e_book_backend_db_cache_search (DB *db, const char *query);
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-
|
|
||||||
+void e_book_backend_db_cache_set_time(DB *db, const char *t);
|
|
||||||
+char * e_book_backend_db_cache_get_time (DB *db);
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
|
|
||||||
diff -Nupr 1-eds/calendar/ChangeLog 2-eds/calendar/ChangeLog
|
|
||||||
--- 1-eds/calendar/ChangeLog 2008-10-15 11:33:05.000000000 +0530
|
|
||||||
+++ 2-eds/calendar/ChangeLog 2008-10-20 16:03:01.000000000 +0530
|
|
||||||
@@ -157,6 +157,18 @@
|
|
||||||
(e_cal_util_parse_ics_file): Make the documentation reflect that these
|
|
||||||
functions either return a new icalcomponent or NULL.
|
|
||||||
|
|
||||||
+2008-07-18 Suman Manjunath <msuman@novell.com>
|
|
||||||
+
|
|
||||||
+ ** Added CAL_STATIC_CAPABILITY_CREATE_MESSAGES
|
|
||||||
+
|
|
||||||
+ * libecal/e-cal-util.h:
|
|
||||||
+ This static capability determines if a calendar backend can send
|
|
||||||
+ messages to recipients by itself. It is different from the
|
|
||||||
+ CAL_STATIC_CAPABILITY_SAVE_SCHEDULES from the fact that this new
|
|
||||||
+ capability is processed after the user has been prompted to send
|
|
||||||
+ an update. It is useful if the actual object needs some processing
|
|
||||||
+ after the messages are sent.
|
|
||||||
+
|
|
||||||
2008-07-18 Milan Crha <mcrha@redhat.com>
|
|
||||||
|
|
||||||
** Fix for bug #515998
|
|
||||||
diff -Nupr 1-eds/calendar/libecal/e-cal.c 2-eds/calendar/libecal/e-cal.c
|
|
||||||
--- 1-eds/calendar/libecal/e-cal.c 2008-10-01 16:11:33.000000000 +0530
|
|
||||||
+++ 2-eds/calendar/libecal/e-cal.c 2008-09-09 12:07:54.000000000 +0530
|
|
||||||
@@ -1386,7 +1386,16 @@ set_local_attachment_store (ECal *ecal)
|
|
||||||
priv->local_attachment_store =
|
|
||||||
g_filename_to_uri (filename, NULL, NULL);
|
|
||||||
g_free (filename);
|
|
||||||
+ } else if (g_str_has_prefix (priv->uri, "mapi://")) {
|
|
||||||
+ gchar *filename = g_build_filename (g_get_home_dir (),
|
|
||||||
+ ".evolution/cache/calendar",
|
|
||||||
+ mangled_uri,
|
|
||||||
+ NULL);
|
|
||||||
+ priv->local_attachment_store =
|
|
||||||
+ g_filename_to_uri (filename, NULL, NULL);
|
|
||||||
+ g_free (filename);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
g_free (mangled_uri);
|
|
||||||
}
|
|
||||||
|
|
||||||
diff -Nupr 1-eds/calendar/libecal/e-cal-util.h 2-eds/calendar/libecal/e-cal-util.h
|
|
||||||
--- 1-eds/calendar/libecal/e-cal-util.h 2008-10-01 16:11:33.000000000 +0530
|
|
||||||
+++ 2-eds/calendar/libecal/e-cal-util.h 2008-07-18 16:29:46.000000000 +0530
|
|
||||||
@@ -115,6 +115,7 @@ gboolean e_cal_util_event_dates_match (i
|
|
||||||
#define CAL_STATIC_CAPABILITY_ORGANIZER_MUST_ATTEND "organizer-must-attend"
|
|
||||||
#define CAL_STATIC_CAPABILITY_ORGANIZER_NOT_EMAIL_ADDRESS "organizer-not-email-address"
|
|
||||||
#define CAL_STATIC_CAPABILITY_REMOVE_ALARMS "remove-alarms"
|
|
||||||
+#define CAL_STATIC_CAPABILITY_CREATE_MESSAGES "create-messages"
|
|
||||||
#define CAL_STATIC_CAPABILITY_SAVE_SCHEDULES "save-schedules"
|
|
||||||
#define CAL_STATIC_CAPABILITY_NO_CONV_TO_ASSIGN_TASK "no-conv-to-assign-task"
|
|
||||||
#define CAL_STATIC_CAPABILITY_NO_CONV_TO_RECUR "no-conv-to-recur"
|
|
||||||
diff -Nupr 1-eds/servers/exchange/ChangeLog 2-eds/servers/exchange/ChangeLog
|
|
||||||
--- 1-eds/servers/exchange/ChangeLog 2008-10-20 10:19:25.000000000 +0530
|
|
||||||
+++ 2-eds/servers/exchange/ChangeLog 2008-10-20 16:03:01.000000000 +0530
|
|
||||||
@@ -14,6 +14,11 @@
|
|
||||||
* storage/exchange-account.c: (set_sf_prop): Do not store invalid
|
|
||||||
values in 'standard_uris', it leads to crash later.
|
|
||||||
|
|
||||||
+2008-09-19 Ashish Shrivastava <shashish@novell.com>
|
|
||||||
+
|
|
||||||
+ * lib/e2k-global-catalog.c (e2k_global_catalog_get_ldap): Don't set
|
|
||||||
+ ldap_error - prevents crashes for now.
|
|
||||||
+
|
|
||||||
2008-08-18 Milan Crha <mcrha@redhat.com>
|
|
||||||
|
|
||||||
** Part of fix for bug #324203
|
|
||||||
@@ -233,6 +238,12 @@
|
|
||||||
* lib/e2k-result.c (prop_get_binary_array), (prop_get_binary):
|
|
||||||
Initialize 'length' before calling g_base64_decode().
|
|
||||||
|
|
||||||
+2007-11-11 Srinivasa Ragavan <sragavan@novell.com>
|
|
||||||
+
|
|
||||||
+ * lib/e2k-global-catalog.c: (e2k_global_catalog_set_password): Added a
|
|
||||||
+ new api to set password into gc.
|
|
||||||
+ * lib/e2k-global-catalog.h:
|
|
||||||
+
|
|
||||||
2007-10-27 Matthew Barnes <mbarnes@redhat.com>
|
|
||||||
|
|
||||||
* lib/e2k-user-dialog.c:
|
|
||||||
diff -Nupr 1-eds/servers/exchange/lib/e2k-global-catalog.c 2-eds/servers/exchange/lib/e2k-global-catalog.c
|
|
||||||
--- 1-eds/servers/exchange/lib/e2k-global-catalog.c 2008-10-01 16:11:00.000000000 +0530
|
|
||||||
+++ 2-eds/servers/exchange/lib/e2k-global-catalog.c 2008-09-19 14:34:53.000000000 +0530
|
|
||||||
@@ -435,8 +435,11 @@ e2k_global_catalog_get_ldap (E2kGlobalCa
|
|
||||||
|
|
||||||
err = get_ldap_connection (gc, op, gc->priv->server, 3268, &ldap);
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
+ //ldap_error = (gint *) g_malloc (sizeof (gint));
|
|
||||||
if (ldap_error)
|
|
||||||
*ldap_error = err;
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
return ldap;
|
|
||||||
}
|
|
||||||
@@ -473,6 +476,13 @@ e2k_global_catalog_new (const char *serv
|
|
||||||
return gc;
|
|
||||||
}
|
|
||||||
|
|
||||||
+void
|
|
||||||
+e2k_global_catalog_set_password (E2kGlobalCatalog *gc, const char *password)
|
|
||||||
+{
|
|
||||||
+ g_free (gc->priv->password);
|
|
||||||
+ gc->priv->password = g_strdup (password);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static const char *
|
|
||||||
lookup_mta (E2kGlobalCatalog *gc, E2kOperation *op, const char *mta_dn)
|
|
||||||
{
|
|
||||||
diff -Nupr 1-eds/servers/exchange/lib/e2k-global-catalog.h 2-eds/servers/exchange/lib/e2k-global-catalog.h
|
|
||||||
--- 1-eds/servers/exchange/lib/e2k-global-catalog.h 2008-10-01 16:11:00.000000000 +0530
|
|
||||||
+++ 2-eds/servers/exchange/lib/e2k-global-catalog.h 2008-09-09 12:07:54.000000000 +0530
|
|
||||||
@@ -117,6 +117,9 @@ E2kGlobalCatalogStatus e2k_global_catalo
|
|
||||||
const char *self_dn,
|
|
||||||
const char *delegate_dn);
|
|
||||||
|
|
||||||
+void
|
|
||||||
+e2k_global_catalog_set_password (E2kGlobalCatalog *gc, const char *password);
|
|
||||||
+
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif /* __cplusplus */
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:23a19e40854cb56e78544da3c78a9cb38df640b019a4382e782e0540d51ebcd0
|
|
||||||
size 7874659
|
|
3
evolution-data-server-2.25.90.tar.bz2
Normal file
3
evolution-data-server-2.25.90.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:e34c9d211f55449b5758d69960ba6fd6a0b9e7e531272ed2588747d760e5eb21
|
||||||
|
size 7330533
|
3
evolution-data-server-po.tar.gz
Normal file
3
evolution-data-server-po.tar.gz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:b0fe98e1a5b0596054b420ae5c8a80348708949028174ef1af76343881cd5b0a
|
||||||
|
size 317182
|
@ -1,3 +1,49 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Feb 5 13:29:13 CET 2009 - vuntz@novell.com
|
||||||
|
|
||||||
|
- Remove compilation flags that were added: those should really
|
||||||
|
used upstream, and not in a distribution.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Feb 4 11:02:36 IST 2009 - msuman@suse.de
|
||||||
|
|
||||||
|
- Update to version 2.25.90:
|
||||||
|
+ Libical fork in evolution-data-server is dropped. Upstream
|
||||||
|
libical is an external dependency now.
|
||||||
|
+ Bugs fixed: bgo#303738, bgo#360813, bgo#501298, bgo#518920,
|
||||||
|
bgo#554182, bgo#557348, bgo#562200, bgo#564339, bgo#564543,
|
||||||
|
bgo#564954, bgo#566279, bgo#565376, bgo#567384, bgo#390198,
|
||||||
|
bgo#557348, bgo#568332, bgo#568561, bgo#569405, bgo#569742,
|
||||||
|
bgo#569874, bgo#347287, bgo#550414, bnc#435599, bnc#439986,
|
||||||
|
bnc#443296, bnc#443544, bnc#463095, bnc#464758, bnc#464878,
|
||||||
|
bnc#467075, bnc#467638, bnc#470143
|
||||||
|
+ Updated translations
|
||||||
|
- Dropped these patches already fixed upstream:
|
||||||
|
+ bnc-435599-junk-contacts-created.patch
|
||||||
|
+ bnc-439986-show-time-free.patch
|
||||||
|
+ bnc-442507-imap-parts-sync.patch
|
||||||
|
+ bnc-443544-eds-free-busy.patch
|
||||||
|
+ bnc-458127-keyboard-shortcut-port.patch
|
||||||
|
+ bnc-463095-content-info-from-db.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jan 12 15:25:27 EST 2009 - mauro@suse.de
|
||||||
|
|
||||||
|
- Translations update.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Jan 10 09:38:26 IST 2009 - msuman@suse.de
|
||||||
|
|
||||||
|
- Pruning changes from the factory submission:
|
||||||
|
+ Dropped these patches already fixed upstream:
|
||||||
|
+ bgo-559153-eds-migration.patch
|
||||||
|
+ bnc-440265-gw-contacts.patch
|
||||||
|
+ bnc-455939-eds-deadlock.patch
|
||||||
|
+ bnc-209514-gw-missing-mails.patch
|
||||||
|
+ bnc-446290-gw-counts-issues.patch
|
||||||
|
+ bnc-462575-gw-refresh-folders.patch
|
||||||
|
+ bnc-448079-gw-memory-issues.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Jan 7 06:57:24 CET 2009 - abharath@suse.de
|
Wed Jan 7 06:57:24 CET 2009 - abharath@suse.de
|
||||||
|
|
||||||
@ -31,6 +77,46 @@ Wed Jan 7 06:57:24 CET 2009 - abharath@suse.de
|
|||||||
displays the wrong time for an appointment in the
|
displays the wrong time for an appointment in the
|
||||||
message list.
|
message list.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jan 6 10:26:10 IST 2009 - msuman@suse.de
|
||||||
|
|
||||||
|
- Update to version 2.25.4:
|
||||||
|
+ Bugs fixed: bgo#446290, bgo#559153, bgo#564652, bnc#209514,
|
||||||
|
bnc#448079, bnc#449916, bnc#462575
|
||||||
|
+ Updated translations
|
||||||
|
- Dropped this patch fixed upstream:
|
||||||
|
+ bnc-449916-task-memo-description.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Dec 23 15:08:01 IST 2008 - msuman@suse.de
|
||||||
|
|
||||||
|
- Update to version 2.25.3
|
||||||
|
+ Bugs fixed: bgo#359745, bgo#524377, bgo#527692, bgo#531090,
|
||||||
|
bgo#546637, bgo#555979, bgo#556119, bgo#557348, bgo#557818,
|
||||||
|
bgo#558322, bgo#558737, bgo#558883, bgo#559272, bgo#560076,
|
||||||
|
bgo#560185, bgo#560681, bgo#560981, bgo#561069, bgo#561466,
|
||||||
|
bnc#435964, bgo#270376, bgo#348299, bgo#352287, bgo#357948,
|
||||||
|
bnc#435632, bnc#440265, bnc#447121, bgo#451734, bgo#503662,
|
||||||
|
bgo#545834, bgo#552986, bgo#558883, bgo#561081, bgo#561561,
|
||||||
|
bgo#562228, bgo#562567
|
||||||
|
+ Updated translations
|
||||||
|
- Dropped these patches fixed upstream:
|
||||||
|
+ bgo-562228-eds-mailbox-field.patch
|
||||||
|
+ bnc-431133-unread-mail-empty.patch
|
||||||
|
+ bnc-435632-moving-contacts-crash.patch
|
||||||
|
+ bnc-438730-loosing-more-state.patch
|
||||||
|
+ bnc-440265-list-not-saved.patch
|
||||||
|
+ bnc-441347-imap-performance-fix.patch
|
||||||
|
+ bnc-441542-fix-translock.patch
|
||||||
|
+ bnc-441763-show-meeting-icon.patch
|
||||||
|
+ bnc-446269-moving-emails-broken.patch
|
||||||
|
+ bnc-446371-fix-completed-on.patch
|
||||||
|
+ bnc-446372-fix-empty-trash.patch
|
||||||
|
+ bnc-446373-fix-refresh-vfolderquery.patch
|
||||||
|
+ bnc-447121-gw-memory-crasher.patch
|
||||||
|
+ eds-core-mapi-changes.diff
|
||||||
|
- Added libgweather-devel to the list of BuildRequires
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Dec 4 12:05:08 CET 2008 - abharath@suse.de
|
Thu Dec 4 12:05:08 CET 2008 - abharath@suse.de
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# spec file for package evolution-data-server (Version 2.24.1.1)
|
# spec file for package evolution-data-server (Version 2.25.90)
|
||||||
#
|
#
|
||||||
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
|
|
||||||
Name: evolution-data-server
|
Name: evolution-data-server
|
||||||
%define _evo_version 2.24
|
%define _evo_version 2.26
|
||||||
BuildRequires: bison
|
BuildRequires: bison
|
||||||
BuildRequires: db-devel
|
BuildRequires: db-devel
|
||||||
%if %suse_version > 1100
|
%if %suse_version > 1100
|
||||||
@ -37,6 +37,8 @@ BuildRequires: intltool
|
|||||||
BuildRequires: krb5-devel
|
BuildRequires: krb5-devel
|
||||||
BuildRequires: libglade2-devel
|
BuildRequires: libglade2-devel
|
||||||
BuildRequires: libgnome-devel
|
BuildRequires: libgnome-devel
|
||||||
|
BuildRequires: libgweather-devel >= 2.25.4
|
||||||
|
BuildRequires: libical-devel >= 0.43
|
||||||
BuildRequires: libidl-devel
|
BuildRequires: libidl-devel
|
||||||
BuildRequires: libsoup-devel
|
BuildRequires: libsoup-devel
|
||||||
BuildRequires: mozilla-nss-devel
|
BuildRequires: mozilla-nss-devel
|
||||||
@ -56,81 +58,26 @@ Obsoletes: evolution-data-server-64bit
|
|||||||
Obsoletes: evolution-data-server-32bit
|
Obsoletes: evolution-data-server-32bit
|
||||||
%endif
|
%endif
|
||||||
Summary: Evolution Data Server
|
Summary: Evolution Data Server
|
||||||
Version: 2.24.1.1
|
Version: 2.25.90
|
||||||
Release: 5
|
Release: 1
|
||||||
Source0: ftp://ftp.gnome.org/pub/gnome/sources/evolution-data-server/2.24/%{name}-%{version}.tar.bz2
|
Source0: ftp://ftp.gnome.org/pub/gnome/sources/evolution-data-server/2.25/%{name}-%{version}.tar.bz2
|
||||||
|
Source1: %{name}-po.tar.gz
|
||||||
# PATCH-FIX-UPSTREAM evolution-data-server-1.11.5-cert-auth-complete.patch bgo253574 -- Fix has been submitted to bgo.
|
# PATCH-FIX-UPSTREAM evolution-data-server-1.11.5-cert-auth-complete.patch bgo253574 -- Fix has been submitted to bgo.
|
||||||
Patch3: evolution-data-server-1.11.5-cert-auth-complete.patch
|
Patch3: evolution-data-server-1.11.5-cert-auth-complete.patch
|
||||||
# PATCH-FIX-UPSTREAM bnc-304835-ex-crash-after-restart.patch bnc304835 bgo253574 -- Fix has been submitted to bgo.
|
# PATCH-FIX-UPSTREAM bnc-304835-ex-crash-after-restart.patch bnc304835 bgo253574 -- Fix has been submitted to bgo.
|
||||||
Patch4: bnc-304835-ex-crash-after-restart.patch
|
Patch4: bnc-304835-ex-crash-after-restart.patch
|
||||||
# PATCH-FIX-UPSTREAM bnc-307861-calendar-auth.diff -- bnc307861 bgo253574 -- Fix has been submitted to bgo.
|
# PATCH-FIX-UPSTREAM bnc-307861-calendar-auth.diff -- bnc307861 bgo253574 -- Fix has been submitted to bgo.
|
||||||
Patch5: bnc-307861-calendar-auth.diff
|
Patch5: bnc-307861-calendar-auth.diff
|
||||||
# PATCH-FIX-UPSTREAM bnc-441763-show-meeting-icon.patch psankar@novell.com -- Fix has been submitted to bgo.
|
|
||||||
Patch6: bnc-441763-show-meeting-icon.patch
|
|
||||||
# PATCH-FEATURE-OPENSUSE dice-eds-changes.patch pchenthill@novell.com -- Patch yet to be pushed upstream
|
# PATCH-FEATURE-OPENSUSE dice-eds-changes.patch pchenthill@novell.com -- Patch yet to be pushed upstream
|
||||||
Patch7: dice-eds-changes.patch
|
Patch7: dice-eds-changes.patch
|
||||||
# PATCH-FIX-UPSTREAM bnc-431133-unread-mail-empty.patch bnc431133 bgo546637 sragavan@novell.com -- Fix has been submitted upstream.
|
|
||||||
Patch8: bnc-431133-unread-mail-empty.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-435599-junk-contacts-created.patch bnc435599 shashish@novell.com -- Patch is part of GNOME 2.25.5 release.
|
|
||||||
Patch9: bnc-435599-junk-contacts-created.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-441347-imap-performance-fix.patch bnc441347 bgo558883 -- Fix has been submitted upstream.
|
|
||||||
Patch10: bnc-441347-imap-performance-fix.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-441542-fix-translock.patch bnc441542 sragavan@novell.com -- Fix has been submitted upstream.
|
|
||||||
Patch11: bnc-441542-fix-translock.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-446269-moving-emails-broken.patch bnc446269 bgo561081 sragavan@novell.com -- Fix has been submitted upstream.
|
|
||||||
Patch12: bnc-446269-moving-emails-broken.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-446371-fix-completed-on.patch bnc446371 bgo560076 sragavan@novell.com -- Fix has been submitted upstream.
|
|
||||||
Patch13: bnc-446371-fix-completed-on.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-446372-fix-empty-trash.patch bnc446372 bgo561069 sragavan@novell.com -- Fix has been submitted upstream.
|
|
||||||
Patch14: bnc-446372-fix-empty-trash.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-446373-fix-refresh-vfolderquery.patch bnc446373 bgo557348 sragavan@novell.com -- Fix has been submitted upstream.
|
|
||||||
Patch15: bnc-446373-fix-refresh-vfolderquery.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-210959-eds-accept_ics.patch bnc210959 pchenthill@novell.com -- Patch yet to be pushed upstream.
|
# PATCH-FIX-UPSTREAM bnc-210959-eds-accept_ics.patch bnc210959 pchenthill@novell.com -- Patch yet to be pushed upstream.
|
||||||
Patch16: bnc-210959-eds-accept_ics.patch
|
Patch16: bnc-210959-eds-accept_ics.patch
|
||||||
# PATCH-FIX-UPSTREAM bnc-438730-loosing-more-state.patch bnc438730 sragavan@novell.com -- Fix has been submitted upstream.
|
|
||||||
Patch17: bnc-438730-loosing-more-state.patch
|
|
||||||
# PATCH-FEATURE-OPENSUSE evolution-data-server-shared-nss-db.patch hpj@novell.com -- Migrate to shared NSS database.
|
# PATCH-FEATURE-OPENSUSE evolution-data-server-shared-nss-db.patch hpj@novell.com -- Migrate to shared NSS database.
|
||||||
Patch18: evolution-data-server-shared-nss-db.patch
|
Patch18: evolution-data-server-shared-nss-db.patch
|
||||||
# PATCH-FIX-UPSTREAM eds-comp-percent.diff pchenthill@suse.de -- Wrapper function to get percent as int. Needed for sharepoint connector. Will be pushed upstream.
|
# PATCH-FIX-UPSTREAM eds-comp-percent.diff pchenthill@suse.de -- API freeze = Patch will be upstream only in 2.27.x
|
||||||
Patch19: eds-comp-percent.diff
|
Patch19: eds-comp-percent.diff
|
||||||
# PATCH-FIX-UPSTREAM bnc-440265-list-not-saved.patch bnc440265 sragavan@novell.com -- Patch is part of GNOME 2.25.5 release.
|
# PATCH-FIX-UPSTREAM bnc-463653-msg-list-meeting-time.patch bnc463653 pchenthill@suse.de -- Patch is yet to be pushed upstream.
|
||||||
Patch20: bnc-440265-list-not-saved.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-447121-gw-memory-crasher.patch bnc447121 sragavan@novell.com -- Patch is part of GNOME 2.25.5 release.
|
|
||||||
Patch21: bnc-447121-gw-memory-crasher.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-449916-task-memo-description.patch bnc449916 abharath@suse.de -- Patch is part of GNOME 2.25.5 release.
|
|
||||||
Patch22: bnc-449916-task-memo-description.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bgo-562228-eds-mailbox-field.patch bgo562228 -- Fix has been submitted upstream.
|
|
||||||
Patch23: bgo-562228-eds-mailbox-field.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-435632-moving-contacts-crash.patch bnc435632 sragavan@novell.com -- Patch is part of GNOME 2.25.5 release.
|
|
||||||
Patch24: bnc-435632-moving-contacts-crash.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bgo-559153-eds-migration.patch bgo559153 psankar@suse.de -- Patch is part of GNOME 2.25.5 release.
|
|
||||||
Patch25: bgo-559153-eds-migration.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-440265-gw-contacts.patch bnc440265 sragavan@novell.com -- Patch is part of GNOME 2.25.5 release.
|
|
||||||
Patch26: bnc-440265-gw-contacts.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-442507-imap-parts-sync.patch bnc442507 -- Patch is part of GNOME 2.25.5 release.
|
|
||||||
Patch27: bnc-442507-imap-parts-sync.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-455939-eds-deadlock.patch bnc455939 sragavan@novell.com -- Patch is part of GNOME 2.25.5 release.
|
|
||||||
Patch28: bnc-455939-eds-deadlock.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-443544-eds-free-busy.patch bnc443544 abharath@suse.de -- Patch is part of GNOME 2.25.5 release.
|
|
||||||
Patch29: bnc-443544-eds-free-busy.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-209514-gw-missing-mails.patch bnc209514 psankar@suse.de -- Patch is part of GNOME 2.25.5 release.
|
|
||||||
Patch30: bnc-209514-gw-missing-mails.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-446290-gw-counts-issues.patch bnc446290 psankar@suse.de -- Patch is part of GNOME 2.25.5 release.
|
|
||||||
Patch31: bnc-446290-gw-counts-issues.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-458127-keyboard-shortcut-port.patch bnc458127 shashish@novell.com -- Patch is part of GNOME 2.25.5 release.
|
|
||||||
Patch32: bnc-458127-keyboard-shortcut-port.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-462575-gw-refresh-folders.patch bnc462575 sbrys@novell.com -- Patch is part of GNOME 2.25.5 release.
|
|
||||||
Patch33: bnc-462575-gw-refresh-folders.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-448079-gw-memory-issues.patch bnc448079 psankar@suse.de -- Patch is part of GNOME 2.25.5 release.
|
|
||||||
Patch34: bnc-448079-gw-memory-issues.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-463095-content-info-from-db.patch bnc463095 sbrys@novell.com -- Yet to be pushed upstream.
|
|
||||||
Patch35: bnc-463095-content-info-from-db.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-439986-show-time-free.patch bnc439986 pchenthill@suse.de -- Patch is part of GNOME 2.25.5 release.
|
|
||||||
Patch36: bnc-439986-show-time-free.patch
|
|
||||||
# PATCH-FIX-UPSTREAM bnc-463653-msg-list-meeting-time.patch bnc463653 pchenthill@suse.de -- Patch is part of GNOME 2.25.5 release.
|
|
||||||
Patch37: bnc-463653-msg-list-meeting-time.patch
|
Patch37: bnc-463653-msg-list-meeting-time.patch
|
||||||
# PATCH-FIX-OPENSUSE eds-core-mapi-changes.diff msuman@suse.de -- This patch contains changes in the core code base for the MAPI provider.
|
|
||||||
Patch100: eds-core-mapi-changes.diff
|
|
||||||
Url: http://www.gnome.org
|
Url: http://www.gnome.org
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
Requires: %{name}-lang = %{version}
|
Requires: %{name}-lang = %{version}
|
||||||
@ -162,7 +109,9 @@ Requires: libbonobo-devel
|
|||||||
Requires: libcom_err
|
Requires: libcom_err
|
||||||
Requires: libglade2-devel
|
Requires: libglade2-devel
|
||||||
Requires: libgnome-devel
|
Requires: libgnome-devel
|
||||||
|
Requires: libgweather-devel >= 2.25.4
|
||||||
Requires: libgpg-error-devel
|
Requires: libgpg-error-devel
|
||||||
|
Requires: libical-devel >= 0.43
|
||||||
Requires: libsoup-devel
|
Requires: libsoup-devel
|
||||||
Requires: libxml2-devel
|
Requires: libxml2-devel
|
||||||
Requires: nss-shared-helper-devel
|
Requires: nss-shared-helper-devel
|
||||||
@ -197,43 +146,15 @@ documentation.
|
|||||||
|
|
||||||
%lang_package
|
%lang_package
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q -a1
|
||||||
###%patch3
|
###%patch3
|
||||||
###%patch4
|
###%patch4
|
||||||
###%patch5
|
###%patch5
|
||||||
%patch6
|
|
||||||
%patch7 -p1
|
%patch7 -p1
|
||||||
%patch8
|
|
||||||
%patch9
|
|
||||||
%patch10
|
|
||||||
%patch11
|
|
||||||
%patch12
|
|
||||||
%patch13
|
|
||||||
%patch14
|
|
||||||
%patch15
|
|
||||||
%patch16
|
%patch16
|
||||||
%patch17
|
|
||||||
%patch18 -p1
|
%patch18 -p1
|
||||||
%patch19 -p1
|
%patch19 -p1
|
||||||
%patch20
|
|
||||||
%patch21
|
|
||||||
%patch22
|
|
||||||
%patch23
|
|
||||||
%patch24
|
|
||||||
%patch25
|
|
||||||
%patch26
|
|
||||||
%patch27
|
|
||||||
%patch28
|
|
||||||
%patch29
|
|
||||||
%patch30
|
|
||||||
%patch31
|
|
||||||
%patch32
|
|
||||||
%patch33
|
|
||||||
%patch34
|
|
||||||
%patch35
|
|
||||||
%patch36
|
|
||||||
%patch37
|
%patch37
|
||||||
%patch100 -p1
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
intltoolize --force --copy
|
intltoolize --force --copy
|
||||||
@ -243,10 +164,9 @@ aclocal
|
|||||||
autoconf
|
autoconf
|
||||||
automake -a
|
automake -a
|
||||||
autoheader
|
autoheader
|
||||||
(pushd calendar/libical; autoreconf -fi; popd)
|
export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -DLDAP_DEPRECATED"
|
||||||
export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
|
export CXXFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -DLDAP_DEPRECATED"
|
||||||
export CXXFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
|
export FFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -DLDAP_DEPRECATED"
|
||||||
export FFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
|
|
||||||
%{configure} \
|
%{configure} \
|
||||||
--libexecdir=%{_libdir}/evolution-data-server \
|
--libexecdir=%{_libdir}/evolution-data-server \
|
||||||
%if %suse_version > 1100
|
%if %suse_version > 1100
|
||||||
@ -259,14 +179,22 @@ export FFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
|
|||||||
--enable-gnome-keyring \
|
--enable-gnome-keyring \
|
||||||
--enable-gtk-doc \
|
--enable-gtk-doc \
|
||||||
--enable-ipv6=yes \
|
--enable-ipv6=yes \
|
||||||
--enable-ssl
|
--enable-nss=yes \
|
||||||
|
--enable-nspr=yes \
|
||||||
|
--enable-smime=yes \
|
||||||
|
--enable-nntp=yes \
|
||||||
|
--enable-hula=yes \
|
||||||
|
--enable-exchange=yes \
|
||||||
|
--with-e2k-debug \
|
||||||
|
--disable-static
|
||||||
%{__make} %{?jobs:-j%jobs}
|
%{__make} %{?jobs:-j%jobs}
|
||||||
|
|
||||||
%install
|
%install
|
||||||
%{__make} DESTDIR=$RPM_BUILD_ROOT install
|
%{makeinstall}
|
||||||
|
# Remove the libtool archive files
|
||||||
|
%{__rm} $RPM_BUILD_ROOT/%{_libdir}/*.la
|
||||||
|
%{__rm} $RPM_BUILD_ROOT/%{_libdir}/*/*/*.la
|
||||||
%find_lang evolution-data-server-%{_evo_version}
|
%find_lang evolution-data-server-%{_evo_version}
|
||||||
%{__rm} $RPM_BUILD_ROOT/%{_libdir}/*.*a
|
|
||||||
%{__rm} $RPM_BUILD_ROOT/%{_libdir}/*/*/*.*a
|
|
||||||
%fdupes $RPM_BUILD_ROOT
|
%fdupes $RPM_BUILD_ROOT
|
||||||
%if %suse_version > 1100
|
%if %suse_version > 1100
|
||||||
%{__mv} $RPM_BUILD_ROOT/%{_libdir}/evolution-data-server/evolution-data-server-%{_evo_version} $RPM_BUILD_ROOT/%{_libdir}/evolution-data-server/evolution-data-server-%{_evo_version}.bin
|
%{__mv} $RPM_BUILD_ROOT/%{_libdir}/evolution-data-server/evolution-data-server-%{_evo_version} $RPM_BUILD_ROOT/%{_libdir}/evolution-data-server/evolution-data-server-%{_evo_version}.bin
|
||||||
@ -305,6 +233,40 @@ echo -e "#!/bin/sh\n\nLD_LIBRARY_PATH=%{_libdir}/evoldap/lib MONO_PATH=%{_libdir
|
|||||||
%{_datadir}/gtk-doc/html/*
|
%{_datadir}/gtk-doc/html/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Feb 05 2009 vuntz@novell.com
|
||||||
|
- Remove compilation flags that were added: those should really
|
||||||
|
used upstream, and not in a distribution.
|
||||||
|
* Wed Feb 04 2009 msuman@suse.de
|
||||||
|
- Update to version 2.25.90:
|
||||||
|
+ Libical fork in evolution-data-server is dropped. Upstream
|
||||||
|
libical is an external dependency now.
|
||||||
|
+ Bugs fixed: bgo#303738, bgo#360813, bgo#501298, bgo#518920,
|
||||||
|
bgo#554182, bgo#557348, bgo#562200, bgo#564339, bgo#564543,
|
||||||
|
bgo#564954, bgo#566279, bgo#565376, bgo#567384, bgo#390198,
|
||||||
|
bgo#557348, bgo#568332, bgo#568561, bgo#569405, bgo#569742,
|
||||||
|
bgo#569874, bgo#347287, bgo#550414, bnc#435599, bnc#439986,
|
||||||
|
bnc#443296, bnc#443544, bnc#463095, bnc#464758, bnc#464878,
|
||||||
|
bnc#467075, bnc#467638, bnc#470143
|
||||||
|
+ Updated translations
|
||||||
|
- Dropped these patches already fixed upstream:
|
||||||
|
+ bnc-435599-junk-contacts-created.patch
|
||||||
|
+ bnc-439986-show-time-free.patch
|
||||||
|
+ bnc-442507-imap-parts-sync.patch
|
||||||
|
+ bnc-443544-eds-free-busy.patch
|
||||||
|
+ bnc-458127-keyboard-shortcut-port.patch
|
||||||
|
+ bnc-463095-content-info-from-db.patch
|
||||||
|
* Mon Jan 12 2009 mauro@suse.de
|
||||||
|
- Translations update.
|
||||||
|
* Sat Jan 10 2009 msuman@suse.de
|
||||||
|
- Pruning changes from the factory submission:
|
||||||
|
+ Dropped these patches already fixed upstream:
|
||||||
|
+ bgo-559153-eds-migration.patch
|
||||||
|
+ bnc-440265-gw-contacts.patch
|
||||||
|
+ bnc-455939-eds-deadlock.patch
|
||||||
|
+ bnc-209514-gw-missing-mails.patch
|
||||||
|
+ bnc-446290-gw-counts-issues.patch
|
||||||
|
+ bnc-462575-gw-refresh-folders.patch
|
||||||
|
+ bnc-448079-gw-memory-issues.patch
|
||||||
* Wed Jan 07 2009 abharath@suse.de
|
* Wed Jan 07 2009 abharath@suse.de
|
||||||
- Patches added
|
- Patches added
|
||||||
+ bgo#559153 - bgo-559153-eds-migration.patch - Migration patches
|
+ bgo#559153 - bgo-559153-eds-migration.patch - Migration patches
|
||||||
@ -335,6 +297,40 @@ echo -e "#!/bin/sh\n\nLD_LIBRARY_PATH=%{_libdir}/evoldap/lib MONO_PATH=%{_libdir
|
|||||||
+ bnc#463653 - bnc-463653-msg-list-meeting-time.patch - Evolution
|
+ bnc#463653 - bnc-463653-msg-list-meeting-time.patch - Evolution
|
||||||
displays the wrong time for an appointment in the
|
displays the wrong time for an appointment in the
|
||||||
message list.
|
message list.
|
||||||
|
* Tue Jan 06 2009 msuman@suse.de
|
||||||
|
- Update to version 2.25.4:
|
||||||
|
+ Bugs fixed: bgo#446290, bgo#559153, bgo#564652, bnc#209514,
|
||||||
|
bnc#448079, bnc#449916, bnc#462575
|
||||||
|
+ Updated translations
|
||||||
|
- Dropped this patch fixed upstream:
|
||||||
|
+ bnc-449916-task-memo-description.patch
|
||||||
|
* Tue Dec 23 2008 msuman@suse.de
|
||||||
|
- Update to version 2.25.3
|
||||||
|
+ Bugs fixed: bgo#359745, bgo#524377, bgo#527692, bgo#531090,
|
||||||
|
bgo#546637, bgo#555979, bgo#556119, bgo#557348, bgo#557818,
|
||||||
|
bgo#558322, bgo#558737, bgo#558883, bgo#559272, bgo#560076,
|
||||||
|
bgo#560185, bgo#560681, bgo#560981, bgo#561069, bgo#561466,
|
||||||
|
bnc#435964, bgo#270376, bgo#348299, bgo#352287, bgo#357948,
|
||||||
|
bnc#435632, bnc#440265, bnc#447121, bgo#451734, bgo#503662,
|
||||||
|
bgo#545834, bgo#552986, bgo#558883, bgo#561081, bgo#561561,
|
||||||
|
bgo#562228, bgo#562567
|
||||||
|
+ Updated translations
|
||||||
|
- Dropped these patches fixed upstream:
|
||||||
|
+ bgo-562228-eds-mailbox-field.patch
|
||||||
|
+ bnc-431133-unread-mail-empty.patch
|
||||||
|
+ bnc-435632-moving-contacts-crash.patch
|
||||||
|
+ bnc-438730-loosing-more-state.patch
|
||||||
|
+ bnc-440265-list-not-saved.patch
|
||||||
|
+ bnc-441347-imap-performance-fix.patch
|
||||||
|
+ bnc-441542-fix-translock.patch
|
||||||
|
+ bnc-441763-show-meeting-icon.patch
|
||||||
|
+ bnc-446269-moving-emails-broken.patch
|
||||||
|
+ bnc-446371-fix-completed-on.patch
|
||||||
|
+ bnc-446372-fix-empty-trash.patch
|
||||||
|
+ bnc-446373-fix-refresh-vfolderquery.patch
|
||||||
|
+ bnc-447121-gw-memory-crasher.patch
|
||||||
|
+ eds-core-mapi-changes.diff
|
||||||
|
- Added libgweather-devel to the list of BuildRequires
|
||||||
* Thu Dec 04 2008 abharath@suse.de
|
* Thu Dec 04 2008 abharath@suse.de
|
||||||
- Patches added
|
- Patches added
|
||||||
+ bnc#440265 - bnc-440265-list-not-saved.patch - Groupwise
|
+ bnc#440265 - bnc-440265-list-not-saved.patch - Groupwise
|
||||||
|
Loading…
Reference in New Issue
Block a user