From 42caa8c21d28b89ab40d38b520e1cb9937a34e1b Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 12 Jul 2010 16:17:19 +0200 Subject: Bug #623936 - 75 second delay when creating new DAV entries in Zimbra --- addressbook/backends/webdav/e-book-backend-webdav.c | 16 ++++++++-------- calendar/backends/caldav/e-cal-backend-caldav.c | 3 +++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/addressbook/backends/webdav/e-book-backend-webdav.c b/addressbook/backends/webdav/e-book-backend-webdav.c index b851b1ea5..2ba4536d5 100644 --- a/addressbook/backends/webdav/e-book-backend-webdav.c +++ b/addressbook/backends/webdav/e-book-backend-webdav.c @@ -137,8 +137,8 @@ download_contact(EBookBackendWebdav *webdav, const gchar *uri) guint status; message = soup_message_new(SOUP_METHOD_GET, uri); - soup_message_headers_append(message->request_headers, - "User-Agent", USERAGENT); + soup_message_headers_append (message->request_headers, "User-Agent", USERAGENT); + soup_message_headers_append (message->request_headers, "Connection", "close"); status = soup_session_send_message(webdav->priv->session, message); if (status != 200) { @@ -198,8 +198,8 @@ upload_contact(EBookBackendWebdav *webdav, EContact *contact) } message = soup_message_new(SOUP_METHOD_PUT, uri); - soup_message_headers_append(message->request_headers, - "User-Agent", USERAGENT); + soup_message_headers_append (message->request_headers, "User-Agent", USERAGENT); + soup_message_headers_append (message->request_headers, "Connection", "close"); property = e_source_get_property(source, "avoid_ifmatch"); if (property != NULL && strcmp(property, "1") == 0) { @@ -362,8 +362,8 @@ delete_contact(EBookBackendWebdav *webdav, const gchar *uri) guint status; message = soup_message_new(SOUP_METHOD_DELETE, uri); - soup_message_headers_append(message->request_headers, - "User-Agent", USERAGENT); + soup_message_headers_append (message->request_headers, "User-Agent", USERAGENT); + soup_message_headers_append (message->request_headers, "Connection", "close"); status = soup_session_send_message(webdav->priv->session, message); g_object_unref(message); @@ -656,8 +656,8 @@ send_propfind(EBookBackendWebdav *webdav) ""; message = soup_message_new(SOUP_METHOD_PROPFIND, priv->uri); - soup_message_headers_append(message->request_headers, - "User-Agent", USERAGENT); + soup_message_headers_append (message->request_headers, "User-Agent", USERAGENT); + soup_message_headers_append (message->request_headers, "Connection", "close"); soup_message_headers_append(message->request_headers, "Depth", "1"); soup_message_set_request(message, "text/xml", SOUP_MEMORY_TEMPORARY, (gchar *) request, strlen(request)); diff --git a/calendar/backends/caldav/e-cal-backend-caldav.c b/calendar/backends/caldav/e-cal-backend-caldav.c index 41c898d80..5e7ecc4ef 100644 --- a/calendar/backends/caldav/e-cal-backend-caldav.c +++ b/calendar/backends/caldav/e-cal-backend-caldav.c @@ -889,11 +889,14 @@ send_and_handle_redirection (SoupSession *soup_session, SoupMessage *msg, gchar { gchar *old_uri = NULL; + g_return_if_fail (msg != NULL); + if (new_location) old_uri = soup_uri_to_string (soup_message_get_uri (msg), FALSE); soup_message_set_flags (msg, SOUP_MESSAGE_NO_REDIRECT); soup_message_add_header_handler (msg, "got_body", "Location", G_CALLBACK (redirect_handler), soup_session); + soup_message_headers_append (msg->request_headers, "Connection", "close"); soup_session_send_message (soup_session, msg); if (new_location) { -- cgit v1.2.1 From f8176b0d1a3c9d18722e5beb28871728891b9efc Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 22 Jul 2010 07:28:24 -0400 Subject: Bug 602287 - Avoid racing with camel_operation_mute() --- camel/camel-operation.c | 47 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/camel/camel-operation.c b/camel/camel-operation.c index 87425a950..89fbd0596 100644 --- a/camel/camel-operation.c +++ b/camel/camel-operation.c @@ -492,6 +492,8 @@ camel_operation_start (CamelOperation *cc, const gchar *what, ...) va_list ap; gchar *msg; struct _status_stack *s; + CamelOperationStatusFunc status_func; + gpointer status_data; if (cc == NULL) cc = co_getcc(); @@ -516,9 +518,13 @@ camel_operation_start (CamelOperation *cc, const gchar *what, ...) cc->lastreport = s; cc->status_stack = g_slist_prepend(cc->status_stack, s); + /* This avoids a race with camel_operation_mute() after we unlock. */ + status_func = cc->status; + status_data = cc->status_data; + UNLOCK(); - cc->status(cc, msg, CAMEL_OPERATION_START, cc->status_data); + status_func (cc, msg, CAMEL_OPERATION_START, status_data); d(printf("start '%s'\n", msg, pc)); } @@ -543,11 +549,16 @@ camel_operation_start_transient (CamelOperation *cc, const gchar *what, ...) if (cc == NULL) cc = co_getcc(); - if (cc == NULL || cc->status == NULL) + if (cc == NULL) return; LOCK(); + if (cc->status == NULL) { + UNLOCK(); + return; + } + va_start(ap, what); msg = g_strdup_vprintf(what, ap); va_end(ap); @@ -560,9 +571,6 @@ camel_operation_start_transient (CamelOperation *cc, const gchar *what, ...) d(printf("start '%s'\n", msg, pc)); UNLOCK(); - - /* we dont report it yet */ - /*cc->status(cc, msg, CAMEL_OPERATION_START, cc->status_data);*/ } static guint stamp(void) @@ -592,6 +600,8 @@ camel_operation_progress (CamelOperation *cc, gint pc) guint now; struct _status_stack *s; gchar *msg = NULL; + CamelOperationStatusFunc status_func; + gpointer status_data; if (cc == NULL) cc = co_getcc(); @@ -613,10 +623,12 @@ camel_operation_progress (CamelOperation *cc, gint pc) they started, then they update every second */ now = stamp(); if (cc->status_update == now) { - cc = NULL; + UNLOCK(); + return; } else if (s->flags & CAMEL_OPERATION_TRANSIENT) { if (s->stamp + CAMEL_OPERATION_TRANSIENT_DELAY > now) { - cc = NULL; + UNLOCK(); + return; } else { cc->status_update = now; cc->lastreport = s; @@ -628,12 +640,15 @@ camel_operation_progress (CamelOperation *cc, gint pc) msg = g_strdup(s->msg); } + /* This avoids a race with camel_operation_mute() after we unlock. */ + status_func = cc->status; + status_data = cc->status_data; + UNLOCK(); - if (cc) { - cc->status(cc, msg, pc, cc->status_data); - g_free(msg); - } + status_func (cc, msg, pc, status_data); + + g_free(msg); } /** @@ -662,6 +677,8 @@ camel_operation_end (CamelOperation *cc) guint now; gchar *msg = NULL; gint pc = 0; + CamelOperationStatusFunc status_func; + gpointer status_data; if (cc == NULL) cc = co_getcc(); @@ -712,10 +729,14 @@ camel_operation_end (CamelOperation *cc) g_free(s); cc->status_stack = g_slist_delete_link(cc->status_stack, cc->status_stack); + /* This avoids a race with camel_operation_mute() after we unlock. */ + status_func = cc->status; + status_data = cc->status_data; + UNLOCK(); if (msg) { - cc->status(cc, msg, pc, cc->status_data); - g_free(msg); + status_func (cc, msg, pc, status_data); + g_free (msg); } } -- cgit v1.2.1 From 6ada2625d8785b1e375ba8ff0a74dfe58bd9ff25 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Thu, 24 Jun 2010 13:01:21 +0100 Subject: Update summary to include uidnext and modseq, and 64-bit uidvalidity Also set the new fields in imapx_job_scan_changes_done() -- although the summary's uidvalidity still isn't being set anywhere. (cherry picked from commit 86513477fdff54f503d6f846ef159ab9c6e98fed) --- camel/providers/imapx/camel-imapx-summary.c | 49 ++++++++++++++++++----------- camel/providers/imapx/camel-imapx-summary.h | 2 +- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-summary.c b/camel/providers/imapx/camel-imapx-summary.c index b000c138a..5c6b717ce 100644 --- a/camel/providers/imapx/camel-imapx-summary.c +++ b/camel/providers/imapx/camel-imapx-summary.c @@ -40,10 +40,10 @@ #include "camel-imapx-summary.h" //#include "camel-imap-utils.h" -#define CAMEL_IMAPX_SUMMARY_VERSION (3) +#define CAMEL_IMAPX_SUMMARY_VERSION (4) -#define EXTRACT_FIRST_DIGIT(val) val=strtoul (part, &part, 10); -#define EXTRACT_DIGIT(val) if (*part) part++; val=strtoul (part, &part, 10); +#define EXTRACT_FIRST_DIGIT(val) val=strtoull (part, &part, 10); +#define EXTRACT_DIGIT(val) if (*part) part++; val=strtoull (part, &part, 10); static gint summary_header_load (CamelFolderSummary *, FILE *); static gint summary_header_save (CamelFolderSummary *, FILE *); @@ -239,8 +239,15 @@ summary_header_from_db (CamelFolderSummary *s, CamelFIRecord *mir) EXTRACT_DIGIT (ims->validity) } + if (ims->version >= 4) { + if (part) + EXTRACT_DIGIT (ims->uidnext); + if (part) + EXTRACT_DIGIT (ims->modseq); + } + if (ims->version > CAMEL_IMAPX_SUMMARY_VERSION) { - g_warning("Unkown summary version\n"); + g_warning("Unknown summary version\n"); errno = EINVAL; return -1; } @@ -252,13 +259,19 @@ static gint summary_header_load (CamelFolderSummary *s, FILE *in) { CamelIMAPXSummary *ims = CAMEL_IMAPX_SUMMARY (s); + guint32 validity; + gint ret; if (camel_imapx_summary_parent->summary_header_load (s, in) == -1) return -1; /* Legacy version */ - if (s->version == 0x30c) - return camel_file_util_decode_uint32(in, &ims->validity); + if (s->version == 0x30c) { + ret = camel_file_util_decode_uint32(in, &validity); + if (!ret) + ims->validity = validity; + return ret; + } /* Version 1 */ if (camel_file_util_decode_fixed_int32(in, (gint32 *) &ims->version) == -1) @@ -272,11 +285,14 @@ summary_header_load (CamelFolderSummary *s, FILE *in) return -1; } - if (camel_file_util_decode_fixed_int32(in, (gint32 *) &ims->validity) == -1) + if (camel_file_util_decode_fixed_int32(in, (gint32 *) &validity) == -1) return -1; + ims->validity = validity; - if (ims->version > CAMEL_IMAPX_SUMMARY_VERSION) { - g_warning("Unkown summary version\n"); + /* This is only used for migration; will never be asked to load newer + versions of the store format */ + if (ims->version > 3) { + g_warning("Unknown summary version\n"); errno = EINVAL; return -1; } @@ -293,22 +309,17 @@ summary_header_to_db (CamelFolderSummary *s, CamelException *ex) fir = camel_imapx_summary_parent->summary_header_to_db (s, ex); if (!fir) return NULL; - fir->bdata = g_strdup_printf ("%d %u", CAMEL_IMAPX_SUMMARY_VERSION, ims->validity); - + fir->bdata = g_strdup_printf ("%d %llu %u %llu", CAMEL_IMAPX_SUMMARY_VERSION, + (unsigned long long)ims->validity, ims->uidnext, + (unsigned long long)ims->modseq); return fir; } static gint summary_header_save (CamelFolderSummary *s, FILE *out) { - CamelIMAPXSummary *ims = CAMEL_IMAPX_SUMMARY(s); - - if (camel_imapx_summary_parent->summary_header_save (s, out) == -1) - return -1; - - camel_file_util_encode_fixed_int32(out, CAMEL_IMAPX_SUMMARY_VERSION); - - return camel_file_util_encode_fixed_int32(out, ims->validity); + g_warning("imapx %s called; should never happen!\n", __func__); + return -1; } static CamelMessageInfo * diff --git a/camel/providers/imapx/camel-imapx-summary.h b/camel/providers/imapx/camel-imapx-summary.h index 0dee06faf..7ea05a725 100644 --- a/camel/providers/imapx/camel-imapx-summary.h +++ b/camel/providers/imapx/camel-imapx-summary.h @@ -58,8 +58,8 @@ struct _CamelIMAPXSummary { CamelFolderSummary parent; guint32 version; - guint32 validity; guint32 uidnext; + guint64 validity; guint64 modseq; }; -- cgit v1.2.1 From 2d4e5270786020b4c0e7afe2180c019b02ec57ff Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 19 Jun 2010 12:45:56 +0100 Subject: Always enable QRESYNC where it's available. This doesn't have much of an effect until we start using it, except for enabling the VANISHED response, and causing unsolicited fetches to have UIDs. (cherry picked from commit 9db64a5743863861611f25cdf32bd2705e4cdd4f) --- camel/providers/imapx/camel-imapx-server.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index cd43bf900..70f3cea98 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -2828,7 +2828,15 @@ imapx_reconnect (CamelIMAPXServer *is, CamelException *ex) if (camel_exception_is_set (ex)) goto exception; } + if (is->cinfo->capa & IMAPX_CAPABILITY_QRESYNC) { + ic = camel_imapx_command_new (is, "ENABLE", NULL, "ENABLE CONDSTORE QRESYNC"); + imapx_command_run (is, ic); + camel_exception_xfer (ex, ic->ex); + camel_imapx_command_free (ic); + if (camel_exception_is_set (ex)) + goto exception; + } if (((CamelIMAPXStore *) is->store)->summary->namespaces == NULL) { CamelIMAPXNamespaceList *nsl = NULL; CamelIMAPXStoreNamespace *ns = NULL; -- cgit v1.2.1 From ef7d692b446c3b1372bacf8a1cd9da1d8be0f0dc Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Thu, 24 Jun 2010 13:13:03 +0100 Subject: Revamp imapx_job_refresh_info_start() to make use of modseq and uidnext (cherry picked from commit b0214462be6e21c2a312d8fe3e31ffdd2825d153) --- camel/providers/imapx/camel-imapx-server.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 70f3cea98..57a1f4fc2 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -3580,11 +3580,9 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) if (camel_exception_is_set (job->ex)) goto done; -#if 0 /* There are issues with this still; continue with the buggy behaviour - where we issue STATUS on the current folder, for now...*/ if (is->select && !strcmp(folder->full_name, is->select)) is_selected = TRUE; -#endif + total = camel_folder_summary_count (folder->summary); /* We don't have valid unread count or modseq for currently-selected server -- cgit v1.2.1 From 6b7828bcf4a0c38049bf129f57e1c7a1761782c5 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Thu, 24 Jun 2010 14:09:45 +0100 Subject: Disable the special-case for the selected folder in refresh_info It will make us miss messages on servers like Groupwise which don't give unsolicited change notices; we really _do_ need to issue STATUS there, even though it's explicitly forbidden by RFC3501 do so. Or SEARCH UNSEEN. But the logic is broken anyway -- what is the currently-selected folder NOW may not be the currently-selected folder by the time our STATUS command hits the front of the queue anyway, so we do still end up doing STATUS on the current folder sometimes. Needs more thought. (cherry picked from commit b44f64b984519395026fab12087478245d4d23d4) --- camel/providers/imapx/camel-imapx-server.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 57a1f4fc2..70f3cea98 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -3580,9 +3580,11 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) if (camel_exception_is_set (job->ex)) goto done; +#if 0 /* There are issues with this still; continue with the buggy behaviour + where we issue STATUS on the current folder, for now...*/ if (is->select && !strcmp(folder->full_name, is->select)) is_selected = TRUE; - +#endif total = camel_folder_summary_count (folder->summary); /* We don't have valid unread count or modseq for currently-selected server -- cgit v1.2.1 From 51920efa6ea9a3c82a22827088c618207cd90e02 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 31 Jul 2010 16:03:08 +0200 Subject: Bug 622719 - Fix lifetime issues with CamelIMAPXServer w.r.t. disconnection (cherry picked from commit 6e49273e99bfe8f5e1ed080a454d0e3aeacae4f8) Note contents of imapx_server_dispose() from HEAD have moved to imapx_server_finalize() in gnome-2-30 because CamelObjects don't have a separate dispose() method. --- camel/providers/imapx/camel-imapx-folder.c | 60 +++++++++---- camel/providers/imapx/camel-imapx-server.c | 81 ++++++++++-------- camel/providers/imapx/camel-imapx-server.h | 2 +- camel/providers/imapx/camel-imapx-store.c | 132 +++++++++++++++++++++++------ camel/providers/imapx/camel-imapx-store.h | 1 + 5 files changed, 197 insertions(+), 79 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-folder.c b/camel/providers/imapx/camel-imapx-folder.c index 3d9b0c048..bdd398d92 100644 --- a/camel/providers/imapx/camel-imapx-folder.c +++ b/camel/providers/imapx/camel-imapx-folder.c @@ -129,25 +129,33 @@ static void imapx_refresh_info (CamelFolder *folder, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *)folder->parent_store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE (istore)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return; camel_service_connect((CamelService *)istore, ex); - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_refresh_info(istore->server, folder, ex); + server = camel_imapx_store_get_server(istore, ex); + if (server) { + camel_imapx_server_refresh_info(server, folder, ex); + camel_object_unref(server); + } } static void imapx_expunge (CamelFolder *folder, CamelException *ex) { CamelIMAPXStore *is = (CamelIMAPXStore *)folder->parent_store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE (is)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return; - if (is->server && camel_imapx_server_connect (is->server, TRUE, ex)) - camel_imapx_server_expunge(is->server, folder, ex); + server = camel_imapx_store_get_server(is, ex); + if (server) { + camel_imapx_server_expunge(server, folder, ex); + camel_object_unref(server); + } } @@ -155,6 +163,7 @@ static void imapx_sync (CamelFolder *folder, gboolean expunge, CamelException *ex) { CamelIMAPXStore *is = (CamelIMAPXStore *)folder->parent_store; + CamelIMAPXServer *server; CamelException eex = CAMEL_EXCEPTION_INITIALISER; if (CAMEL_OFFLINE_STORE (is)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) @@ -163,17 +172,20 @@ imapx_sync (CamelFolder *folder, gboolean expunge, CamelException *ex) if (!ex) ex = &eex; - if (is->server && camel_imapx_server_connect (is->server, TRUE, ex)) - camel_imapx_server_sync_changes (is->server, folder, ex); + server = camel_imapx_store_get_server(is, ex); + if (server) + camel_imapx_server_sync_changes (server, folder, ex); /* Sync twice - make sure deleted flags are written out, then sync again incase expunge changed anything */ camel_exception_clear(ex); - if (is->server && expunge) { - camel_imapx_server_expunge(is->server, folder, ex); + if (server && expunge) { + camel_imapx_server_expunge(server, folder, ex); camel_exception_clear(ex); } + if (server) + camel_object_unref(server); } static CamelMimeMessage * @@ -183,6 +195,7 @@ imapx_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex) CamelStream *stream = NULL; CamelIMAPXStore *istore = (CamelIMAPXStore *)folder->parent_store; CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *) folder; + CamelIMAPXServer *server; const gchar *path = NULL; gboolean offline_message = FALSE; @@ -203,9 +216,12 @@ imapx_get_message (CamelFolder *folder, const gchar *uid, CamelException *ex) if (CAMEL_OFFLINE_STORE (istore)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return NULL; - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) { - stream = camel_imapx_server_get_message(istore->server, folder, uid, ex); + server = camel_imapx_store_get_server(istore, ex); + if (server) { + stream = camel_imapx_server_get_message(server, folder, uid, ex); + camel_object_unref(server); } else { + /* It should _always_ be set */ if (!camel_exception_is_set (ex)) camel_exception_setv(ex, 1, "not authenticated"); return NULL; @@ -231,12 +247,16 @@ static void imapx_sync_message (CamelFolder *folder, const gchar *uid, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *)folder->parent_store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE (istore)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return; - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_sync_message (istore->server, folder, uid, ex); + server = camel_imapx_store_get_server(istore, ex); + if (server) { + camel_imapx_server_sync_message (server, folder, uid, ex); + camel_object_unref(server); + } } static void @@ -245,12 +265,16 @@ imapx_transfer_messages_to (CamelFolder *source, GPtrArray *uids, gboolean delete_originals, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *) source->parent_store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE (istore)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return; - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_copy_message (istore->server, source, dest, uids, delete_originals, ex); + server = camel_imapx_store_get_server(istore, ex); + if (server) { + camel_imapx_server_copy_message (server, source, dest, uids, delete_originals, ex); + camel_object_unref(server); + } imapx_refresh_info (dest, ex); } @@ -259,6 +283,7 @@ static void imapx_append_message(CamelFolder *folder, CamelMimeMessage *message, const CamelMessageInfo *info, gchar **appended_uid, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *)folder->parent_store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE (istore)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return; @@ -266,8 +291,11 @@ imapx_append_message(CamelFolder *folder, CamelMimeMessage *message, const Camel if (appended_uid) *appended_uid = NULL; - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_append_message(istore->server, folder, message, info, ex); + server = camel_imapx_store_get_server(istore, ex); + if (server) { + camel_imapx_server_append_message(server, folder, message, info, ex); + camel_object_unref(server); + } } gchar * diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 70f3cea98..fd87c67d9 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -170,6 +170,7 @@ static gboolean imapx_is_command_queue_empty (CamelIMAPXServer *is); /* states for the connection? */ enum { IMAPX_DISCONNECTED, + IMAPX_SHUTDOWN, IMAPX_CONNECTED, IMAPX_AUTHENTICATED, IMAPX_INITIALISED, @@ -1013,6 +1014,15 @@ imapx_command_queue(CamelIMAPXServer *is, CamelIMAPXCommand *ic) QUEUE_LOCK(is); + if (is->state == IMAPX_SHUTDOWN) { + c(printf("refuse to queue job on disconnected server\n")); + camel_exception_set(ic->ex, 1, "Server disconnected"); + QUEUE_UNLOCK(is); + if (ic->complete) + ic->complete(is, ic); + return; + } + scan = (CamelIMAPXCommand *)is->queue.head; if (scan->next == NULL) camel_dlist_addtail(&is->queue, (CamelDListNode *)ic); @@ -1530,7 +1540,8 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) c(printf("BYE: %s\n", token)); camel_exception_setv(ex, 1, "IMAP server said BYE: %s", token); } - break; + imap->state = IMAPX_SHUTDOWN; + return -1; } case IMAPX_PREAUTH: c(printf("preauthenticated\n")); @@ -4301,7 +4312,7 @@ imapx_parser_thread (gpointer d) errno = EINTR; } - if (camel_application_is_exiting || is->parser_quit) { + if (is->parser_quit) { camel_exception_setv (&ex, CAMEL_EXCEPTION_USER_CANCEL, "Operation Cancelled: %s", g_strerror(errno)); break; } @@ -4320,11 +4331,11 @@ imapx_parser_thread (gpointer d) } } - imapx_disconnect (is); - cancel_all_jobs (is, &ex); + QUEUE_LOCK(is); + is->state = IMAPX_SHUTDOWN; + QUEUE_UNLOCK(is); - if (imapx_idle_supported (is)) - imapx_exit_idle (is); + cancel_all_jobs (is, &ex); camel_exception_clear (&ex); @@ -4378,11 +4389,29 @@ imapx_server_init(CamelIMAPXServer *is, CamelIMAPXServerClass *isclass) static void imapx_server_finalise(CamelIMAPXServer *is, CamelIMAPXServerClass *isclass) { + e(printf("imapx_server_finalise\n")); + + QUEUE_LOCK(is); + is->state = IMAPX_SHUTDOWN; + QUEUE_UNLOCK(is); + + is->parser_quit = TRUE; + camel_operation_cancel (is->op); + + if (is->parser_thread) + g_thread_join (is->parser_thread); + + if (imapx_idle_supported (is)) + imapx_exit_idle (is); + + imapx_disconnect (is); + g_static_rec_mutex_free(&is->queue_lock); g_static_rec_mutex_free (&is->ostream_lock); g_hash_table_destroy (is->uid_eflags); camel_folder_change_info_free (is->changes); + } CamelType @@ -4463,39 +4492,23 @@ imapx_disconnect (CamelIMAPXServer *is) /* Client commands */ gboolean -camel_imapx_server_connect (CamelIMAPXServer *is, gboolean connect, CamelException *ex) +camel_imapx_server_connect (CamelIMAPXServer *is, CamelException *ex) { - gboolean ret = FALSE; - - CAMEL_SERVICE_REC_LOCK (is->store, connect_lock); - if (connect) { - if (is->state >= IMAPX_INITIALISED) { - ret = TRUE; - goto exit; - } + if (is->state == IMAPX_SHUTDOWN) + return FALSE; - g_static_rec_mutex_lock (&is->ostream_lock); - imapx_reconnect (is, ex); - g_static_rec_mutex_unlock (&is->ostream_lock); + if (is->state >= IMAPX_INITIALISED) + return TRUE; - if (camel_exception_is_set (ex)) { - ret = FALSE; - goto exit; - } + g_static_rec_mutex_lock (&is->ostream_lock); + imapx_reconnect (is, ex); + g_static_rec_mutex_unlock (&is->ostream_lock); - is->parser_thread = g_thread_create((GThreadFunc) imapx_parser_thread, is, TRUE, NULL); - ret = TRUE; - } else { - is->parser_quit = TRUE; - camel_operation_cancel (is->op); - if (is->parser_thread) - g_thread_join (is->parser_thread); - ret = TRUE; - } + if (camel_exception_is_set (ex)) + return FALSE; -exit: - CAMEL_SERVICE_REC_UNLOCK (is->store, connect_lock); - return ret; + is->parser_thread = g_thread_create((GThreadFunc) imapx_parser_thread, is, TRUE, NULL); + return TRUE; } static CamelStream * diff --git a/camel/providers/imapx/camel-imapx-server.h b/camel/providers/imapx/camel-imapx-server.h index 502769dd0..e72a245b5 100644 --- a/camel/providers/imapx/camel-imapx-server.h +++ b/camel/providers/imapx/camel-imapx-server.h @@ -116,7 +116,7 @@ struct _CamelIMAPXServerClass { CamelType camel_imapx_server_get_type (void); CamelIMAPXServer *camel_imapx_server_new(struct _CamelStore *store, struct _CamelURL *url); -gboolean camel_imapx_server_connect(CamelIMAPXServer *is, gint state, CamelException *ex); +gboolean camel_imapx_server_connect(CamelIMAPXServer *is, CamelException *ex); gboolean imapx_connect_to_server (CamelIMAPXServer *is, CamelException *ex); GPtrArray *camel_imapx_server_list(CamelIMAPXServer *is, const gchar *top, guint32 flags, const gchar *ext, CamelException *ex); diff --git a/camel/providers/imapx/camel-imapx-store.c b/camel/providers/imapx/camel-imapx-store.c index 5d12bd2a6..90b4780ea 100644 --- a/camel/providers/imapx/camel-imapx-store.c +++ b/camel/providers/imapx/camel-imapx-store.c @@ -204,16 +204,48 @@ imapx_get_name (CamelService *service, gboolean brief) service->url->user, service->url->host); } +CamelIMAPXServer * +camel_imapx_store_get_server(CamelIMAPXStore *store, CamelException *ex) +{ + CamelIMAPXServer *server = NULL; + + CAMEL_SERVICE_REC_LOCK (store, connect_lock); + + if (store->server && camel_imapx_server_connect(store->server, ex)) { + camel_object_ref(store->server); + server = store->server; + } else { + if (store->server) { + camel_object_unref(store->server); + store->server = NULL; + } + + server = camel_imapx_server_new(CAMEL_STORE(store), CAMEL_SERVICE(store)->url); + if (camel_imapx_server_connect(server, ex)) { + store->server = server; + camel_object_ref(server); + } else { + camel_object_unref(server); + server = NULL; + } + } + CAMEL_SERVICE_REC_UNLOCK (store, connect_lock); + return server; +} + static gboolean imapx_connect (CamelService *service, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *)service; + CamelIMAPXServer *server; - /* We never really are 'connected' or 'disconnected' */ - if (istore->server == NULL) - istore->server = camel_imapx_server_new((CamelStore *)istore, service->url); + server = camel_imapx_store_get_server(istore, ex); + if (server) { + camel_object_unref(server); + return TRUE; + } - return camel_imapx_server_connect (istore->server, TRUE, ex); + return FALSE; } static gboolean @@ -223,8 +255,14 @@ imapx_disconnect (CamelService *service, gboolean clean, CamelException *ex) CAMEL_SERVICE_CLASS (parent_class)->disconnect (service, clean, ex); - if (istore->server) - camel_imapx_server_connect(istore->server, FALSE, ex); + CAMEL_SERVICE_REC_LOCK (service, connect_lock); + + if (istore->server) { + camel_object_unref(istore->server); + istore->server = NULL; + } + + CAMEL_SERVICE_REC_UNLOCK (service, connect_lock); return TRUE; } @@ -267,12 +305,16 @@ static void imapx_noop (CamelStore *store, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *) store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE(store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return; - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_noop (istore->server, NULL, ex); + server = camel_imapx_store_get_server(istore, ex); + if (server) { + camel_imapx_server_noop (server, NULL, ex); + camel_object_unref(server); + } } static guint @@ -528,12 +570,17 @@ static void imapx_subscribe_folder (CamelStore *store, const gchar *folder_name, gboolean emit_signal, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *) store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE(store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return; - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_manage_subscription (istore->server, folder_name, TRUE, ex); + server = camel_imapx_store_get_server(istore, ex); + if (!server) + return; + + camel_imapx_server_manage_subscription (server, folder_name, TRUE, ex); + camel_object_unref(server); if (!camel_exception_is_set (ex)) imapx_mark_folder_subscribed (istore, folder_name, emit_signal, ex); @@ -543,12 +590,17 @@ static void imapx_unsubscribe_folder (CamelStore *store, const gchar *folder_name, gboolean emit_signal, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *) store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE(store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) return; - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_manage_subscription (istore->server, folder_name, FALSE, ex); + server = camel_imapx_store_get_server(istore, ex); + if (!server) + return; + + camel_imapx_server_manage_subscription (server, folder_name, FALSE, ex); + camel_object_unref(server); if (!camel_exception_is_set (ex)) imapx_unmark_folder_subscribed (istore, folder_name, emit_signal, ex); @@ -614,15 +666,19 @@ static void imapx_delete_folder (CamelStore *store, const gchar *folder_name, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *) store; + CamelIMAPXServer *server; if (CAMEL_OFFLINE_STORE (store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) { camel_exception_set (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE, _("You must be working online to complete this operation")); return; } + server = camel_imapx_store_get_server(istore, ex); + if (!server) + return; - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_delete_folder (istore->server, folder_name, ex); + camel_imapx_server_delete_folder (server, folder_name, ex); + camel_object_unref(server); if (!camel_exception_is_set (ex)) imapx_delete_folder_from_cache (istore, folder_name, ex); @@ -665,6 +721,7 @@ static void imapx_rename_folder (CamelStore *store, const gchar *old, const gchar *new, CamelException *ex) { CamelIMAPXStore *istore = (CamelIMAPXStore *) store; + CamelIMAPXServer *server; gchar *oldpath, *newpath, *storage_path; if (CAMEL_OFFLINE_STORE (store)->state == CAMEL_OFFLINE_STORE_NETWORK_UNAVAIL) { @@ -676,8 +733,11 @@ imapx_rename_folder (CamelStore *store, const gchar *old, const gchar *new, Came if (istore->rec_options & IMAPX_SUBSCRIPTIONS) imapx_unsubscribe_folder (store, old, FALSE, ex); - if (istore->server && camel_imapx_server_connect (istore->server, TRUE, ex)) - camel_imapx_server_rename_folder (istore->server, old, new, ex); + server = camel_imapx_store_get_server(istore, ex); + if (server) { + camel_imapx_server_rename_folder (server, old, new, ex); + camel_object_unref(server); + } if (camel_exception_is_set (ex)) { imapx_subscribe_folder (store, old, FALSE, ex); @@ -711,6 +771,7 @@ imapx_create_folder (CamelStore *store, const gchar *parent_name, const gchar *f CamelStoreInfo *si; CamelIMAPXStoreNamespace *ns; CamelIMAPXStore *istore = (CamelIMAPXStore *) store; + CamelIMAPXServer *server; gchar *real_name, *full_name, *parent_real; CamelFolderInfo *fi = NULL; gchar dir_sep; @@ -721,7 +782,8 @@ imapx_create_folder (CamelStore *store, const gchar *parent_name, const gchar *f return NULL; } - if (!(istore->server && camel_imapx_server_connect (istore->server, TRUE, ex))) + server = camel_imapx_store_get_server(istore, ex); + if (!server) return NULL; if (!parent_name) @@ -737,6 +799,7 @@ imapx_create_folder (CamelStore *store, const gchar *parent_name, const gchar *f camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID_PATH, _("The folder name \"%s\" is invalid because it contains the character \"%c\""), folder_name, dir_sep); + camel_object_unref(server); return NULL; } @@ -744,6 +807,7 @@ imapx_create_folder (CamelStore *store, const gchar *parent_name, const gchar *f if (parent_real == NULL) { camel_exception_setv(ex, CAMEL_EXCEPTION_FOLDER_INVALID_STATE, _("Unknown parent folder: %s"), parent_name); + camel_object_unref(server); return NULL; } @@ -751,6 +815,7 @@ imapx_create_folder (CamelStore *store, const gchar *parent_name, const gchar *f if (si && si->flags & CAMEL_STORE_INFO_FOLDER_NOINFERIORS) { camel_exception_set (ex, CAMEL_EXCEPTION_FOLDER_INVALID_STATE, _("The parent folder is not allowed to contain subfolders")); + camel_object_unref(server); return NULL; } @@ -761,7 +826,8 @@ imapx_create_folder (CamelStore *store, const gchar *parent_name, const gchar *f full_name = imapx_concat (istore, parent_real, real_name); g_free(real_name); - camel_imapx_server_create_folder (istore->server, full_name, ex); + camel_imapx_server_create_folder (server, full_name, ex); + camel_object_unref(server); if (!camel_exception_is_set (ex)) { CamelIMAPXStoreInfo *si; @@ -886,7 +952,7 @@ get_folder_info_offline (CamelStore *store, const gchar *top, } static void -add_folders_to_summary (CamelIMAPXStore *istore, GPtrArray *folders, GHashTable *table, gboolean subscribed) +add_folders_to_summary (CamelIMAPXStore *istore, CamelIMAPXServer *server, GPtrArray *folders, GHashTable *table, gboolean subscribed) { gint i = 0; @@ -909,8 +975,10 @@ add_folders_to_summary (CamelIMAPXStore *istore, GPtrArray *folders, GHashTable } si = camel_imapx_store_summary_add_from_full (istore->summary, li->name, li->separator); - if (!si) + if (!si) { + camel_object_unref(server); continue; + } new_flags = (si->info.flags & (CAMEL_STORE_INFO_FOLDER_SUBSCRIBED | CAMEL_STORE_INFO_FOLDER_CHECK_FOR_NEW)) | (li->flags & ~CAMEL_STORE_INFO_FOLDER_SUBSCRIBED); @@ -969,15 +1037,16 @@ imapx_get_folders_free(gpointer k, gpointer v, gpointer d) } static void -fetch_folders_for_pattern (CamelIMAPXStore *istore, const gchar *pattern, guint32 flags, const gchar *ext, GHashTable *table, CamelException *ex) +fetch_folders_for_pattern (CamelIMAPXStore *istore, CamelIMAPXServer *server, const gchar *pattern, guint32 flags, + const gchar *ext, GHashTable *table, CamelException *ex) { GPtrArray *folders = NULL; - folders = camel_imapx_server_list (istore->server, pattern, flags, ext, ex); + folders = camel_imapx_server_list (server, pattern, flags, ext, ex); if (camel_exception_is_set (ex)) return; - add_folders_to_summary (istore, folders, table, (flags & CAMEL_STORE_FOLDER_INFO_SUBSCRIBED)); + add_folders_to_summary (istore, server, folders, table, (flags & CAMEL_STORE_FOLDER_INFO_SUBSCRIBED)); g_ptr_array_foreach (folders, free_list, folders); g_ptr_array_free (folders, TRUE); @@ -1004,9 +1073,14 @@ get_namespaces (CamelIMAPXStore *istore) static GHashTable * fetch_folders_for_namespaces (CamelIMAPXStore *istore, const gchar *pattern, gboolean sync, CamelException *ex) { + CamelIMAPXServer *server; GHashTable *folders = NULL; GSList *namespaces = NULL, *l; + server = camel_imapx_store_get_server(istore, ex); + if (!server) + return NULL; + folders = g_hash_table_new (folder_hash, folder_eq); namespaces = get_namespaces (istore); @@ -1030,11 +1104,11 @@ fetch_folders_for_namespaces (CamelIMAPXStore *istore, const gchar *pattern, gbo if (sync) flags |= CAMEL_STORE_FOLDER_INFO_SUBSCRIPTION_LIST; - if (istore->server->cinfo->capa & IMAPX_CAPABILITY_LIST_EXTENDED) + if (server->cinfo->capa & IMAPX_CAPABILITY_LIST_EXTENDED) list_ext = "RETURN (SUBSCRIBED)"; flags |= CAMEL_STORE_FOLDER_INFO_RECURSIVE; - fetch_folders_for_pattern (istore, pat, flags, list_ext, folders, ex); + fetch_folders_for_pattern (istore, server, pat, flags, list_ext, folders, ex); if (camel_exception_is_set (ex)) { g_free (pat); goto exception; @@ -1043,7 +1117,7 @@ fetch_folders_for_namespaces (CamelIMAPXStore *istore, const gchar *pattern, gbo /* If the server doesn't support LIST-EXTENDED then we have to issue LSUB to list the subscribed folders separately */ flags |= CAMEL_STORE_FOLDER_INFO_SUBSCRIBED; - fetch_folders_for_pattern (istore, pat, flags, NULL, folders, ex); + fetch_folders_for_pattern (istore, server, pat, flags, NULL, folders, ex); if (camel_exception_is_set (ex)) { g_free (pat); goto exception; @@ -1052,15 +1126,17 @@ fetch_folders_for_namespaces (CamelIMAPXStore *istore, const gchar *pattern, gbo g_free (pat); if (pattern) - return folders; + goto out; ns = ns->next; } } - + out: + camel_object_unref(server); return folders; exception: + camel_object_unref(server); g_hash_table_destroy (folders); return NULL; } diff --git a/camel/providers/imapx/camel-imapx-store.h b/camel/providers/imapx/camel-imapx-store.h index fa08ab9e2..3cb122739 100644 --- a/camel/providers/imapx/camel-imapx-store.h +++ b/camel/providers/imapx/camel-imapx-store.h @@ -79,6 +79,7 @@ typedef struct { /* Standard Camel function */ CamelType camel_imapx_store_get_type (void); +struct _CamelIMAPXServer *camel_imapx_store_get_server(CamelIMAPXStore *store, CamelException *ex); #ifdef __cplusplus } -- cgit v1.2.1 From 1525fa864c9dd6d3c88e3a40e135740d0b1bd23f Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Thu, 24 Jun 2010 11:12:02 +0100 Subject: Don't bother checking for is->cinfo being NULL. It can never happen now. Famous last words, I know... (cherry picked from commit 7e0e64e76a0771fd6681d21fc63ce97251410e88) (With a couple more in camel-imap-server.c which I had slipped in during merges to gnome-2-30 branch) --- camel/providers/imapx/camel-imapx-server.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index fd87c67d9..02887abf9 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -502,7 +502,7 @@ imapx_command_add_part(CamelIMAPXCommand *ic, camel_imapx_command_part_t type, g } if (type & CAMEL_IMAPX_COMMAND_LITERAL_PLUS) { - if (ic->is->cinfo && ic->is->cinfo->capa & IMAPX_CAPABILITY_LITERALPLUS) { + if (ic->is->cinfo->capa & IMAPX_CAPABILITY_LITERALPLUS) { camel_stream_printf((CamelStream *)ic->mem, "{%u+}", ob_size); } else { type &= ~CAMEL_IMAPX_COMMAND_LITERAL_PLUS; @@ -1598,10 +1598,11 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) break; case IMAPX_CAPABILITY: if (sinfo->u.cinfo) { - if (imap->cinfo) - imapx_free_capability(imap->cinfo); + struct _capability_info *cinfo = imap->cinfo; imap->cinfo = sinfo->u.cinfo; sinfo->u.cinfo = NULL; + if (cinfo) + imapx_free_capability(cinfo); c(printf("got capability flags %08x\n", imap->cinfo->capa)); } break; @@ -2219,7 +2220,7 @@ imapx_in_idle (CamelIMAPXServer *is) static gboolean imapx_idle_supported (CamelIMAPXServer *is) { - return (is->cinfo && is->cinfo->capa & IMAPX_CAPABILITY_IDLE && is->use_idle); + return (is->cinfo->capa & IMAPX_CAPABILITY_IDLE && is->use_idle); } // end IDLE @@ -2712,7 +2713,7 @@ imapx_reconnect (CamelIMAPXServer *is, CamelException *ex) goto preauthed; if (!authtype && service->url->authmech) { - if (is->cinfo && !g_hash_table_lookup (is->cinfo->auth_types, service->url->authmech)) { + if (!g_hash_table_lookup (is->cinfo->auth_types, service->url->authmech)) { camel_exception_setv ( ex, CAMEL_EXCEPTION_SERVICE_CANT_AUTHENTICATE, _("IMAP server %s does not support requested " @@ -3638,7 +3639,7 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) } } } else { - if (is->cinfo && is->cinfo->capa & IMAPX_CAPABILITY_CONDSTORE) + if (is->cinfo->capa & IMAPX_CAPABILITY_CONDSTORE) ic = camel_imapx_command_new (is, "STATUS", NULL, "STATUS %f (MESSAGES UNSEEN UIDNEXT HIGHESTMODSEQ)", folder); else ic = camel_imapx_command_new (is, "STATUS", NULL, "STATUS %f (MESSAGES UNSEEN UIDNEXT)", folder); -- cgit v1.2.1 From 372042c9d042061962e0186b89b8680788eb50f4 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 31 Jul 2010 16:16:08 +0200 Subject: Select folder based on CamelFolder *, not its name As threatened in commit 6900bf35807c9be0cb2498a63cef4684ff9144d6, sanify the way that commands indicate which folder (if any) should be selected when they run. Until now, they've set a folder name in ic->select, which was passed as an argument to camel_imapx_command_new(). That's been used for comparisons to decide whether the command can run... but when it actually comes to select a folder specifically for the benefit of the command, it wasn't used! Instead, the folder in ic->job->folder was used instead. Clean this up so that ic->select is now a CamelFolder * instead of a string, and actually use it consistently for both the comparisons and the eventual SELECT. (cherry picked from commit 473eee75ae154e7d1bc4a83247c1a0128a0b635c) --- camel/providers/imapx/camel-imapx-server.c | 116 +++++++++++++---------------- camel/providers/imapx/camel-imapx-server.h | 1 - 2 files changed, 51 insertions(+), 66 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 02887abf9..1d0018a10 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -139,7 +139,7 @@ struct _CamelIMAPXCommand { const gchar *name; /* command name/type (e.g. FETCH) */ - gchar *select; /* folder to select */ + CamelFolder *select; /* folder to select */ struct _status_info *status; /* status for command, indicates it is complete if != NULL */ @@ -161,7 +161,7 @@ struct _CamelIMAPXCommand { struct _CamelIMAPXJob *job; }; -CamelIMAPXCommand *camel_imapx_command_new(CamelIMAPXServer *is, const gchar *name, const gchar *select, const gchar *fmt, ...); +CamelIMAPXCommand *camel_imapx_command_new(CamelIMAPXServer *is, const gchar *name, CamelFolder *select, const gchar *fmt, ...); void camel_imapx_command_add(CamelIMAPXCommand *ic, const gchar *fmt, ...); void camel_imapx_command_free(CamelIMAPXCommand *ic); void camel_imapx_command_close(CamelIMAPXCommand *ic); @@ -717,7 +717,7 @@ imapx_command_addv(CamelIMAPXCommand *ic, const gchar *fmt, va_list ap) } CamelIMAPXCommand * -camel_imapx_command_new(CamelIMAPXServer *is, const gchar *name, const gchar *select, const gchar *fmt, ...) +camel_imapx_command_new(CamelIMAPXServer *is, const gchar *name, CamelFolder *select, const gchar *fmt, ...) { CamelIMAPXCommand *ic; static gint tag = 0; @@ -727,7 +727,7 @@ camel_imapx_command_new(CamelIMAPXServer *is, const gchar *name, const gchar *se ic->tag = tag++; ic->name = name; ic->mem = (CamelStreamMem *)camel_stream_mem_new(); - ic->select = g_strdup(select); + ic->select = select; ic->is = is; camel_dlist_init(&ic->parts); ic->ex = camel_exception_new (); @@ -766,8 +766,7 @@ camel_imapx_command_free(CamelIMAPXCommand *ic) if (ic->mem) camel_object_unref((CamelObject *)ic->mem); imapx_free_status(ic->status); - g_free(ic->select); - + while ((cp = ((CamelIMAPXCommandPart *)camel_dlist_remhead(&ic->parts)))) { g_free(cp->data); if (cp->ob) { @@ -882,7 +881,7 @@ imapx_command_start_next(CamelIMAPXServer *is, CamelException *ex) nc = ic->next; while (nc && is->literal == NULL && count < MAX_COMMANDS && ic->pri >= pri) { c(printf("-- %3d '%s'?\n", (gint)ic->pri, ic->name)); - if (ic->select == NULL) { + if (!ic->select) { c(printf("--> starting '%s'\n", ic->name)); pri = ic->pri; camel_dlist_remove((CamelDListNode *)ic); @@ -926,8 +925,9 @@ imapx_command_start_next(CamelIMAPXServer *is, CamelException *ex) } /* See if any queued jobs on this select first */ - if (is->select) { - c(printf("- we're selected on '%s', current jobs?\n", is->select)); + if (is->select_folder) { + c(printf("- we're selected on '%s', current jobs?\n", + camel_folder_get_full_name(is->select_folder))); for (ic = (CamelIMAPXCommand *)is->active.head;ic->next;ic=ic->next) { c(printf("- %3d '%s'\n", (gint)ic->pri, ic->name)); if (ic->pri > pri) @@ -945,7 +945,7 @@ imapx_command_start_next(CamelIMAPXServer *is, CamelException *ex) nc = ic->next; while (nc && is->literal == NULL && count < MAX_COMMANDS && ic->pri >= pri) { c(printf("-- %3d '%s'?\n", (gint)ic->pri, ic->name)); - if (ic->select == NULL || strcmp(ic->select, is->select) == 0) { + if (!ic->select || (ic->select == is->select_folder)) { c(printf("--> starting '%s'\n", ic->name)); pri = ic->pri; camel_dlist_remove((CamelDListNode *)ic); @@ -969,14 +969,16 @@ imapx_command_start_next(CamelIMAPXServer *is, CamelException *ex) /* If we need to select a folder for the first command, do it now, once it is complete it will re-call us if it succeeded */ - if (ic->job->folder) { - imapx_select(is, ic->job->folder, FALSE, ex); + if (ic->select) { + c(printf("Selecting folder '%s' for command '%s'(%p)\n", + camel_folder_get_full_name(ic->select), ic->name, ic)); + imapx_select(is, ic->select, FALSE, ex); } else { pri = ic->pri; nc = ic->next; count = 0; while (nc && is->literal == NULL && count < MAX_COMMANDS && ic->pri >= pri) { - if (ic->select == NULL || (is->select && strcmp(ic->select, is->select))) { + if (!ic->select || ic->select == is->select_folder) { c(printf("* queueing job %3d '%s'\n", (gint)ic->pri, ic->name)); pri = ic->pri; camel_dlist_remove((CamelDListNode *)ic); @@ -1068,20 +1070,19 @@ found: } static gboolean -imapx_job_matches (const gchar *folder_name, CamelIMAPXJob *job, guint32 type, const gchar *uid) +imapx_job_matches (CamelFolder *folder, CamelIMAPXJob *job, guint32 type, const gchar *uid) { switch (job->type) { case IMAPX_JOB_GET_MESSAGE: - if (folder_name && strcmp(job->folder->full_name, folder_name) == 0 - && strcmp(job->u.get_message.uid, uid) == 0) + if (folder == job->folder && + strcmp(job->u.get_message.uid, uid) == 0) return TRUE; break; case IMAPX_JOB_FETCH_NEW_MESSAGES: case IMAPX_JOB_REFRESH_INFO: case IMAPX_JOB_SYNC_CHANGES: case IMAPX_JOB_EXPUNGE: - if (folder_name - && strcmp(job->folder->full_name, folder_name) == 0) + if (folder == job->folder) return TRUE; break; case IMAPX_JOB_LIST: @@ -1105,7 +1106,7 @@ imapx_match_active_job (CamelIMAPXServer *is, guint32 type, const gchar *uid) if (!job || !(job->type & type)) continue; - if (imapx_job_matches (is->select, job, type, uid)) + if (imapx_job_matches (is->select_folder, job, type, uid)) goto found; } job = NULL; @@ -1115,7 +1116,7 @@ found: } static CamelIMAPXJob * -imapx_is_job_in_queue (CamelIMAPXServer *is, const gchar *folder_name, guint32 type, const gchar *uid) +imapx_is_job_in_queue (CamelIMAPXServer *is, CamelFolder *folder, guint32 type, const gchar *uid) { CamelDListNode *node; CamelIMAPXJob *job = NULL; @@ -1129,7 +1130,7 @@ imapx_is_job_in_queue (CamelIMAPXServer *is, const gchar *folder_name, guint32 t if (!job || !(job->type & type)) continue; - if (imapx_job_matches (folder_name, job, type, uid)) { + if (imapx_job_matches (folder, job, type, uid)) { found = TRUE; break; } @@ -1560,11 +1561,7 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) case IMAPX_CLOSED: c(printf("previously selected folder is now closed\n")); if (imap->select_pending && !imap->select_folder) { - const gchar *full_name; imap->select_folder = imap->select_pending; - full_name = camel_folder_get_full_name (imap->select_folder); - - imap->select = g_strdup(full_name); } break; case IMAPX_READ_WRITE: @@ -1998,7 +1995,7 @@ imapx_job_idle_start(CamelIMAPXServer *is, CamelIMAPXJob *job) CamelIMAPXCommand *ic; CamelIMAPXCommandPart *cp; - ic = camel_imapx_command_new (is, "IDLE", job->folder->full_name, "IDLE"); + ic = camel_imapx_command_new (is, "IDLE", job->folder, "IDLE"); ic->job = job; ic->pri = job->pri; ic->complete = imapx_command_idle_done; @@ -2228,7 +2225,6 @@ imapx_idle_supported (CamelIMAPXServer *is) static void imapx_command_select_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) { - if (camel_exception_is_set (ic->ex) || ic->status->result != IMAPX_OK) { CamelDList failed; CamelIMAPXCommand *cw, *cn; @@ -2242,7 +2238,9 @@ imapx_command_select_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) if (is->select_pending) { while (cn) { - if (cw->select && strcmp(cw->select, is->select_pending->full_name) == 0) { + if (cw->select && cw->select == is->select_pending) { + c(printf("Cancelling command '%s'(%p) for folder '%s'\n", + cw->name, cw, camel_folder_get_full_name(cw->select))); camel_dlist_remove((CamelDListNode *)cw); camel_dlist_addtail(&failed, (CamelDListNode *)cw); } @@ -2269,11 +2267,9 @@ imapx_command_select_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) camel_object_unref(is->select_pending); /* A [CLOSED] status may have caused us to assume that it had happened */ - if (is->select) { - g_free(is->select); - is->select = NULL; + if (is->select_folder) is->select_folder = NULL; - } + is->state = IMAPX_INITIALISED; } else { CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *) is->select_pending; @@ -2282,7 +2278,6 @@ imapx_command_select_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) if (!is->select_folder) { /* This could have been done earlier by a [CLOSED] status */ is->select_folder = is->select_pending; - is->select = g_strdup(is->select_folder->full_name); } is->state = IMAPX_SELECTED; ifolder->exists_on_server = is->exists; @@ -2326,7 +2321,7 @@ imapx_select (CamelIMAPXServer *is, CamelFolder *folder, gboolean forced, CamelE if (is->select_pending) return; - if (is->select && strcmp(is->select, folder->full_name) == 0 && !forced) + if (is->select_folder == folder && !forced) return; if (!camel_dlist_empty(&is->active)) @@ -2335,15 +2330,12 @@ imapx_select (CamelIMAPXServer *is, CamelFolder *folder, gboolean forced, CamelE is->select_pending = folder; camel_object_ref(folder); if (is->select_folder) { - g_free(is->select); camel_object_unref(is->select_folder); - is->select = NULL; is->select_folder = NULL; } else { /* If no folder was selected, we won't get a [CLOSED] status so just point select_folder at the new folder immediately */ is->select_folder = is->select_pending; - is->select = g_strdup(is->select_folder->full_name); } is->uidvalidity = 0; @@ -2910,7 +2902,7 @@ imapx_command_fetch_message_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic) if (job->op) camel_operation_progress (job->op, (job->u.get_message.fetch_offset *100)/job->u.get_message.size); - ic = camel_imapx_command_new(is, "FETCH", job->folder->full_name, + ic = camel_imapx_command_new(is, "FETCH", job->folder, "UID FETCH %t (BODY.PEEK[]", job->u.get_message.uid); camel_imapx_command_add(ic, "<%u.%u>", job->u.get_message.fetch_offset, MULTI_SIZE); camel_imapx_command_add(ic, ")"); @@ -2976,7 +2968,7 @@ imapx_job_get_message_start (CamelIMAPXServer *is, CamelIMAPXJob *job) if (job->u.get_message.use_multi_fetch) { for (i=0; i < 3 && job->u.get_message.fetch_offset < job->u.get_message.size;i++) { - ic = camel_imapx_command_new(is, "FETCH", job->folder->full_name, + ic = camel_imapx_command_new(is, "FETCH", job->folder, "UID FETCH %t (BODY.PEEK[]", job->u.get_message.uid); camel_imapx_command_add(ic, "<%u.%u>", job->u.get_message.fetch_offset, MULTI_SIZE); camel_imapx_command_add(ic, ")"); @@ -2988,7 +2980,7 @@ imapx_job_get_message_start (CamelIMAPXServer *is, CamelIMAPXJob *job) imapx_command_queue(is, ic); } } else { - ic = camel_imapx_command_new(is, "FETCH", job->folder->full_name, + ic = camel_imapx_command_new(is, "FETCH", job->folder, "UID FETCH %t (BODY.PEEK[])", job->u.get_message.uid); ic->complete = imapx_command_fetch_message_done; ic->job = job; @@ -3007,7 +2999,7 @@ imapx_command_copy_messages_step_start (CamelIMAPXServer *is, CamelIMAPXJob *job GPtrArray *uids = job->u.copy_messages.uids; gint i = index; - ic = camel_imapx_command_new (is, "COPY", job->folder->full_name, "UID COPY "); + ic = camel_imapx_command_new (is, "COPY", job->folder, "UID COPY "); ic->complete = imapx_command_copy_messages_step_done; ic->job = job; ic->pri = job->pri; @@ -3268,7 +3260,7 @@ imapx_command_step_fetch_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic) if (ilen) { camel_imapx_command_free (ic); - ic = camel_imapx_command_new(is, "FETCH", job->folder->full_name, "UID FETCH "); + ic = camel_imapx_command_new(is, "FETCH", job->folder, "UID FETCH "); ic->complete = imapx_command_step_fetch_done; ic->job = job; ic->pri = job->pri - 1; @@ -3493,9 +3485,11 @@ imapx_job_scan_changes_start(CamelIMAPXServer *is, CamelIMAPXJob *job) { CamelIMAPXCommand *ic; - camel_operation_start (job->op, _("Scanning for changed messages in %s"), job->folder->name); + camel_operation_start ( + job->op, _("Scanning for changed messages in %s"), + job->folder->name); - ic = camel_imapx_command_new (is, "FETCH", job->folder->full_name, + ic = camel_imapx_command_new (is, "FETCH", job->folder, "UID FETCH 1:* (UID FLAGS)"); ic->job = job; ic->complete = imapx_job_scan_changes_done; @@ -3557,14 +3551,14 @@ imapx_job_fetch_new_messages_start (CamelIMAPXServer *is, CamelIMAPXJob *job) camel_operation_start (job->op, _("Fetching summary information for new messages in %s"), folder->name); if (diff > BATCH_FETCH_COUNT) { - ic = camel_imapx_command_new (is, "FETCH", job->folder->full_name, + ic = camel_imapx_command_new (is, "FETCH", job->folder, "UID FETCH %s:* (UID FLAGS)", uid); imapx_uidset_init(&job->u.refresh_info.uidset, BATCH_FETCH_COUNT, 0); job->u.refresh_info.infos = g_array_new (0, 0, sizeof(struct _refresh_info)); ic->pri = job->pri; ic->complete = imapx_command_step_fetch_done; } else { - ic = camel_imapx_command_new (is, "FETCH", job->folder->full_name, + ic = camel_imapx_command_new (is, "FETCH", job->folder, "UID FETCH %s:* (RFC822.SIZE RFC822.HEADER FLAGS)", uid); ic->pri = job->pri; ic->complete = imapx_command_fetch_new_messages_done; @@ -3594,7 +3588,7 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) #if 0 /* There are issues with this still; continue with the buggy behaviour where we issue STATUS on the current folder, for now...*/ - if (is->select && !strcmp(folder->full_name, is->select)) + if (is->select_folder == folder) is_selected = TRUE; #endif total = camel_folder_summary_count (folder->summary); @@ -3759,7 +3753,7 @@ imapx_job_expunge_start(CamelIMAPXServer *is, CamelIMAPXJob *job) imapx_server_sync_changes (is, job->folder, job->pri, job->ex); /* TODO handle UIDPLUS capability */ - ic = camel_imapx_command_new(is, "EXPUNGE", job->folder->full_name, "EXPUNGE"); + ic = camel_imapx_command_new(is, "EXPUNGE", job->folder, "EXPUNGE"); ic->job = job; ic->pri = job->pri; ic->complete = imapx_command_expunge_done; @@ -3914,7 +3908,7 @@ imapx_job_delete_folder_start (CamelIMAPXServer *is, CamelIMAPXJob *job) job->folder = camel_store_get_folder(is->store, "INBOX", 0, job->ex); /* make sure to-be-deleted folder is not selected by selecting INBOX for this operation */ - ic = camel_imapx_command_new (is, "DELETE", "INBOX", "DELETE %s", encoded_fname); + ic = camel_imapx_command_new (is, "DELETE", job->folder, "DELETE %s", encoded_fname); ic->pri = job->pri; ic->job = job; ic->complete = imapx_command_delete_folder_done; @@ -3950,7 +3944,7 @@ imapx_job_rename_folder_start (CamelIMAPXServer *is, CamelIMAPXJob *job) en_ofname = imapx_encode_folder_name ((CamelIMAPXStore *) is->store, job->u.rename_folder.ofolder_name); en_nfname = imapx_encode_folder_name ((CamelIMAPXStore *) is->store, job->u.rename_folder.nfolder_name); - ic = camel_imapx_command_new (is, "RENAME", "INBOX", "RENAME %s %s", en_ofname, en_nfname); + ic = camel_imapx_command_new (is, "RENAME", job->folder, "RENAME %s %s", en_ofname, en_nfname); ic->pri = job->pri; ic->job = job; ic->complete = imapx_command_rename_folder_done; @@ -3981,10 +3975,7 @@ imapx_job_noop_start(CamelIMAPXServer *is, CamelIMAPXJob *job) { CamelIMAPXCommand *ic; - if (job->folder) - ic = camel_imapx_command_new (is, "NOOP", job->folder->full_name, "NOOP"); - else - ic = camel_imapx_command_new (is, "NOOP", NULL, "NOOP"); + ic = camel_imapx_command_new (is, "NOOP", job->folder, "NOOP"); ic->job = job; ic->complete = imapx_command_noop_done; @@ -4131,7 +4122,7 @@ imapx_job_sync_changes_start(CamelIMAPXServer *is, CamelIMAPXJob *job) if ( (on && (((flags ^ sflags) & flags) & flag)) || (!on && (((flags ^ sflags) & ~flags) & flag))) { if (ic == NULL) { - ic = camel_imapx_command_new(is, "STORE", job->folder->full_name, "UID STORE "); + ic = camel_imapx_command_new(is, "STORE", job->folder, "UID STORE "); ic->complete = imapx_command_sync_changes_done; ic->job = job; ic->pri = job->pri; @@ -4159,7 +4150,7 @@ imapx_job_sync_changes_start(CamelIMAPXServer *is, CamelIMAPXJob *job) CamelIMAPXMessageInfo *info = c->infos->pdata[i]; if (ic == NULL) { - ic = camel_imapx_command_new(is, "STORE", job->folder->full_name, "UID STORE "); + ic = camel_imapx_command_new(is, "STORE", job->folder, "UID STORE "); ic->complete = imapx_command_sync_changes_done; ic->job = job; ic->pri = job->pri; @@ -4469,11 +4460,6 @@ imapx_disconnect (CamelIMAPXServer *is) is->select_folder = NULL; } - if (is->select) { - g_free(is->select); - is->select = NULL; - } - if (is->select_pending) { camel_object_unref(is->select_pending); is->select_pending = NULL; @@ -4532,7 +4518,7 @@ imapx_server_get_message (CamelIMAPXServer *is, CamelFolder *folder, CamelOperat QUEUE_LOCK (is); - if ((job = imapx_is_job_in_queue (is, folder->full_name, IMAPX_JOB_GET_MESSAGE, uid))) { + if ((job = imapx_is_job_in_queue (is, folder, IMAPX_JOB_GET_MESSAGE, uid))) { flag = g_hash_table_lookup (is->uid_eflags, uid); if (pri > job->pri) @@ -4741,7 +4727,7 @@ camel_imapx_server_refresh_info (CamelIMAPXServer *is, CamelFolder *folder, Came QUEUE_LOCK (is); - if (imapx_is_job_in_queue (is, folder->full_name, IMAPX_JOB_REFRESH_INFO, NULL)) { + if (imapx_is_job_in_queue (is, folder, IMAPX_JOB_REFRESH_INFO, NULL)) { QUEUE_UNLOCK (is); return; } @@ -4913,7 +4899,7 @@ imapx_server_sync_changes(CamelIMAPXServer *is, CamelFolder *folder, gint pri, C QUEUE_LOCK (is); - if ((job = imapx_is_job_in_queue (is, folder->full_name, IMAPX_JOB_SYNC_CHANGES, NULL))) { + if ((job = imapx_is_job_in_queue (is, folder, IMAPX_JOB_SYNC_CHANGES, NULL))) { if (pri > job->pri) job->pri = pri; @@ -4965,7 +4951,7 @@ camel_imapx_server_expunge(CamelIMAPXServer *is, CamelFolder *folder, CamelExcep /* Do we really care to wait for this one to finish? */ QUEUE_LOCK (is); - if (imapx_is_job_in_queue (is, folder->full_name, IMAPX_JOB_EXPUNGE, NULL)) { + if (imapx_is_job_in_queue (is, folder, IMAPX_JOB_EXPUNGE, NULL)) { QUEUE_UNLOCK (is); return; } diff --git a/camel/providers/imapx/camel-imapx-server.h b/camel/providers/imapx/camel-imapx-server.h index e72a245b5..824e123ce 100644 --- a/camel/providers/imapx/camel-imapx-server.h +++ b/camel/providers/imapx/camel-imapx-server.h @@ -75,7 +75,6 @@ struct _CamelIMAPXServer { /* info on currently selected folder */ struct _CamelFolder *select_folder; - gchar *select; struct _CamelFolderChangeInfo *changes; struct _CamelFolder *select_pending; guint32 permanentflags; -- cgit v1.2.1 From 82696d86c022cff5cb4ed9f109497e5a2bccf24e Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Tue, 29 Jun 2010 16:45:56 +0100 Subject: Fix APPENDUID handling of uidvalidity. We shouldn't be comparing with is->uidvalidity; that's just short-term storage for use _during_ a SELECT. Compare with ifolder->uidvalidity instead. Oh, and let's try to make sure that's actually set somewhere... (cherry picked from commit 573ad77df8814a5f72593292bc6e96ef4140e1a3) --- camel/providers/imapx/camel-imapx-folder.h | 1 + camel/providers/imapx/camel-imapx-server.c | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-folder.h b/camel/providers/imapx/camel-imapx-folder.h index ae7144a23..41ce4a6a1 100644 --- a/camel/providers/imapx/camel-imapx-folder.h +++ b/camel/providers/imapx/camel-imapx-folder.h @@ -48,6 +48,7 @@ typedef struct _CamelIMAPXFolder { guint32 exists_on_server; guint32 unread_on_server; guint64 modseq_on_server; + guint64 uidvalidity_on_server; guint32 uidnext_on_server; /* hash table of UIDs to ignore as recent when updating folder */ diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 1d0018a10..7a5c429b1 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -1524,6 +1524,7 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) ifolder->exists_on_server = sinfo->messages; ifolder->modseq_on_server = sinfo->highestmodseq; ifolder->uidnext_on_server = sinfo->uidnext; + ifolder->uidvalidity_on_server = sinfo->uidvalidity; } else { c(printf("Received STATUS for unknown folder '%s'\n", sinfo->name)); } @@ -2283,6 +2284,7 @@ imapx_command_select_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) ifolder->exists_on_server = is->exists; ifolder->modseq_on_server = is->highestmodseq; ifolder->uidnext_on_server = is->uidnext; + ifolder->uidvalidity_on_server = is->uidvalidity; #if 0 /* This must trigger a complete index rebuild! */ if (is->uidvalidity && is->uidvalidity != ((CamelIMAPXSummary *)is->select_folder->summary)->uidvalidity) @@ -3109,7 +3111,7 @@ imapx_command_append_message_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) if (!camel_exception_is_set (ic->ex) && ic->status->result == IMAPX_OK) { if (ic->status->condition == IMAPX_APPENDUID) { c(printf("Got appenduid %d %d\n", (gint)ic->status->u.appenduid.uidvalidity, (gint)ic->status->u.appenduid.uid)); - if (ic->status->u.appenduid.uidvalidity == is->uidvalidity) { + if (ic->status->u.appenduid.uidvalidity == ifolder->uidvalidity_on_server) { CamelFolderChangeInfo *changes; gchar *uid; @@ -3634,9 +3636,9 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) } } else { if (is->cinfo->capa & IMAPX_CAPABILITY_CONDSTORE) - ic = camel_imapx_command_new (is, "STATUS", NULL, "STATUS %f (MESSAGES UNSEEN UIDNEXT HIGHESTMODSEQ)", folder); + ic = camel_imapx_command_new (is, "STATUS", NULL, "STATUS %f (MESSAGES UNSEEN UIDVALIDITY UIDNEXT HIGHESTMODSEQ)", folder); else - ic = camel_imapx_command_new (is, "STATUS", NULL, "STATUS %f (MESSAGES UNSEEN UIDNEXT)", folder); + ic = camel_imapx_command_new (is, "STATUS", NULL, "STATUS %f (MESSAGES UNSEEN UIDVALIDITY UIDNEXT)", folder); ic->job = job; ic->pri = job->pri; -- cgit v1.2.1 From a374d21b42735cc1e5d3f005819adf90d19fcd9a Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Tue, 29 Jun 2010 17:23:57 +0100 Subject: Set server_flags after APPENDUID; don't send them to the server again. This is just silly.... Starting command (active=1, literal) A00452 APPEND outgoing (\SEEN) {551+} Starting command (active=1,) A00454 SELECT outgoing Starting command (active=1,) A00453 UID STORE 14443 +FLAGS.SILENT (\SEEN) (cherry picked from commit 7a6c7dca2321a1fcb6d3962cca77a5b9b9e08c65) --- camel/providers/imapx/camel-imapx-server.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 7a5c429b1..44e559832 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -3123,7 +3123,10 @@ imapx_command_append_message_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) /* should we update the message count ? */ camel_folder_summary_add (job->folder->summary, mi); - + imapx_set_message_info_flags_for_new_message (mi, + ((CamelMessageInfoBase *)job->u.append_message.info)->flags, + ((CamelMessageInfoBase *)job->u.append_message.info)->user_flags, + job->folder); changes = camel_folder_change_info_new (); camel_folder_change_info_add_uid (changes, mi->uid); camel_object_trigger_event (CAMEL_OBJECT (job->folder), "folder_changed", -- cgit v1.2.1 From 723d724b21a003f47e18ee9ebb947ed182031ccd Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Wed, 30 Jun 2010 09:39:22 +0100 Subject: Add support for * VANISHED (EARLIER) [uidset...] (Actually just throw away anything in the parentheses). We'll need this for QRESYNC SELECT (cherry picked from commit de786c4147333489ac1dfb25b378acf96541919c) --- camel/providers/imapx/camel-imapx-server.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 44e559832..709788995 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -1238,9 +1238,26 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) break; } case IMAPX_VANISHED: { - GPtrArray *uids = imapx_parse_uids(imap->stream, ex); + GPtrArray *uids; int i; + guint len; + guchar *token; + gint tok; + + tok = camel_imapx_stream_token (imap->stream, &token, &len, ex); + if (camel_exception_is_set(ex)) + return -1; + if (tok == '(') { + while (tok != ')') { + /* We expect this to be 'EARLIER' */ + tok = camel_imapx_stream_token(imap->stream, &token, &len, ex); + if (camel_exception_is_set(ex)) + return -1; + } + } else + camel_imapx_stream_ungettoken(imap->stream, tok, token, len); + uids = imapx_parse_uids(imap->stream, ex); if (camel_exception_is_set(ex)) return -1; for (i = 0; i < uids->len; i++) { -- cgit v1.2.1 From b5cb6c63c21abd6123b47f584ea0b43266878154 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Wed, 30 Jun 2010 09:44:25 +0100 Subject: Propagate SELECT error properly to dependent commands (cherry picked from commit b57a6af1724e1447e35e2003a14bf74891182873) --- camel/providers/imapx/camel-imapx-server.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 709788995..7d20cabc2 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -2275,7 +2275,13 @@ imapx_command_select_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) while (cn) { if (ic->status) cw->status = imapx_copy_status(ic->status); - camel_exception_setv (cw->ex, 1, "select %s failed", cw->select); + if (camel_exception_is_set(ic->ex)) + camel_exception_xfer (cw->ex, ic->ex); + else { + camel_exception_setv (cw->ex, 1, "SELECT %s failed: %s", + camel_folder_get_full_name(cw->select), + ic->status->text?:""); + } cw->complete(is, cw); cw = cn; cn = cn->next; -- cgit v1.2.1 From bf6d9c9bd6aa906296f15aac1e9470b51ec58824 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Wed, 30 Jun 2010 09:49:12 +0100 Subject: Add proper QRESYNC support on SELECT; use it for refresh_info We aren't yet correctly updating the folder's modseq every time, so we're often asking for more than we need. That's better than asking for _less_ than we need though -- will go over that part very carefully in separate commit(s). We still aren't handling uidvalidity either. RSN... (cherry picked from commit 7dcedc3ef77ddcf4b7ca6bb1fbab7d3246edca34) (Disabled the UI configuration option for it, since it's a new string) --- camel/providers/imapx/camel-imapx-provider.c | 4 ++ camel/providers/imapx/camel-imapx-server.c | 91 ++++++++++++++++++++++++++-- camel/providers/imapx/camel-imapx-server.h | 2 + camel/providers/imapx/camel-imapx-store.c | 3 + camel/providers/imapx/camel-imapx-store.h | 1 + 5 files changed, 95 insertions(+), 6 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-provider.c b/camel/providers/imapx/camel-imapx-provider.c index 01f547d73..2a5a13f50 100644 --- a/camel/providers/imapx/camel-imapx-provider.c +++ b/camel/providers/imapx/camel-imapx-provider.c @@ -42,6 +42,10 @@ static gint imapx_url_equal (gconstpointer a, gconstpointer b); CamelProviderConfEntry imapx_conf_entries[] = { { CAMEL_PROVIDER_CONF_SECTION_START, "mailcheck", NULL, N_("Checking for New Mail") }, +#if 0 /* Not for stable branch -- new string. Set it with gconf-editor instead */ + { CAMEL_PROVIDER_CONF_CHECKBOX, "use_qresync", NULL, + N_("Use _Quick Resync if the server supports it"), "1" }, +#endif { CAMEL_PROVIDER_CONF_CHECKBOX, "use_idle", NULL, N_("Use I_dle if the server supports it"), "1" }, { CAMEL_PROVIDER_CONF_CHECKBOX, "check_all", NULL, diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 7d20cabc2..c730cd8f6 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -2376,6 +2376,66 @@ imapx_select (CamelIMAPXServer *is, CamelFolder *folder, gboolean forced, CamelE is->state = IMAPX_INITIALISED; ic = camel_imapx_command_new(is, "SELECT", NULL, "SELECT %f", folder); + + if (is->use_qresync) { + CamelIMAPXSummary *isum = (CamelIMAPXSummary *)folder->summary; + CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *)folder; + gint total = camel_folder_summary_count(folder->summary); + const gchar *uid = "1"; + + if (total) + uid = camel_folder_summary_uid_from_index (folder->summary, 1); + + if (isum->modseq && ifolder->uidvalidity_on_server) { + c(printf("SELECT QRESYNC %ld %ld\n", ifolder->uidvalidity_on_server, isum->modseq)); + camel_imapx_command_add(ic, " (QRESYNC (%ld %ld %s:*", ifolder->uidvalidity_on_server, isum->modseq, uid); + + if (total > 10) { + int i; + GString *seqs, *uids; + + seqs = g_string_new(" "); + uids = g_string_new(")"); + + /* Include some seq/uid pairs to avoid a huge VANISHED list + (see RFC5162 §3.1). Work backwards exponentially from the + end of the mailbox, starting with the message 9 from the + end, then 27 from the end, then 81 from the end... */ + i = 3; + do { + gchar buf[10]; + + i *= 3; + if (i > total) + i = total; + + if (i != 9) { /* If not the first time */ + g_string_prepend(seqs, ","); + g_string_prepend(uids, ","); + } + + /* IMAP sequence numbers are one higher than the corresponding + indices in our folder summary -- they start from one, while + the summary starts from zero. */ + sprintf(buf, "%d", total - i + 1); + g_string_prepend(seqs, buf); + g_string_prepend(uids, camel_folder_summary_uid_from_index(folder->summary, total - i)); + } while (i < total); + + g_string_prepend(seqs, " ("); + + c(printf("adding QRESYNC seq/uidset %s%s\n", seqs->str, uids->str)); + camel_imapx_command_add(ic, seqs->str); + camel_imapx_command_add(ic, uids->str); + + g_string_free(seqs, TRUE); + g_string_free(uids, TRUE); + + } + camel_imapx_command_add(ic, "))"); + } + } + ic->complete = imapx_command_select_done; imapx_command_start (is, ic); } @@ -2857,7 +2917,8 @@ imapx_reconnect (CamelIMAPXServer *is, CamelException *ex) if (camel_exception_is_set (ex)) goto exception; } - if (is->cinfo->capa & IMAPX_CAPABILITY_QRESYNC) { + if (((CamelIMAPXStore *)is->store)->rec_options & IMAPX_USE_QRESYNC && + is->cinfo->capa & IMAPX_CAPABILITY_QRESYNC) { ic = camel_imapx_command_new (is, "ENABLE", NULL, "ENABLE CONDSTORE QRESYNC"); imapx_command_run (is, ic); camel_exception_xfer (ex, ic->ex); @@ -2865,7 +2926,11 @@ imapx_reconnect (CamelIMAPXServer *is, CamelException *ex) if (camel_exception_is_set (ex)) goto exception; - } + + is->use_qresync = TRUE; + } else + is->use_qresync = FALSE; + if (((CamelIMAPXStore *) is->store)->summary->namespaces == NULL) { CamelIMAPXNamespaceList *nsl = NULL; CamelIMAPXStoreNamespace *ns = NULL; @@ -3607,6 +3672,7 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) CamelException *ex = job->ex; gboolean need_rescan = FALSE; gboolean is_selected = FALSE; + gboolean can_qresync = FALSE; /* Sync changes first, else unread count will not match. Need to think about better ways for this */ @@ -3637,6 +3703,9 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) if ((isum->modseq && !ifolder->modseq_on_server)) need_rescan = FALSE; + if (is->use_qresync && isum->modseq && ifolder->uidvalidity_on_server) + can_qresync = TRUE; + /* If we don't think there's anything to do, poke it to check */ if (!need_rescan) { CamelIMAPXCommand *ic; @@ -3709,14 +3778,24 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) imapx_server_fetch_new_messages (is, folder, FALSE, job->ex); if (camel_exception_is_set (job->ex)) goto done; + + /* If QRESYNC-capable we'll have got all flags changes in SELECT */ + if (can_qresync) + goto done; } - /* Refetch flags for the entire folder */ - if (need_rescan) { - imapx_job_scan_changes_start (is, job); - return; + if (!need_rescan) + goto done; + + if (can_qresync) { + /* Actually we only want to select it; no need for the NOOP */ + camel_imapx_server_noop(is, folder, ex); + goto done; } + imapx_job_scan_changes_start (is, job); + return; + done: imapx_job_done (is, job); } diff --git a/camel/providers/imapx/camel-imapx-server.h b/camel/providers/imapx/camel-imapx-server.h index 824e123ce..31c8fe263 100644 --- a/camel/providers/imapx/camel-imapx-server.h +++ b/camel/providers/imapx/camel-imapx-server.h @@ -102,6 +102,8 @@ struct _CamelIMAPXServer { struct _CamelIMAPXIdle *idle; gboolean use_idle; + gboolean use_qresync; + /* used for storing eflags to syncronize duplicate get_message requests */ GHashTable *uid_eflags; }; diff --git a/camel/providers/imapx/camel-imapx-store.c b/camel/providers/imapx/camel-imapx-store.c index 90b4780ea..be30538d2 100644 --- a/camel/providers/imapx/camel-imapx-store.c +++ b/camel/providers/imapx/camel-imapx-store.c @@ -124,6 +124,9 @@ imapx_parse_receiving_options (CamelIMAPXStore *istore, CamelURL *url) if (camel_url_get_param (url, "use_idle")) istore->rec_options |= IMAPX_USE_IDLE; + + if (camel_url_get_param (url, "use_qresync")) + istore->rec_options |= IMAPX_USE_QRESYNC; } static void diff --git a/camel/providers/imapx/camel-imapx-store.h b/camel/providers/imapx/camel-imapx-store.h index 3cb122739..e5af0a261 100644 --- a/camel/providers/imapx/camel-imapx-store.h +++ b/camel/providers/imapx/camel-imapx-store.h @@ -47,6 +47,7 @@ extern "C" { #define IMAPX_SUBSCRIPTIONS (1 << 5) #define IMAPX_CHECK_LSUB (1 << 6) #define IMAPX_USE_IDLE (1 << 7) +#define IMAPX_USE_QRESYNC (1 << 8) typedef struct { CamelOfflineStore parent_object; -- cgit v1.2.1 From 011ed3a2b8d0d336405e06c87aed2e48ecd51698 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Wed, 30 Jun 2010 11:08:54 +0100 Subject: Fix starting UID in QRESYNC SELECT. The indices in the folder summary count from zero, not one. (cherry picked from commit ac6557eb872437e4d7b44fc01d9eafcc404b4d8e) --- camel/providers/imapx/camel-imapx-server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index c730cd8f6..27769b4f8 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -2384,7 +2384,7 @@ imapx_select (CamelIMAPXServer *is, CamelFolder *folder, gboolean forced, CamelE const gchar *uid = "1"; if (total) - uid = camel_folder_summary_uid_from_index (folder->summary, 1); + uid = camel_folder_summary_uid_from_index (folder->summary, 0); if (isum->modseq && ifolder->uidvalidity_on_server) { c(printf("SELECT QRESYNC %ld %ld\n", ifolder->uidvalidity_on_server, isum->modseq)); -- cgit v1.2.1 From 79c7f35db6186c5524da2a42ad92c8dab70c37bd Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Wed, 30 Jun 2010 13:22:25 +0100 Subject: Calculate can_qresync after fetching STATUS (cherry picked from commit 23bdeb12ef3b8a4b6d63f8dd008594feca760540) --- camel/providers/imapx/camel-imapx-server.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 27769b4f8..f8cd95f70 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -3703,9 +3703,6 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) if ((isum->modseq && !ifolder->modseq_on_server)) need_rescan = FALSE; - if (is->use_qresync && isum->modseq && ifolder->uidvalidity_on_server) - can_qresync = TRUE; - /* If we don't think there's anything to do, poke it to check */ if (!need_rescan) { CamelIMAPXCommand *ic; @@ -3761,6 +3758,9 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) } + if (is->use_qresync && isum->modseq && ifolder->uidvalidity_on_server) + can_qresync = TRUE; + e(printf("folder %s is %sselected, total %u / %u, unread %u / %u, modseq %llu / %llu, uidnext %u / %u: will %srescan\n", folder->full_name, is_selected?"": "not ", total, ifolder->exists_on_server, folder->summary->unread_count, ifolder->unread_on_server, -- cgit v1.2.1 From 45db57fde9a4cee6366b4d5986e0b1128210e18e Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 31 Jul 2010 16:20:45 +0200 Subject: Store Junk and NotJunk flags in IMAP server Strictly speaking we shouldn't be doing this if the server won't understand them and doesn't have \* in PERMANENTFLAGS -- but there are already bugs with that anyway, when we try to set receipt-handled. I'll get to that shortly... (cherry picked from commit bed388e3a851596e1163fed8ee57cb41c81b9b10) --- camel/providers/imapx/camel-imapx-server.c | 4 +++- camel/providers/imapx/camel-imapx-summary.h | 2 ++ camel/providers/imapx/camel-imapx-utils.c | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index f8cd95f70..ff1a67f87 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -4105,7 +4105,9 @@ static struct { { "\\DRAFT", CAMEL_MESSAGE_DRAFT }, { "\\FLAGGED", CAMEL_MESSAGE_FLAGGED }, { "\\SEEN", CAMEL_MESSAGE_SEEN }, - { "\\RECENT", CAMEL_IMAPX_MESSAGE_RECENT } + { "\\RECENT", CAMEL_IMAPX_MESSAGE_RECENT }, + { "JUNK", CAMEL_MESSAGE_JUNK }, + { "NOTJUNK", CAMEL_MESSAGE_NOTJUNK } }; /* diff --git a/camel/providers/imapx/camel-imapx-summary.h b/camel/providers/imapx/camel-imapx-summary.h index 7ea05a725..0d641eead 100644 --- a/camel/providers/imapx/camel-imapx-summary.h +++ b/camel/providers/imapx/camel-imapx-summary.h @@ -35,6 +35,8 @@ CAMEL_MESSAGE_DELETED | \ CAMEL_MESSAGE_DRAFT | \ CAMEL_MESSAGE_FLAGGED | \ + CAMEL_MESSAGE_JUNK | \ + CAMEL_MESSAGE_NOTJUNK | \ CAMEL_MESSAGE_SEEN) G_BEGIN_DECLS diff --git a/camel/providers/imapx/camel-imapx-utils.c b/camel/providers/imapx/camel-imapx-utils.c index 274736d58..6c86d0be9 100644 --- a/camel/providers/imapx/camel-imapx-utils.c +++ b/camel/providers/imapx/camel-imapx-utils.c @@ -75,6 +75,8 @@ static struct { { "\\FLAGGED", CAMEL_MESSAGE_FLAGGED }, { "\\SEEN", CAMEL_MESSAGE_SEEN }, { "\\RECENT", CAMEL_IMAPX_MESSAGE_RECENT }, + { "JUNK", CAMEL_MESSAGE_JUNK }, + { "NOTJUNK", CAMEL_MESSAGE_NOTJUNK }, { "\\*", CAMEL_MESSAGE_USER } }; -- cgit v1.2.1 From 4255f1540910c897dacd30ce7d94b83f24d16c8a Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Thu, 1 Jul 2010 09:01:27 +0100 Subject: Fix memory leak in imapx_continuation() with SASL auth ==4945== 1 bytes in 1 blocks are definitely lost in loss record 48 of 23,077 ==4945== at 0x4A0515D: malloc (vg_replace_malloc.c:195) ==4945== by 0x319A044AE2: g_malloc (gmem.c:132) ==4945== by 0x319A05C3BD: g_strdup (gstrfuncs.c:102) ==4945== by 0x6478E63: camel_sasl_challenge_base64 (camel-sasl.c:326) ==4945== by 0x12C54E72: imapx_continuation (camel-imapx-server.c:1698) ==4945== by 0x12C552CC: imapx_step (camel-imapx-server.c:1862) (cherry picked from commit f686f27a89f65f6c199664af70c8aa69914600b2) --- camel/providers/imapx/camel-imapx-server.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index ff1a67f87..5c67943b9 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -1712,7 +1712,7 @@ imapx_continuation(CamelIMAPXServer *imap, CamelException *ex, gboolean litplus) c(printf("got auth continuation, feeding token '%s' back to auth mech\n", resp)); camel_stream_write((CamelStream *)imap->stream, resp, strlen(resp)); - + g_free(resp); /* we want to keep getting called until we get a status reponse from the server ignore what sasl tells us */ newliteral = ic; @@ -3780,8 +3780,10 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) goto done; /* If QRESYNC-capable we'll have got all flags changes in SELECT */ - if (can_qresync) + if (can_qresync) { + isum->modseq = ifolder->modseq_on_server; goto done; + } } if (!need_rescan) @@ -3790,6 +3792,7 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) if (can_qresync) { /* Actually we only want to select it; no need for the NOOP */ camel_imapx_server_noop(is, folder, ex); + isum->modseq = ifolder->modseq_on_server; goto done; } -- cgit v1.2.1 From cfb0d65d041254790c3dd14ddbd714973e90fb47 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Fri, 2 Jul 2010 09:43:38 +0100 Subject: Add sanity check after QRESYNC If the total number of messages, unseen count and modseq don't match what we think they should be, then fall back to refetching all flags as we would have done without QRESYNC. (cherry picked from commit 2497833b3968fe5d8134c919d601a0dd9b23ab74) --- camel/providers/imapx/camel-imapx-server.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 5c67943b9..f2cbf61c5 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -3780,10 +3780,8 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) goto done; /* If QRESYNC-capable we'll have got all flags changes in SELECT */ - if (can_qresync) { - isum->modseq = ifolder->modseq_on_server; - goto done; - } + if (can_qresync) + goto qresync_done; } if (!need_rescan) @@ -3792,8 +3790,23 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) if (can_qresync) { /* Actually we only want to select it; no need for the NOOP */ camel_imapx_server_noop(is, folder, ex); + qresync_done: isum->modseq = ifolder->modseq_on_server; - goto done; + total = camel_folder_summary_count(job->folder->summary); + if (total != ifolder->exists_on_server || + folder->summary->unread_count != ifolder->unread_on_server || + (isum->modseq != ifolder->modseq_on_server)) { + c(printf("Eep, after QRESYNC we're out of sync. total %u / %u, unread %u / %u, modseq %lu / %lu\n", + total, ifolder->exists_on_server, + folder->summary->unread_count, ifolder->unread_on_server, + isum->modseq, ifolder->modseq_on_server)); + } else { + c(printf("OK, after QRESYNC we're still in sync. total %u / %u, unread %u / %u, modseq %lu / %lu\n", + total, ifolder->exists_on_server, + folder->summary->unread_count, ifolder->unread_on_server, + isum->modseq, ifolder->modseq_on_server)); + goto done; + } } imapx_job_scan_changes_start (is, job); -- cgit v1.2.1 From 91ad06035dc633f362ec87c0fd2d8e9621fa267d Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Fri, 2 Jul 2010 09:57:31 +0100 Subject: Don't refetch message headers we already have. We were issuing a headers FETCH starting from the last known UID. But we already _had_ the headers for the last known UID. Start from $UID+1 instead. (cherry picked from commit 6df64040a866166d54cc35078f204ee60e474f36) --- camel/providers/imapx/camel-imapx-server.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index f2cbf61c5..36ec81285 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -3636,9 +3636,13 @@ imapx_job_fetch_new_messages_start (CamelIMAPXServer *is, CamelIMAPXJob *job) total = camel_folder_summary_count (folder->summary); diff = ifolder->exists_on_server - total; - if (total > 0) + if (total > 0) { + unsigned long long uidl; uid = camel_folder_summary_uid_from_index (folder->summary, total - 1); - else + uidl = strtoull(uid, NULL, 10); + g_free(uid); + uid = g_strdup_printf("%lld", uidl+1); + } else uid = g_strdup ("1"); camel_operation_start (job->op, _("Fetching summary information for new messages in %s"), folder->name); -- cgit v1.2.1 From f385e0c9c9bab26386873adf44bb6ce3174a4821 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Fri, 2 Jul 2010 10:00:02 +0100 Subject: Keep better track of server-side UNREAD count. There are various circumstances in which the UNREAD count will change -- new unseen messages arriving, flags changes from the client, unseen messages being expunged, etc. Keep track of those to improve the accuracy of the unread count, to avoid the QRESYNC sanity check triggering so often on minor issues that weren't the bug I was looking for. For this, we have to keep track of whether a FETCH or VANISHED response was solicited or unsolicited in certain cases. (cherry picked from commit 77b29a6e456f01e0a4241ca767233f77ab03a802) --- camel/providers/imapx/camel-imapx-server.c | 38 +++++++++++++++++++++--------- camel/providers/imapx/camel-imapx-utils.c | 17 +++++++++---- camel/providers/imapx/camel-imapx-utils.h | 4 ++-- 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 36ec81285..ebd08af4c 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -274,6 +274,7 @@ struct _CamelIMAPXJob { guint32 off_set; GArray *on_user; /* imapx_flag_change */ GArray *off_user; + gint unread_change; } sync_changes; struct { gchar *path; @@ -1145,12 +1146,12 @@ imapx_is_job_in_queue (CamelIMAPXServer *is, CamelFolder *folder, guint32 type, } static void -imapx_expunge_uid_from_summary(CamelIMAPXServer *imap, gchar *uid) +imapx_expunge_uid_from_summary(CamelIMAPXServer *imap, gchar *uid, gboolean unsolicited) { CamelMessageInfo *mi; CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *)imap->select_folder; - if (ifolder->exists_on_server) + if (unsolicited && ifolder->exists_on_server) ifolder->exists_on_server--; if (imap->changes == NULL) @@ -1158,7 +1159,7 @@ imapx_expunge_uid_from_summary(CamelIMAPXServer *imap, gchar *uid) mi = camel_folder_summary_uid (imap->select_folder->summary, uid); if (mi) { - imapx_update_summary_for_removed_message (mi, imap->select_folder); + imapx_update_summary_for_removed_message (mi, imap->select_folder, unsolicited); camel_message_info_free (mi); } @@ -1232,13 +1233,14 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) if (!uid) break; - imapx_expunge_uid_from_summary(imap, uid); + imapx_expunge_uid_from_summary(imap, uid, TRUE); } break; } case IMAPX_VANISHED: { GPtrArray *uids; + gboolean unsolicited = TRUE; int i; guint len; guchar *token; @@ -1248,6 +1250,7 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) if (camel_exception_is_set(ex)) return -1; if (tok == '(') { + unsolicited = FALSE; while (tok != ')') { /* We expect this to be 'EARLIER' */ tok = camel_imapx_stream_token(imap->stream, &token, &len, ex); @@ -1263,7 +1266,7 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) for (i = 0; i < uids->len; i++) { gchar *uid = g_strdup_printf("%u", GPOINTER_TO_UINT(g_ptr_array_index (uids, i))); c(printf("vanished: %s\n", uid)); - imapx_expunge_uid_from_summary(imap, uid); + imapx_expunge_uid_from_summary(imap, uid, unsolicited); } g_ptr_array_free (uids, FALSE); break; @@ -1371,9 +1374,11 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) if (uid) { mi = camel_folder_summary_uid (folder->summary, uid); - if (mi) - changed = imapx_update_message_info_flags (mi, finfo->flags, finfo->user_flags, folder); - else { + if (mi) { + /* It's unsolicited _unless_ imap->select_pending (i.e. during + a QRESYNC SELECT */ + changed = imapx_update_message_info_flags (mi, finfo->flags, finfo->user_flags, folder, !imap->select_pending); + } else { /* This (UID + FLAGS for previously unknown message) might happen during a SELECT (QRESYNC). We should use it. */ c(printf("flags changed for unknown uid %s\n.", uid)); @@ -3479,7 +3484,7 @@ imapx_job_scan_changes_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic) if (s_minfo && uid_cmp(s_minfo->uid, r->uid, s) == 0) { info = (CamelIMAPXMessageInfo *)s_minfo; - if (imapx_update_message_info_flags ((CamelMessageInfo *) info, r->server_flags, r->server_user_flags, job->folder)) + if (imapx_update_message_info_flags ((CamelMessageInfo *) info, r->server_flags, r->server_user_flags, job->folder, FALSE)) camel_folder_change_info_change_uid (job->u.refresh_info.changes, camel_message_info_uid (s_minfo)); r->exists = TRUE; } else @@ -3521,7 +3526,7 @@ imapx_job_scan_changes_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic) mi = camel_folder_summary_uid (job->folder->summary, uid); if (mi) { - imapx_update_summary_for_removed_message (mi, job->folder); + imapx_update_summary_for_removed_message (mi, job->folder, FALSE); camel_message_info_free (mi); } @@ -3848,7 +3853,7 @@ imapx_command_expunge_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) CamelMessageInfo *mi = camel_folder_summary_uid (folder->summary, uid); if (mi) { - imapx_update_summary_for_removed_message (mi, folder); + imapx_update_summary_for_removed_message (mi, folder, FALSE); camel_message_info_free (mi); } @@ -4186,6 +4191,9 @@ imapx_command_sync_changes_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) /* FIXME: move over user flags too */ } + /* Apply the changes to server-side unread count; it won't tell + us of these changes, of course. */ + ((CamelIMAPXFolder *)job->folder)->unread_on_server += job->u.sync_changes.unread_change; } if (job->commands == 0) { @@ -4264,6 +4272,14 @@ imapx_job_sync_changes_start(CamelIMAPXServer *is, CamelIMAPXJob *job) imapx_command_queue(is, ic); ic = NULL; } + if (flag == CAMEL_MESSAGE_SEEN) { + /* Remember how the server's unread count will change if this + command succeeds */ + if (on) + job->u.sync_changes.unread_change--; + else + job->u.sync_changes.unread_change++; + } camel_message_info_free (info); } } diff --git a/camel/providers/imapx/camel-imapx-utils.c b/camel/providers/imapx/camel-imapx-utils.c index 6c86d0be9..d51c7be68 100644 --- a/camel/providers/imapx/camel-imapx-utils.c +++ b/camel/providers/imapx/camel-imapx-utils.c @@ -236,9 +236,10 @@ imapx_update_user_flags (CamelMessageInfo *info, CamelFlag *server_user_flags) } gboolean -imapx_update_message_info_flags (CamelMessageInfo *info, guint32 server_flags, CamelFlag *server_user_flags, CamelFolder *folder) +imapx_update_message_info_flags (CamelMessageInfo *info, guint32 server_flags, CamelFlag *server_user_flags, CamelFolder *folder, gboolean unsolicited) { gboolean changed = FALSE; + CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *)folder; CamelIMAPXMessageInfo *xinfo = (CamelIMAPXMessageInfo *) info; if (server_flags != xinfo->server_flags) @@ -268,8 +269,11 @@ imapx_update_message_info_flags (CamelMessageInfo *info, guint32 server_flags, C deleted == 1 ? "deleted" : ( deleted == -1 ? "undeleted" : ""), junk == 1 ? "junk" : ( junk == -1 ? "unjunked" : ""))); - if (read) + if (read) { folder->summary->unread_count -= read; + if (unsolicited) + ifolder->unread_on_server -= read; + } if (deleted) folder->summary->deleted_count += deleted; if (junk) @@ -341,9 +345,10 @@ imapx_set_message_info_flags_for_new_message (CamelMessageInfo *info, guint32 se } void -imapx_update_summary_for_removed_message (CamelMessageInfo *info, CamelFolder *folder) +imapx_update_summary_for_removed_message (CamelMessageInfo *info, CamelFolder *folder, gboolean unsolicited) { CamelMessageInfoBase *dinfo = (CamelMessageInfoBase *) info; + CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *)folder; gint unread=0, deleted=0, junk=0; guint32 flags; @@ -357,9 +362,11 @@ imapx_update_summary_for_removed_message (CamelMessageInfo *info, CamelFolder *f if (flags & CAMEL_MESSAGE_JUNK) junk = 1; - if (unread) + if (unread) { folder->summary->unread_count--; - + if (unsolicited) + ifolder->unread_on_server--; + } if (deleted) folder->summary->deleted_count--; if (junk) diff --git a/camel/providers/imapx/camel-imapx-utils.h b/camel/providers/imapx/camel-imapx-utils.h index 277ec7ffd..b6b47aa8c 100644 --- a/camel/providers/imapx/camel-imapx-utils.h +++ b/camel/providers/imapx/camel-imapx-utils.h @@ -69,10 +69,10 @@ enum { GPtrArray *imapx_parse_uids (struct _CamelIMAPXStream *is, CamelException *ex); void imapx_parse_flags(struct _CamelIMAPXStream *stream, guint32 *flagsp, struct _CamelFlag **user_flagsp, CamelException *ex); void imapx_write_flags(CamelStream *stream, guint32 flags, struct _CamelFlag *user_flags, CamelException *ex); -gboolean imapx_update_message_info_flags (CamelMessageInfo *info, guint32 server_flags, CamelFlag *server_user_flags, CamelFolder *folder); +gboolean imapx_update_message_info_flags (CamelMessageInfo *info, guint32 server_flags, CamelFlag *server_user_flags, CamelFolder *folder, gboolean unsolicited); void imapx_set_message_info_flags_for_new_message (CamelMessageInfo *info, guint32 server_flags, CamelFlag *server_user_flags, CamelFolder *folder); -void imapx_update_summary_for_removed_message (CamelMessageInfo *info, CamelFolder *folder); +void imapx_update_summary_for_removed_message (CamelMessageInfo *info, CamelFolder *folder, gboolean unsolicited); void imapx_update_store_summary (CamelFolder *folder); /* ********************************************************************** */ -- cgit v1.2.1 From 35337a75571226e9c363b6719ec608422e568226 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Fri, 2 Jul 2010 11:56:57 +0100 Subject: Update unseen count as new messages come in When we get notified of new messages in the idle thread, or when they arrive during our re-fetch of all flags (and we suddenly find we've got flags for a message that didn't previously exist), ensure that we update the unseen count according to the flags of the new messages. This _doesn't_ handle the case where we called fetch_new_messages() directly from refresh_info_start() because we _knew_ there were new messages, but in fact there are _more_ new messages than we expected. We may have to switch to a model where we say 'update flags for any UID greater than $X'. (cherry picked from commit f44ecb68679ea3134d7b3c5d5f346b640a11af45) --- camel/providers/imapx/camel-imapx-server.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index ebd08af4c..2e61b8295 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -264,6 +264,7 @@ struct _CamelIMAPXJob { /* used for biulding uidset stuff */ gint index; gint last_index; + gboolean update_unseen; struct _uidset_state uidset; /* changes during refresh */ CamelFolderChangeInfo *changes; @@ -1468,6 +1469,15 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) finfo->user_flags = NULL; } + if (!(server_flags & CAMEL_MESSAGE_SEEN)) { + if (job->u.refresh_info.update_unseen) { + c(printf("Updating unread count for new message %s\n", mi->uid)); + ((CamelIMAPXFolder *)job->folder)->unread_on_server++; + } else { + c(printf("Not updating unread count for new message %s\n", mi->uid)); + } + } + binfo = (CamelMessageInfoBase *) mi; binfo->size = finfo->size; @@ -2058,7 +2068,8 @@ camel_imapx_server_idle (CamelIMAPXServer *is, CamelFolder *folder, CamelExcepti } static void -imapx_server_fetch_new_messages (CamelIMAPXServer *is, CamelFolder *folder, gboolean async, CamelException *ex) +imapx_server_fetch_new_messages (CamelIMAPXServer *is, CamelFolder *folder, gboolean async, + gboolean update_unseen, CamelException *ex) { CamelIMAPXJob *job; @@ -2069,6 +2080,7 @@ imapx_server_fetch_new_messages (CamelIMAPXServer *is, CamelFolder *folder, gboo job->noreply = async; job->ex = ex; job->u.refresh_info.changes = camel_folder_change_info_new(); + job->u.refresh_info.update_unseen = update_unseen; job->op = camel_operation_registered (); if (imapx_register_job (is, job)) @@ -2106,7 +2118,7 @@ imapx_idle_thread (gpointer data) if (!camel_exception_is_set (ex) && ifolder->exists_on_server > camel_folder_summary_count (((CamelFolder *) ifolder)->summary) && imapx_is_command_queue_empty (is)) - imapx_server_fetch_new_messages (is, is->select_folder, TRUE, ex); + imapx_server_fetch_new_messages (is, is->select_folder, TRUE, TRUE, ex); if (camel_exception_is_set (ex)) { e(printf ("Caught exception in idle thread: %s \n", ex->desc)); @@ -3552,7 +3564,9 @@ imapx_job_scan_changes_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic) if (fetch_new) { camel_operation_start (job->op, _("Fetching summary information for new messages in %s"), job->folder->name); imapx_uidset_init(&job->u.refresh_info.uidset, BATCH_FETCH_COUNT, 0); - /* command will be free'ed in step_fetch_done */ + /* These are new messages which arrived since we last knew the unseen count; + update it as they arrive. */ + job->u.refresh_info.update_unseen = TRUE; imapx_command_step_fetch_done(is, ic); return; } @@ -3784,7 +3798,7 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) if (!total) need_rescan = FALSE; - imapx_server_fetch_new_messages (is, folder, FALSE, job->ex); + imapx_server_fetch_new_messages (is, folder, FALSE, FALSE, job->ex); if (camel_exception_is_set (job->ex)) goto done; -- cgit v1.2.1 From 9e82250c84c0aac40f1d63b707a979b79bb823f6 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Fri, 9 Jul 2010 09:34:18 +0200 Subject: Use correct format specifier for 64bit unsigned int (cherry picked from commit 035e8869fa12c04afb62202efa703eb3b87fa974) --- camel/providers/imapx/camel-imapx-server.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 2e61b8295..9d0f7a140 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -3819,12 +3819,12 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job) if (total != ifolder->exists_on_server || folder->summary->unread_count != ifolder->unread_on_server || (isum->modseq != ifolder->modseq_on_server)) { - c(printf("Eep, after QRESYNC we're out of sync. total %u / %u, unread %u / %u, modseq %lu / %lu\n", + c(printf("Eep, after QRESYNC we're out of sync. total %u / %u, unread %u / %u, modseq %" G_GUINT64_FORMAT " / %" G_GUINT64_FORMAT "\n", total, ifolder->exists_on_server, folder->summary->unread_count, ifolder->unread_on_server, isum->modseq, ifolder->modseq_on_server)); } else { - c(printf("OK, after QRESYNC we're still in sync. total %u / %u, unread %u / %u, modseq %lu / %lu\n", + c(printf("OK, after QRESYNC we're still in sync. total %u / %u, unread %u / %u, modseq %" G_GUINT64_FORMAT " / %" G_GUINT64_FORMAT "\n", total, ifolder->exists_on_server, folder->summary->unread_count, ifolder->unread_on_server, isum->modseq, ifolder->modseq_on_server)); -- cgit v1.2.1 From d2830dff306e01c1cfbc6332ec942768861e6789 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sun, 11 Jul 2010 12:17:13 +0100 Subject: imapx: More improvements to server unseen count tracking We're using the unseen count as part of our check for when things have changed on the server (or when QRESYNC has gone wrong), and we need to rescan all flags. But the server doesn't *tell* us about changes to the unseen count, like it does for the total count of messages. So we have to be more careful about tracking it -- especially since the server doesn't even tell us in SELECT, and we can't issue STATUS to find it out when the folder is selected. One place that it was getting out of sync was when the server notified us about new messages in SELECT, which weren't there when we last issued STATUS. For messages with a UID equal to or higher than what we thought was the folder's UIDNEXT, we also have to update the unseen count. So far, the _only_ time we've hit the QRESYNC sanity check which triggers a full rescan has been due to this kind of cosmetic unseen count discrepancy. It's half tempting to disable that check in the QRESYNC sanity check, but actually it's useful to get it right for the legacy servers too, because it might cause us to miss updates if we get out of sync. (cherry picked from commit 23503ac0c08fa8d933acb4be653257e596da6ae3) --- camel/providers/imapx/camel-imapx-server.c | 53 ++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 9d0f7a140..519ea86bf 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -1469,8 +1469,16 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) finfo->user_flags = NULL; } + /* If the message is a really new one -- equal or higher than what + we know as UIDNEXT for the folder, then it came in since we last + fetched UIDNEXT and UNREAD count. We'll update UIDNEXT in the + command completion, but update UNREAD count now according to the + message SEEN flag */ if (!(server_flags & CAMEL_MESSAGE_SEEN)) { - if (job->u.refresh_info.update_unseen) { + CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *)job->folder; + unsigned long long uidl = strtoull(mi->uid, NULL, 10); + + if (uidl >= ifolder->uidnext_on_server) { c(printf("Updating unread count for new message %s\n", mi->uid)); ((CamelIMAPXFolder *)job->folder)->unread_on_server++; } else { @@ -2323,7 +2331,12 @@ imapx_command_select_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) is->state = IMAPX_SELECTED; ifolder->exists_on_server = is->exists; ifolder->modseq_on_server = is->highestmodseq; - ifolder->uidnext_on_server = is->uidnext; + if (ifolder->uidnext_on_server < is->uidnext) { + imapx_server_fetch_new_messages (is, is->select_pending, TRUE, TRUE, NULL); + /* We don't do this right now because we want the new messages to + update the unseen count. */ + //ifolder->uidnext_on_server = is->uidnext; + } ifolder->uidvalidity_on_server = is->uidvalidity; #if 0 /* This must trigger a complete index rebuild! */ @@ -3346,6 +3359,8 @@ imapx_index_next (GPtrArray *uids, CamelFolderSummary *s, guint index) static void imapx_command_step_fetch_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic) { + CamelIMAPXFolder *ifolder = (CamelIMAPXFolder *)ic->job->folder; + CamelIMAPXSummary *isum = (CamelIMAPXSummary *)ic->job->folder->summary; CamelIMAPXJob *job = ic->job; gint i = job->u.refresh_info.index; GArray *infos = job->u.refresh_info.infos; @@ -3399,6 +3414,22 @@ imapx_command_step_fetch_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic) } } + if (camel_folder_summary_count(job->folder->summary)) { + gchar *uid = camel_folder_summary_uid_from_index (job->folder->summary, + camel_folder_summary_count(job->folder->summary) - 1); + unsigned long long uidl = strtoull(uid, NULL, 10); + g_free(uid); + + uidl++; + + if (uidl > ifolder->uidnext_on_server) { + c(printf("Updating uidnext_on_server for '%s' to %lld\n", + camel_folder_get_full_name(job->folder), uidl)); + ifolder->uidnext_on_server = uidl; + } + } + isum->uidnext = ifolder->uidnext_on_server; + cleanup: for (i=0;ilen;i++) { struct _refresh_info *r = &g_array_index(infos, struct _refresh_info, i); @@ -3623,7 +3654,6 @@ imapx_command_fetch_new_messages_done (CamelIMAPXServer *is, CamelIMAPXCommand * camel_exception_xfer (ic->job->ex, ic->ex); goto exception; } - isum->uidnext = ifolder->uidnext_on_server; if (camel_folder_change_info_changed(ic->job->u.refresh_info.changes)) { imapx_update_store_summary (ic->job->folder); @@ -3632,6 +3662,23 @@ imapx_command_fetch_new_messages_done (CamelIMAPXServer *is, CamelIMAPXCommand * camel_folder_change_info_clear(ic->job->u.refresh_info.changes); } + if (camel_folder_summary_count(ic->job->folder->summary)) { + gchar *uid = camel_folder_summary_uid_from_index (ic->job->folder->summary, + camel_folder_summary_count(ic->job->folder->summary) - 1); + unsigned long long uidl = strtoull(uid, NULL, 10); + g_free(uid); + + uidl++; + + if (uidl > ifolder->uidnext_on_server) { + c(printf("Updating uidnext_on_server for '%s' to %lld\n", + camel_folder_get_full_name(ic->job->folder), uidl)); + ifolder->uidnext_on_server = uidl; + } + } + + isum->uidnext = ifolder->uidnext_on_server; + exception: if (ic->job->noreply) camel_folder_change_info_free(ic->job->u.refresh_info.changes); -- cgit v1.2.1 From 407df6e929f9abacf625b57ddd35fb0142ac563b Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sun, 11 Jul 2010 15:11:17 +0100 Subject: imapx: Avoid running FETCH_NEW_MESSAGES and REFRESH_INFO jobs simultaneously There are various places where we interpret FETCH results and use imapx_match_active_job to find the current job, which will behave badly if there are two jobs which could potentially be responsible for the FETCH. In particular, this was causing a problem when we triggered a fetch of new messages from select_done(), and that command was submitted at the same time as a refresh_info command to fetch all flags. The server (Dovecot) was returning all the untagged FETCH results before either completion line, and all the flags were getting "assigned" to the fetch_new_messages job, causing a bunch of 'g_array_append_vals: assertion `array' failed' warnings, and all messages to disappear because the refresh_info job didn't see them. (cherry picked from commit 1d1b146e58f918f67ccff93c4fb5388429bf12e7) --- camel/providers/imapx/camel-imapx-server.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 519ea86bf..4a6746e9a 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -310,6 +310,7 @@ struct _CamelIMAPXJob { } u; }; +static CamelIMAPXJob *imapx_match_active_job (CamelIMAPXServer *is, guint32 type, const gchar *uid); static void imapx_job_done (CamelIMAPXServer *is, CamelIMAPXJob *job); static void imapx_run_job (CamelIMAPXServer *is, CamelIMAPXJob *job); static void imapx_job_fetch_new_messages_start (CamelIMAPXServer *is, CamelIMAPXJob *job); @@ -846,6 +847,21 @@ imapx_command_start (CamelIMAPXServer *imap, CamelIMAPXCommand *ic) return TRUE; } +static gboolean duplicate_fetch_or_refresh(CamelIMAPXServer *is, CamelIMAPXCommand *ic) +{ + if (!ic->job) + return FALSE; + + if (!(ic->job->type & (IMAPX_JOB_FETCH_NEW_MESSAGES|IMAPX_JOB_REFRESH_INFO))) + return FALSE; + + if (imapx_match_active_job (is, IMAPX_JOB_FETCH_NEW_MESSAGES|IMAPX_JOB_REFRESH_INFO, NULL)) { + c(printf("Not yet sending duplicate fetch/refresh %s command\n", ic->name)); + return TRUE; + } + + return FALSE; +} /* See if we can start another task yet. If we're waiting for a literal, we cannot proceed. @@ -947,7 +963,8 @@ imapx_command_start_next(CamelIMAPXServer *is, CamelException *ex) nc = ic->next; while (nc && is->literal == NULL && count < MAX_COMMANDS && ic->pri >= pri) { c(printf("-- %3d '%s'?\n", (gint)ic->pri, ic->name)); - if (!ic->select || (ic->select == is->select_folder)) { + if (!ic->select || ((ic->select == is->select_folder) && + !duplicate_fetch_or_refresh(is, ic))) { c(printf("--> starting '%s'\n", ic->name)); pri = ic->pri; camel_dlist_remove((CamelDListNode *)ic); @@ -980,7 +997,8 @@ imapx_command_start_next(CamelIMAPXServer *is, CamelException *ex) nc = ic->next; count = 0; while (nc && is->literal == NULL && count < MAX_COMMANDS && ic->pri >= pri) { - if (!ic->select || ic->select == is->select_folder) { + if (!ic->select || (ic->select == is->select_folder && + !duplicate_fetch_or_refresh(is, ic))) { c(printf("* queueing job %3d '%s'\n", (gint)ic->pri, ic->name)); pri = ic->pri; camel_dlist_remove((CamelDListNode *)ic); -- cgit v1.2.1 From 16580ec5d6c350dce54402bebaafb313449d6a41 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 31 Jul 2010 16:26:45 +0200 Subject: Fix bug #624909 (cherry picked from commit add347c79f3cedf5376753f0ba874289ffd889a7) --- camel/providers/imapx/camel-imapx-server.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 4a6746e9a..cef704f9b 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -1519,9 +1519,10 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) g_hash_table_remove (ifolder->ignore_recent, mi->uid); } - if (job->op) - camel_operation_progress (job->op, (camel_folder_summary_count (job->folder->summary) - * 100)/ifolder->exists_on_server?:1); + if (job->op) { + int cnt = (camel_folder_summary_count (job->folder->summary) * 100 )/ifolder->exists_on_server; + camel_operation_progress (job->op, cnt?cnt:1); + } } } } @@ -2323,7 +2324,7 @@ imapx_command_select_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) else { camel_exception_setv (cw->ex, 1, "SELECT %s failed: %s", camel_folder_get_full_name(cw->select), - ic->status->text?:""); + ic->status->text?ic->status->text:""); } cw->complete(is, cw); cw = cn; -- cgit v1.2.1 From 32c1c223d4128dac89712acf7940994d63dc240d Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 31 Jul 2010 16:33:26 +0200 Subject: imapx: server flags can be integers A user on IRC reported a server which was reporting '1' (without the quotes) as one of the available PERMANENTFLAGS. This caused imapx to abort the connection after failing to parse the flags. (cherry picked from commit 672cfc0d448820a686511600570db10b39074cf1) --- camel/providers/imapx/camel-imapx-utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/camel/providers/imapx/camel-imapx-utils.c b/camel/providers/imapx/camel-imapx-utils.c index d51c7be68..0157bbcb6 100644 --- a/camel/providers/imapx/camel-imapx-utils.c +++ b/camel/providers/imapx/camel-imapx-utils.c @@ -98,7 +98,7 @@ imapx_parse_flags(CamelIMAPXStream *stream, guint32 *flagsp, CamelFlag **user_fl if (tok == '(') { do { tok = camel_imapx_stream_token(stream, &token, &len, ex); - if (tok == IMAPX_TOK_TOKEN) { + if (tok == IMAPX_TOK_TOKEN || tok == IMAPX_TOK_INT) { p = token; // FIXME: ascii_toupper while ((c=*p)) -- cgit v1.2.1 From 653225f05b48e6743a8b748a06ef19da99b832dd Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 31 Jul 2010 17:24:43 +0200 Subject: imapx: ->cinfo *can* be NULL in imapx_server_dispose() for a failed connection .... which happens when you're on a ferry using a satellite connection, exacerbated by slow VPN and trying to use GSSAPI authentication which is slow enough at the best of times.... and the server has a short idle timeout so it kicks you off before you manage to complete the authentication. (cherry picked from commit febf0c08ecff5078382124a8d07d9078ac84acd3) --- camel/providers/imapx/camel-imapx-server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index cef704f9b..867c348c1 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -4618,7 +4618,7 @@ imapx_server_finalise(CamelIMAPXServer *is, CamelIMAPXServerClass *isclass) if (is->parser_thread) g_thread_join (is->parser_thread); - if (imapx_idle_supported (is)) + if (is->cinfo && imapx_idle_supported (is)) imapx_exit_idle (is); imapx_disconnect (is); -- cgit v1.2.1 From 614b9faf703a37f1e410add80aa6013c76371a70 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 31 Jul 2010 18:43:54 +0200 Subject: Provide a CamelException for asynchronous fetch_new_messages() in select. In master, we just pass a NULL GError. In the gnome-2-30 branch though, we have to pass a non-NULL exception. --- camel/providers/imapx/camel-imapx-server.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 867c348c1..4beef213a 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -265,6 +265,7 @@ struct _CamelIMAPXJob { gint index; gint last_index; gboolean update_unseen; + gboolean dummy_exception; struct _uidset_state uidset; /* changes during refresh */ CamelFolderChangeInfo *changes; @@ -2105,6 +2106,10 @@ imapx_server_fetch_new_messages (CamelIMAPXServer *is, CamelFolder *folder, gboo job->start = imapx_job_fetch_new_messages_start; job->folder = folder; job->noreply = async; + if (!ex) { + job->u.refresh_info.dummy_exception = TRUE; + ex = camel_exception_new (); + } job->ex = ex; job->u.refresh_info.changes = camel_folder_change_info_new(); job->u.refresh_info.update_unseen = update_unseen; @@ -3458,6 +3463,8 @@ cleanup: g_array_free(job->u.refresh_info.infos, TRUE); imapx_job_done (is, job); + if (job->u.refresh_info.dummy_exception) + camel_exception_free (job->ex); camel_imapx_command_free (ic); } @@ -3706,6 +3713,8 @@ exception: camel_operation_unref (ic->job->op); imapx_job_done (is, ic->job); + if (ic->job->u.refresh_info.dummy_exception) + camel_exception_free (ic->job->ex); camel_imapx_command_free (ic); } -- cgit v1.2.1 From 6d1386e5bd63a441fba70deff84fcd25467c1657 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sat, 31 Jul 2010 22:47:46 +0100 Subject: Fix temporary exception handling for imapx fetch_new_messages() Avoid a use-after-free by freeing the exception in imapx_job_done() --- camel/providers/imapx/camel-imapx-server.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 4beef213a..161ceb71b 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -1969,6 +1969,10 @@ imapx_job_done (CamelIMAPXServer *is, CamelIMAPXJob *job) if (job->noreply) { camel_exception_clear(job->ex); + if (job->type == IMAPX_JOB_FETCH_NEW_MESSAGES && + job->u.refresh_info.dummy_exception) + camel_exception_free (job->ex); + g_free(job); } else camel_msgport_reply((CamelMsg *) job); @@ -3463,8 +3467,6 @@ cleanup: g_array_free(job->u.refresh_info.infos, TRUE); imapx_job_done (is, job); - if (job->u.refresh_info.dummy_exception) - camel_exception_free (job->ex); camel_imapx_command_free (ic); } @@ -3713,8 +3715,6 @@ exception: camel_operation_unref (ic->job->op); imapx_job_done (is, ic->job); - if (ic->job->u.refresh_info.dummy_exception) - camel_exception_free (ic->job->ex); camel_imapx_command_free (ic); } -- cgit v1.2.1 From e030f0602f5828ac4eac37d72dd5e4682596429e Mon Sep 17 00:00:00 2001 From: Christian Kirbach Date: Sun, 1 Aug 2010 01:44:17 +0200 Subject: Updated German translation --- po/de.po | 819 +++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 425 insertions(+), 394 deletions(-) diff --git a/po/de.po b/po/de.po index 340fed626..433dfea6e 100644 --- a/po/de.po +++ b/po/de.po @@ -6,24 +6,23 @@ # Christian Kintner , 2006. # Andre Klapper , 2007-2009. # Mario Blättermann , 2009, 2010. -# Christian Kirbach , 2010. # # Based on German Evolution translation. # Copyright on Evolution translation is held by its translators. +# Christian Kirbach , 2010. # msgid "" msgstr "" "Project-Id-Version: evolution-data-server\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=evolution-data-server&component=general\n" -"POT-Creation-Date: 2010-02-20 15:05+0000\n" -"PO-Revision-Date: 2010-02-20 16:08+0100\n" -"Last-Translator: Mario Blättermann \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-08-01 01:41+0200\n" +"PO-Revision-Date: 2010-08-01 01:43+0200\n" +"Last-Translator: Christian Kirbach \n" "Language-Team: Deutsch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../addressbook/backends/file/e-book-backend-file.c:560 #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2330 @@ -35,13 +34,13 @@ msgstr "Ladevorgang …" #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2261 #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2283 #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2328 -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4551 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4553 #: ../addressbook/backends/vcf/e-book-backend-vcf.c:476 msgid "Searching..." msgstr "Suchvorgang …" #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2696 -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4715 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4717 #, c-format msgid "Downloading contacts (%d)... " msgstr "Kontakte werden heruntergeladen (%d) …" @@ -53,39 +52,39 @@ msgstr "Kontakte werden heruntergeladen (%d) …" msgid "Updating contacts cache (%d)... " msgstr "Zwischenspeicher für Kontakte wird aktualisiert (%d) …" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:816 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:818 msgid "Using Distinguished Name (DN)" msgstr "Eindeutiger Name (EN) wird verwendet" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:819 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:821 msgid "Using Email Address" msgstr "E-Mail-Adresse wird verwendet" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1096 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1098 msgid "Reconnecting to LDAP server..." msgstr "Verbindung mit LDAP-Server wird erneut hergestellt …" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1738 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1740 msgid "Adding contact to LDAP server..." msgstr "Kontakt wird zu LDAP-Server hinzugefügt …" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1872 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1874 msgid "Removing contact from LDAP server..." msgstr "Kontakt wird von LDAP-Server entfernt …" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:2309 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:2311 msgid "Modifying contact from LDAP server..." msgstr "Kontakt auf LDAP-Server wird verändert …" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4412 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4414 msgid "Receiving LDAP search results..." msgstr "LDAP-Suchergebnisse werden empfangen …" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4573 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4575 msgid "Error performing search" msgstr "Fehler beim Ausführen der Suche" -#: ../addressbook/libebook/e-book.c:2149 +#: ../addressbook/libebook/e-book.c:2152 #, c-format msgid "%s: there was no source for uid `%s' stored in gconf." msgstr "%s: Es gab keine in GConf gespeicherte Quelle der Benutzerkennung »%s«." @@ -542,7 +541,7 @@ msgstr "Geburtsdatum" #: ../addressbook/libebook/e-contact.c:262 #: ../calendar/backends/contacts/e-cal-backend-contacts.c:715 -#: ../libedataserver/e-categories.c:45 +#: ../libedataserver/e-categories.c:42 msgid "Anniversary" msgstr "Jahrestag" @@ -620,7 +619,7 @@ msgstr "Liste angezeigter Skype-Namen" msgid "SIP address" msgstr "SIP-Adresse" -#: ../addressbook/libebook/e-contact.c:1513 +#: ../addressbook/libebook/e-contact.c:1515 #: ../addressbook/libebook/e-destination.c:739 msgid "Unnamed List" msgstr "Namenlose Liste" @@ -632,8 +631,8 @@ msgstr "Leere Adresse" #: ../addressbook/libedata-book/e-data-book-factory.c:305 #: ../addressbook/libedata-book/e-data-book-factory.c:332 -#: ../calendar/libedata-cal/e-data-cal-factory.c:323 -#: ../calendar/libedata-cal/e-data-cal-factory.c:332 +#: ../calendar/libedata-cal/e-data-cal-factory.c:324 +#: ../calendar/libedata-cal/e-data-cal-factory.c:333 #, c-format msgid "Invalid source" msgstr "Ungültige Quelle" @@ -674,7 +673,7 @@ msgid "Cannot remove contacts" msgstr "Kontakte können nicht entfernt werden" #: ../addressbook/libedata-book/e-data-book.c:569 -#: ../calendar/libedata-cal/e-cal-backend-util.c:139 +#: ../calendar/libedata-cal/e-cal-backend-util.c:141 msgid "Invalid query" msgstr "Ungültige Abfrage" @@ -687,7 +686,7 @@ msgid "Cannot complete operation" msgstr "Vorgang kann nicht abgeschlossen werden" #: ../calendar/backends/contacts/e-cal-backend-contacts.c:717 -#: ../libedataserver/e-categories.c:46 +#: ../libedataserver/e-categories.c:43 msgid "Birthday" msgstr "Geburtstag" @@ -718,51 +717,51 @@ msgstr "Thread zum Abrufen von Änderungen konnte nicht angelegt werden" #: ../calendar/backends/google/e-cal-backend-google-utils.c:374 #: ../calendar/backends/google/e-cal-backend-google.c:1144 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1081 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1382 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1087 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1385 #: ../calendar/backends/http/e-cal-backend-http.c:678 #: ../calendar/backends/weather/e-cal-backend-weather.c:492 msgid "Could not create cache file" msgstr "Datei zum Zwischenspeichern konnte nicht angelegt werden" #: ../calendar/backends/google/e-cal-backend-google-utils.c:387 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1094 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1100 msgid "Could not create thread for populating cache" msgstr "Thread zum Belegen des Zwischenspeichers konnte nicht angelegt werden" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:1082 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2122 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:1118 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2116 msgid "Reply Requested: by " msgstr "Antwort erbeten: durch " -#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:1087 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2127 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:1123 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2121 msgid "Reply Requested: When convenient" msgstr "Antwort erbeten: Wenn es passt" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:283 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:293 #, c-format msgid "Loading %s items" msgstr "%s-Elemente werden geladen" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:919 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:926 msgid "Calendar" msgstr "Kalender" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:977 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:984 msgid "Invalid server URI" msgstr "Ungültige Server-URI" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:996 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1005 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1099 -#: ../calendar/libecal/e-cal.c:4020 -#: ../calendar/libedata-cal/e-cal-backend-util.c:117 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1335 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1371 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1386 -#: ../camel/providers/groupwise/camel-groupwise-store.c:598 -#: ../camel/providers/groupwise/camel-groupwise-store.c:773 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1003 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1012 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1105 +#: ../calendar/libecal/e-cal.c:4026 +#: ../calendar/libedata-cal/e-cal-backend-util.c:119 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1334 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1370 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1385 +#: ../camel/providers/groupwise/camel-groupwise-store.c:591 +#: ../camel/providers/groupwise/camel-groupwise-store.c:766 #: ../camel/providers/groupwise/camel-groupwise-transport.c:154 #: ../camel/providers/groupwise/camel-groupwise-transport.c:181 msgid "Authentication failed" @@ -969,7 +968,7 @@ msgstr "Niedrig" msgid "Undefined" msgstr "Nicht festgelegt" -#: ../calendar/libecal/e-cal.c:1173 ../libedataserverui/e-book-auth-util.c:199 +#: ../calendar/libecal/e-cal.c:1179 ../libedataserverui/e-book-auth-util.c:199 #, c-format msgid "Enter password for %s (user %s)" msgstr "Geben Sie das Passwort für %s ein (Benutzer %s)" @@ -978,93 +977,94 @@ msgstr "Geben Sie das Passwort für %s ein (Benutzer %s)" #. This password prompt will be prompted rarely. Since the key that is passed to #. the auth_func corresponds to the parent user. #. -#: ../calendar/libecal/e-cal.c:1187 +#: ../calendar/libecal/e-cal.c:1193 #, c-format msgid "Enter password for %s to enable proxy for user %s" msgstr "" -"Geben Sie das Passwort für %s ein, um die Stellvertretung für den Benutzer %s " -"zu aktivieren" +"Geben Sie das Passwort für %s ein, um die Stellvertretung für den Benutzer %" +"s zu aktivieren" -#: ../calendar/libecal/e-cal.c:3992 +#: ../calendar/libecal/e-cal.c:3998 msgid "Invalid argument" msgstr "Argument ungültig" -#: ../calendar/libecal/e-cal.c:3994 +#: ../calendar/libecal/e-cal.c:4000 msgid "Backend is busy" msgstr "Backend belegt" -#: ../calendar/libecal/e-cal.c:3996 -#: ../calendar/libedata-cal/e-cal-backend-util.c:105 +#: ../calendar/libecal/e-cal.c:4002 +#: ../calendar/libedata-cal/e-cal-backend-util.c:107 msgid "Repository is offline" msgstr "Repository offline" # CHECK -#: ../calendar/libecal/e-cal.c:3998 -#: ../calendar/libedata-cal/e-cal-backend-util.c:129 +#: ../calendar/libecal/e-cal.c:4004 +#: ../calendar/libedata-cal/e-cal-backend-util.c:131 msgid "No such calendar" msgstr "Kein derartiger Kalender" -#: ../calendar/libecal/e-cal.c:4000 -#: ../calendar/libedata-cal/e-cal-backend-util.c:111 +#: ../calendar/libecal/e-cal.c:4006 +#: ../calendar/libedata-cal/e-cal-backend-util.c:113 #: ../servers/groupwise/e-gw-connection.c:235 msgid "Object not found" msgstr "Objekt nicht gefunden" -#: ../calendar/libecal/e-cal.c:4002 -#: ../calendar/libedata-cal/e-cal-backend-util.c:113 +#: ../calendar/libecal/e-cal.c:4008 +#: ../calendar/libedata-cal/e-cal-backend-util.c:115 #: ../servers/groupwise/e-gw-connection.c:229 msgid "Invalid object" msgstr "Objekt ungültig" -#: ../calendar/libecal/e-cal.c:4004 +#: ../calendar/libecal/e-cal.c:4010 msgid "URI not loaded" msgstr "URI nicht geladen" -#: ../calendar/libecal/e-cal.c:4006 +#: ../calendar/libecal/e-cal.c:4012 msgid "URI already loaded" msgstr "URI bereits geladen" -#: ../calendar/libecal/e-cal.c:4008 -#: ../calendar/libedata-cal/e-cal-backend-util.c:107 +#: ../calendar/libecal/e-cal.c:4014 +#: ../calendar/libedata-cal/e-cal-backend-util.c:109 msgid "Permission denied" msgstr "Erlaubnis verweigert" -#: ../calendar/libecal/e-cal.c:4010 -#: ../calendar/libedata-cal/e-cal-backend-util.c:131 +#: ../calendar/libecal/e-cal.c:4016 +#: ../calendar/libedata-cal/e-cal-backend-util.c:133 #: ../servers/groupwise/e-gw-connection.c:237 msgid "Unknown User" msgstr "Unbekannter Benutzer" -#: ../calendar/libecal/e-cal.c:4012 -#: ../calendar/libedata-cal/e-cal-backend-util.c:115 +#: ../calendar/libecal/e-cal.c:4018 +#: ../calendar/libedata-cal/e-cal-backend-util.c:117 msgid "Object ID already exists" msgstr "Objektkennung existiert bereits" -#: ../calendar/libecal/e-cal.c:4014 +#: ../calendar/libecal/e-cal.c:4020 msgid "Protocol not supported" msgstr "Protokoll nicht unterstützt" -#: ../calendar/libecal/e-cal.c:4016 +#: ../calendar/libecal/e-cal.c:4022 msgid "Operation has been canceled" msgstr "Aktion wurde abgebrochen" -#: ../calendar/libecal/e-cal.c:4018 -#: ../calendar/libedata-cal/e-cal-backend-util.c:143 +#: ../calendar/libecal/e-cal.c:4024 +#: ../calendar/libedata-cal/e-cal-backend-util.c:145 msgid "Could not cancel operation" msgstr "Aktion konnte nicht abgebrochen werden" -#: ../calendar/libecal/e-cal.c:4022 -#: ../calendar/libedata-cal/e-cal-backend-util.c:119 +#: ../calendar/libecal/e-cal.c:4028 +#: ../calendar/libedata-cal/e-cal-backend-util.c:121 #: ../camel/providers/smtp/camel-smtp-transport.c:217 msgid "Authentication required" msgstr "Legitimation erforderlich" -#: ../calendar/libecal/e-cal.c:4024 +#: ../calendar/libecal/e-cal.c:4030 msgid "A CORBA exception has occurred" msgstr "Es ist eine CORBA-Exception aufgetreten" -#: ../calendar/libecal/e-cal.c:4026 -#: ../calendar/libedata-cal/e-cal-backend-util.c:146 +#: ../calendar/libecal/e-cal.c:4032 +#: ../calendar/libedata-cal/e-cal-backend-util.c:148 +#: ../camel/camel-net-utils.c:523 #: ../camel/providers/groupwise/camel-groupwise-transport.c:214 #: ../camel/providers/imap/camel-imap-command.c:432 #: ../camel/providers/imap/camel-imap-store.c:741 @@ -1075,13 +1075,13 @@ msgstr "Es ist eine CORBA-Exception aufgetreten" #: ../camel/providers/imap4/camel-imap4-store.c:311 #: ../camel/providers/imap4/camel-imap4-store.c:818 #: ../camel/providers/imap4/camel-imap4-store.c:1574 -#: ../camel/providers/pop3/camel-pop3-store.c:582 +#: ../camel/providers/pop3/camel-pop3-store.c:584 #: ../servers/groupwise/e-gw-connection.c:243 msgid "Unknown error" msgstr "Unbekannter Fehler" -#: ../calendar/libecal/e-cal.c:4028 -#: ../calendar/libedata-cal/e-cal-backend-util.c:103 +#: ../calendar/libecal/e-cal.c:4034 +#: ../calendar/libedata-cal/e-cal-backend-util.c:105 msgid "No error" msgstr "Kein Fehler" @@ -1174,178 +1174,178 @@ msgstr "»%s« erwartet mindestens ein Argument" #: ../calendar/libedata-cal/e-cal-backend-sexp.c:941 #, c-format msgid "" -"\"%s\" expects all arguments to be strings or one and only one argument to be " -"a boolean false (#f)" +"\"%s\" expects all arguments to be strings or one and only one argument to " +"be a boolean false (#f)" msgstr "" -"»%s« erwartet als Argumente Zeichenketten, oder aber ein einziges Argument mit " -"dem Wahrheitswert »falsch« (#f)" +"»%s« erwartet als Argumente Zeichenketten, oder aber ein einziges Argument " +"mit dem Wahrheitswert »falsch« (#f)" -#: ../calendar/libedata-cal/e-cal-backend-util.c:109 +#: ../calendar/libedata-cal/e-cal-backend-util.c:111 msgid "Invalid range" msgstr "Ungültiger Bereich" -#: ../calendar/libedata-cal/e-cal-backend-util.c:121 +#: ../calendar/libedata-cal/e-cal-backend-util.c:123 msgid "Unsupported field" msgstr "Nicht unterstütztes Feld" -#: ../calendar/libedata-cal/e-cal-backend-util.c:123 +#: ../calendar/libedata-cal/e-cal-backend-util.c:125 msgid "Unsupported method" msgstr "Nicht unterstützte Methode" -#: ../calendar/libedata-cal/e-cal-backend-util.c:125 +#: ../calendar/libedata-cal/e-cal-backend-util.c:127 msgid "Unsupported authentication method" msgstr "Nicht unterstützte Legitimationsmethode" -#: ../calendar/libedata-cal/e-cal-backend-util.c:127 +#: ../calendar/libedata-cal/e-cal-backend-util.c:129 msgid "TLS not available" msgstr "TLS nicht verfügbar" -#: ../calendar/libedata-cal/e-cal-backend-util.c:133 +#: ../calendar/libedata-cal/e-cal-backend-util.c:135 msgid "Offline mode unavailable" msgstr "Offline-Modus nicht verfügbar" -#: ../calendar/libedata-cal/e-cal-backend-util.c:135 +#: ../calendar/libedata-cal/e-cal-backend-util.c:137 msgid "Search size limit exceeded" msgstr "Suchgröße überschritten" -#: ../calendar/libedata-cal/e-cal-backend-util.c:137 +#: ../calendar/libedata-cal/e-cal-backend-util.c:139 msgid "Search time limit exceeded" msgstr "Suchzeit überschritten" -#: ../calendar/libedata-cal/e-cal-backend-util.c:141 +#: ../calendar/libedata-cal/e-cal-backend-util.c:143 msgid "Query refused" msgstr "Abfrage verweigert" -#: ../calendar/libedata-cal/e-cal-backend-util.c:148 +#: ../calendar/libedata-cal/e-cal-backend-util.c:150 msgid "Invalid server version" msgstr "Ungültige Server-Version" -#: ../calendar/libedata-cal/e-data-cal.c:491 +#: ../calendar/libedata-cal/e-data-cal.c:501 #, c-format msgid "Cannot retrieve calendar address" msgstr "Kalenderadresse kann nicht ermittelt werden" -#: ../calendar/libedata-cal/e-data-cal.c:509 +#: ../calendar/libedata-cal/e-data-cal.c:519 #, c-format msgid "Cannot retrieve calendar alarm e-mail address" msgstr "Die E-Mail-Adresse des Kalenderalarms kann nicht ermittelt werden" -#: ../calendar/libedata-cal/e-data-cal.c:527 +#: ../calendar/libedata-cal/e-data-cal.c:537 #, c-format msgid "Cannot retrieve calendar's ldap attribute" msgstr "LDAP-Attribut des Kalenders kann nicht ermittelt werden" -#: ../calendar/libedata-cal/e-data-cal.c:545 +#: ../calendar/libedata-cal/e-data-cal.c:555 #, c-format msgid "Cannot retrieve calendar scheduling information" msgstr "Plandaten des Kalenders können nicht abgerufen werden" -#: ../calendar/libedata-cal/e-data-cal.c:562 +#: ../calendar/libedata-cal/e-data-cal.c:572 #, c-format msgid "Cannot open calendar" msgstr "Kalender kann nicht geöffnet werden" -#: ../calendar/libedata-cal/e-data-cal.c:579 +#: ../calendar/libedata-cal/e-data-cal.c:591 #, c-format msgid "Cannot refresh calendar" msgstr "Kalender kann nicht aufgefrischt werden" -#: ../calendar/libedata-cal/e-data-cal.c:596 +#: ../calendar/libedata-cal/e-data-cal.c:608 #, c-format msgid "Cannot remove calendar" msgstr "Kalender kann nicht entfernt werden" -#: ../calendar/libedata-cal/e-data-cal.c:615 +#: ../calendar/libedata-cal/e-data-cal.c:627 #, c-format msgid "Cannot create calendar object" msgstr "Kalenderobjekt kann nicht angelegt werden" -#: ../calendar/libedata-cal/e-data-cal.c:637 +#: ../calendar/libedata-cal/e-data-cal.c:649 #, c-format msgid "Cannot modify calendar object" msgstr "Kalenderobjekt kann nicht verändert werden" -#: ../calendar/libedata-cal/e-data-cal.c:661 +#: ../calendar/libedata-cal/e-data-cal.c:673 #, c-format msgid "Cannot remove calendar object" msgstr "Kalenderobjekt kann nicht entfernt werden" -#: ../calendar/libedata-cal/e-data-cal.c:680 +#: ../calendar/libedata-cal/e-data-cal.c:692 #, c-format msgid "Cannot receive calendar objects" msgstr "Kalenderobjekte können nicht empfangen werden" -#: ../calendar/libedata-cal/e-data-cal.c:697 +#: ../calendar/libedata-cal/e-data-cal.c:709 #, c-format msgid "Cannot discard calendar alarm" msgstr "Kalenderalarm kann nicht verworfen werden" -#: ../calendar/libedata-cal/e-data-cal.c:716 +#: ../calendar/libedata-cal/e-data-cal.c:728 #, c-format msgid "Cannot send calendar objects" msgstr "Kalenderobjekte können nicht gesendet werden" -#: ../calendar/libedata-cal/e-data-cal.c:751 +#: ../calendar/libedata-cal/e-data-cal.c:763 #, c-format msgid "Cannot retrieve default calendar object path" msgstr "Objektpfad des voreingestellten Kalenders kann nicht abgerufen werden" -#: ../calendar/libedata-cal/e-data-cal.c:769 +#: ../calendar/libedata-cal/e-data-cal.c:781 #, c-format msgid "Cannot retrieve calendar object path" msgstr "Objektpfad des Kalenders kann nicht abgerufen werden" -#: ../calendar/libedata-cal/e-data-cal.c:787 +#: ../calendar/libedata-cal/e-data-cal.c:799 #, c-format msgid "Cannot retrieve calendar object list" msgstr "Liste der Kalenderobjekte kann nicht abgerufen werden" -#: ../calendar/libedata-cal/e-data-cal.c:825 +#: ../calendar/libedata-cal/e-data-cal.c:837 #, c-format msgid "Could not retrieve attachment list" msgstr "Liste der Anhänge kann nicht abgerufen werden" -#: ../calendar/libedata-cal/e-data-cal.c:847 +#: ../calendar/libedata-cal/e-data-cal.c:859 #, c-format msgid "Could not complete calendar query" msgstr "Kalenderanfrage konnte nicht beendet werden" -#: ../calendar/libedata-cal/e-data-cal.c:865 +#: ../calendar/libedata-cal/e-data-cal.c:877 #, c-format msgid "Could not retrieve calendar time zone" msgstr "Zeitzone des Kalenders konnte nicht beendet werden" -#: ../calendar/libedata-cal/e-data-cal.c:883 +#: ../calendar/libedata-cal/e-data-cal.c:895 #, c-format msgid "Could not add calendar time zone" msgstr "Zeitzone des Kalenders konnte nicht hinzugefügt werden" -#: ../calendar/libedata-cal/e-data-cal.c:900 +#: ../calendar/libedata-cal/e-data-cal.c:912 #, c-format msgid "Could not set default calendar time zone" msgstr "Voreingestellte Zeitzone des Kalenders konnte nicht eingestellt werden" -#: ../calendar/libedata-cal/e-data-cal.c:921 +#: ../calendar/libedata-cal/e-data-cal.c:933 #, c-format msgid "Cannot retrieve calendar changes" msgstr "Kalenderänderungen können nicht abgerufen werden" -#: ../calendar/libedata-cal/e-data-cal.c:971 +#: ../calendar/libedata-cal/e-data-cal.c:983 #, c-format msgid "Cannot retrieve calendar free/busy list" msgstr "Verfügbarkeitsliste des Kalenders kann nicht abgerufen werden" -#: ../calendar/libedata-cal/e-data-cal-factory.c:339 +#: ../calendar/libedata-cal/e-data-cal-factory.c:340 #, c-format msgid "Invalid URI" msgstr "Ungültige Adresse" -#: ../calendar/libedata-cal/e-data-cal-factory.c:350 +#: ../calendar/libedata-cal/e-data-cal-factory.c:351 #, c-format msgid "No backend factory for '%s' of '%s'" msgstr "Keine Backend-Factory für »%s« von »%s«" -#: ../calendar/libedata-cal/e-data-cal-factory.c:390 +#: ../calendar/libedata-cal/e-data-cal-factory.c:391 #, c-format msgid "Could not instantiate backend" msgstr "Backend-Instanz konnte nicht angelegt werden" @@ -1394,12 +1394,12 @@ msgstr "Sie dürfen keine Schlüssel mit dieser Verschlüsselung exportieren" msgid "Unable to create cache path" msgstr "Cache-Pfad konnte nicht angelegt werden" -#: ../camel/camel-data-cache.c:401 +#: ../camel/camel-data-cache.c:403 #, c-format msgid "Could not remove cache entry: %s: %s" msgstr "Cache-Eintrag konnte nicht entfernt werden: %s: %s" -#: ../camel/camel-db.c:411 +#: ../camel/camel-db.c:459 msgid "Insufficient memory" msgstr "Nicht ausreichender Speicher" @@ -1434,7 +1434,7 @@ msgstr "Neu abgleichen mit dem Server" msgid "Copy folder content locally for offline operation" msgstr "Den Ordnerinhalt lokal zum Arbeiten im Offline-Modus kopieren" -#: ../camel/camel-disco-folder.c:105 ../camel/camel-offline-folder.c:107 +#: ../camel/camel-disco-folder.c:105 ../camel/camel-offline-folder.c:106 msgid "Downloading new messages for offline mode" msgstr "Neue Nachrichten werden für Offline-Modus abgerufen" @@ -1444,11 +1444,15 @@ msgid "Preparing folder '%s' for offline" msgstr "Ordner »%s« wird für den Offline-Modus vorbereitet" #: ../camel/camel-disco-store.c:400 -#: ../camel/providers/groupwise/camel-groupwise-store.c:223 +#: ../camel/providers/groupwise/camel-groupwise-store.c:216 #: ../camel/providers/imap/camel-imap-store.c:1001 #: ../camel/providers/imap/camel-imap-store.c:1843 -#: ../camel/providers/imap/camel-imap-store.c:2259 -#: ../camel/providers/imap/camel-imap-store.c:3068 +#: ../camel/providers/imap/camel-imap-store.c:2280 +#: ../camel/providers/imap/camel-imap-store.c:3089 +#: ../camel/providers/imapx/camel-imapx-store.c:170 +#: ../camel/providers/imapx/camel-imapx-store.c:676 +#: ../camel/providers/imapx/camel-imapx-store.c:732 +#: ../camel/providers/imapx/camel-imapx-store.c:784 msgid "You must be working online to complete this operation" msgstr "Sie müssen online arbeiten, um diesen Vorgang abzuschließen" @@ -1538,8 +1542,8 @@ msgstr "Ungültige Argumente bei (user-tag)" msgid "Error executing filter search: %s: %s" msgstr "Fehler beim Ausführen einer Filtersuche: %s: %s" -#: ../camel/camel-folder-search.c:351 ../camel/camel-folder-search.c:453 -#: ../camel/camel-folder-search.c:608 +#: ../camel/camel-folder-search.c:351 ../camel/camel-folder-search.c:455 +#: ../camel/camel-folder-search.c:610 #, c-format msgid "" "Cannot parse search expression: %s:\n" @@ -1548,8 +1552,8 @@ msgstr "" "Syntax des Suchausdrucks konnte nicht analysiert werden: %s:\n" "%s" -#: ../camel/camel-folder-search.c:361 ../camel/camel-folder-search.c:463 -#: ../camel/camel-folder-search.c:618 +#: ../camel/camel-folder-search.c:361 ../camel/camel-folder-search.c:465 +#: ../camel/camel-folder-search.c:620 #, c-format msgid "" "Error executing search expression: %s:\n" @@ -1558,69 +1562,69 @@ msgstr "" "Fehler beim Ausführen eines Suchausdrucks: %s:\n" "%s" -#: ../camel/camel-folder-search.c:810 ../camel/camel-folder-search.c:852 +#: ../camel/camel-folder-search.c:812 ../camel/camel-folder-search.c:854 #, c-format msgid "(%s) requires a single bool result" msgstr "(%s) erfordert einen einzelnen Boole'schen Wert als Ergebnis" -#: ../camel/camel-folder-search.c:905 +#: ../camel/camel-folder-search.c:907 #, c-format msgid "(%s) not allowed inside %s" msgstr "(%s) nicht erlaubt innerhalb von %s" -#: ../camel/camel-folder-search.c:911 ../camel/camel-folder-search.c:918 +#: ../camel/camel-folder-search.c:913 ../camel/camel-folder-search.c:920 #, c-format msgid "(%s) requires a match type string" msgstr "(%s) erfordert den Treffertyp Zeichenkette" -#: ../camel/camel-folder-search.c:945 +#: ../camel/camel-folder-search.c:947 #, c-format msgid "(%s) expects an array result" msgstr "(%s) erwartet ein Array-Ergebnis" -#: ../camel/camel-folder-search.c:954 +#: ../camel/camel-folder-search.c:956 #, c-format msgid "(%s) requires the folder set" msgstr "(%s) erfordert, dass der Ordner festgelegt ist" -#: ../camel/camel-folder.c:676 +#: ../camel/camel-folder.c:690 #, c-format msgid "Unsupported operation: append message: for %s" msgstr "Nicht unterstützter Vorgang: Nachricht anhängen: für %s" -#: ../camel/camel-folder.c:1381 +#: ../camel/camel-folder.c:1401 #, c-format msgid "Unsupported operation: search by expression: for %s" msgstr "Nicht unterstützter Vorgang: Suche nach Ausdruck: für %s" -#: ../camel/camel-folder.c:1422 +#: ../camel/camel-folder.c:1442 #, c-format msgid "Unsupported operation: count by expression: for %s" msgstr "Nicht unterstützter Vorgang: Anzahl nach Ausdruck: für %s" -#: ../camel/camel-folder.c:1461 +#: ../camel/camel-folder.c:1483 #, c-format msgid "Unsupported operation: search by UIDs: for %s" msgstr "Nicht unterstützter Vorgang: Suche nach UIDs: für %s" -#: ../camel/camel-folder.c:1574 +#: ../camel/camel-folder.c:1596 #: ../camel/providers/local/camel-maildir-folder.c:387 msgid "Moving messages" msgstr "Nachrichten werden verschoben" -#: ../camel/camel-folder.c:1574 +#: ../camel/camel-folder.c:1596 msgid "Copying messages" msgstr "Nachrichten werden kopiert" -#: ../camel/camel-folder.c:1915 +#: ../camel/camel-folder.c:1945 msgid "Learning junk" msgstr "Werbemüll wird erlernt" -#: ../camel/camel-folder.c:1933 +#: ../camel/camel-folder.c:1963 msgid "Learning non-junk" msgstr "»Kein Werbemüll« wird gelernt" -#: ../camel/camel-folder.c:1953 +#: ../camel/camel-folder.c:1983 msgid "Filtering new message(s)" msgstr "Neue Nachricht(en) wird/werden gefiltert" @@ -1669,7 +1673,7 @@ msgstr "" msgid "Unexpected request from GnuPG for '%s'" msgstr "Unerwartete Anfrage von GnuPG für »%s«" -#: ../camel/camel-gpg-context.c:867 ../camel/camel-gpg-context.c:1113 +#: ../camel/camel-gpg-context.c:867 ../camel/camel-gpg-context.c:1111 #: ../camel/providers/nntp/camel-nntp-store.c:1313 msgid "Canceled." msgstr "Abgesagt." @@ -1692,22 +1696,22 @@ msgstr "" "angegeben." #. always called on an i/o error -#: ../camel/camel-gpg-context.c:1262 ../camel/camel-gpg-context.c:1387 -#: ../camel/camel-gpg-context.c:1953 ../camel/camel-gpg-context.c:1998 +#: ../camel/camel-gpg-context.c:1260 ../camel/camel-gpg-context.c:1385 +#: ../camel/camel-gpg-context.c:1959 ../camel/camel-gpg-context.c:2006 #, c-format msgid "Failed to execute gpg: %s" msgstr "gpg konnte nicht ausgeführt werden: %s" -#: ../camel/camel-gpg-context.c:1355 ../camel/camel-smime-context.c:605 +#: ../camel/camel-gpg-context.c:1353 ../camel/camel-smime-context.c:605 #, c-format msgid "Could not generate signing data: %s" msgstr "Signaturdaten konnten nicht erzeugt werden: %s" #: ../camel/camel-gpg-context.c:1402 ../camel/camel-gpg-context.c:1630 -#: ../camel/camel-gpg-context.c:1646 ../camel/camel-gpg-context.c:1728 -#: ../camel/camel-gpg-context.c:1743 ../camel/camel-gpg-context.c:1859 -#: ../camel/camel-gpg-context.c:1874 ../camel/camel-gpg-context.c:1969 -#: ../camel/camel-gpg-context.c:2014 +#: ../camel/camel-gpg-context.c:1648 ../camel/camel-gpg-context.c:1730 +#: ../camel/camel-gpg-context.c:1747 ../camel/camel-gpg-context.c:1863 +#: ../camel/camel-gpg-context.c:1880 ../camel/camel-gpg-context.c:1977 +#: ../camel/camel-gpg-context.c:2024 msgid "Failed to execute gpg." msgstr "gpg konnte nicht ausgeführt werden." @@ -1727,34 +1731,34 @@ msgstr "" "Die Nachrichtensignatur konnte nicht verifiziert werden: Temporäre Datei " "konnte nicht erstellt werden: %s" -#: ../camel/camel-gpg-context.c:1711 +#: ../camel/camel-gpg-context.c:1713 #, c-format msgid "Could not generate encrypting data: %s" msgstr "Verschlüsselungsdaten konnten nicht erzeugt werden: %s" -#: ../camel/camel-gpg-context.c:1761 +#: ../camel/camel-gpg-context.c:1765 msgid "This is a digitally encrypted message part" msgstr "Dies ist ein digital verschlüsselter Nachrichtenteil" -#: ../camel/camel-gpg-context.c:1814 ../camel/camel-gpg-context.c:1822 -#: ../camel/camel-gpg-context.c:1841 +#: ../camel/camel-gpg-context.c:1818 ../camel/camel-gpg-context.c:1826 +#: ../camel/camel-gpg-context.c:1845 msgid "Cannot decrypt message: Incorrect message format" msgstr "" "Nachricht konnte nicht entschlüsselt werden: Nachrichtenformat fehlerhaft" -#: ../camel/camel-gpg-context.c:1831 +#: ../camel/camel-gpg-context.c:1835 msgid "Failed to decrypt MIME part: protocol error" msgstr "MIME-Teil konnte nicht entschlüsselt werden: Protokollfehler" -#: ../camel/camel-gpg-context.c:1909 ../camel/camel-smime-context.c:1205 +#: ../camel/camel-gpg-context.c:1915 ../camel/camel-smime-context.c:1204 msgid "Encrypted content" msgstr "Verschlüsselter Inhalt" -#: ../camel/camel-gpg-context.c:1930 +#: ../camel/camel-gpg-context.c:1936 msgid "Unable to parse message content" msgstr "Syntax des Nachrichteninhalts konnte nicht analysiert werden" -#: ../camel/camel-gpg-context.c:1954 ../camel/camel-gpg-context.c:1999 +#: ../camel/camel-gpg-context.c:1960 ../camel/camel-gpg-context.c:2007 #: ../camel/providers/imap4/camel-imap4-utils.c:614 #: ../camel/providers/smtp/camel-smtp-transport.c:165 #: ../camel/providers/smtp/camel-smtp-transport.c:220 @@ -1861,45 +1865,45 @@ msgstr "Fehler beim Kopieren der temporären E-Mail-Datei: %s" msgid "parse error" msgstr "Fehler bei der Syntaxanalyse" -#: ../camel/camel-net-utils.c:503 ../camel/camel-net-utils.c:674 -#: ../camel/camel-net-utils.c:805 -#: ../camel/providers/pop3/camel-pop3-store.c:476 -#: ../camel/providers/pop3/camel-pop3-store.c:576 +#: ../camel/camel-net-utils.c:503 ../camel/camel-net-utils.c:678 +#: ../camel/camel-net-utils.c:817 +#: ../camel/providers/pop3/camel-pop3-store.c:478 +#: ../camel/providers/pop3/camel-pop3-store.c:578 msgid "Canceled" msgstr "Abgesagt" -#: ../camel/camel-net-utils.c:521 +#: ../camel/camel-net-utils.c:523 msgid "cannot create thread" msgstr "Thread konnte nicht erstellt werden" -#: ../camel/camel-net-utils.c:678 +#: ../camel/camel-net-utils.c:682 #, c-format msgid "Resolving: %s" msgstr "%s wird aufgelöst" -#: ../camel/camel-net-utils.c:700 +#: ../camel/camel-net-utils.c:704 msgid "Host lookup failed" msgstr "Finden eines Rechners gescheitert" -#: ../camel/camel-net-utils.c:702 +#: ../camel/camel-net-utils.c:706 #, c-format msgid "Host lookup failed: %s: %s" msgstr "Finden eines Rechners gescheitert: %s: %s" -#: ../camel/camel-net-utils.c:809 +#: ../camel/camel-net-utils.c:821 msgid "Resolving address" msgstr "Adresse wird aufgelöst" -#: ../camel/camel-net-utils.c:829 +#: ../camel/camel-net-utils.c:841 msgid "Name lookup failed" msgstr "Namenssuche fehlgeschlagen" -#: ../camel/camel-net-utils.c:832 +#: ../camel/camel-net-utils.c:844 #, c-format msgid "Name lookup failed: %s" msgstr "Namenssuche fehlgeschlagen: %s" -#: ../camel/camel-offline-folder.c:249 +#: ../camel/camel-offline-folder.c:247 #, c-format msgid "Syncing messages in folder '%s' to disk" msgstr "Nachrichten im Ordner »%s« werden auf Festplatte abgeglichen" @@ -1998,8 +2002,8 @@ msgstr "DIGEST-MD5" #: ../camel/camel-sasl-digest-md5.c:50 msgid "" -"This option will connect to the server using a secure DIGEST-MD5 password, if " -"the server supports it." +"This option will connect to the server using a secure DIGEST-MD5 password, " +"if the server supports it." msgstr "" "Dies stellt eine Verbindung mit dem SMTP-Server her und verwendet dazu ein " "sicheres DIGEST-MD5-Passwort, falls der Server dies unterstützt." @@ -2014,7 +2018,8 @@ msgstr "Server-Herausforderung ungültig\n" #: ../camel/camel-sasl-digest-md5.c:859 msgid "Server challenge contained invalid \"Quality of Protection\" token" -msgstr "Server-Herausforderung enthielt ungültiges »Quality-of-Protection«-Token" +msgstr "" +"Server-Herausforderung enthielt ungültiges »Quality-of-Protection«-Token" #: ../camel/camel-sasl-digest-md5.c:889 msgid "Server response did not contain authorization data" @@ -2029,17 +2034,17 @@ msgid "Server response does not match" msgstr "Antwort des Servers passt nicht" # CHECK -#: ../camel/camel-sasl-gssapi.c:72 +#: ../camel/camel-sasl-gssapi.c:78 msgid "GSSAPI" msgstr "GSSAPI" -#: ../camel/camel-sasl-gssapi.c:74 +#: ../camel/camel-sasl-gssapi.c:80 msgid "This option will connect to the server using Kerberos 5 authentication." msgstr "" -"Dies stellt eine Verbindung mit dem Server her und verwendet zur Legitimation " -"Kerberos 5" +"Dies stellt eine Verbindung mit dem Server her und verwendet zur " +"Legitimation Kerberos 5" -#: ../camel/camel-sasl-gssapi.c:168 +#: ../camel/camel-sasl-gssapi.c:174 msgid "" "The specified mechanism is not supported by the provided credential, or is " "unrecognized by the implementation." @@ -2047,12 +2052,12 @@ msgstr "" "Der angegebene Mechanismus wird vom übergebenen Berechtigungsnachweis nicht " "unterstützt oder wird von der Implementierung nicht erkannt." -#: ../camel/camel-sasl-gssapi.c:173 +#: ../camel/camel-sasl-gssapi.c:179 msgid "The provided target_name parameter was ill-formed." msgstr "" "Der übergebene Parameter »target_name« liegt in fehlerhafter Formatierung vor." -#: ../camel/camel-sasl-gssapi.c:176 +#: ../camel/camel-sasl-gssapi.c:182 msgid "" "The provided target_name parameter contained an invalid or unsupported type " "of name." @@ -2060,7 +2065,7 @@ msgstr "" "Der übergebene Parameter »target_name« enthält einen ungültigen oder nicht " "unterstützten Namenstyp " -#: ../camel/camel-sasl-gssapi.c:180 +#: ../camel/camel-sasl-gssapi.c:186 msgid "" "The input_token contains different channel bindings to those specified via " "the input_chan_bindings parameter." @@ -2068,7 +2073,7 @@ msgstr "" "Das Eingabe-Token »input_token« enthält andere Kanalbindungen als die vom " "Parameter »input_chan_bindings« angegebenen." -#: ../camel/camel-sasl-gssapi.c:185 +#: ../camel/camel-sasl-gssapi.c:191 msgid "" "The input_token contains an invalid signature, or a signature that could not " "be verified." @@ -2077,7 +2082,7 @@ msgstr "" "verifizierbare Signatur." # CHECK -#: ../camel/camel-sasl-gssapi.c:189 +#: ../camel/camel-sasl-gssapi.c:195 msgid "" "The supplied credentials were not valid for context initiation, or the " "credential handle did not reference any credentials." @@ -2086,35 +2091,35 @@ msgstr "" "Kontextes gültig oder der Berechtigungsnachweis-Handle hat auf keine " "Berechtigungsnachweise Bezug genommen." -#: ../camel/camel-sasl-gssapi.c:194 +#: ../camel/camel-sasl-gssapi.c:200 msgid "The supplied context handle did not refer to a valid context." msgstr "Der übergebene Kontext-Handle führte zu keinem gültigen Kontext." -#: ../camel/camel-sasl-gssapi.c:197 +#: ../camel/camel-sasl-gssapi.c:203 msgid "The consistency checks performed on the input_token failed." msgstr "" "Die für das Eingabe-Token »input_token« durchgeführten Konsistenzprüfungen " "schlugen fehl." -#: ../camel/camel-sasl-gssapi.c:200 +#: ../camel/camel-sasl-gssapi.c:206 msgid "The consistency checks performed on the credential failed." msgstr "" "Die für den Berechtigungsnachweis durchgeführten Konsistenzüberprüfungen " "schlugen fehl." -#: ../camel/camel-sasl-gssapi.c:203 +#: ../camel/camel-sasl-gssapi.c:209 msgid "The referenced credentials have expired." msgstr "" "Die Berechtigungsnachweise, auf die Bezug genommen wurde, sind nicht mehr " "gültig." -#: ../camel/camel-sasl-gssapi.c:209 ../camel/camel-sasl-gssapi.c:316 -#: ../camel/camel-sasl-gssapi.c:358 ../camel/camel-sasl-gssapi.c:373 +#: ../camel/camel-sasl-gssapi.c:215 ../camel/camel-sasl-gssapi.c:322 +#: ../camel/camel-sasl-gssapi.c:364 ../camel/camel-sasl-gssapi.c:379 #: ../camel/providers/imap/camel-imap-store.c:1272 msgid "Bad authentication response from server." msgstr "Fehlerhafte Legitimationsantwort vom Server." -#: ../camel/camel-sasl-gssapi.c:383 +#: ../camel/camel-sasl-gssapi.c:389 msgid "Unsupported security layer." msgstr "Nicht unterstützte Sicherheitsebene." @@ -2197,12 +2202,12 @@ msgstr "" "Ordner %s konnte nicht angelegt werden:\n" "%s" -#: ../camel/camel-session.c:477 +#: ../camel/camel-session.c:484 #, c-format msgid "Please enter the %s password for %s on host %s." msgstr "Bitte geben Sie das %s-Passwort für %s auf dem Rechner %s ein." -#: ../camel/camel-session.c:815 +#: ../camel/camel-session.c:832 msgid "Camel session doesn't support forwarding of a message." msgstr "Die Camel-Sitzung unterstützt die Weiterleitung einer Nachricht nicht." @@ -2268,7 +2273,7 @@ msgstr "Verschlüsselungskontext konnte nicht angelegt werden" msgid "Failed to add data to CMS encoder" msgstr "Daten konnten nicht zu CMS-Kodierer hinzugefügt werden" -#: ../camel/camel-smime-context.c:627 ../camel/camel-smime-context.c:1101 +#: ../camel/camel-smime-context.c:627 ../camel/camel-smime-context.c:1100 msgid "Failed to encode data" msgstr "Datenverschlüsselung gescheitert" @@ -2353,7 +2358,7 @@ msgstr "Signatur-Digest konnte nicht gefunden werden" msgid "Signer: %s <%s>: %s\n" msgstr "Unterzeichner: %s <%s>: %s\n" -#: ../camel/camel-smime-context.c:960 ../camel/camel-smime-context.c:1184 +#: ../camel/camel-smime-context.c:960 ../camel/camel-smime-context.c:1183 msgid "Decoder failed" msgstr "Dekodiervorgang gescheitert" @@ -2394,19 +2399,19 @@ msgstr "CMS-Empfängerinformationen konnten nicht angelegt werden" msgid "Cannot add CMS Recipient information" msgstr "CMS-Empfängerinformationen konnten nicht hinzugefügt werden" -#: ../camel/camel-smime-context.c:1095 +#: ../camel/camel-smime-context.c:1094 msgid "Failed to add data to encoder" msgstr "Hinzufügen von Daten zum Kodierer gescheitert" -#: ../camel/camel-smime-context.c:1191 +#: ../camel/camel-smime-context.c:1190 msgid "S/MIME Decrypt: No encrypted content found" msgstr "S/MIME-Entschlüsselung: Kein entschlüsselter Inhalt gefunden" -#: ../camel/camel-smime-context.c:1219 +#: ../camel/camel-smime-context.c:1218 msgid "import keys: unimplemented" msgstr "Schlüssel importieren: Nicht implementiert" -#: ../camel/camel-smime-context.c:1227 +#: ../camel/camel-smime-context.c:1226 msgid "export keys: unimplemented" msgstr "Schlüssel exportieren: Nicht implementiert" @@ -2595,9 +2600,9 @@ msgstr "Nachricht existiert nicht" #: ../camel/providers/nntp/camel-nntp-folder.c:248 #: ../camel/providers/nntp/camel-nntp-folder.c:408 #: ../camel/providers/pop3/camel-pop3-folder.c:268 -#: ../camel/providers/pop3/camel-pop3-folder.c:578 -#: ../camel/providers/pop3/camel-pop3-folder.c:639 -#: ../camel/providers/pop3/camel-pop3-folder.c:657 +#: ../camel/providers/pop3/camel-pop3-folder.c:587 +#: ../camel/providers/pop3/camel-pop3-folder.c:648 +#: ../camel/providers/pop3/camel-pop3-folder.c:666 msgid "User canceled" msgstr "Benutzer hat abgebrochen" @@ -2608,62 +2613,62 @@ msgstr "Benutzer hat abgebrochen" #: ../camel/providers/nntp/camel-nntp-folder.c:175 #: ../camel/providers/nntp/camel-nntp-folder.c:250 #: ../camel/providers/pop3/camel-pop3-folder.c:388 -#: ../camel/providers/pop3/camel-pop3-folder.c:581 -#: ../camel/providers/pop3/camel-pop3-folder.c:642 -#: ../camel/providers/pop3/camel-pop3-folder.c:649 -#: ../camel/providers/pop3/camel-pop3-folder.c:660 +#: ../camel/providers/pop3/camel-pop3-folder.c:590 +#: ../camel/providers/pop3/camel-pop3-folder.c:651 +#: ../camel/providers/pop3/camel-pop3-folder.c:658 +#: ../camel/providers/pop3/camel-pop3-folder.c:669 #, c-format msgid "Cannot get message %s: %s" msgstr "Nachricht %s konnte nicht abgerufen werden: %s" #: ../camel/providers/groupwise/camel-groupwise-folder.c:173 #: ../camel/providers/groupwise/camel-groupwise-folder.c:181 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2507 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2501 #: ../camel/providers/imap4/camel-imap4-folder.c:837 msgid "This message is not available in offline mode." msgstr "Diese Nachricht ist im Offline-Modus nicht verfügbar." #: ../camel/providers/groupwise/camel-groupwise-folder.c:195 #: ../camel/providers/groupwise/camel-groupwise-folder.c:202 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2010 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2061 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2004 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2055 msgid "Could not get message" msgstr "Abrufen der Nachricht gescheitert" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:983 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:982 #: ../camel/providers/imap/camel-imap-folder.c:295 #, c-format msgid "Could not load summary for %s" msgstr "Zusammenfassung für %s konnte nicht geladen werden" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1056 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1055 #, c-format msgid "Checking for deleted messages %s" msgstr "Auf gelöschte Nachrichten überprüfen in %s" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1331 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1330 msgid "Trash Folder Full. Please Empty." msgstr "Bitte leeren Sie den Müll, er ist voll." -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1565 -#: ../camel/providers/groupwise/camel-groupwise-store.c:633 -#: ../camel/providers/groupwise/camel-groupwise-store.c:763 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1559 +#: ../camel/providers/groupwise/camel-groupwise-store.c:626 +#: ../camel/providers/groupwise/camel-groupwise-store.c:756 #: ../camel/providers/imap/camel-imap-folder.c:3429 #: ../camel/providers/imap/camel-imap-folder.c:3505 -#: ../camel/providers/imapx/camel-imapx-server.c:2728 -#: ../camel/providers/imapx/camel-imapx-server.c:2813 +#: ../camel/providers/imapx/camel-imapx-server.c:3624 +#: ../camel/providers/imapx/camel-imapx-server.c:3742 #, c-format msgid "Fetching summary information for new messages in %s" msgstr "" "Zusammenfassende Informationen für neue Nachrichten in %s werden abgerufen" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2361 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2404 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2355 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2398 #, c-format msgid "Cannot append message to folder '%s': %s" msgstr "Nachricht konnte nicht an Ordner »%s« angehängt werden: %s" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2392 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2386 #, c-format msgid "Cannot create message: %s" msgstr "Nachricht konnte nicht angelegt werden: %s" @@ -2695,14 +2700,14 @@ msgstr "Nach neuen E-Mails sehen" #: ../camel/providers/hula/camel-hula-provider.c:50 #: ../camel/providers/imap/camel-imap-provider.c:46 #: ../camel/providers/imap4/camel-imap4-provider.c:40 -#: ../camel/providers/imapx/camel-imapx-provider.c:48 +#: ../camel/providers/imapx/camel-imapx-provider.c:52 msgid "C_heck for new messages in all folders" msgstr "In allen Ordnern nach neuen E-Mails se_hen" #: ../camel/providers/groupwise/camel-groupwise-provider.c:59 #: ../camel/providers/imap/camel-imap-provider.c:68 #: ../camel/providers/imap4/camel-imap4-provider.c:51 -#: ../camel/providers/imapx/camel-imapx-provider.c:72 +#: ../camel/providers/imapx/camel-imapx-provider.c:80 #: ../camel/providers/local/camel-local-provider.c:46 #: ../camel/providers/local/camel-local-provider.c:86 #: ../camel/providers/local/camel-local-provider.c:106 @@ -2719,7 +2724,7 @@ msgstr "Neue Nachrichten auf _unerwünschten Inhalt prüfen" #: ../camel/providers/groupwise/camel-groupwise-provider.c:65 #: ../camel/providers/imap/camel-imap-provider.c:74 -#: ../camel/providers/imapx/camel-imapx-provider.c:78 +#: ../camel/providers/imapx/camel-imapx-provider.c:86 msgid "Only check for Junk messages in the IN_BOX folder" msgstr "A_usschließlich den Eingangsordner auf unerwünschte Nachrichten prüfen" @@ -2748,7 +2753,7 @@ msgstr "Für den Zugriff auf Novell GroupWise-Server" #: ../camel/providers/hula/camel-hula-provider.c:93 #: ../camel/providers/imap/camel-imap-provider.c:100 #: ../camel/providers/imap4/camel-imap4-provider.c:83 -#: ../camel/providers/imapx/camel-imapx-provider.c:104 +#: ../camel/providers/imapx/camel-imapx-provider.c:112 #: ../camel/providers/nntp/camel-nntp-provider.c:74 #: ../camel/providers/pop3/camel-pop3-provider.c:74 msgid "Password" @@ -2765,48 +2770,50 @@ msgstr "" msgid "Host or user not available in url" msgstr "Rechner oder Benutzer in der URL nicht verfügbar" -#: ../camel/providers/groupwise/camel-groupwise-store.c:204 +#: ../camel/providers/groupwise/camel-groupwise-store.c:197 #: ../camel/providers/imap/camel-imap-store.c:1356 +#: ../camel/providers/imapx/camel-imapx-server.c:2895 msgid "You did not enter a password." msgstr "Sie haben kein Passwort eingegeben." -#: ../camel/providers/groupwise/camel-groupwise-store.c:319 +#: ../camel/providers/groupwise/camel-groupwise-store.c:312 msgid "Some features may not work correctly with your current server version" msgstr "" "Einige Funktionen werden mit Ihrer momentanen Server-Version möglicherweise " "nicht einwandfrei arbeiten." -#: ../camel/providers/groupwise/camel-groupwise-store.c:540 +#: ../camel/providers/groupwise/camel-groupwise-store.c:533 #: ../camel/providers/imap/camel-imap-store.c:1879 #: ../camel/providers/imap/camel-imap-store.c:2077 -#: ../camel/providers/imapx/camel-imapx-store.c:297 +#: ../camel/providers/imapx/camel-imapx-store.c:376 #, c-format msgid "No such folder %s" msgstr "Ordner »%s« nicht vorhanden" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1266 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1201 msgid "Cannot create GroupWise folders in offline mode." msgstr "GroupWise-Ordner können im Offline-Modus nicht angelegt werden." -#: ../camel/providers/groupwise/camel-groupwise-store.c:1280 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1215 #: ../camel/providers/imap/camel-imap-store.c:1954 -#: ../camel/providers/imap/camel-imap-store.c:2334 +#: ../camel/providers/imap/camel-imap-store.c:2355 +#: ../camel/providers/imapx/camel-imapx-store.c:820 msgid "The parent folder is not allowed to contain subfolders" msgstr "Der Elternordner darf keine Unterordner enthalten" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1359 -#: ../camel/providers/groupwise/camel-groupwise-store.c:1382 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1294 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1317 #, c-format msgid "Cannot rename GroupWise folder '%s' to '%s'" msgstr "GroupWise-Ordner »%s« konnte nicht in »%s« umbenannt werden" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1414 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1349 #: ../camel/providers/groupwise/camel-groupwise-transport.c:120 #, c-format msgid "GroupWise server %s" msgstr "GroupWise-Server %s" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1416 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1351 #, c-format msgid "GroupWise service for %s on %s" msgstr "GroupWise-Dienst für %s auf %s" @@ -2823,8 +2830,8 @@ msgstr "Nachricht wird verschickt" #: ../camel/providers/groupwise/camel-groupwise-transport.c:212 msgid "" "You have exceeded this account's storage limit. Your messages are queued in " -"your Outbox. Resend by pressing Send/Receive after deleting/archiving some of " -"your mail.\n" +"your Outbox. Resend by pressing Send/Receive after deleting/archiving some " +"of your mail.\n" msgstr "" "Sie haben das Speicherplatzlimit für dieses Konto überschritten. Ihre " "Nachrichten sind im Ausgang abgelegt. Senden Sie diese erneut durch drücken " @@ -2845,26 +2852,26 @@ msgstr "Nach neuen E-Mails sehen" #: ../camel/providers/hula/camel-hula-provider.c:53 #: ../camel/providers/imap/camel-imap-provider.c:52 -#: ../camel/providers/imapx/camel-imapx-provider.c:54 +#: ../camel/providers/imapx/camel-imapx-provider.c:58 msgid "Connection to Server" msgstr "Server-Verbindung" #: ../camel/providers/hula/camel-hula-provider.c:55 #: ../camel/providers/imap/camel-imap-provider.c:54 -#: ../camel/providers/imapx/camel-imapx-provider.c:56 +#: ../camel/providers/imapx/camel-imapx-provider.c:60 msgid "_Use custom command to connect to server" msgstr "_Benutzerdefinierten Befehl für die Server-Verbindung verwenden" #: ../camel/providers/hula/camel-hula-provider.c:57 #: ../camel/providers/imap/camel-imap-provider.c:56 -#: ../camel/providers/imapx/camel-imapx-provider.c:58 +#: ../camel/providers/imapx/camel-imapx-provider.c:62 msgid "Command:" msgstr "Befehl:" #: ../camel/providers/hula/camel-hula-provider.c:60 #: ../camel/providers/imap/camel-imap-provider.c:60 #: ../camel/providers/imap4/camel-imap4-provider.c:43 -#: ../camel/providers/imapx/camel-imapx-provider.c:64 +#: ../camel/providers/imapx/camel-imapx-provider.c:70 #: ../camel/providers/nntp/camel-nntp-provider.c:44 msgid "Folders" msgstr "Ordner" @@ -2872,14 +2879,14 @@ msgstr "Ordner" #: ../camel/providers/hula/camel-hula-provider.c:62 #: ../camel/providers/imap/camel-imap-provider.c:62 #: ../camel/providers/imap4/camel-imap4-provider.c:45 -#: ../camel/providers/imapx/camel-imapx-provider.c:66 +#: ../camel/providers/imapx/camel-imapx-provider.c:72 msgid "_Show only subscribed folders" msgstr "Nur abonnierte Ordner an_zeigen" #: ../camel/providers/hula/camel-hula-provider.c:64 #: ../camel/providers/imap/camel-imap-provider.c:64 #: ../camel/providers/imap4/camel-imap4-provider.c:47 -#: ../camel/providers/imapx/camel-imapx-provider.c:68 +#: ../camel/providers/imapx/camel-imapx-provider.c:75 msgid "O_verride server-supplied folder namespace" msgstr "Über vom Server vorgegebenen Ordner-Namensraum hin_wegsetzen" @@ -2914,12 +2921,12 @@ msgstr "Kein Eingangsdatenstrom" #: ../camel/providers/imap/camel-imap-command.c:229 #: ../camel/providers/imap/camel-imap-command.c:278 #: ../camel/providers/imap/camel-imap-command.c:492 -#: ../camel/providers/imap/camel-imap-store.c:3105 +#: ../camel/providers/imap/camel-imap-store.c:3126 msgid "Operation cancelled" msgstr "Vorgang abgebrochen" #: ../camel/providers/imap/camel-imap-command.c:331 -#: ../camel/providers/imap/camel-imap-store.c:3110 +#: ../camel/providers/imap/camel-imap-store.c:3131 #, c-format msgid "Server unexpectedly disconnected: %s" msgstr "Server-Verbindung unerwartet getrennt: %s" @@ -2970,7 +2977,7 @@ msgstr "Ordner %s konnte nicht angelegt werden: %s" #. Check UIDs and flags of all messages we already know of. #: ../camel/providers/imap/camel-imap-folder.c:918 -#: ../camel/providers/imapx/camel-imapx-server.c:2758 +#: ../camel/providers/imapx/camel-imapx-server.c:3660 #, c-format msgid "Scanning for changed messages in %s" msgstr "Geänderte Nachrichten werden in %s gesucht" @@ -2994,11 +3001,13 @@ msgid "Unable to retrieve message: %s" msgstr "Nachricht konnte nicht abgerufen werden: %s" #: ../camel/providers/imap/camel-imap-folder.c:2912 +#: ../camel/providers/imapx/camel-imapx-server.c:4775 #, c-format msgid "Cannot get message with message ID %s: %s" msgstr "Nachricht mit Kennung %s konnte nicht abgerufen werden: %s" #: ../camel/providers/imap/camel-imap-folder.c:2913 +#: ../camel/providers/imapx/camel-imapx-server.c:4776 msgid "No such message available." msgstr "Nachricht nicht verfügbar." @@ -3043,30 +3052,30 @@ msgid "Failed to cache %s: %s" msgstr "%s konnte nicht in den Zwischenspeicher geladen werden: %s" #: ../camel/providers/imap/camel-imap-provider.c:48 -#: ../camel/providers/imapx/camel-imapx-provider.c:50 +#: ../camel/providers/imapx/camel-imapx-provider.c:54 msgid "Ch_eck for new messages in subscribed folders" msgstr "In abonnierten Ordnern nach neuen E-Mails se_hen" #: ../camel/providers/imap/camel-imap-provider.c:66 #: ../camel/providers/imap4/camel-imap4-provider.c:49 -#: ../camel/providers/imapx/camel-imapx-provider.c:70 +#: ../camel/providers/imapx/camel-imapx-provider.c:77 msgid "Namespace:" msgstr "Namensraum:" #: ../camel/providers/imap/camel-imap-provider.c:70 #: ../camel/providers/imap4/camel-imap4-provider.c:53 -#: ../camel/providers/imapx/camel-imapx-provider.c:74 +#: ../camel/providers/imapx/camel-imapx-provider.c:82 msgid "_Apply filters to new messages in INBOX on this server" msgstr "Filter auf neue Nachrichten in INBOX dieses Servers _anwenden" #: ../camel/providers/imap/camel-imap-provider.c:72 -#: ../camel/providers/imapx/camel-imapx-provider.c:76 +#: ../camel/providers/imapx/camel-imapx-provider.c:84 msgid "Check new messages for Jun_k contents" msgstr "Neue Nachrichten auf _unerwünschten Inhalt prüfen" #: ../camel/providers/imap/camel-imap-provider.c:76 #: ../camel/providers/imap4/camel-imap4-provider.c:59 -#: ../camel/providers/imapx/camel-imapx-provider.c:80 +#: ../camel/providers/imapx/camel-imapx-provider.c:88 msgid "Automatically synchroni_ze remote mail locally" msgstr "Entfernte E-Mails automatisch lokal a_bgleichen" @@ -3075,12 +3084,12 @@ msgid "IMAP" msgstr "IMAP" #: ../camel/providers/imap/camel-imap-provider.c:85 -#: ../camel/providers/imapx/camel-imapx-provider.c:90 +#: ../camel/providers/imapx/camel-imapx-provider.c:98 msgid "For reading and storing mail on IMAP servers." msgstr "Zum Lesen und Speichern von E-Mails auf IMAP-Servern." #: ../camel/providers/imap/camel-imap-provider.c:102 -#: ../camel/providers/imapx/camel-imapx-provider.c:106 +#: ../camel/providers/imapx/camel-imapx-provider.c:114 msgid "This option will connect to the IMAP server using a plaintext password." msgstr "" "Dies stellt unter Verwendung eines unverschlüsselten Passworts eine " @@ -3088,14 +3097,14 @@ msgstr "" #: ../camel/providers/imap/camel-imap-store.c:435 #: ../camel/providers/imap4/camel-imap4-store.c:210 -#: ../camel/providers/imapx/camel-imapx-store.c:167 +#: ../camel/providers/imapx/camel-imapx-store.c:204 #, c-format msgid "IMAP server %s" msgstr "IMAP-Server %s" #: ../camel/providers/imap/camel-imap-store.c:437 #: ../camel/providers/imap4/camel-imap4-store.c:212 -#: ../camel/providers/imapx/camel-imapx-store.c:169 +#: ../camel/providers/imapx/camel-imapx-store.c:206 #, c-format msgid "IMAP service for %s on %s" msgstr "IMAP-Dienst für %s auf %s" @@ -3124,7 +3133,8 @@ msgstr "SSL nicht verfügbar" #: ../camel/providers/imap/camel-imap-store.c:578 #: ../camel/providers/imap/camel-imap-store.c:860 -#: ../camel/providers/imapx/camel-imapx-server.c:2017 +#: ../camel/providers/imapx/camel-imapx-server.c:2589 +#: ../camel/providers/imapx/camel-imapx-server.c:2687 msgid "Connection cancelled" msgstr "Verbindung abgebrochen" @@ -3135,20 +3145,20 @@ msgstr "Verbindung abgebrochen" #: ../camel/providers/imap4/camel-imap4-store.c:310 #: ../camel/providers/imap4/camel-imap4-store.c:325 #: ../camel/providers/imap4/camel-imap4-store.c:334 -#: ../camel/providers/imapx/camel-imapx-server.c:2057 -#: ../camel/providers/imapx/camel-imapx-server.c:2071 +#: ../camel/providers/imapx/camel-imapx-server.c:2758 +#: ../camel/providers/imapx/camel-imapx-server.c:2789 #, c-format msgid "Failed to connect to IMAP server %s in secure mode: %s" msgstr "Verbindung mit IMAP-Server %s im sicheren Modus ist gescheitert: %s" #: ../camel/providers/imap/camel-imap-store.c:690 -#: ../camel/providers/imapx/camel-imapx-server.c:2058 +#: ../camel/providers/imapx/camel-imapx-server.c:2759 #: ../camel/providers/smtp/camel-smtp-transport.c:332 msgid "STARTTLS not supported" msgstr "STARTTLS nicht unterstützt" #: ../camel/providers/imap/camel-imap-store.c:709 -#: ../camel/providers/imapx/camel-imapx-server.c:2072 +#: ../camel/providers/imapx/camel-imapx-server.c:2790 msgid "SSL negotiations failed" msgstr "SSL-»Verhandlungen« gescheitert" @@ -3159,17 +3169,18 @@ msgid "SSL is not available in this build" msgstr "SSL ist in diesem Build nicht verfügbar" #: ../camel/providers/imap/camel-imap-store.c:863 +#: ../camel/providers/imapx/camel-imapx-server.c:2592 #, c-format msgid "Could not connect with command \"%s\": %s" msgstr "Verbindung mit Befehl »%s« konnte nicht hergestellt werden: %s" #. create a dummy "." parent inbox, use to scan, then put back at the top level #: ../camel/providers/imap/camel-imap-store.c:1051 -#: ../camel/providers/imap/camel-imap-store.c:2430 +#: ../camel/providers/imap/camel-imap-store.c:2451 #: ../camel/providers/imap4/camel-imap4-store-summary.c:356 #: ../camel/providers/imap4/camel-imap4-store.c:1403 -#: ../camel/providers/imapx/camel-imapx-store.c:349 -#: ../camel/providers/imapx/camel-imapx-store.c:578 +#: ../camel/providers/imapx/camel-imapx-store.c:428 +#: ../camel/providers/imapx/camel-imapx-store.c:1001 #: ../camel/providers/local/camel-maildir-folder.c:81 #: ../camel/providers/local/camel-maildir-store.c:219 #: ../camel/providers/local/camel-maildir-store.c:291 @@ -3180,17 +3191,20 @@ msgid "Inbox" msgstr "Eingang" #: ../camel/providers/imap/camel-imap-store.c:1303 +#: ../camel/providers/imapx/camel-imapx-server.c:2854 #, c-format msgid "IMAP server %s does not support requested authentication type %s" msgstr "IMAP-Server %s unterstützt den verlangten Legitimationstyp %s nicht." #: ../camel/providers/imap/camel-imap-store.c:1313 +#: ../camel/providers/imapx/camel-imapx-server.c:2865 #: ../camel/providers/smtp/camel-smtp-transport.c:506 #, c-format msgid "No support for authentication type %s" msgstr "Keine Unterstützung für Legitimationstyp %s" #: ../camel/providers/imap/camel-imap-store.c:1387 +#: ../camel/providers/imapx/camel-imapx-server.c:2934 #, c-format msgid "" "Unable to authenticate to IMAP server.\n" @@ -3202,8 +3216,9 @@ msgstr "" "\n" #: ../camel/providers/imap/camel-imap-store.c:1891 -#: ../camel/providers/imap/camel-imap-store.c:2272 +#: ../camel/providers/imap/camel-imap-store.c:2293 #: ../camel/providers/imap4/camel-imap4-store.c:954 +#: ../camel/providers/imapx/camel-imapx-store.c:803 #, c-format msgid "" "The folder name \"%s\" is invalid because it contains the character \"%c\"" @@ -3217,12 +3232,13 @@ msgstr "Der Ordnername »%s« ist ungültig, da er das Zeichen »%c« enthält" msgid "Cannot create folder '%s': folder exists." msgstr "Ordner »%s« konnte nicht angelegt werden: Ordner existiert." -#: ../camel/providers/imap/camel-imap-store.c:2283 +#: ../camel/providers/imap/camel-imap-store.c:2304 +#: ../camel/providers/imapx/camel-imapx-store.c:812 #, c-format msgid "Unknown parent folder: %s" msgstr "Unbekannter Elternerdner: %s" -#: ../camel/providers/imap/camel-imap-store.c:3107 +#: ../camel/providers/imap/camel-imap-store.c:3128 msgid "Server unexpectedly disconnected" msgstr "Server-Verbindung wurde unerwartet getrennt" @@ -3285,7 +3301,8 @@ msgstr "" #: ../camel/providers/imap4/camel-imap4-folder.c:89 msgid "Expire cached messages older than X seconds" -msgstr "Zwischengespeicherte Nachrichten löschen, die älter als X Sekunden sind" +msgstr "" +"Zwischengespeicherte Nachrichten löschen, die älter als X Sekunden sind" #: ../camel/providers/imap4/camel-imap4-folder.c:427 #, c-format @@ -3325,7 +3342,8 @@ msgstr "" #, c-format msgid "Cannot get message %s from folder '%s': Bad command" msgstr "" -"Nachricht %s konnte nicht aus Ordner »%s« abgerufen werden: Fehlerhafter Befehl" +"Nachricht %s konnte nicht aus Ordner »%s« abgerufen werden: Fehlerhafter " +"Befehl" #: ../camel/providers/imap4/camel-imap4-folder.c:940 #, c-format @@ -3415,7 +3433,7 @@ msgstr "" "unterstützt STARTTLS nicht" #: ../camel/providers/imap4/camel-imap4-store.c:326 -#: ../camel/providers/pop3/camel-pop3-store.c:275 +#: ../camel/providers/pop3/camel-pop3-store.c:276 msgid "TLS negotiations failed" msgstr "TLS-»Verhandlungen« gescheitert" @@ -3448,8 +3466,8 @@ msgstr "" #, c-format msgid "Cannot get LIST information for '%s' on IMAP server %s: %s" msgstr "" -"LIST-Informationen für »%s« auf IMAP-Server %s konnten nicht abgerufen werden: " -"%s" +"LIST-Informationen für »%s« auf IMAP-Server %s konnten nicht abgerufen " +"werden: %s" #: ../camel/providers/imap4/camel-imap4-store.c:818 #: ../camel/providers/imap4/camel-imap4-store.c:1574 @@ -3571,38 +3589,37 @@ msgstr "Keine Daten" msgid "IMAP server %s unexpectedly disconnected: %s" msgstr "Verbindung mit IMAP-Server %s unerwartet getrennt: %s" -#: ../camel/providers/imapx/camel-imapx-folder.c:84 +#: ../camel/providers/imapx/camel-imapx-folder.c:87 #, c-format msgid "Could not create folder summary for %s" msgstr "Zusammenfassung für %s konnte nicht erstellt werden" -#: ../camel/providers/imapx/camel-imapx-folder.c:92 +#: ../camel/providers/imapx/camel-imapx-folder.c:95 #, c-format msgid "Could not create cache for %s" msgstr "Zwischenspeicher konnte nicht für »%s« angelegt werden" -#: ../camel/providers/imapx/camel-imapx-provider.c:46 +#: ../camel/providers/imapx/camel-imapx-provider.c:47 +msgid "Use _Quick Resync if the server supports it" +msgstr "»_Schnelles Abgleichen« verwenden, falls es der Server unterstützt" + +#: ../camel/providers/imapx/camel-imapx-provider.c:50 msgid "Use I_dle if the server supports it" msgstr "»Untätig« verwen_den, falls der Server es unterstützt" -#: ../camel/providers/imapx/camel-imapx-provider.c:60 +#: ../camel/providers/imapx/camel-imapx-provider.c:65 msgid "Numbe_r of cached connections to use" msgstr "Anzahl de_r zu verwendenden zwischengespeicherten Verbindungen" -#: ../camel/providers/imapx/camel-imapx-provider.c:88 +#: ../camel/providers/imapx/camel-imapx-provider.c:96 msgid "IMAP+" msgstr "IMAP+" -#: ../camel/providers/imapx/camel-imapx-server.c:2020 +#: ../camel/providers/imapx/camel-imapx-server.c:2690 #, c-format msgid "Could not connect to %s (port %s): %s" msgstr "Verbindung mit %s (Port %s) gescheitert: %s" -#: ../camel/providers/imapx/camel-imapx-server.c:2100 -#, c-format -msgid "%sPlease enter the IMAP password for %s@%s" -msgstr "%s Bitte geben Sie das IMAP-Passwort für %s@%s ein" - #: ../camel/providers/local/camel-local-folder.c:178 msgid "Index message body data" msgstr "Rumpfdaten der Nachricht indizieren" @@ -3740,7 +3757,8 @@ msgstr "Ordner-Metadatei »%s« konnte nicht gelöscht werden: %s" #: ../camel/providers/local/camel-local-summary.c:515 msgid "Unable to add message to summary: unknown reason" msgstr "" -"Nachricht konnte nicht zur Zusammenfassung hinzugefügt werden: Grund unbekannt" +"Nachricht konnte nicht zur Zusammenfassung hinzugefügt werden: Grund " +"unbekannt" #: ../camel/providers/local/camel-maildir-folder.c:230 msgid "Maildir append message canceled" @@ -3840,9 +3858,9 @@ msgid "Checking for new messages" msgstr "Nach neuen Nachrichten sehen" #: ../camel/providers/local/camel-maildir-summary.c:724 -#: ../camel/providers/local/camel-mbox-summary.c:526 -#: ../camel/providers/local/camel-mbox-summary.c:722 -#: ../camel/providers/local/camel-mbox-summary.c:842 +#: ../camel/providers/local/camel-mbox-summary.c:529 +#: ../camel/providers/local/camel-mbox-summary.c:725 +#: ../camel/providers/local/camel-mbox-summary.c:845 #: ../camel/providers/local/camel-spool-summary.c:150 msgid "Storing folder" msgstr "Ordner wird gespeichert" @@ -3941,80 +3959,80 @@ msgstr "»%s« konnte nicht umbenannt werden: »%s«: %s" msgid "Could not rename '%s' to %s: %s" msgstr "%s konnte nicht in %s umbenannt werden: %s" -#: ../camel/providers/local/camel-mbox-summary.c:532 +#: ../camel/providers/local/camel-mbox-summary.c:535 #, c-format msgid "Could not open folder: %s: %s" msgstr "Ordner konnte nicht geöffnet werden: %s: %s" -#: ../camel/providers/local/camel-mbox-summary.c:582 +#: ../camel/providers/local/camel-mbox-summary.c:585 #, c-format msgid "Fatal mail parser error near position %ld in folder %s" msgstr "" "Schwerwiegender Fehler beim Analysieren der E-Mail-Syntax nahe Position %ld " "in Ordner %s" -#: ../camel/providers/local/camel-mbox-summary.c:659 +#: ../camel/providers/local/camel-mbox-summary.c:662 #, c-format msgid "Cannot check folder: %s: %s" msgstr "Ordner konnte nicht geprüft werden: %s: %s" -#: ../camel/providers/local/camel-mbox-summary.c:727 -#: ../camel/providers/local/camel-mbox-summary.c:847 +#: ../camel/providers/local/camel-mbox-summary.c:730 +#: ../camel/providers/local/camel-mbox-summary.c:850 #: ../camel/providers/local/camel-spool-summary.c:155 #, c-format msgid "Could not open file: %s: %s" msgstr "Datei konnte nicht geöffnet werden: %s: %s" -#: ../camel/providers/local/camel-mbox-summary.c:739 +#: ../camel/providers/local/camel-mbox-summary.c:742 #: ../camel/providers/local/camel-spool-summary.c:168 #, c-format msgid "Cannot open temporary mailbox: %s" msgstr "Temporäres Postfach konnte nicht angelegt werden: %s" -#: ../camel/providers/local/camel-mbox-summary.c:752 -#: ../camel/providers/local/camel-mbox-summary.c:957 +#: ../camel/providers/local/camel-mbox-summary.c:755 +#: ../camel/providers/local/camel-mbox-summary.c:961 #, c-format msgid "Could not close source folder %s: %s" msgstr "Quellordner %s konnte nicht geschlossen werden: %s" -#: ../camel/providers/local/camel-mbox-summary.c:761 +#: ../camel/providers/local/camel-mbox-summary.c:764 #, c-format msgid "Could not close temporary folder: %s" msgstr "Temporärer Ordner konnte nicht geschlossen werden: %s" -#: ../camel/providers/local/camel-mbox-summary.c:776 +#: ../camel/providers/local/camel-mbox-summary.c:779 #, c-format msgid "Could not rename folder: %s" msgstr "Ordner konnte nicht umbenannt werden: %s" -#: ../camel/providers/local/camel-mbox-summary.c:858 -#: ../camel/providers/local/camel-mbox-summary.c:1084 +#: ../camel/providers/local/camel-mbox-summary.c:861 +#: ../camel/providers/local/camel-mbox-summary.c:1090 #, c-format msgid "Could not store folder: %s" msgstr "Ordner konnte nicht gespeichert werden: %s" -#: ../camel/providers/local/camel-mbox-summary.c:897 -#: ../camel/providers/local/camel-mbox-summary.c:905 -#: ../camel/providers/local/camel-mbox-summary.c:1114 -#: ../camel/providers/local/camel-mbox-summary.c:1122 +#: ../camel/providers/local/camel-mbox-summary.c:901 +#: ../camel/providers/local/camel-mbox-summary.c:909 +#: ../camel/providers/local/camel-mbox-summary.c:1121 +#: ../camel/providers/local/camel-mbox-summary.c:1129 msgid "Summary and folder mismatch, even after a sync" msgstr "" "Zusammenfassung und Ordner stimmen nicht überein, sogar nach einem " "Datenabgleich" -#: ../camel/providers/local/camel-mbox-summary.c:1047 +#: ../camel/providers/local/camel-mbox-summary.c:1053 #: ../camel/providers/local/camel-spool-summary.c:334 #, c-format msgid "Unknown error: %s" msgstr "Unbekannter Fehler: %s" -#: ../camel/providers/local/camel-mbox-summary.c:1190 -#: ../camel/providers/local/camel-mbox-summary.c:1216 +#: ../camel/providers/local/camel-mbox-summary.c:1197 +#: ../camel/providers/local/camel-mbox-summary.c:1223 #, c-format msgid "Writing to temporary mailbox failed: %s" msgstr "Fehler beim Schreiben in temporäres Postfach: %s" -#: ../camel/providers/local/camel-mbox-summary.c:1207 +#: ../camel/providers/local/camel-mbox-summary.c:1214 #, c-format msgid "Writing to temporary mailbox failed: %s: %s" msgstr "Fehler beim Schreiben in temporäres Postfach %s: %s" @@ -4175,7 +4193,8 @@ msgstr "" #: ../camel/providers/nntp/camel-nntp-provider.c:76 msgid "" -"This option will authenticate with the NNTP server using a plaintext password." +"This option will authenticate with the NNTP server using a plaintext " +"password." msgstr "" "Dies führt die Legitimation am NNTP-Server mit einem unverschlüsselten " "Passwort durch." @@ -4225,7 +4244,8 @@ msgstr "Sie können diese Newsgroup nicht abonnieren, da sie nicht existiert." #: ../camel/providers/nntp/camel-nntp-store.c:970 msgid "You cannot create a folder in a News store: subscribe instead." msgstr "" -"Sie können in Newsgroups keine Ordner anlegen: Abonnieren Sie sie stattdessen." +"Sie können in Newsgroups keine Ordner anlegen: Abonnieren Sie sie " +"stattdessen." #: ../camel/providers/nntp/camel-nntp-store.c:978 msgid "You cannot rename a folder in a News store." @@ -4262,26 +4282,26 @@ msgid "No such folder: %s" msgstr "Ordner existiert nicht: %s" #: ../camel/providers/nntp/camel-nntp-summary.c:272 -#: ../camel/providers/nntp/camel-nntp-summary.c:370 +#: ../camel/providers/nntp/camel-nntp-summary.c:373 #, c-format msgid "%s: Scanning new messages" msgstr "%s: neue Nachrichten werden eingelesen" -#: ../camel/providers/nntp/camel-nntp-summary.c:279 +#: ../camel/providers/nntp/camel-nntp-summary.c:282 #, c-format msgid "Unexpected server response from xover: %s" msgstr "Unerwartete Server-Antwort von xover: %s" -#: ../camel/providers/nntp/camel-nntp-summary.c:384 +#: ../camel/providers/nntp/camel-nntp-summary.c:387 #, c-format msgid "Unexpected server response from head: %s" msgstr "Unerwartete Server-Antwort von head: %s" -#: ../camel/providers/nntp/camel-nntp-summary.c:420 +#: ../camel/providers/nntp/camel-nntp-summary.c:423 msgid "Use cancel" msgstr "Abbrechen verwenden" -#: ../camel/providers/nntp/camel-nntp-summary.c:422 +#: ../camel/providers/nntp/camel-nntp-summary.c:425 #, c-format msgid "Operation failed: %s" msgstr "Vorgang gescheitert: %s" @@ -4303,20 +4323,20 @@ msgstr "Alte Nachrichten werden gelöscht" msgid "Expunging deleted messages" msgstr "Gelöschte Nachrichten werden ausgeräumt" -#: ../camel/providers/pop3/camel-pop3-folder.c:530 -#: ../camel/providers/pop3/camel-pop3-folder.c:552 +#: ../camel/providers/pop3/camel-pop3-folder.c:539 +#: ../camel/providers/pop3/camel-pop3-folder.c:561 #, c-format msgid "No message with UID %s" msgstr "Keine Nachricht mit der Kennung %s" #. Sigh, most of the crap in this function is so that the cancel button #. returns the proper exception code. Sigh. -#: ../camel/providers/pop3/camel-pop3-folder.c:559 +#: ../camel/providers/pop3/camel-pop3-folder.c:568 #, c-format msgid "Retrieving POP message %d" msgstr "POP-Nachricht %d wird abgerufen" -#: ../camel/providers/pop3/camel-pop3-folder.c:649 +#: ../camel/providers/pop3/camel-pop3-folder.c:658 msgid "Unknown reason" msgstr "Unbekannter Grund" @@ -4357,8 +4377,8 @@ msgstr "" #: ../camel/providers/pop3/camel-pop3-provider.c:86 msgid "" "This option will connect to the POP server using an encrypted password via " -"the APOP protocol. This may not work for all users even on servers that claim " -"to support it." +"the APOP protocol. This may not work for all users even on servers that " +"claim to support it." msgstr "" "Dies stellt unter Verwendung eines verschlüsselten Passworts eine Verbindung " "mit dem POP-Server über das APO-Protokoll her. Das funktioniert " @@ -4371,8 +4391,8 @@ msgid "Failed to read a valid greeting from POP server %s" msgstr "Es konnte keine gültige Begrüßung durch POP-Server %s gelesen werden" #: ../camel/providers/pop3/camel-pop3-store.c:246 -#: ../camel/providers/pop3/camel-pop3-store.c:274 -#: ../camel/providers/pop3/camel-pop3-store.c:280 +#: ../camel/providers/pop3/camel-pop3-store.c:275 +#: ../camel/providers/pop3/camel-pop3-store.c:281 #, c-format msgid "Failed to connect to POP server %s in secure mode: %s" msgstr "" @@ -4383,24 +4403,25 @@ msgstr "" msgid "STLS not supported by server" msgstr "STLS wird vom Server nicht unterstützt" -#: ../camel/providers/pop3/camel-pop3-store.c:262 +#. Translators: Last %s is an optional explanation beginning with ": " separator +#: ../camel/providers/pop3/camel-pop3-store.c:263 #, c-format msgid "Failed to connect to POP server %s in secure mode%s" msgstr "" "Verbindung mit POP-Server %s konnte im sicheren Modus nicht hergestellt " "werden %s" -#: ../camel/providers/pop3/camel-pop3-store.c:281 +#: ../camel/providers/pop3/camel-pop3-store.c:282 msgid "TLS is not available in this build" msgstr "TLS ist in diesem Build nicht verfügbar" -#: ../camel/providers/pop3/camel-pop3-store.c:387 +#: ../camel/providers/pop3/camel-pop3-store.c:388 #, c-format msgid "Could not connect to POP server %s" msgstr "Verbindung mit POP-Server %s konnte nicht hergestellt werden" -#: ../camel/providers/pop3/camel-pop3-store.c:428 -#: ../camel/providers/pop3/camel-pop3-store.c:565 +#: ../camel/providers/pop3/camel-pop3-store.c:429 +#: ../camel/providers/pop3/camel-pop3-store.c:567 #, c-format msgid "" "Unable to connect to POP server %s: No support for requested authentication " @@ -4409,22 +4430,23 @@ msgstr "" "Verbindung mit POP-Server %s konnte nicht hergestellt werden: Der " "erforderliche Legitimationsmechanismus wird nicht unterstützt." -#: ../camel/providers/pop3/camel-pop3-store.c:446 +#. Translators: Last %s is an optional explanation beginning with ": " separator +#: ../camel/providers/pop3/camel-pop3-store.c:448 #, c-format msgid "SASL '%s' Login failed for POP server %s%s" msgstr "SASL »%s«-Anmeldung an POP-Server %s gescheitert %s" -#: ../camel/providers/pop3/camel-pop3-store.c:460 +#: ../camel/providers/pop3/camel-pop3-store.c:462 #, c-format msgid "Cannot login to POP server %s: SASL Protocol error" msgstr "Anmeldung an POP-Server %s gescheitert: SASL-Protokollfehler" -#: ../camel/providers/pop3/camel-pop3-store.c:479 +#: ../camel/providers/pop3/camel-pop3-store.c:481 #, c-format msgid "Failed to authenticate on POP server %s: %s" msgstr "Legitimation am POP-Server %s gescheitert: %s" -#: ../camel/providers/pop3/camel-pop3-store.c:538 +#: ../camel/providers/pop3/camel-pop3-store.c:540 #, c-format msgid "" "Unable to connect to POP server %s:\tInvalid APOP ID received. Impersonation " @@ -4434,7 +4456,7 @@ msgstr "" "Kennung erhalten. Es könnte sich um einen sogenannten »Man in the Middle«-" "Angriff handeln. Bitte kontaktieren Sie Ihren System-Administrator." -#: ../camel/providers/pop3/camel-pop3-store.c:579 +#: ../camel/providers/pop3/camel-pop3-store.c:581 #, c-format msgid "" "Unable to connect to POP server %s.\n" @@ -4443,7 +4465,8 @@ msgstr "" "Verbindung mit POP-Server %s konnte nicht hergestellt werden.\n" "Fehler beim Übermitteln des Passworts: %s" -#: ../camel/providers/pop3/camel-pop3-store.c:588 +#. Translators: Last %s is an optional explanation beginning with ": " separator +#: ../camel/providers/pop3/camel-pop3-store.c:591 #, c-format msgid "" "Unable to connect to POP server %s.\n" @@ -4452,7 +4475,8 @@ msgstr "" "Verbindung mit POP-Server %s konnte nicht hergestellt werden.\n" "Fehler beim Übermitteln des Benutzernamens %s" -#: ../camel/providers/pop3/camel-pop3-store.c:597 +#. Translators: Last %s is an optional explanation beginning with ": " separator +#: ../camel/providers/pop3/camel-pop3-store.c:601 #, c-format msgid "" "Unable to connect to POP server %s.\n" @@ -4461,7 +4485,7 @@ msgstr "" "Verbindung mit POP-Server %s konnte nicht hergestellt werden.\n" "Fehler beim Übermitteln des Passworts %s" -#: ../camel/providers/pop3/camel-pop3-store.c:703 +#: ../camel/providers/pop3/camel-pop3-store.c:707 #, c-format msgid "No such folder '%s'." msgstr "Ordner »%s« existiert nicht." @@ -4676,7 +4700,8 @@ msgstr "Nachricht konnte nicht verschickt werden: Dienst nicht verbunden." #: ../camel/providers/smtp/camel-smtp-transport.c:726 msgid "Cannot send message: sender address not valid." -msgstr "Nachricht konnte nicht verschickt werden: Absenderadresse nicht gültig." +msgstr "" +"Nachricht konnte nicht verschickt werden: Absenderadresse nicht gültig." #: ../camel/providers/smtp/camel-smtp-transport.c:730 msgid "Sending message" @@ -4778,85 +4803,85 @@ msgstr "QUIT-Befehl gescheitert: %s" msgid "QUIT command failed" msgstr "QUIT-Befehl gescheitert" -#: ../libedataserver/e-categories.c:47 +#: ../libedataserver/e-categories.c:44 msgid "Business" msgstr "Geschäftlich" -#: ../libedataserver/e-categories.c:48 +#: ../libedataserver/e-categories.c:45 msgid "Competition" msgstr "Konkurrenz" -#: ../libedataserver/e-categories.c:49 +#: ../libedataserver/e-categories.c:46 msgid "Favorites" msgstr "Favoriten" -#: ../libedataserver/e-categories.c:50 +#: ../libedataserver/e-categories.c:47 msgid "Gifts" msgstr "Geschenke" -#: ../libedataserver/e-categories.c:51 +#: ../libedataserver/e-categories.c:48 msgid "Goals/Objectives" msgstr "Ziele/Zielsetzungen" -#: ../libedataserver/e-categories.c:52 +#: ../libedataserver/e-categories.c:49 msgid "Holiday" msgstr "Urlaub" -#: ../libedataserver/e-categories.c:53 +#: ../libedataserver/e-categories.c:50 msgid "Holiday Cards" msgstr "Urlaubskarten" #. important people (e.g. new business partners) -#: ../libedataserver/e-categories.c:55 +#: ../libedataserver/e-categories.c:52 msgid "Hot Contacts" msgstr "Heiße Kontakte" -#: ../libedataserver/e-categories.c:56 +#: ../libedataserver/e-categories.c:53 msgid "Ideas" msgstr "Ideen" -#: ../libedataserver/e-categories.c:57 +#: ../libedataserver/e-categories.c:54 msgid "International" msgstr "International" -#: ../libedataserver/e-categories.c:58 +#: ../libedataserver/e-categories.c:55 msgid "Key Customer" msgstr "Schlüssel-Kunde" -#: ../libedataserver/e-categories.c:59 +#: ../libedataserver/e-categories.c:56 msgid "Miscellaneous" msgstr "Allgemeines" -#: ../libedataserver/e-categories.c:60 +#: ../libedataserver/e-categories.c:57 msgid "Personal" msgstr "Persönlich" -#: ../libedataserver/e-categories.c:61 +#: ../libedataserver/e-categories.c:58 msgid "Phone Calls" msgstr "Anrufe" #. Translators: "Status" is a category name; it can mean anything user wants to -#: ../libedataserver/e-categories.c:63 +#: ../libedataserver/e-categories.c:60 msgid "Status" msgstr "Status" -#: ../libedataserver/e-categories.c:64 +#: ../libedataserver/e-categories.c:61 msgid "Strategies" msgstr "Strategien" -#: ../libedataserver/e-categories.c:65 +#: ../libedataserver/e-categories.c:62 msgid "Suppliers" msgstr "Lieferanten" -#: ../libedataserver/e-categories.c:66 +#: ../libedataserver/e-categories.c:63 msgid "Time & Expenses" msgstr "Zeit und Ausgaben" -#: ../libedataserver/e-categories.c:67 +#: ../libedataserver/e-categories.c:64 msgid "VIP" msgstr "VIP" -#: ../libedataserver/e-categories.c:68 +#: ../libedataserver/e-categories.c:65 msgid "Waiting" msgstr "Wartend" @@ -4864,7 +4889,7 @@ msgstr "Wartend" #. in 12-hour format. #. strftime format of a weekday, a date and a #. time, in 12-hour format. -#: ../libedataserver/e-time-utils.c:1633 ../libedataserver/e-time-utils.c:1898 +#: ../libedataserver/e-time-utils.c:1635 ../libedataserver/e-time-utils.c:1902 msgid "%a %m/%d/%Y %I:%M:%S %p" msgstr "%a, %d.%m.%Y %I:%M:%S %p" @@ -4872,7 +4897,7 @@ msgstr "%a, %d.%m.%Y %I:%M:%S %p" #. in 24-hour format. #. strftime format of a weekday, a date and a #. time, in 24-hour format. -#: ../libedataserver/e-time-utils.c:1638 ../libedataserver/e-time-utils.c:1889 +#: ../libedataserver/e-time-utils.c:1640 ../libedataserver/e-time-utils.c:1893 msgid "%a %m/%d/%Y %H:%M:%S" msgstr "%a, %d. %m %Y %k:%M:%S" @@ -4880,7 +4905,7 @@ msgstr "%a, %d. %m %Y %k:%M:%S" #. in 12-hour format, without seconds. #. strftime format of a weekday, a date and a #. time, in 12-hour format, without seconds. -#: ../libedataserver/e-time-utils.c:1643 ../libedataserver/e-time-utils.c:1894 +#: ../libedataserver/e-time-utils.c:1645 ../libedataserver/e-time-utils.c:1898 msgid "%a %m/%d/%Y %I:%M %p" msgstr "%a, %d.%m.%Y, %I:%M %p" @@ -4888,78 +4913,78 @@ msgstr "%a, %d.%m.%Y, %I:%M %p" #. in 24-hour format, without seconds. #. strftime format of a weekday, a date and a #. time, in 24-hour format, without seconds. -#: ../libedataserver/e-time-utils.c:1648 ../libedataserver/e-time-utils.c:1885 +#: ../libedataserver/e-time-utils.c:1650 ../libedataserver/e-time-utils.c:1889 msgid "%a %m/%d/%Y %H:%M" msgstr "%a, %d.%m.%Y, %k:%M" #. strptime format of a weekday, a date and a time, #. in 12-hour format, without minutes or seconds. -#: ../libedataserver/e-time-utils.c:1653 +#: ../libedataserver/e-time-utils.c:1655 msgid "%a %m/%d/%Y %I %p" msgstr "%a, %d.%m.%Y %I %p" #. strptime format of a weekday, a date and a time, #. in 24-hour format, without minutes or seconds. -#: ../libedataserver/e-time-utils.c:1658 +#: ../libedataserver/e-time-utils.c:1660 msgid "%a %m/%d/%Y %H" msgstr "%a, %d.%m.%Y %k" #. strptime format of a weekday and a date. #. strftime format of a weekday and a date. -#: ../libedataserver/e-time-utils.c:1661 ../libedataserver/e-time-utils.c:1761 -#: ../libedataserver/e-time-utils.c:1880 +#: ../libedataserver/e-time-utils.c:1663 ../libedataserver/e-time-utils.c:1765 +#: ../libedataserver/e-time-utils.c:1884 msgid "%a %m/%d/%Y" msgstr "%a, %d.%m.%Y" #. strptime format of a date and a time, in 12-hour format. -#: ../libedataserver/e-time-utils.c:1668 +#: ../libedataserver/e-time-utils.c:1670 msgid "%m/%d/%Y %I:%M:%S %p" msgstr "%d.%m.%Y %I:%M:%S %p" #. strptime format of a date and a time, in 24-hour format. -#: ../libedataserver/e-time-utils.c:1672 +#: ../libedataserver/e-time-utils.c:1674 msgid "%m/%d/%Y %H:%M:%S" msgstr "%d.%m.%Y %k:%M:%S" #. strptime format of a date and a time, in 12-hour format, #. without seconds. -#: ../libedataserver/e-time-utils.c:1677 +#: ../libedataserver/e-time-utils.c:1679 msgid "%m/%d/%Y %I:%M %p" msgstr "%d.%m.%Y / %I:%M %p" #. strptime format of a date and a time, in 24-hour format, #. without seconds. -#: ../libedataserver/e-time-utils.c:1682 +#: ../libedataserver/e-time-utils.c:1684 msgid "%m/%d/%Y %H:%M" msgstr "%d.%m.%Y %k:%M" #. strptime format of a date and a time, in 12-hour format, #. without minutes or seconds. -#: ../libedataserver/e-time-utils.c:1687 +#: ../libedataserver/e-time-utils.c:1689 msgid "%m/%d/%Y %I %p" msgstr "%d.%m.%Y %I %p" #. strptime format of a date and a time, in 24-hour format, #. without minutes or seconds. -#: ../libedataserver/e-time-utils.c:1692 +#: ../libedataserver/e-time-utils.c:1694 msgid "%m/%d/%Y %H" msgstr "%d.%m.%Y %k" #. strptime format of a weekday and a date. #. This is the preferred date format for the locale. -#: ../libedataserver/e-time-utils.c:1695 ../libedataserver/e-time-utils.c:1764 +#: ../libedataserver/e-time-utils.c:1697 ../libedataserver/e-time-utils.c:1768 msgid "%m/%d/%Y" msgstr "%d.%m.%Y" #. strptime format for a time of day, in 12-hour format. #. strftime format of a time in 12-hour format. -#: ../libedataserver/e-time-utils.c:1822 ../libedataserver/e-time-utils.c:1942 +#: ../libedataserver/e-time-utils.c:1826 ../libedataserver/e-time-utils.c:1946 msgid "%I:%M:%S %p" msgstr "%I:%M:%S %p" #. strptime format for a time of day, in 24-hour format. #. strftime format of a time in 24-hour format. -#: ../libedataserver/e-time-utils.c:1826 ../libedataserver/e-time-utils.c:1934 +#: ../libedataserver/e-time-utils.c:1830 ../libedataserver/e-time-utils.c:1938 msgid "%H:%M:%S" msgstr "%k:%M:%S" @@ -4967,24 +4992,24 @@ msgstr "%k:%M:%S" #. in 12-hour format. #. strftime format of a time in 12-hour format, #. without seconds. -#: ../libedataserver/e-time-utils.c:1831 ../libedataserver/e-time-utils.c:1939 +#: ../libedataserver/e-time-utils.c:1835 ../libedataserver/e-time-utils.c:1943 msgid "%I:%M %p" msgstr "%I:%M %p" #. strptime format for time of day, without seconds 24-hour format. #. strftime format of a time in 24-hour format, #. without seconds. -#: ../libedataserver/e-time-utils.c:1835 ../libedataserver/e-time-utils.c:1931 +#: ../libedataserver/e-time-utils.c:1839 ../libedataserver/e-time-utils.c:1935 msgid "%H:%M" msgstr "%k:%M" #. strptime format for time of day, without seconds 24-hour format, and no colon. -#: ../libedataserver/e-time-utils.c:1838 +#: ../libedataserver/e-time-utils.c:1842 msgid "%H%M" msgstr "%k%M" #. strptime format for hour and AM/PM, 12-hour format. -#: ../libedataserver/e-time-utils.c:1842 +#: ../libedataserver/e-time-utils.c:1846 msgid "%I %p" msgstr "%I %p" @@ -5007,7 +5032,8 @@ msgstr "_Kein Bild" #: ../libedataserverui/e-categories-dialog.c:372 #, c-format msgid "" -"There is already a category '%s' in the configuration. Please use another name" +"There is already a category '%s' in the configuration. Please use another " +"name" msgstr "" "Es gibt bereits eine Kategorie »%s« in dieser Konfiguration. Bitte einen " "anderen Namen verwenden." @@ -5061,19 +5087,19 @@ msgstr "Farbinformation" msgid "The color to render" msgstr "Die darzustellende Farbe" -#: ../libedataserverui/e-name-selector-dialog.c:292 +#: ../libedataserverui/e-name-selector-dialog.c:300 msgid "Select Contacts from Address Book" msgstr "Kontakte aus dem Adressbuch wählen" -#: ../libedataserverui/e-name-selector-dialog.c:587 +#: ../libedataserverui/e-name-selector-dialog.c:639 msgid "_Add" msgstr "_Hinzufügen" -#: ../libedataserverui/e-name-selector-dialog.c:612 +#: ../libedataserverui/e-name-selector-dialog.c:643 msgid "_Remove" msgstr "_Entfernen" -#: ../libedataserverui/e-name-selector-dialog.c:789 +#: ../libedataserverui/e-name-selector-dialog.c:828 #: ../libedataserverui/e-name-selector-dialog.ui.h:6 msgid "Any Category" msgstr "Jede Kategorie" @@ -5115,58 +5141,58 @@ msgid "_Search:" msgstr "_Suchen:" #. To Translators: This would be similiar to "Expand MyList Inline" where MyList is a Contact List -#: ../libedataserverui/e-name-selector-entry.c:2508 +#: ../libedataserverui/e-name-selector-entry.c:2511 #, c-format msgid "E_xpand %s Inline" msgstr "%s aus_klappen" #. Copy Contact Item -#: ../libedataserverui/e-name-selector-entry.c:2523 +#: ../libedataserverui/e-name-selector-entry.c:2526 #, c-format msgid "Cop_y %s" msgstr "%s _kopieren" #. Cut Contact Item -#: ../libedataserverui/e-name-selector-entry.c:2533 +#: ../libedataserverui/e-name-selector-entry.c:2536 #, c-format msgid "C_ut %s" msgstr "%s ausschnei_den" #. Edit Contact item -#: ../libedataserverui/e-name-selector-entry.c:2550 +#: ../libedataserverui/e-name-selector-entry.c:2553 #, c-format msgid "_Edit %s" msgstr "%s _bearbeiten" -#: ../libedataserverui/e-name-selector-list.c:469 +#: ../libedataserverui/e-name-selector-list.c:479 #, c-format msgid "_Delete %s" msgstr "%s _löschen" -#: ../libedataserverui/e-passwords.c:234 +#: ../libedataserverui/e-passwords.c:240 #, c-format msgid "Keyring key is unusable: no user or host name" msgstr "" "Schlüssel des Schlüsselbundes kann nicht genutzt werden: Kein Benutzer- oder " "Servername" -#: ../libedataserverui/e-passwords.c:1093 +#: ../libedataserverui/e-passwords.c:1099 msgid "You have the Caps Lock key on." msgstr "Die Umschalttaste ist aktiviert." -#: ../libedataserverui/e-passwords.c:1215 +#: ../libedataserverui/e-passwords.c:1221 msgid "_Remember this passphrase" msgstr "An dieses Passwort _erinnern" -#: ../libedataserverui/e-passwords.c:1216 +#: ../libedataserverui/e-passwords.c:1222 msgid "_Remember this passphrase for the remainder of this session" msgstr "Für den Rest dieser Sitzung an dieses Passwort _erinnern" -#: ../libedataserverui/e-passwords.c:1221 +#: ../libedataserverui/e-passwords.c:1227 msgid "_Remember this password" msgstr "An dieses Passwort _erinnern" -#: ../libedataserverui/e-passwords.c:1222 +#: ../libedataserverui/e-passwords.c:1228 msgid "_Remember this password for the remainder of this session" msgstr "Für den Rest dieser Sitzung an dieses Passwort _erinnern" @@ -5176,7 +5202,7 @@ msgstr "Für den Rest dieser Sitzung an dieses Passwort _erinnern" msgid "Select destination" msgstr "Ziel wählen" -#: ../libedataserverui/e-source-selector-dialog.c:156 +#: ../libedataserverui/e-source-selector-dialog.c:172 msgid "_Destination" msgstr "_Ziel" @@ -5196,6 +5222,9 @@ msgstr "Server liefert keine Antwort" msgid "Bad parameter" msgstr "Fehlerhafter Parameter" +#~ msgid "%sPlease enter the IMAP password for %s@%s" +#~ msgstr "%s Bitte geben Sie das IMAP-Passwort für %s@%s ein" + #~ msgid "" #~ "Experimental IMAP 4(.1) client\n" #~ "This is untested and unsupported code, you want to use plain imap " @@ -5272,11 +5301,13 @@ msgstr "Fehlerhafter Parameter" #~ msgid "Unable to decrypt Certificate Revocation List signature" #~ msgstr "" -#~ "Die Signatur der Zertifikatrücknahmeliste konnte nicht entschlüsselt werden" +#~ "Die Signatur der Zertifikatrücknahmeliste konnte nicht entschlüsselt " +#~ "werden" #~ msgid "Unable to decode issuer's public key" #~ msgstr "" -#~ "Der öffentliche Schlüssel des Ausstellers konnte nicht entschlüsselt werden" +#~ "Der öffentliche Schlüssel des Ausstellers konnte nicht entschlüsselt " +#~ "werden" #~ msgid "Certificate signature failure" #~ msgstr "Zertifikatsignatur fehlerhaft" -- cgit v1.2.1 From ab7a8ea3e63c6892a7a0fec63affa7d5cfc16962 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Sun, 1 Aug 2010 08:56:49 +0100 Subject: imapx: Hide QRESYNC config string from translators more effectively --- camel/providers/imapx/camel-imapx-provider.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-provider.c b/camel/providers/imapx/camel-imapx-provider.c index 2a5a13f50..cac2c59c7 100644 --- a/camel/providers/imapx/camel-imapx-provider.c +++ b/camel/providers/imapx/camel-imapx-provider.c @@ -40,12 +40,12 @@ static guint imapx_url_hash (gconstpointer key); static gint imapx_url_equal (gconstpointer a, gconstpointer b); CamelProviderConfEntry imapx_conf_entries[] = { - { CAMEL_PROVIDER_CONF_SECTION_START, "mailcheck", NULL, + { CAMEL_PROVIDER_CONF_SECTION_START, "mailcheck", NULL, N_("Checking for New Mail") }, -#if 0 /* Not for stable branch -- new string. Set it with gconf-editor instead */ +/* Not for stable branch -- new string. Set it with gconf-editor instead { CAMEL_PROVIDER_CONF_CHECKBOX, "use_qresync", NULL, N_("Use _Quick Resync if the server supports it"), "1" }, -#endif +*/ { CAMEL_PROVIDER_CONF_CHECKBOX, "use_idle", NULL, N_("Use I_dle if the server supports it"), "1" }, { CAMEL_PROVIDER_CONF_CHECKBOX, "check_all", NULL, -- cgit v1.2.1 From 3ca578d968d09785933ebbb45b66b3bccdbd5832 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 11 Aug 2010 16:54:37 -0400 Subject: Update NEWS for 2.30.3 release. --- NEWS | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/NEWS b/NEWS index c52ba8995..e1e6e9c17 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,21 @@ +Evolution-Data-Server 2.30.3 2010-08-11 +--------------------------------------- + +Bug Fixes: + Bug 602287 - Avoid racing with camel_operation_mute() (Matthew Barnes) + Bug 622008 - Don't trust is->select_folder in + imapx_job_scan_changes_done() (David Woodhouse) + Bug 623795 - URI at the end of text isn't clickable (Milan Crha) + Bug 623936 - 75 second delay when creating new DAV entries in Zimbra + (Milan Crha) + +Other Changes: + * Tons of IMAPX improvements backported from 2.31 (David Woodhouse) + * Use text/vcard content type on WebDAV PUT request (Milan Crha) + +Translations: + Christian Kirbach (de) + Evolution-Data-Server 2.30.2 2010-06-20 --------------------------------------- -- cgit v1.2.1 From ff3413b5cd96b3f490b760e4c7160ac64cbff7c6 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Wed, 11 Aug 2010 17:19:52 -0400 Subject: Post-release version bump. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 062c0c4c8..faffef032 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,7 @@ dnl Evolution-Data-Server version m4_define([eds_major_version], [2]) m4_define([eds_minor_version], [30]) -m4_define([eds_micro_version], [3]) +m4_define([eds_micro_version], [4]) m4_define([eds_version], [eds_major_version.eds_minor_version.eds_micro_version]) -- cgit v1.2.1 From b7b077045c75b7e1537e8c23bbc85339321e0a2e Mon Sep 17 00:00:00 2001 From: Hao Li Date: Tue, 31 Aug 2010 13:07:07 +0530 Subject: Bug 628395 - Simplified Chinese - untranslated strings in contact editor/categories --- po/zh_CN.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/po/zh_CN.po b/po/zh_CN.po index ac607f84e..c06198065 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -4819,8 +4819,8 @@ msgid "Category _Name" msgstr "类别名称(_N)" #: ../libedataserverui/e-categories-dialog.ui.h:5 -msgid "Item(s) belong to these _categories:" -msgstr "项目属于这些类别(_C):" +msgid "Item(s) _belong to these categories:" +msgstr "项目属于这些类别(_B):" #: ../libedataserverui/e-categories-dialog.ui.h:6 msgid "_Available Categories:" -- cgit v1.2.1 From f139459ad2e1b67912fa0f4b68c641f265473aa4 Mon Sep 17 00:00:00 2001 From: Chenthill Palanisamy Date: Tue, 31 Aug 2010 17:44:51 +0530 Subject: Bug 627627 - Evolution not saving mail labels --- camel/providers/imapx/camel-imapx-server.c | 15 +++++++-------- camel/providers/imapx/camel-imapx-utils.c | 13 +++++++------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 161ceb71b..16187798c 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -4265,20 +4265,19 @@ imapx_command_sync_changes_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic) gint i; for (i=0;iu.sync_changes.changed_uids->len;i++) { - CamelIMAPXMessageInfo *info = (CamelIMAPXMessageInfo *) camel_folder_summary_uid (job->folder->summary, + CamelIMAPXMessageInfo *xinfo = (CamelIMAPXMessageInfo *) camel_folder_summary_uid (job->folder->summary, job->u.sync_changes.changed_uids->pdata[i]); - if (!info) + if (!xinfo) continue; - info->server_flags = ((CamelMessageInfoBase *)info)->flags & CAMEL_IMAPX_SERVER_FLAGS; - info->info.flags &= ~CAMEL_MESSAGE_FOLDER_FLAGGED; - info->info.dirty = TRUE; + xinfo->server_flags = ((CamelMessageInfoBase *)xinfo)->flags & CAMEL_IMAPX_SERVER_FLAGS; + xinfo->info.flags &= ~CAMEL_MESSAGE_FOLDER_FLAGGED; + xinfo->info.dirty = TRUE; + camel_flag_list_copy (&xinfo->server_user_flags, &xinfo->info.user_flags); camel_folder_summary_touch (job->folder->summary); - camel_message_info_free (info); - - /* FIXME: move over user flags too */ + camel_message_info_free (xinfo); } /* Apply the changes to server-side unread count; it won't tell us of these changes, of course. */ diff --git a/camel/providers/imapx/camel-imapx-utils.c b/camel/providers/imapx/camel-imapx-utils.c index 0157bbcb6..f77ed3aa0 100644 --- a/camel/providers/imapx/camel-imapx-utils.c +++ b/camel/providers/imapx/camel-imapx-utils.c @@ -89,7 +89,7 @@ imapx_parse_flags(CamelIMAPXStream *stream, guint32 *flagsp, CamelFlag **user_fl { gint tok, i; guint len; - guchar *token, *p, c; + guchar *token; guint32 flags = 0; *flagsp = flags; @@ -99,12 +99,10 @@ imapx_parse_flags(CamelIMAPXStream *stream, guint32 *flagsp, CamelFlag **user_fl do { tok = camel_imapx_stream_token(stream, &token, &len, ex); if (tok == IMAPX_TOK_TOKEN || tok == IMAPX_TOK_INT) { - p = token; - // FIXME: ascii_toupper - while ((c=*p)) - *p++ = toupper(c); + gchar *upper = g_ascii_strup ((gchar *) token, len); + for (i = 0; i < G_N_ELEMENTS (flag_table); i++) - if (!strcmp((gchar *)token, flag_table[i].name)) { + if (!strcmp(upper, flag_table[i].name)) { flags |= flag_table[i].flag; goto found; } @@ -116,6 +114,7 @@ imapx_parse_flags(CamelIMAPXStream *stream, guint32 *flagsp, CamelFlag **user_fl } found: tok = tok; /* fixes stupid warning */ + g_free (upper); } else if (tok != ')') { camel_exception_set (ex, 1, "expecting flag"); return; @@ -221,12 +220,14 @@ imapx_update_user_flags (CamelMessageInfo *info, CamelFlag *server_user_flags) { gboolean changed = FALSE; CamelMessageInfoBase *binfo = (CamelMessageInfoBase *) info; + CamelIMAPXMessageInfo *xinfo = (CamelIMAPXMessageInfo *) info; gboolean set_cal = FALSE; if (camel_flag_get (&binfo->user_flags, "$has_cal")) set_cal = TRUE; changed = camel_flag_list_copy(&binfo->user_flags, &server_user_flags); + camel_flag_list_copy (&xinfo->server_user_flags, &server_user_flags); /* reset the calendar flag if it was set in messageinfo before */ if (set_cal) -- cgit v1.2.1 From dd05be77605c86821d8f80eecc58b1a225fd5de5 Mon Sep 17 00:00:00 2001 From: Chenthill Palanisamy Date: Mon, 30 Aug 2010 17:42:59 +0530 Subject: Bug 627609 - imapx user_flags memory leak in imapx_untagged() --- camel/providers/imapx/camel-imapx-server.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 16187798c..a9e9eb8f1 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -1448,6 +1448,7 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) guint32 server_flags; CamelFlag *server_user_flags; CamelMessageInfoBase *binfo; + gboolean free_user_flags = FALSE; mi->uid = camel_pstring_strdup (finfo->uid); @@ -1486,6 +1487,7 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) server_user_flags = finfo->user_flags; /* free user_flags ? */ finfo->user_flags = NULL; + free_user_flags = TRUE; } /* If the message is a really new one -- equal or higher than what @@ -1525,6 +1527,10 @@ imapx_untagged(CamelIMAPXServer *imap, CamelException *ex) camel_operation_progress (job->op, cnt?cnt:1); } } + + if (free_user_flags && server_user_flags) + camel_flag_list_free (&server_user_flags); + } } } @@ -3462,6 +3468,7 @@ cleanup: for (i=0;ilen;i++) { struct _refresh_info *r = &g_array_index(infos, struct _refresh_info, i); + camel_flag_list_free (&r->server_user_flags); g_free(r->uid); } g_array_free(job->u.refresh_info.infos, TRUE); @@ -3639,6 +3646,7 @@ imapx_job_scan_changes_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic) for (i=0;ilen;i++) { struct _refresh_info *r = &g_array_index(infos, struct _refresh_info, i); + camel_flag_list_free (&r->server_user_flags); g_free(r->uid); } -- cgit v1.2.1 From 6c5e149e755943582dae06725b0566169160cc5e Mon Sep 17 00:00:00 2001 From: Yinghua Wang Date: Mon, 6 Sep 2010 21:21:47 +0800 Subject: Update Simplified Chinese translation. --- po/zh_CN.po | 2453 ++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 1312 insertions(+), 1141 deletions(-) diff --git a/po/zh_CN.po b/po/zh_CN.po index c06198065..c37b3c5b3 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -10,14 +10,16 @@ # Partly comes from Sun_l10n group, 2003. # Yang Zhang , 2008. # Aron Xu , 2009. +# Yinghua Wang , 2010 # msgid "" msgstr "" "Project-Id-Version: evolution-data-server master\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-08-30 13:09+0800\n" -"PO-Revision-Date: 2008-08-30 13:21+0800\n" -"Last-Translator: Aron Xu \n" +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" +"product=evolution-data-server&component=Misc.\n" +"POT-Creation-Date: 2010-09-01 00:36+0000\n" +"PO-Revision-Date: 2010-08-10 10:04+0800\n" +"Last-Translator: Yinghua Wang \n" "Language-Team: Chinese (simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -33,16 +35,16 @@ msgstr "正在载入..." #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2261 #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2283 #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2328 -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4510 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4553 #: ../addressbook/backends/vcf/e-book-backend-vcf.c:476 msgid "Searching..." msgstr "正在搜索..." #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2696 -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4674 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4717 #, c-format msgid "Downloading contacts (%d)... " -msgstr "正在下载联系人(%d 位)..." +msgstr "正在下载联系人(%d)..." #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:2845 #: ../addressbook/backends/groupwise/e-book-backend-groupwise.c:3029 @@ -51,867 +53,921 @@ msgstr "正在下载联系人(%d 位)..." msgid "Updating contacts cache (%d)... " msgstr "正在更新联系人缓存(%d)..." -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:788 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:818 msgid "Using Distinguished Name (DN)" msgstr "使用已识别的姓名 (DN)" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:791 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:821 msgid "Using Email Address" msgstr "使用电子邮件地址" -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1067 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1098 msgid "Reconnecting to LDAP server..." msgstr "正在重新连接 LDAP 服务器..." -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1711 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1740 msgid "Adding contact to LDAP server..." msgstr "正在将联系人添加到 LDAP 服务器..." -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1845 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:1874 msgid "Removing contact from LDAP server..." msgstr "正在从 LDAP 服务器删除联系人..." -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:2282 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:2311 msgid "Modifying contact from LDAP server..." msgstr "正在修改 LDAP 服务器上的联系人..." -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4371 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4414 msgid "Receiving LDAP search results..." msgstr "正在接收 LDAP 的搜索结果..." -#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4532 +#: ../addressbook/backends/ldap/e-book-backend-ldap.c:4575 msgid "Error performing search" msgstr "执行搜索错误" -#: ../addressbook/libebook/e-book.c:1837 -#, c-format -msgid "%s: there was no self contact UID stored in gconf" -msgstr "%s:gconf 中没有存储自身联系人的 UID" - -#: ../addressbook/libebook/e-book.c:1967 +#: ../addressbook/libebook/e-book.c:2152 #, c-format msgid "%s: there was no source for uid `%s' stored in gconf." msgstr "%s:gconf 中没有存储 uid“%s”的源。" #. Dummy row as EContactField starts from 1 -#: ../addressbook/libebook/e-contact.c:113 +#: ../addressbook/libebook/e-contact.c:115 msgid "Unique ID" msgstr "唯一的 ID" -#: ../addressbook/libebook/e-contact.c:114 +#: ../addressbook/libebook/e-contact.c:116 msgid "File Under" msgstr "存档于" #. URI of the book to which the contact belongs to -#: ../addressbook/libebook/e-contact.c:116 +#: ../addressbook/libebook/e-contact.c:118 msgid "Book URI" -msgstr "订阅 URI" +msgstr "地址簿 URI" #. Name fields #. FN isn't really a structured field - we use a getter/setter #. so we can set the N property (since evo 1.4 works fine with #. vcards that don't even have a N attribute. *sigh*) -#: ../addressbook/libebook/e-contact.c:122 +#: ../addressbook/libebook/e-contact.c:124 msgid "Full Name" msgstr "全名" -#: ../addressbook/libebook/e-contact.c:123 +#: ../addressbook/libebook/e-contact.c:125 msgid "Given Name" msgstr "名" -#: ../addressbook/libebook/e-contact.c:124 +#: ../addressbook/libebook/e-contact.c:126 msgid "Family Name" msgstr "姓" -#: ../addressbook/libebook/e-contact.c:125 +#: ../addressbook/libebook/e-contact.c:127 msgid "Nickname" msgstr "昵称" #. Email fields -#: ../addressbook/libebook/e-contact.c:128 +#: ../addressbook/libebook/e-contact.c:130 msgid "Email 1" msgstr "电子邮件 1" -#: ../addressbook/libebook/e-contact.c:129 +#: ../addressbook/libebook/e-contact.c:131 msgid "Email 2" msgstr "电子邮件 2" -#: ../addressbook/libebook/e-contact.c:130 +#: ../addressbook/libebook/e-contact.c:132 msgid "Email 3" msgstr "电子邮件 3" -#: ../addressbook/libebook/e-contact.c:131 +#: ../addressbook/libebook/e-contact.c:133 msgid "Email 4" msgstr "电子邮件 4" -#: ../addressbook/libebook/e-contact.c:133 +#: ../addressbook/libebook/e-contact.c:135 msgid "Mailer" msgstr "邮件程序" #. Address Labels -#: ../addressbook/libebook/e-contact.c:136 +#: ../addressbook/libebook/e-contact.c:138 msgid "Home Address Label" msgstr "家庭地址标签" -#: ../addressbook/libebook/e-contact.c:137 +#: ../addressbook/libebook/e-contact.c:139 msgid "Work Address Label" msgstr "工作地址标签" -#: ../addressbook/libebook/e-contact.c:138 +#: ../addressbook/libebook/e-contact.c:140 msgid "Other Address Label" msgstr "其它地址标签" #. Phone fields -#: ../addressbook/libebook/e-contact.c:141 +#: ../addressbook/libebook/e-contact.c:143 msgid "Assistant Phone" msgstr "助手电话" -#: ../addressbook/libebook/e-contact.c:142 +#: ../addressbook/libebook/e-contact.c:144 msgid "Business Phone" msgstr "商务电话" -#: ../addressbook/libebook/e-contact.c:143 +#: ../addressbook/libebook/e-contact.c:145 msgid "Business Phone 2" msgstr "商务电话 2" -#: ../addressbook/libebook/e-contact.c:144 +#: ../addressbook/libebook/e-contact.c:146 msgid "Business Fax" msgstr "商务传真" -#: ../addressbook/libebook/e-contact.c:145 +#: ../addressbook/libebook/e-contact.c:147 msgid "Callback Phone" msgstr "回拨电话" -#: ../addressbook/libebook/e-contact.c:146 +#: ../addressbook/libebook/e-contact.c:148 msgid "Car Phone" msgstr "车载电话" -#: ../addressbook/libebook/e-contact.c:147 +#: ../addressbook/libebook/e-contact.c:149 msgid "Company Phone" msgstr "公司电话" -#: ../addressbook/libebook/e-contact.c:148 +#: ../addressbook/libebook/e-contact.c:150 msgid "Home Phone" msgstr "家庭电话" -#: ../addressbook/libebook/e-contact.c:149 +#: ../addressbook/libebook/e-contact.c:151 msgid "Home Phone 2" msgstr "家庭电话 2" -#: ../addressbook/libebook/e-contact.c:150 +#: ../addressbook/libebook/e-contact.c:152 msgid "Home Fax" msgstr "家庭传真" -#: ../addressbook/libebook/e-contact.c:151 +#: ../addressbook/libebook/e-contact.c:153 msgid "ISDN" msgstr "ISDN" -#: ../addressbook/libebook/e-contact.c:152 +#: ../addressbook/libebook/e-contact.c:154 msgid "Mobile Phone" msgstr "移动电话" -#: ../addressbook/libebook/e-contact.c:153 +#: ../addressbook/libebook/e-contact.c:155 msgid "Other Phone" msgstr "其它电话" -#: ../addressbook/libebook/e-contact.c:154 +#: ../addressbook/libebook/e-contact.c:156 msgid "Other Fax" msgstr "其它传真" -#: ../addressbook/libebook/e-contact.c:155 +#: ../addressbook/libebook/e-contact.c:157 msgid "Pager" msgstr "寻呼机" -#: ../addressbook/libebook/e-contact.c:156 +#: ../addressbook/libebook/e-contact.c:158 msgid "Primary Phone" msgstr "主要电话" -#: ../addressbook/libebook/e-contact.c:157 +#: ../addressbook/libebook/e-contact.c:159 msgid "Radio" msgstr "收音机" -#: ../addressbook/libebook/e-contact.c:158 +#: ../addressbook/libebook/e-contact.c:160 msgid "Telex" msgstr "电传" #. To translators: TTY is Teletypewriter -#: ../addressbook/libebook/e-contact.c:160 +#: ../addressbook/libebook/e-contact.c:162 msgid "TTY" msgstr "TTY" #. Organizational fields -#: ../addressbook/libebook/e-contact.c:163 +#: ../addressbook/libebook/e-contact.c:165 msgid "Organization" msgstr "组织" -#: ../addressbook/libebook/e-contact.c:164 +#: ../addressbook/libebook/e-contact.c:166 msgid "Organizational Unit" msgstr "组织单元" -#: ../addressbook/libebook/e-contact.c:165 +#: ../addressbook/libebook/e-contact.c:167 msgid "Office" msgstr "办公室" -#: ../addressbook/libebook/e-contact.c:166 +#: ../addressbook/libebook/e-contact.c:168 msgid "Title" msgstr "头衔" -#: ../addressbook/libebook/e-contact.c:167 +#: ../addressbook/libebook/e-contact.c:169 msgid "Role" msgstr "角色" -#: ../addressbook/libebook/e-contact.c:168 +#: ../addressbook/libebook/e-contact.c:170 msgid "Manager" msgstr "经理" -#: ../addressbook/libebook/e-contact.c:169 +#: ../addressbook/libebook/e-contact.c:171 msgid "Assistant" msgstr "助手" #. Web fields -#: ../addressbook/libebook/e-contact.c:172 +#: ../addressbook/libebook/e-contact.c:174 msgid "Homepage URL" msgstr "个人主页 URL" -#: ../addressbook/libebook/e-contact.c:173 +#: ../addressbook/libebook/e-contact.c:175 msgid "Weblog URL" msgstr "网络日记 URL" #. Contact categories -#: ../addressbook/libebook/e-contact.c:176 -#: ../libedataserverui/e-categories-dialog.c:632 +#: ../addressbook/libebook/e-contact.c:178 +#: ../libedataserverui/e-categories-dialog.c:671 msgid "Categories" msgstr "类别" #. Collaboration fields -#: ../addressbook/libebook/e-contact.c:179 +#: ../addressbook/libebook/e-contact.c:181 msgid "Calendar URI" msgstr "日历 URI" -#: ../addressbook/libebook/e-contact.c:180 +#: ../addressbook/libebook/e-contact.c:182 msgid "Free/Busy URL" msgstr "空闲/繁忙 URL" -#: ../addressbook/libebook/e-contact.c:181 +#: ../addressbook/libebook/e-contact.c:183 msgid "ICS Calendar" msgstr "ICS 日历" -#: ../addressbook/libebook/e-contact.c:182 +#: ../addressbook/libebook/e-contact.c:184 msgid "Video Conferencing URL" msgstr "视频会议 URL" #. Misc fields -#: ../addressbook/libebook/e-contact.c:185 +#: ../addressbook/libebook/e-contact.c:187 msgid "Spouse's Name" msgstr "配偶姓名" -#: ../addressbook/libebook/e-contact.c:186 +#: ../addressbook/libebook/e-contact.c:188 msgid "Note" msgstr "注释" #. Instant messaging fields -#: ../addressbook/libebook/e-contact.c:189 +#: ../addressbook/libebook/e-contact.c:191 msgid "AIM Home Screen Name 1" msgstr "AIM 家庭屏幕名 1" -#: ../addressbook/libebook/e-contact.c:190 +#: ../addressbook/libebook/e-contact.c:192 msgid "AIM Home Screen Name 2" msgstr "AIM 家庭屏幕名 2" -#: ../addressbook/libebook/e-contact.c:191 +#: ../addressbook/libebook/e-contact.c:193 msgid "AIM Home Screen Name 3" msgstr "AIM 家庭屏幕名 3" -#: ../addressbook/libebook/e-contact.c:192 +#: ../addressbook/libebook/e-contact.c:194 msgid "AIM Work Screen Name 1" msgstr "AIM 工作屏幕名 1" -#: ../addressbook/libebook/e-contact.c:193 +#: ../addressbook/libebook/e-contact.c:195 msgid "AIM Work Screen Name 2" msgstr "AIM 工作屏幕名 2" -#: ../addressbook/libebook/e-contact.c:194 +#: ../addressbook/libebook/e-contact.c:196 msgid "AIM Work Screen Name 3" msgstr "AIM 工作屏幕名 3" -#: ../addressbook/libebook/e-contact.c:195 +#: ../addressbook/libebook/e-contact.c:197 msgid "GroupWise Home Screen Name 1" msgstr "GroupWise 家庭屏幕名 1" -#: ../addressbook/libebook/e-contact.c:196 +#: ../addressbook/libebook/e-contact.c:198 msgid "GroupWise Home Screen Name 2" msgstr "GroupWise 家庭屏幕名 2" -#: ../addressbook/libebook/e-contact.c:197 +#: ../addressbook/libebook/e-contact.c:199 msgid "GroupWise Home Screen Name 3" msgstr "GroupWise 家庭屏幕名 3" -#: ../addressbook/libebook/e-contact.c:198 +#: ../addressbook/libebook/e-contact.c:200 msgid "GroupWise Work Screen Name 1" msgstr "GroupWise 工作屏幕名 1" -#: ../addressbook/libebook/e-contact.c:199 +#: ../addressbook/libebook/e-contact.c:201 msgid "GroupWise Work Screen Name 2" msgstr "GroupWise 工作屏幕名 2" -#: ../addressbook/libebook/e-contact.c:200 +#: ../addressbook/libebook/e-contact.c:202 msgid "GroupWise Work Screen Name 3" msgstr "GroupWise 工作屏幕名 3" -#: ../addressbook/libebook/e-contact.c:201 +#: ../addressbook/libebook/e-contact.c:203 msgid "Jabber Home Id 1" msgstr "Jabber 家庭 Id 1" -#: ../addressbook/libebook/e-contact.c:202 +#: ../addressbook/libebook/e-contact.c:204 msgid "Jabber Home Id 2" msgstr "Jabber 家庭 Id 2" -#: ../addressbook/libebook/e-contact.c:203 +#: ../addressbook/libebook/e-contact.c:205 msgid "Jabber Home Id 3" msgstr "Jabber 家庭 Id 3" -#: ../addressbook/libebook/e-contact.c:204 +#: ../addressbook/libebook/e-contact.c:206 msgid "Jabber Work Id 1" msgstr "Jabber 工作 Id 1" -#: ../addressbook/libebook/e-contact.c:205 +#: ../addressbook/libebook/e-contact.c:207 msgid "Jabber Work Id 2" msgstr "Jabber 工作 Id 2" -#: ../addressbook/libebook/e-contact.c:206 +#: ../addressbook/libebook/e-contact.c:208 msgid "Jabber Work Id 3" msgstr "Jabber 工作 Id 3" -#: ../addressbook/libebook/e-contact.c:207 +#: ../addressbook/libebook/e-contact.c:209 msgid "Yahoo! Home Screen Name 1" msgstr "Yahoo! 家庭屏幕名 1" -#: ../addressbook/libebook/e-contact.c:208 +#: ../addressbook/libebook/e-contact.c:210 msgid "Yahoo! Home Screen Name 2" msgstr "Yahoo! 家庭屏幕名 2" -#: ../addressbook/libebook/e-contact.c:209 +#: ../addressbook/libebook/e-contact.c:211 msgid "Yahoo! Home Screen Name 3" msgstr "Yahoo! 家庭屏幕名 3" -#: ../addressbook/libebook/e-contact.c:210 +#: ../addressbook/libebook/e-contact.c:212 msgid "Yahoo! Work Screen Name 1" msgstr "Yahoo! 工作屏幕名 1" -#: ../addressbook/libebook/e-contact.c:211 +#: ../addressbook/libebook/e-contact.c:213 msgid "Yahoo! Work Screen Name 2" msgstr "Yahoo! 工作屏幕名 2" -#: ../addressbook/libebook/e-contact.c:212 +#: ../addressbook/libebook/e-contact.c:214 msgid "Yahoo! Work Screen Name 3" msgstr "Yahoo! 工作屏幕名 3" -#: ../addressbook/libebook/e-contact.c:213 +#: ../addressbook/libebook/e-contact.c:215 msgid "MSN Home Screen Name 1" msgstr "MSN 家庭屏幕名 1" -#: ../addressbook/libebook/e-contact.c:214 +#: ../addressbook/libebook/e-contact.c:216 msgid "MSN Home Screen Name 2" msgstr "MSN 家庭屏幕名 2" -#: ../addressbook/libebook/e-contact.c:215 +#: ../addressbook/libebook/e-contact.c:217 msgid "MSN Home Screen Name 3" msgstr "MSN 家庭屏幕名 3" -#: ../addressbook/libebook/e-contact.c:216 +#: ../addressbook/libebook/e-contact.c:218 msgid "MSN Work Screen Name 1" msgstr "MSN 工作屏幕名 1" -#: ../addressbook/libebook/e-contact.c:217 +#: ../addressbook/libebook/e-contact.c:219 msgid "MSN Work Screen Name 2" msgstr "MSN 工作屏幕名 2" -#: ../addressbook/libebook/e-contact.c:218 +#: ../addressbook/libebook/e-contact.c:220 msgid "MSN Work Screen Name 3" msgstr "MSN 工作屏幕名 3" -#: ../addressbook/libebook/e-contact.c:219 +#: ../addressbook/libebook/e-contact.c:221 msgid "ICQ Home Id 1" msgstr "ICQ 家庭 Id 1" -#: ../addressbook/libebook/e-contact.c:220 +#: ../addressbook/libebook/e-contact.c:222 msgid "ICQ Home Id 2" msgstr "ICQ 家庭 Id 2" -#: ../addressbook/libebook/e-contact.c:221 +#: ../addressbook/libebook/e-contact.c:223 msgid "ICQ Home Id 3" msgstr "ICQ 家庭 Id 3" -#: ../addressbook/libebook/e-contact.c:222 +#: ../addressbook/libebook/e-contact.c:224 msgid "ICQ Work Id 1" msgstr "ICQ 工作 Id 1" -#: ../addressbook/libebook/e-contact.c:223 +#: ../addressbook/libebook/e-contact.c:225 msgid "ICQ Work Id 2" msgstr "ICQ 工作 Id 2" -#: ../addressbook/libebook/e-contact.c:224 +#: ../addressbook/libebook/e-contact.c:226 msgid "ICQ Work Id 3" msgstr "ICQ 工作 Id 3" #. Last modified time -#: ../addressbook/libebook/e-contact.c:227 +#: ../addressbook/libebook/e-contact.c:229 msgid "Last Revision" msgstr "上次修订" -#: ../addressbook/libebook/e-contact.c:228 +#: ../addressbook/libebook/e-contact.c:230 msgid "Name or Org" msgstr "名称或组织" #. Address fields -#: ../addressbook/libebook/e-contact.c:231 +#: ../addressbook/libebook/e-contact.c:233 msgid "Address List" msgstr "地址列表" -#: ../addressbook/libebook/e-contact.c:232 +#: ../addressbook/libebook/e-contact.c:234 msgid "Home Address" msgstr "家庭地址" -#: ../addressbook/libebook/e-contact.c:233 +#: ../addressbook/libebook/e-contact.c:235 msgid "Work Address" msgstr "办公地址" -#: ../addressbook/libebook/e-contact.c:234 +#: ../addressbook/libebook/e-contact.c:236 msgid "Other Address" msgstr "其它地址" #. Contact categories -#: ../addressbook/libebook/e-contact.c:237 +#: ../addressbook/libebook/e-contact.c:239 msgid "Category List" msgstr "类别列表" #. Photo/Logo -#: ../addressbook/libebook/e-contact.c:240 +#: ../addressbook/libebook/e-contact.c:242 msgid "Photo" msgstr "照片" -#: ../addressbook/libebook/e-contact.c:241 +#: ../addressbook/libebook/e-contact.c:243 msgid "Logo" msgstr "标志" -#: ../addressbook/libebook/e-contact.c:243 +#: ../addressbook/libebook/e-contact.c:245 msgid "Name" msgstr "姓名" -#: ../addressbook/libebook/e-contact.c:244 +#: ../addressbook/libebook/e-contact.c:246 msgid "Email List" msgstr "邮件列表" #. Instant messaging fields -#: ../addressbook/libebook/e-contact.c:247 +#: ../addressbook/libebook/e-contact.c:249 msgid "AIM Screen Name List" msgstr "AIM 屏幕名列表" -#: ../addressbook/libebook/e-contact.c:248 +#: ../addressbook/libebook/e-contact.c:250 msgid "GroupWise Id List" msgstr "GroupWise Id 列表" -#: ../addressbook/libebook/e-contact.c:249 +#: ../addressbook/libebook/e-contact.c:251 msgid "Jabber Id List" msgstr "Jabber Id 列表" -#: ../addressbook/libebook/e-contact.c:250 +#: ../addressbook/libebook/e-contact.c:252 msgid "Yahoo! Screen Name List" msgstr "Yahoo! 屏幕名列表" -#: ../addressbook/libebook/e-contact.c:251 +#: ../addressbook/libebook/e-contact.c:253 msgid "MSN Screen Name List" msgstr "MSN 屏幕名列表" -#: ../addressbook/libebook/e-contact.c:252 +#: ../addressbook/libebook/e-contact.c:254 msgid "ICQ Id List" msgstr "ICQ Id 列表" -#: ../addressbook/libebook/e-contact.c:254 +#: ../addressbook/libebook/e-contact.c:256 msgid "Wants HTML Mail" msgstr "想要 HTML 邮件" -#: ../addressbook/libebook/e-contact.c:256 +#: ../addressbook/libebook/e-contact.c:258 msgid "List" msgstr "列表" -#: ../addressbook/libebook/e-contact.c:257 +#: ../addressbook/libebook/e-contact.c:259 msgid "List Show Addresses" msgstr "列表显示地址" -#: ../addressbook/libebook/e-contact.c:259 +#: ../addressbook/libebook/e-contact.c:261 msgid "Birth Date" msgstr "生日" -#: ../addressbook/libebook/e-contact.c:260 -#: ../calendar/backends/contacts/e-cal-backend-contacts.c:647 -#: ../libedataserver/e-categories.c:45 +#: ../addressbook/libebook/e-contact.c:262 +#: ../calendar/backends/contacts/e-cal-backend-contacts.c:715 +#: ../libedataserver/e-categories.c:42 msgid "Anniversary" msgstr "周年纪念日" #. Security fields -#: ../addressbook/libebook/e-contact.c:263 +#: ../addressbook/libebook/e-contact.c:265 msgid "X.509 Certificate" msgstr "X.509 证书" -#: ../addressbook/libebook/e-contact.c:265 +#: ../addressbook/libebook/e-contact.c:267 msgid "Gadu-Gadu Home Id 1" msgstr "Gadu-Gadu 家庭 Id 1" -#: ../addressbook/libebook/e-contact.c:266 +#: ../addressbook/libebook/e-contact.c:268 msgid "Gadu-Gadu Home Id 2" msgstr "Gadu-Gadu 家庭 Id 2" -#: ../addressbook/libebook/e-contact.c:267 +#: ../addressbook/libebook/e-contact.c:269 msgid "Gadu-Gadu Home Id 3" msgstr "Gadu-Gadu 家庭 Id 3" -#: ../addressbook/libebook/e-contact.c:268 +#: ../addressbook/libebook/e-contact.c:270 msgid "Gadu-Gadu Work Id 1" msgstr "Gadu-Gadu 工作 Id 1" -#: ../addressbook/libebook/e-contact.c:269 +#: ../addressbook/libebook/e-contact.c:271 msgid "Gadu-Gadu Work Id 2" msgstr "Gadu-Gadu 工作 Id 2" -#: ../addressbook/libebook/e-contact.c:270 +#: ../addressbook/libebook/e-contact.c:272 msgid "Gadu-Gadu Work Id 3" msgstr "Gadu-Gadu 工作 Id 3" -#: ../addressbook/libebook/e-contact.c:271 +#: ../addressbook/libebook/e-contact.c:273 msgid "Gadu-Gadu Id List" msgstr "Gadu-Gadu ID 列表" #. Geo information -#: ../addressbook/libebook/e-contact.c:274 +#: ../addressbook/libebook/e-contact.c:276 msgid "Geographic Information" msgstr "地理信息" -#: ../addressbook/libebook/e-contact.c:276 +#: ../addressbook/libebook/e-contact.c:278 msgid "Telephone" msgstr "电话" -#: ../addressbook/libebook/e-contact.c:278 +#: ../addressbook/libebook/e-contact.c:280 msgid "Skype Home Name 1" msgstr "Skype 家庭屏幕名 1" -#: ../addressbook/libebook/e-contact.c:279 +#: ../addressbook/libebook/e-contact.c:281 msgid "Skype Home Name 2" msgstr "Skype 家庭屏幕名 2" -#: ../addressbook/libebook/e-contact.c:280 +#: ../addressbook/libebook/e-contact.c:282 msgid "Skype Home Name 3" msgstr "Skype 家庭屏幕名 3" -#: ../addressbook/libebook/e-contact.c:281 +#: ../addressbook/libebook/e-contact.c:283 msgid "Skype Work Name 1" msgstr "Skype 工作屏幕名 1" -#: ../addressbook/libebook/e-contact.c:282 +#: ../addressbook/libebook/e-contact.c:284 msgid "Skype Work Name 2" msgstr "Skype 工作屏幕名 2" -#: ../addressbook/libebook/e-contact.c:283 +#: ../addressbook/libebook/e-contact.c:285 msgid "Skype Work Name 3" msgstr "Skype 工作屏幕名 3" -#: ../addressbook/libebook/e-contact.c:284 +#: ../addressbook/libebook/e-contact.c:286 msgid "Skype Name List" msgstr "Skype 屏幕名列表" -#: ../addressbook/libebook/e-contact.c:286 -#, fuzzy +#: ../addressbook/libebook/e-contact.c:288 msgid "SIP address" -msgstr "家庭地址" +msgstr "SIP 地址" -#: ../addressbook/libebook/e-contact.c:1535 -#: ../addressbook/libebook/e-destination.c:761 +#: ../addressbook/libebook/e-contact.c:1515 +#: ../addressbook/libebook/e-destination.c:739 msgid "Unnamed List" msgstr "未命名的列表" -#: ../calendar/backends/contacts/e-cal-backend-contacts.c:649 -#: ../libedataserver/e-categories.c:46 +#: ../addressbook/libedata-book/e-data-book-factory.c:290 +#, c-format +msgid "Empty URI" +msgstr "空 URI" + +#: ../addressbook/libedata-book/e-data-book-factory.c:305 +#: ../addressbook/libedata-book/e-data-book-factory.c:332 +#: ../calendar/libedata-cal/e-data-cal-factory.c:324 +#: ../calendar/libedata-cal/e-data-cal-factory.c:333 +#, c-format +msgid "Invalid source" +msgstr "无效来源。" + +#: ../addressbook/libedata-book/e-data-book.c:301 +msgid "Cannot open book" +msgstr "无法打开地址簿" + +#: ../addressbook/libedata-book/e-data-book.c:319 +msgid "Cannot remove book" +msgstr "无法移除地址簿" + +#: ../addressbook/libedata-book/e-data-book.c:331 +#: ../addressbook/libedata-book/e-data-book.c:346 +msgid "Cannot get contact" +msgstr "无法获取联系人" + +#: ../addressbook/libedata-book/e-data-book.c:358 +msgid "Empty query" +msgstr "空查询" + +#: ../addressbook/libedata-book/e-data-book.c:402 +msgid "Cannot authenticate user" +msgstr "无法认证用户" + +#: ../addressbook/libedata-book/e-data-book.c:414 +#: ../addressbook/libedata-book/e-data-book.c:429 +msgid "Cannot add contact" +msgstr "无法添加联系人" + +#: ../addressbook/libedata-book/e-data-book.c:444 +#: ../addressbook/libedata-book/e-data-book.c:459 +msgid "Cannot modify contact" +msgstr "无法修改联系人" + +#: ../addressbook/libedata-book/e-data-book.c:494 +msgid "Cannot remove contacts" +msgstr "无法删除联系人" + +#: ../addressbook/libedata-book/e-data-book.c:569 +#: ../calendar/libedata-cal/e-cal-backend-util.c:141 +msgid "Invalid query" +msgstr "无效的查询" + +#: ../addressbook/libedata-book/e-data-book.c:598 +msgid "Cannot get changes" +msgstr "无法获取更改" + +#: ../addressbook/libedata-book/e-data-book.c:699 +msgid "Cannot complete operation" +msgstr "无法完成操作" + +#: ../calendar/backends/contacts/e-cal-backend-contacts.c:717 +#: ../libedataserver/e-categories.c:43 msgid "Birthday" msgstr "生日" -#: ../calendar/backends/contacts/e-cal-backend-contacts.c:678 +#: ../calendar/backends/contacts/e-cal-backend-contacts.c:746 #, c-format msgid "Birthday: %s" msgstr "生日:%s" -#: ../calendar/backends/contacts/e-cal-backend-contacts.c:702 +#: ../calendar/backends/contacts/e-cal-backend-contacts.c:770 #, c-format msgid "Anniversary: %s" msgstr "周年:%s" -#: ../calendar/backends/file/e-cal-backend-file.c:234 +#: ../calendar/backends/file/e-cal-backend-file.c:236 msgid "Cannot save calendar data: Malformed URI." msgstr "无法保存日历数据:URI 格式错误。" -#: ../calendar/backends/file/e-cal-backend-file.c:241 -#: ../calendar/backends/file/e-cal-backend-file.c:247 +#: ../calendar/backends/file/e-cal-backend-file.c:243 +#: ../calendar/backends/file/e-cal-backend-file.c:249 msgid "Cannot save calendar data" msgstr "无法保存日历数据" -#: ../calendar/backends/google/e-cal-backend-google-utils.c:344 +#: ../calendar/backends/google/e-cal-backend-google-utils.c:342 msgid "Could not create thread for getting deltas" msgstr "无法为获得差异创建线索" -#: ../calendar/backends/google/e-cal-backend-google-utils.c:376 -#: ../calendar/backends/google/e-cal-backend-google.c:1189 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1080 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1381 -#: ../calendar/backends/http/e-cal-backend-http.c:673 -#: ../calendar/backends/weather/e-cal-backend-weather.c:486 +#: ../calendar/backends/google/e-cal-backend-google-utils.c:374 +#: ../calendar/backends/google/e-cal-backend-google.c:1144 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1087 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1385 +#: ../calendar/backends/http/e-cal-backend-http.c:678 +#: ../calendar/backends/weather/e-cal-backend-weather.c:492 msgid "Could not create cache file" msgstr "无法创建缓存文件" -#: ../calendar/backends/google/e-cal-backend-google-utils.c:389 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1093 +#: ../calendar/backends/google/e-cal-backend-google-utils.c:387 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1100 msgid "Could not create thread for populating cache" msgstr "无法创建增殖缓存创建线索" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:1082 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2078 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:1118 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2116 msgid "Reply Requested: by " msgstr "请求回复:由" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:1087 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2083 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise-utils.c:1123 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2121 msgid "Reply Requested: When convenient" msgstr "请求回复:方便时" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:281 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:293 #, c-format msgid "Loading %s items" -msgstr "装入 %s 项" +msgstr "载入 %s 项" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:918 -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:260 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:926 msgid "Calendar" msgstr "日历" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:976 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:984 msgid "Invalid server URI" msgstr "无效的服务器 URI" -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:995 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1004 -#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1098 -#: ../calendar/libecal/e-cal.c:5117 -#: ../calendar/libedata-cal/e-cal-backend-util.c:117 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1291 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1327 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1342 -#: ../camel/providers/groupwise/camel-groupwise-store.c:598 -#: ../camel/providers/groupwise/camel-groupwise-store.c:773 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1003 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1012 +#: ../calendar/backends/groupwise/e-cal-backend-groupwise.c:1105 +#: ../calendar/libecal/e-cal.c:4026 +#: ../calendar/libedata-cal/e-cal-backend-util.c:119 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1334 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1370 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1385 +#: ../camel/providers/groupwise/camel-groupwise-store.c:591 +#: ../camel/providers/groupwise/camel-groupwise-store.c:766 #: ../camel/providers/groupwise/camel-groupwise-transport.c:154 #: ../camel/providers/groupwise/camel-groupwise-transport.c:181 msgid "Authentication failed" msgstr "认证失败" -#: ../calendar/backends/http/e-cal-backend-http.c:330 +#: ../calendar/backends/http/e-cal-backend-http.c:335 msgid "Redirected to Invalid URI" msgstr "已重定向到无效 URI" -#: ../calendar/backends/http/e-cal-backend-http.c:353 +#: ../calendar/backends/http/e-cal-backend-http.c:358 msgid "Bad file format." msgstr "无效的文件格式。" -#: ../calendar/backends/http/e-cal-backend-http.c:360 +#: ../calendar/backends/http/e-cal-backend-http.c:365 msgid "Not a calendar." msgstr "不是日历。" -#: ../calendar/backends/weather/e-cal-backend-weather.c:150 +#: ../calendar/backends/weather/e-cal-backend-weather.c:152 msgid "Could not retrieve weather data" msgstr "无法获取天气数据" -#: ../calendar/backends/weather/e-cal-backend-weather.c:247 +#: ../calendar/backends/weather/e-cal-backend-weather.c:251 msgid "Weather: Fog" msgstr "天气:雾" -#: ../calendar/backends/weather/e-cal-backend-weather.c:248 -msgid "Weather: Cloudy" -msgstr "天气:多云" - -#: ../calendar/backends/weather/e-cal-backend-weather.c:249 +#: ../calendar/backends/weather/e-cal-backend-weather.c:252 msgid "Weather: Cloudy Night" msgstr "天气:多云夜晚" -#: ../calendar/backends/weather/e-cal-backend-weather.c:250 +#: ../calendar/backends/weather/e-cal-backend-weather.c:253 +msgid "Weather: Cloudy" +msgstr "天气:多云" + +#: ../calendar/backends/weather/e-cal-backend-weather.c:254 msgid "Weather: Overcast" msgstr "天气:阴天" -#: ../calendar/backends/weather/e-cal-backend-weather.c:251 +#: ../calendar/backends/weather/e-cal-backend-weather.c:255 msgid "Weather: Showers" msgstr "天气:阵雨" -#: ../calendar/backends/weather/e-cal-backend-weather.c:252 +#: ../calendar/backends/weather/e-cal-backend-weather.c:256 msgid "Weather: Snow" msgstr "天气:雪" -#: ../calendar/backends/weather/e-cal-backend-weather.c:253 -msgid "Weather: Sunny" -msgstr "天气:晴" - -#: ../calendar/backends/weather/e-cal-backend-weather.c:254 +#: ../calendar/backends/weather/e-cal-backend-weather.c:257 msgid "Weather: Clear Night" msgstr "天气:晴朗夜晚" -#: ../calendar/backends/weather/e-cal-backend-weather.c:255 +#: ../calendar/backends/weather/e-cal-backend-weather.c:258 +msgid "Weather: Sunny" +msgstr "天气:晴" + +#: ../calendar/backends/weather/e-cal-backend-weather.c:259 msgid "Weather: Thunderstorms" msgstr "天气:暴风雨" -#: ../calendar/backends/weather/e-cal-backend-weather.c:400 +#: ../calendar/backends/weather/e-cal-backend-weather.c:405 msgid "Forecast" msgstr "天气预报" -#: ../calendar/libecal/e-cal-component.c:1320 +#: ../calendar/libecal/e-cal-component.c:1286 msgid "Untitled appointment" msgstr "无标题约会" -#: ../calendar/libecal/e-cal-recur.c:3945 +#: ../calendar/libecal/e-cal-recur.c:3951 msgid "1st" msgstr "1日" -#: ../calendar/libecal/e-cal-recur.c:3946 +#: ../calendar/libecal/e-cal-recur.c:3952 msgid "2nd" msgstr "2日" -#: ../calendar/libecal/e-cal-recur.c:3947 +#: ../calendar/libecal/e-cal-recur.c:3953 msgid "3rd" msgstr "3日" -#: ../calendar/libecal/e-cal-recur.c:3948 +#: ../calendar/libecal/e-cal-recur.c:3954 msgid "4th" msgstr "4日" -#: ../calendar/libecal/e-cal-recur.c:3949 +#: ../calendar/libecal/e-cal-recur.c:3955 msgid "5th" msgstr "5日" -#: ../calendar/libecal/e-cal-recur.c:3950 +#: ../calendar/libecal/e-cal-recur.c:3956 msgid "6th" msgstr "6日" -#: ../calendar/libecal/e-cal-recur.c:3951 +#: ../calendar/libecal/e-cal-recur.c:3957 msgid "7th" msgstr "7日" -#: ../calendar/libecal/e-cal-recur.c:3952 +#: ../calendar/libecal/e-cal-recur.c:3958 msgid "8th" msgstr "8日" -#: ../calendar/libecal/e-cal-recur.c:3953 +#: ../calendar/libecal/e-cal-recur.c:3959 msgid "9th" msgstr "9日" -#: ../calendar/libecal/e-cal-recur.c:3954 +#: ../calendar/libecal/e-cal-recur.c:3960 msgid "10th" msgstr "10日" -#: ../calendar/libecal/e-cal-recur.c:3955 +#: ../calendar/libecal/e-cal-recur.c:3961 msgid "11th" msgstr "11日" -#: ../calendar/libecal/e-cal-recur.c:3956 +#: ../calendar/libecal/e-cal-recur.c:3962 msgid "12th" msgstr "12日" -#: ../calendar/libecal/e-cal-recur.c:3957 +#: ../calendar/libecal/e-cal-recur.c:3963 msgid "13th" msgstr "13日" -#: ../calendar/libecal/e-cal-recur.c:3958 +#: ../calendar/libecal/e-cal-recur.c:3964 msgid "14th" msgstr "14日" -#: ../calendar/libecal/e-cal-recur.c:3959 +#: ../calendar/libecal/e-cal-recur.c:3965 msgid "15th" msgstr "15日" -#: ../calendar/libecal/e-cal-recur.c:3960 +#: ../calendar/libecal/e-cal-recur.c:3966 msgid "16th" msgstr "16日" -#: ../calendar/libecal/e-cal-recur.c:3961 +#: ../calendar/libecal/e-cal-recur.c:3967 msgid "17th" msgstr "17日" -#: ../calendar/libecal/e-cal-recur.c:3962 +#: ../calendar/libecal/e-cal-recur.c:3968 msgid "18th" msgstr "18八日" -#: ../calendar/libecal/e-cal-recur.c:3963 +#: ../calendar/libecal/e-cal-recur.c:3969 msgid "19th" msgstr "19日" -#: ../calendar/libecal/e-cal-recur.c:3964 +#: ../calendar/libecal/e-cal-recur.c:3970 msgid "20th" msgstr "20日" -#: ../calendar/libecal/e-cal-recur.c:3965 +#: ../calendar/libecal/e-cal-recur.c:3971 msgid "21st" msgstr "21日" -#: ../calendar/libecal/e-cal-recur.c:3966 +#: ../calendar/libecal/e-cal-recur.c:3972 msgid "22nd" msgstr "22日" -#: ../calendar/libecal/e-cal-recur.c:3967 +#: ../calendar/libecal/e-cal-recur.c:3973 msgid "23rd" msgstr "23日" -#: ../calendar/libecal/e-cal-recur.c:3968 +#: ../calendar/libecal/e-cal-recur.c:3974 msgid "24th" msgstr "24日" -#: ../calendar/libecal/e-cal-recur.c:3969 +#: ../calendar/libecal/e-cal-recur.c:3975 msgid "25th" msgstr "25日" -#: ../calendar/libecal/e-cal-recur.c:3970 +#: ../calendar/libecal/e-cal-recur.c:3976 msgid "26th" msgstr "26日" -#: ../calendar/libecal/e-cal-recur.c:3971 +#: ../calendar/libecal/e-cal-recur.c:3977 msgid "27th" msgstr "27日" -#: ../calendar/libecal/e-cal-recur.c:3972 +#: ../calendar/libecal/e-cal-recur.c:3978 msgid "28th" msgstr "28日" -#: ../calendar/libecal/e-cal-recur.c:3973 +#: ../calendar/libecal/e-cal-recur.c:3979 msgid "29th" msgstr "29日" -#: ../calendar/libecal/e-cal-recur.c:3974 +#: ../calendar/libecal/e-cal-recur.c:3980 msgid "30th" msgstr "30日" -#: ../calendar/libecal/e-cal-recur.c:3975 +#: ../calendar/libecal/e-cal-recur.c:3981 msgid "31st" msgstr "31日" -#: ../calendar/libecal/e-cal-util.c:685 ../calendar/libecal/e-cal-util.c:712 +#: ../calendar/libecal/e-cal-util.c:688 ../calendar/libecal/e-cal-util.c:715 msgid "High" msgstr "高" -#: ../calendar/libecal/e-cal-util.c:687 ../calendar/libecal/e-cal-util.c:714 +#: ../calendar/libecal/e-cal-util.c:690 ../calendar/libecal/e-cal-util.c:717 msgid "Normal" msgstr "中" -#: ../calendar/libecal/e-cal-util.c:689 ../calendar/libecal/e-cal-util.c:716 +#: ../calendar/libecal/e-cal-util.c:692 ../calendar/libecal/e-cal-util.c:719 msgid "Low" msgstr "低" #. An empty string is the same as 'None'. -#: ../calendar/libecal/e-cal-util.c:710 +#: ../calendar/libecal/e-cal-util.c:713 msgid "Undefined" msgstr "未定义" -#: ../calendar/libecal/e-cal.c:1693 ../libedataserverui/e-book-auth-util.c:199 +#: ../calendar/libecal/e-cal.c:1179 ../libedataserverui/e-book-auth-util.c:199 #, c-format msgid "Enter password for %s (user %s)" msgstr "为 %s 输入密码 (用户 %s)" @@ -920,94 +976,94 @@ msgstr "为 %s 输入密码 (用户 %s)" #. This password prompt will be prompted rarely. Since the key that is passed to #. the auth_func corresponds to the parent user. #. -#: ../calendar/libecal/e-cal.c:1707 +#: ../calendar/libecal/e-cal.c:1193 #, c-format msgid "Enter password for %s to enable proxy for user %s" msgstr "输入 %s 的密码,以便为用户 %s 启用代理服务器" -#: ../calendar/libecal/e-cal.c:5089 +#: ../calendar/libecal/e-cal.c:3998 msgid "Invalid argument" msgstr "无效参数" -#: ../calendar/libecal/e-cal.c:5091 +#: ../calendar/libecal/e-cal.c:4000 msgid "Backend is busy" msgstr "后台繁忙" -#: ../calendar/libecal/e-cal.c:5093 -#: ../calendar/libedata-cal/e-cal-backend-util.c:105 +#: ../calendar/libecal/e-cal.c:4002 +#: ../calendar/libedata-cal/e-cal-backend-util.c:107 msgid "Repository is offline" msgstr "仓库离线" -#: ../calendar/libecal/e-cal.c:5095 -#: ../calendar/libedata-cal/e-cal-backend-util.c:129 +#: ../calendar/libecal/e-cal.c:4004 +#: ../calendar/libedata-cal/e-cal-backend-util.c:131 msgid "No such calendar" msgstr "没有这样的日历" -#: ../calendar/libecal/e-cal.c:5097 -#: ../calendar/libedata-cal/e-cal-backend-util.c:111 -#: ../servers/groupwise/e-gw-connection.c:233 +#: ../calendar/libecal/e-cal.c:4006 +#: ../calendar/libedata-cal/e-cal-backend-util.c:113 +#: ../servers/groupwise/e-gw-connection.c:235 msgid "Object not found" msgstr "找不到对象" -#: ../calendar/libecal/e-cal.c:5099 -#: ../calendar/libedata-cal/e-cal-backend-util.c:113 -#: ../servers/groupwise/e-gw-connection.c:227 +#: ../calendar/libecal/e-cal.c:4008 +#: ../calendar/libedata-cal/e-cal-backend-util.c:115 +#: ../servers/groupwise/e-gw-connection.c:229 msgid "Invalid object" msgstr "无效对象" -#: ../calendar/libecal/e-cal.c:5101 +#: ../calendar/libecal/e-cal.c:4010 msgid "URI not loaded" -msgstr "URI 未装入" +msgstr "URI 未载入" -#: ../calendar/libecal/e-cal.c:5103 +#: ../calendar/libecal/e-cal.c:4012 msgid "URI already loaded" msgstr "URI 已经载入" -#: ../calendar/libecal/e-cal.c:5105 -#: ../calendar/libedata-cal/e-cal-backend-util.c:107 -#: ../servers/exchange/storage/e-storage.c:573 +#: ../calendar/libecal/e-cal.c:4014 +#: ../calendar/libedata-cal/e-cal-backend-util.c:109 msgid "Permission denied" msgstr "没有权限" -#: ../calendar/libecal/e-cal.c:5107 -#: ../calendar/libedata-cal/e-cal-backend-util.c:131 -#: ../servers/groupwise/e-gw-connection.c:235 +#: ../calendar/libecal/e-cal.c:4016 +#: ../calendar/libedata-cal/e-cal-backend-util.c:133 +#: ../servers/groupwise/e-gw-connection.c:237 msgid "Unknown User" msgstr "未知用户" -#: ../calendar/libecal/e-cal.c:5109 -#: ../calendar/libedata-cal/e-cal-backend-util.c:115 +#: ../calendar/libecal/e-cal.c:4018 +#: ../calendar/libedata-cal/e-cal-backend-util.c:117 msgid "Object ID already exists" msgstr "对象 ID 已经存在" -#: ../calendar/libecal/e-cal.c:5111 +#: ../calendar/libecal/e-cal.c:4020 msgid "Protocol not supported" msgstr "不支持的协议" -#: ../calendar/libecal/e-cal.c:5113 +#: ../calendar/libecal/e-cal.c:4022 msgid "Operation has been canceled" msgstr "操作已取消" -#: ../calendar/libecal/e-cal.c:5115 -#: ../calendar/libedata-cal/e-cal-backend-util.c:143 +#: ../calendar/libecal/e-cal.c:4024 +#: ../calendar/libedata-cal/e-cal-backend-util.c:145 msgid "Could not cancel operation" msgstr "无法取消操作" -#: ../calendar/libecal/e-cal.c:5119 -#: ../calendar/libedata-cal/e-cal-backend-util.c:119 +#: ../calendar/libecal/e-cal.c:4028 +#: ../calendar/libedata-cal/e-cal-backend-util.c:121 #: ../camel/providers/smtp/camel-smtp-transport.c:217 msgid "Authentication required" msgstr "必须认证" -#: ../calendar/libecal/e-cal.c:5121 +#: ../calendar/libecal/e-cal.c:4030 msgid "A CORBA exception has occurred" msgstr "发生了 CORBA 异常" -#: ../calendar/libecal/e-cal.c:5123 -#: ../calendar/libedata-cal/e-cal-backend-util.c:146 +#: ../calendar/libecal/e-cal.c:4032 +#: ../calendar/libedata-cal/e-cal-backend-util.c:148 +#: ../camel/camel-net-utils.c:523 #: ../camel/providers/groupwise/camel-groupwise-transport.c:214 #: ../camel/providers/imap/camel-imap-command.c:432 -#: ../camel/providers/imap/camel-imap-store.c:743 +#: ../camel/providers/imap/camel-imap-store.c:741 #: ../camel/providers/imap4/camel-imap4-engine.c:1547 #: ../camel/providers/imap4/camel-imap4-engine.c:1585 #: ../camel/providers/imap4/camel-imap4-engine.c:1629 @@ -1015,91 +1071,87 @@ msgstr "发生了 CORBA 异常" #: ../camel/providers/imap4/camel-imap4-store.c:311 #: ../camel/providers/imap4/camel-imap4-store.c:818 #: ../camel/providers/imap4/camel-imap4-store.c:1574 -#: ../camel/providers/pop3/camel-pop3-store.c:552 -#: ../camel/providers/pop3/camel-pop3-store.c:559 -#: ../camel/providers/pop3/camel-pop3-store.c:565 -#: ../servers/exchange/storage/e-storage.c:587 -#: ../servers/groupwise/e-gw-connection.c:241 +#: ../camel/providers/pop3/camel-pop3-store.c:584 +#: ../servers/groupwise/e-gw-connection.c:243 msgid "Unknown error" msgstr "未知的错误" -#: ../calendar/libecal/e-cal.c:5125 -#: ../calendar/libedata-cal/e-cal-backend-util.c:103 -#: ../servers/exchange/storage/e-storage.c:555 +#: ../calendar/libecal/e-cal.c:4034 +#: ../calendar/libedata-cal/e-cal-backend-util.c:105 msgid "No error" msgstr "无错误" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:67 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:674 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:693 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:802 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:830 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:1023 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:1050 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:69 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:676 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:695 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:804 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:832 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:1025 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:1052 #, c-format msgid "\"%s\" expects no arguments" msgstr "“%s”不需要参数" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:100 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:210 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:252 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:288 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:1088 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:102 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:212 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:254 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:290 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:1090 #, c-format msgid "\"%s\" expects one argument" msgstr "“%s”需要一个参数" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:106 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:113 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:294 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:735 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:108 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:115 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:296 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:737 #, c-format msgid "\"%s\" expects the first argument to be a string" msgstr "“%s”需要第一个参数是字符串" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:121 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:123 #, c-format msgid "\"%s\" expects the first argument to be an ISO 8601 date/time string" msgstr "“%s”的第一个参数必须是 ISO 8601 日期/时间字符串" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:160 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:361 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:413 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:729 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:862 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:162 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:363 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:415 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:731 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:864 #, c-format msgid "\"%s\" expects two arguments" msgstr "“%s”需要两个参数" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:166 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:216 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:258 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:367 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:419 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:868 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:1094 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:168 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:218 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:260 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:369 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:421 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:870 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:1096 #, c-format msgid "\"%s\" expects the first argument to be a time_t" msgstr "“%s”的第一个参数应该是 time_t" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:174 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:176 #, c-format msgid "\"%s\" expects the second argument to be an integer" msgstr "“%s”的第二个参数应该是整数" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:375 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:428 -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:876 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:377 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:430 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:878 #, c-format msgid "\"%s\" expects the second argument to be a time_t" msgstr "“%s”的第一个参数应该是 time_t" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:743 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:745 #, c-format msgid "\"%s\" expects the second argument to be a string" msgstr "“%s”的第二个参数应该是字符串" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:773 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:775 #, c-format msgid "" "\"%s\" expects the first argument to be either \"any\", \"summary\", or " @@ -1110,61 +1162,187 @@ msgstr "" "是“any”、“summary”、“description”、“location”、“attendee”、“organizer”、“classification”之" "一" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:925 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:927 #, c-format msgid "\"%s\" expects at least one argument" msgstr "“%s”至少需要一个参数" -#: ../calendar/libedata-cal/e-cal-backend-sexp.c:939 +#: ../calendar/libedata-cal/e-cal-backend-sexp.c:941 #, c-format msgid "" "\"%s\" expects all arguments to be strings or one and only one argument to " "be a boolean false (#f)" msgstr "“%s”的所有参数都应该为字符串或者它唯一的参数为布尔假 (#f)" -#: ../calendar/libedata-cal/e-cal-backend-util.c:109 +#: ../calendar/libedata-cal/e-cal-backend-util.c:111 msgid "Invalid range" msgstr "无效范围" -#: ../calendar/libedata-cal/e-cal-backend-util.c:121 +#: ../calendar/libedata-cal/e-cal-backend-util.c:123 msgid "Unsupported field" msgstr "不支持的域" -#: ../calendar/libedata-cal/e-cal-backend-util.c:123 +#: ../calendar/libedata-cal/e-cal-backend-util.c:125 msgid "Unsupported method" msgstr "不支持的方式" -#: ../calendar/libedata-cal/e-cal-backend-util.c:125 +#: ../calendar/libedata-cal/e-cal-backend-util.c:127 msgid "Unsupported authentication method" msgstr "不支持的身份验证方式" -#: ../calendar/libedata-cal/e-cal-backend-util.c:127 +#: ../calendar/libedata-cal/e-cal-backend-util.c:129 msgid "TLS not available" msgstr "TLS 不可用" -#: ../calendar/libedata-cal/e-cal-backend-util.c:133 +#: ../calendar/libedata-cal/e-cal-backend-util.c:135 msgid "Offline mode unavailable" msgstr "离线模式不可用" -#: ../calendar/libedata-cal/e-cal-backend-util.c:135 +#: ../calendar/libedata-cal/e-cal-backend-util.c:137 msgid "Search size limit exceeded" msgstr "超过搜索大小限制" -#: ../calendar/libedata-cal/e-cal-backend-util.c:137 +#: ../calendar/libedata-cal/e-cal-backend-util.c:139 msgid "Search time limit exceeded" msgstr "超过搜索时间限制" -#: ../calendar/libedata-cal/e-cal-backend-util.c:139 -msgid "Invalid query" -msgstr "无效的查询" +#: ../calendar/libedata-cal/e-cal-backend-util.c:143 +msgid "Query refused" +msgstr "查询被拒绝" + +#: ../calendar/libedata-cal/e-cal-backend-util.c:150 +msgid "Invalid server version" +msgstr "无效的服务器版本" + +#: ../calendar/libedata-cal/e-data-cal.c:501 +#, c-format +msgid "Cannot retrieve calendar address" +msgstr "无法获取日历地址" + +#: ../calendar/libedata-cal/e-data-cal.c:519 +#, c-format +msgid "Cannot retrieve calendar alarm e-mail address" +msgstr "无法获取日历提醒电子邮件地址" + +#: ../calendar/libedata-cal/e-data-cal.c:537 +#, c-format +msgid "Cannot retrieve calendar's ldap attribute" +msgstr "无法获取日历的 ldap 属性" + +#: ../calendar/libedata-cal/e-data-cal.c:555 +#, c-format +msgid "Cannot retrieve calendar scheduling information" +msgstr "无法获取日历的日程信息" + +#: ../calendar/libedata-cal/e-data-cal.c:572 +#, c-format +msgid "Cannot open calendar" +msgstr "无法打开日历" + +#: ../calendar/libedata-cal/e-data-cal.c:591 +#, c-format +msgid "Cannot refresh calendar" +msgstr "无法刷新日历" + +#: ../calendar/libedata-cal/e-data-cal.c:608 +#, c-format +msgid "Cannot remove calendar" +msgstr "无法删除日历" + +#: ../calendar/libedata-cal/e-data-cal.c:627 +#, c-format +msgid "Cannot create calendar object" +msgstr "无法创建日历对象" + +#: ../calendar/libedata-cal/e-data-cal.c:649 +#, c-format +msgid "Cannot modify calendar object" +msgstr "无法修改日历对象" + +#: ../calendar/libedata-cal/e-data-cal.c:673 +#, c-format +msgid "Cannot remove calendar object" +msgstr "无法删除日历对象" + +#: ../calendar/libedata-cal/e-data-cal.c:692 +#, c-format +msgid "Cannot receive calendar objects" +msgstr "无法获取日历对象" + +#: ../calendar/libedata-cal/e-data-cal.c:709 +#, c-format +msgid "Cannot discard calendar alarm" +msgstr "无法忽略日历提醒" + +#: ../calendar/libedata-cal/e-data-cal.c:728 +#, c-format +msgid "Cannot send calendar objects" +msgstr "无法发送日历对象" + +#: ../calendar/libedata-cal/e-data-cal.c:763 +#, c-format +msgid "Cannot retrieve default calendar object path" +msgstr "无法获取日历对象的默认路径" + +#: ../calendar/libedata-cal/e-data-cal.c:781 +#, c-format +msgid "Cannot retrieve calendar object path" +msgstr "无法获取日历对象路径" + +#: ../calendar/libedata-cal/e-data-cal.c:799 +#, c-format +msgid "Cannot retrieve calendar object list" +msgstr "无法获取日历对象列表" + +#: ../calendar/libedata-cal/e-data-cal.c:837 +#, c-format +msgid "Could not retrieve attachment list" +msgstr "无法获取附件列表" + +#: ../calendar/libedata-cal/e-data-cal.c:859 +#, c-format +msgid "Could not complete calendar query" +msgstr "无法完成日历查询" + +#: ../calendar/libedata-cal/e-data-cal.c:877 +#, c-format +msgid "Could not retrieve calendar time zone" +msgstr "无法获取日历时区" + +#: ../calendar/libedata-cal/e-data-cal.c:895 +#, c-format +msgid "Could not add calendar time zone" +msgstr "无法添加日历时区" + +#: ../calendar/libedata-cal/e-data-cal.c:912 +#, c-format +msgid "Could not set default calendar time zone" +msgstr "无法设置默认日历时区" + +#: ../calendar/libedata-cal/e-data-cal.c:933 +#, c-format +msgid "Cannot retrieve calendar changes" +msgstr "无法获取日历更改" + +#: ../calendar/libedata-cal/e-data-cal.c:983 +#, c-format +msgid "Cannot retrieve calendar free/busy list" +msgstr "无法获取日历空闲/繁忙列表" + +#: ../calendar/libedata-cal/e-data-cal-factory.c:340 +#, c-format +msgid "Invalid URI" +msgstr "无效的 URI" -#: ../calendar/libedata-cal/e-cal-backend-util.c:141 -msgid "Query refused" -msgstr "查询被拒绝" +#: ../calendar/libedata-cal/e-data-cal-factory.c:351 +#, fuzzy, c-format +msgid "No backend factory for '%s' of '%s'" +msgstr "无对应 '%2$s' 的 '%1$s' 的后端工厂" -#: ../calendar/libedata-cal/e-cal-backend-util.c:148 -msgid "Invalid server version" -msgstr "无效的服务器版本" +#: ../calendar/libedata-cal/e-data-cal-factory.c:391 +#, c-format +msgid "Could not instantiate backend" +msgstr "无法实例化后端" #: ../camel/camel-cipher-context.c:102 msgid "Signing is not supported by this cipher" @@ -1206,16 +1384,16 @@ msgstr "您不能用此密码导入密钥" msgid "You may not export keys with this cipher" msgstr "您不能用此密码导出密钥" -#: ../camel/camel-data-cache.c:136 +#: ../camel/camel-data-cache.c:135 msgid "Unable to create cache path" msgstr "无法创建缓冲路径" -#: ../camel/camel-data-cache.c:402 +#: ../camel/camel-data-cache.c:403 #, c-format msgid "Could not remove cache entry: %s: %s" msgstr "无法删除缓冲条目:%s:%s" -#: ../camel/camel-db.c:412 +#: ../camel/camel-db.c:459 msgid "Insufficient memory" msgstr "内存不足" @@ -1250,7 +1428,7 @@ msgstr "重新与服务器同步" msgid "Copy folder content locally for offline operation" msgstr "将文件夹内容复制到本地以进行脱机操作" -#: ../camel/camel-disco-folder.c:105 ../camel/camel-offline-folder.c:107 +#: ../camel/camel-disco-folder.c:105 ../camel/camel-offline-folder.c:106 msgid "Downloading new messages for offline mode" msgstr "下载新信件以进行脱机操作" @@ -1260,11 +1438,15 @@ msgid "Preparing folder '%s' for offline" msgstr "准备脱机文件夹“%s”" #: ../camel/camel-disco-store.c:400 -#: ../camel/providers/groupwise/camel-groupwise-store.c:223 -#: ../camel/providers/imap/camel-imap-store.c:1003 -#: ../camel/providers/imap/camel-imap-store.c:1813 -#: ../camel/providers/imap/camel-imap-store.c:2229 -#: ../camel/providers/imap/camel-imap-store.c:3014 +#: ../camel/providers/groupwise/camel-groupwise-store.c:216 +#: ../camel/providers/imap/camel-imap-store.c:1001 +#: ../camel/providers/imap/camel-imap-store.c:1843 +#: ../camel/providers/imap/camel-imap-store.c:2280 +#: ../camel/providers/imap/camel-imap-store.c:3089 +#: ../camel/providers/imapx/camel-imapx-store.c:170 +#: ../camel/providers/imapx/camel-imapx-store.c:676 +#: ../camel/providers/imapx/camel-imapx-store.c:732 +#: ../camel/providers/imapx/camel-imapx-store.c:784 msgid "You must be working online to complete this operation" msgstr "您必须在线工作以便完成该操作" @@ -1354,8 +1536,8 @@ msgstr "(user-tag)参数无效" msgid "Error executing filter search: %s: %s" msgstr "执行过滤规则搜索错误:%s:%s" -#: ../camel/camel-folder-search.c:351 ../camel/camel-folder-search.c:453 -#: ../camel/camel-folder-search.c:608 +#: ../camel/camel-folder-search.c:351 ../camel/camel-folder-search.c:455 +#: ../camel/camel-folder-search.c:610 #, c-format msgid "" "Cannot parse search expression: %s:\n" @@ -1364,8 +1546,8 @@ msgstr "" "无法解析搜索表达式:%s:\n" "%s" -#: ../camel/camel-folder-search.c:361 ../camel/camel-folder-search.c:463 -#: ../camel/camel-folder-search.c:618 +#: ../camel/camel-folder-search.c:361 ../camel/camel-folder-search.c:465 +#: ../camel/camel-folder-search.c:620 #, c-format msgid "" "Error executing search expression: %s:\n" @@ -1374,72 +1556,73 @@ msgstr "" "执行搜索表达式错误:%s:\n" "%s" -#: ../camel/camel-folder-search.c:810 ../camel/camel-folder-search.c:852 +#: ../camel/camel-folder-search.c:812 ../camel/camel-folder-search.c:854 #, c-format msgid "(%s) requires a single bool result" msgstr "(%s) 需要一个布尔结果" -#: ../camel/camel-folder-search.c:905 +#: ../camel/camel-folder-search.c:907 #, c-format msgid "(%s) not allowed inside %s" msgstr "(%s) 不允许在 %s 中使用" -#: ../camel/camel-folder-search.c:911 ../camel/camel-folder-search.c:918 +#: ../camel/camel-folder-search.c:913 ../camel/camel-folder-search.c:920 #, c-format msgid "(%s) requires a match type string" msgstr "(%s) 需要一个匹配类型字符串" -#: ../camel/camel-folder-search.c:945 +#: ../camel/camel-folder-search.c:947 #, c-format msgid "(%s) expects an array result" msgstr "(%s) 需要一个数组结果" -#: ../camel/camel-folder-search.c:954 +#: ../camel/camel-folder-search.c:956 #, c-format msgid "(%s) requires the folder set" msgstr "(%s) 需要文件夹集" -#: ../camel/camel-folder.c:683 +#: ../camel/camel-folder.c:690 #, c-format msgid "Unsupported operation: append message: for %s" msgstr "不支持的操作:附加信件:为 %s" -#: ../camel/camel-folder.c:1388 +#: ../camel/camel-folder.c:1401 #, c-format msgid "Unsupported operation: search by expression: for %s" msgstr "不支持的操作:按表达式搜索:搜索 %s" -#: ../camel/camel-folder.c:1429 +#: ../camel/camel-folder.c:1442 #, fuzzy, c-format msgid "Unsupported operation: count by expression: for %s" -msgstr "不支持的操作:按表达式搜索:搜索 %s" +msgstr "不支持的操作:按表达式计数:针对 %s" -#: ../camel/camel-folder.c:1468 +#: ../camel/camel-folder.c:1483 #, c-format msgid "Unsupported operation: search by UIDs: for %s" msgstr "不支持的操作:按 UID 搜索:搜索 %s" -#: ../camel/camel-folder.c:1581 +#: ../camel/camel-folder.c:1596 +#: ../camel/providers/local/camel-maildir-folder.c:387 msgid "Moving messages" msgstr "移动信件" -#: ../camel/camel-folder.c:1581 +#: ../camel/camel-folder.c:1596 msgid "Copying messages" msgstr "复制信件" -#: ../camel/camel-folder.c:1922 +#: ../camel/camel-folder.c:1945 msgid "Learning junk" msgstr "学习垃圾邮件" -#: ../camel/camel-folder.c:1939 +#: ../camel/camel-folder.c:1963 msgid "Learning non-junk" msgstr "学习非垃圾邮件" -#: ../camel/camel-folder.c:1958 +#: ../camel/camel-folder.c:1983 msgid "Filtering new message(s)" msgstr "过滤新信件" -#: ../camel/camel-gpg-context.c:752 +#: ../camel/camel-gpg-context.c:760 #, c-format msgid "" "Unexpected GnuPG status message encountered:\n" @@ -1450,15 +1633,15 @@ msgstr "" "\n" "%s" -#: ../camel/camel-gpg-context.c:767 +#: ../camel/camel-gpg-context.c:775 msgid "Failed to parse gpg userid hint." msgstr "解析 gpg userid 提示失败。" -#: ../camel/camel-gpg-context.c:791 ../camel/camel-gpg-context.c:805 +#: ../camel/camel-gpg-context.c:799 ../camel/camel-gpg-context.c:813 msgid "Failed to parse gpg passphrase request." msgstr "解析 gpg 密码句请求失败。" -#: ../camel/camel-gpg-context.c:825 +#: ../camel/camel-gpg-context.c:833 #, c-format msgid "" "You need a PIN to unlock the key for your\n" @@ -1467,7 +1650,7 @@ msgstr "" "您需要一个 PIN 用来解锁您的智能卡:\n" "“%s”" -#: ../camel/camel-gpg-context.c:829 +#: ../camel/camel-gpg-context.c:837 #, c-format msgid "" "You need a passphrase to unlock the key for\n" @@ -1476,93 +1659,88 @@ msgstr "" "您需要一个密码句用来解锁以下用户:\n" "“%s”" -#: ../camel/camel-gpg-context.c:834 +#: ../camel/camel-gpg-context.c:842 #, c-format msgid "Unexpected request from GnuPG for '%s'" msgstr "GnuPG 对“%s”的意外响应" -#: ../camel/camel-gpg-context.c:859 ../camel/camel-gpg-context.c:1068 +#: ../camel/camel-gpg-context.c:867 ../camel/camel-gpg-context.c:1111 #: ../camel/providers/nntp/camel-nntp-store.c:1313 msgid "Canceled." msgstr "已取消。" -#: ../camel/camel-gpg-context.c:873 +#: ../camel/camel-gpg-context.c:881 msgid "Failed to unlock secret key: 3 bad passphrases given." msgstr "解锁密钥失败:给出了 3 个错误的密码句。" -#: ../camel/camel-gpg-context.c:881 +#: ../camel/camel-gpg-context.c:889 #, c-format msgid "Unexpected response from GnuPG: %s" msgstr "来自 GnuPG 的意外应答:%s" -#: ../camel/camel-gpg-context.c:944 +#: ../camel/camel-gpg-context.c:988 msgid "Failed to encrypt: No valid recipients specified." msgstr "加密失败:没有指定有效的收件人。" #. always called on an i/o error -#: ../camel/camel-gpg-context.c:1206 ../camel/camel-gpg-context.c:1331 -#: ../camel/camel-gpg-context.c:1853 ../camel/camel-gpg-context.c:1898 +#: ../camel/camel-gpg-context.c:1260 ../camel/camel-gpg-context.c:1385 +#: ../camel/camel-gpg-context.c:1959 ../camel/camel-gpg-context.c:2006 #, c-format msgid "Failed to execute gpg: %s" msgstr "执行 gpg 失败:%s" -#: ../camel/camel-gpg-context.c:1299 ../camel/camel-smime-context.c:602 +#: ../camel/camel-gpg-context.c:1353 ../camel/camel-smime-context.c:605 #, c-format msgid "Could not generate signing data: %s" msgstr "无法生成签名数据:%s" -#: ../camel/camel-gpg-context.c:1346 ../camel/camel-gpg-context.c:1547 -#: ../camel/camel-gpg-context.c:1563 ../camel/camel-gpg-context.c:1643 -#: ../camel/camel-gpg-context.c:1658 ../camel/camel-gpg-context.c:1774 -#: ../camel/camel-gpg-context.c:1789 ../camel/camel-gpg-context.c:1869 -#: ../camel/camel-gpg-context.c:1914 +#: ../camel/camel-gpg-context.c:1402 ../camel/camel-gpg-context.c:1630 +#: ../camel/camel-gpg-context.c:1648 ../camel/camel-gpg-context.c:1730 +#: ../camel/camel-gpg-context.c:1747 ../camel/camel-gpg-context.c:1863 +#: ../camel/camel-gpg-context.c:1880 ../camel/camel-gpg-context.c:1977 +#: ../camel/camel-gpg-context.c:2024 msgid "Failed to execute gpg." msgstr "执行 gpg 失败。" -#: ../camel/camel-gpg-context.c:1365 -msgid "This is a digitally signed message part" -msgstr "这是信件的数字签名部分" - -#: ../camel/camel-gpg-context.c:1451 ../camel/camel-gpg-context.c:1457 -#: ../camel/camel-gpg-context.c:1463 ../camel/camel-gpg-context.c:1478 -#: ../camel/camel-smime-context.c:910 ../camel/camel-smime-context.c:921 -#: ../camel/camel-smime-context.c:928 +#: ../camel/camel-gpg-context.c:1534 ../camel/camel-gpg-context.c:1540 +#: ../camel/camel-gpg-context.c:1546 ../camel/camel-gpg-context.c:1561 +#: ../camel/camel-smime-context.c:929 ../camel/camel-smime-context.c:940 +#: ../camel/camel-smime-context.c:947 msgid "Cannot verify message signature: Incorrect message format" msgstr "无法校验信件签名:信件格式不对" -#: ../camel/camel-gpg-context.c:1517 +#: ../camel/camel-gpg-context.c:1600 #, c-format msgid "Cannot verify message signature: could not create temp file: %s" msgstr "无法校验信件签名:无法创建临时文件:%s" -#: ../camel/camel-gpg-context.c:1626 +#: ../camel/camel-gpg-context.c:1713 #, c-format msgid "Could not generate encrypting data: %s" msgstr "无法生成加密数据:%s" -#: ../camel/camel-gpg-context.c:1676 +#: ../camel/camel-gpg-context.c:1765 msgid "This is a digitally encrypted message part" msgstr "这是信件的数字加密部分" -#: ../camel/camel-gpg-context.c:1729 ../camel/camel-gpg-context.c:1737 -#: ../camel/camel-gpg-context.c:1756 +#: ../camel/camel-gpg-context.c:1818 ../camel/camel-gpg-context.c:1826 +#: ../camel/camel-gpg-context.c:1845 msgid "Cannot decrypt message: Incorrect message format" msgstr "无法解密信件:信件格式不对" -#: ../camel/camel-gpg-context.c:1746 +#: ../camel/camel-gpg-context.c:1835 msgid "Failed to decrypt MIME part: protocol error" msgstr "解密 MIME 部分失败:协议错误" -#: ../camel/camel-gpg-context.c:1811 ../camel/camel-smime-context.c:1186 +#: ../camel/camel-gpg-context.c:1915 ../camel/camel-smime-context.c:1204 msgid "Encrypted content" msgstr "加密内容" -#: ../camel/camel-gpg-context.c:1830 +#: ../camel/camel-gpg-context.c:1936 msgid "Unable to parse message content" msgstr "无法分析信件内容" -#: ../camel/camel-gpg-context.c:1854 ../camel/camel-gpg-context.c:1899 -#: ../camel/camel-tcp-stream-openssl.c:627 +#: ../camel/camel-gpg-context.c:1960 ../camel/camel-gpg-context.c:2007 #: ../camel/providers/imap4/camel-imap4-utils.c:614 #: ../camel/providers/smtp/camel-smtp-transport.c:165 #: ../camel/providers/smtp/camel-smtp-transport.c:220 @@ -1667,45 +1845,45 @@ msgstr "复制邮件临时文件错误:%s" msgid "parse error" msgstr "解析错误" -#: ../camel/camel-net-utils.c:503 ../camel/camel-net-utils.c:674 -#: ../camel/camel-net-utils.c:806 -#: ../camel/providers/pop3/camel-pop3-store.c:446 -#: ../camel/providers/pop3/camel-pop3-store.c:546 +#: ../camel/camel-net-utils.c:503 ../camel/camel-net-utils.c:678 +#: ../camel/camel-net-utils.c:817 +#: ../camel/providers/pop3/camel-pop3-store.c:478 +#: ../camel/providers/pop3/camel-pop3-store.c:578 msgid "Canceled" msgstr "已取消" -#: ../camel/camel-net-utils.c:522 +#: ../camel/camel-net-utils.c:523 msgid "cannot create thread" msgstr "无法创建线索" -#: ../camel/camel-net-utils.c:678 +#: ../camel/camel-net-utils.c:682 #, c-format msgid "Resolving: %s" msgstr "解析:%s" -#: ../camel/camel-net-utils.c:700 +#: ../camel/camel-net-utils.c:704 msgid "Host lookup failed" msgstr "主机查阅失败" -#: ../camel/camel-net-utils.c:702 +#: ../camel/camel-net-utils.c:706 #, c-format msgid "Host lookup failed: %s: %s" msgstr "主机查阅失败:%s:%s" -#: ../camel/camel-net-utils.c:810 +#: ../camel/camel-net-utils.c:821 msgid "Resolving address" msgstr "解析地址" -#: ../camel/camel-net-utils.c:830 +#: ../camel/camel-net-utils.c:841 msgid "Name lookup failed" msgstr "名称查阅失败" -#: ../camel/camel-net-utils.c:833 +#: ../camel/camel-net-utils.c:844 #, c-format msgid "Name lookup failed: %s" msgstr "名称查阅失败:%s" -#: ../camel/camel-offline-folder.c:249 +#: ../camel/camel-offline-folder.c:247 #, c-format msgid "Syncing messages in folder '%s' to disk" msgstr "正在将文件夹“%s”中的信件同步到磁盘" @@ -1726,19 +1904,19 @@ msgstr "关于将读入邮件作为对另一组文件夹的查询" #: ../camel/camel-provider.c:184 #, c-format msgid "Could not load %s: Module loading not supported on this system." -msgstr "无法装入 %s:本系统不支持模块装入。" +msgstr "无法载入 %s:本系统不支持模块载入。" #: ../camel/camel-provider.c:193 #, c-format msgid "Could not load %s: %s" -msgstr "无法装入 %s:%s" +msgstr "无法载入 %s:%s" #: ../camel/camel-provider.c:201 #, c-format msgid "Could not load %s: No initialization code in module." -msgstr "无法装入 %s:模块中没有初始化代码。" +msgstr "无法载入 %s:模块中没有初始化代码。" -#: ../camel/camel-provider.c:379 ../camel/camel-session.c:182 +#: ../camel/camel-provider.c:379 ../camel/camel-session.c:180 #, c-format msgid "No provider available for protocol '%s'" msgstr "协议“%s”没有可用的提供者" @@ -1826,93 +2004,75 @@ msgstr "服务器应达含有不完整的认证数据" msgid "Server response does not match" msgstr "服务器应答不匹配" -#: ../camel/camel-sasl-gssapi.c:63 +#: ../camel/camel-sasl-gssapi.c:78 msgid "GSSAPI" msgstr "GSSAPI" -#: ../camel/camel-sasl-gssapi.c:65 +#: ../camel/camel-sasl-gssapi.c:80 msgid "This option will connect to the server using Kerberos 5 authentication." msgstr "该选项将用 Kerberos 5 认证连接到服务器。" -#: ../camel/camel-sasl-gssapi.c:159 +#: ../camel/camel-sasl-gssapi.c:174 msgid "" "The specified mechanism is not supported by the provided credential, or is " "unrecognized by the implementation." msgstr "所提供的证书不支持指定的机制,或者无法被实现所识别。" -#: ../camel/camel-sasl-gssapi.c:164 +#: ../camel/camel-sasl-gssapi.c:179 msgid "The provided target_name parameter was ill-formed." msgstr "提供的 target_name 参数格式不对。" -#: ../camel/camel-sasl-gssapi.c:167 +#: ../camel/camel-sasl-gssapi.c:182 msgid "" "The provided target_name parameter contained an invalid or unsupported type " "of name." msgstr "提供的 target_name 参数包含无效或不支持的名称类型。" -#: ../camel/camel-sasl-gssapi.c:171 +#: ../camel/camel-sasl-gssapi.c:186 msgid "" "The input_token contains different channel bindings to those specified via " "the input_chan_bindings parameter." msgstr "" "input_token 包含的通道绑定与通过 input_chan_bindings 参数指定的通道不同。" -#: ../camel/camel-sasl-gssapi.c:176 +#: ../camel/camel-sasl-gssapi.c:191 msgid "" "The input_token contains an invalid signature, or a signature that could not " "be verified." msgstr "input_token 包含无效的签名,或者无法验证签名。" -#: ../camel/camel-sasl-gssapi.c:180 +#: ../camel/camel-sasl-gssapi.c:195 msgid "" "The supplied credentials were not valid for context initiation, or the " "credential handle did not reference any credentials." msgstr "提供的证书由于上下文的原因无效,或者证书句柄没有引用证书。" -#: ../camel/camel-sasl-gssapi.c:185 +#: ../camel/camel-sasl-gssapi.c:200 msgid "The supplied context handle did not refer to a valid context." msgstr "提供的上下文句柄所引用的上下文无效。" -#: ../camel/camel-sasl-gssapi.c:188 +#: ../camel/camel-sasl-gssapi.c:203 msgid "The consistency checks performed on the input_token failed." msgstr "对 input_token 执行完整性检查失败。" -#: ../camel/camel-sasl-gssapi.c:191 +#: ../camel/camel-sasl-gssapi.c:206 msgid "The consistency checks performed on the credential failed." msgstr "对证书执行完整性检查失败。" -#: ../camel/camel-sasl-gssapi.c:194 +#: ../camel/camel-sasl-gssapi.c:209 msgid "The referenced credentials have expired." msgstr "引用的证书已过期。" -#: ../camel/camel-sasl-gssapi.c:200 ../camel/camel-sasl-gssapi.c:248 -#: ../camel/camel-sasl-gssapi.c:284 ../camel/camel-sasl-gssapi.c:299 -#: ../camel/camel-sasl-kerberos4.c:230 -#: ../camel/providers/imap/camel-imap-store.c:1274 +#: ../camel/camel-sasl-gssapi.c:215 ../camel/camel-sasl-gssapi.c:322 +#: ../camel/camel-sasl-gssapi.c:364 ../camel/camel-sasl-gssapi.c:379 +#: ../camel/providers/imap/camel-imap-store.c:1272 msgid "Bad authentication response from server." msgstr "来自服务器的无效认证应答。" -#: ../camel/camel-sasl-gssapi.c:309 +#: ../camel/camel-sasl-gssapi.c:389 msgid "Unsupported security layer." msgstr "不支持的安全层。" -#: ../camel/camel-sasl-kerberos4.c:47 -msgid "Kerberos 4" -msgstr "Kerberos 4" - -#: ../camel/camel-sasl-kerberos4.c:49 -msgid "This option will connect to the server using Kerberos 4 authentication." -msgstr "该选项将用 Kerberos 4 认证连接到服务器。" - -#: ../camel/camel-sasl-kerberos4.c:173 -#, c-format -msgid "" -"Could not get Kerberos ticket:\n" -"%s" -msgstr "" -"无法获取 Kerberos 标签:\n" -"%s" - #: ../camel/camel-sasl-login.c:36 msgid "Login" msgstr "Login" @@ -1959,7 +2119,7 @@ msgstr "以未知的传输进行 SMTP 之前的 POP 授权" msgid "POP Before SMTP auth using a non-pop source" msgstr "以非 pop 源进行 SMTP 之前的 POP 授权" -#: ../camel/camel-search-private.c:149 +#: ../camel/camel-search-private.c:147 #, c-format msgid "Regular expression compilation failed: %s: %s" msgstr "常规表达式编译失败:%s:%s" @@ -1979,7 +2139,7 @@ msgstr "URL“%s”需要主机组件" msgid "URL '%s' needs a path component" msgstr "URL“%s”需要路径组件" -#: ../camel/camel-session.c:307 +#: ../camel/camel-session.c:305 #, c-format msgid "" "Could not create directory %s:\n" @@ -1988,209 +2148,209 @@ msgstr "" "无法创建目录 %s:\n" "%s" -#: ../camel/camel-session.c:479 +#: ../camel/camel-session.c:484 #, c-format msgid "Please enter the %s password for %s on host %s." msgstr "请输入 %2$s@%3$s 的 %1$s 密码" -#: ../camel/camel-session.c:817 +#: ../camel/camel-session.c:832 msgid "Camel session doesn't support forwarding of a message." -msgstr "" +msgstr "Camel 会话不支持信件转发。" -#: ../camel/camel-smime-context.c:444 ../camel/camel-smime-context.c:993 +#: ../camel/camel-smime-context.c:447 ../camel/camel-smime-context.c:1012 #, c-format msgid "Cannot find certificate for '%s'" msgstr "无法找到‘%s’的证书" -#: ../camel/camel-smime-context.c:450 +#: ../camel/camel-smime-context.c:453 msgid "Cannot create CMS message" msgstr "无法创建 CMS 信件" -#: ../camel/camel-smime-context.c:455 +#: ../camel/camel-smime-context.c:458 msgid "Cannot create CMS signed data" msgstr "无法创建 CMS 签名数据" -#: ../camel/camel-smime-context.c:461 +#: ../camel/camel-smime-context.c:464 msgid "Cannot attach CMS signed data" msgstr "无法附加 CMS 签名数据" -#: ../camel/camel-smime-context.c:468 +#: ../camel/camel-smime-context.c:471 msgid "Cannot attach CMS data" msgstr "无法附加 CMS 数据" -#: ../camel/camel-smime-context.c:474 +#: ../camel/camel-smime-context.c:477 msgid "Cannot create CMS Signer information" msgstr "无法创建 CMS 签名者信息" -#: ../camel/camel-smime-context.c:480 +#: ../camel/camel-smime-context.c:483 msgid "Cannot find certificate chain" msgstr "找不到证书链" -#: ../camel/camel-smime-context.c:486 +#: ../camel/camel-smime-context.c:489 msgid "Cannot add CMS Signing time" msgstr "无法添加 CMS 签名时间" -#: ../camel/camel-smime-context.c:508 ../camel/camel-smime-context.c:520 +#: ../camel/camel-smime-context.c:511 ../camel/camel-smime-context.c:523 #, c-format msgid "Encryption certificate for '%s' does not exist" msgstr "“%s”的加密证书不存在" -#: ../camel/camel-smime-context.c:527 +#: ../camel/camel-smime-context.c:530 msgid "Cannot add SMIMEEncKeyPrefs attribute" msgstr "无法添加 SMIMEEncKeyPrefs 属性" -#: ../camel/camel-smime-context.c:532 +#: ../camel/camel-smime-context.c:535 msgid "Cannot add MS SMIMEEncKeyPrefs attribute" msgstr "无法添加 MS SMIMEEncKeyPrefs 属性" -#: ../camel/camel-smime-context.c:537 +#: ../camel/camel-smime-context.c:540 msgid "Cannot add encryption certificate" msgstr "无法添加加密证书" -#: ../camel/camel-smime-context.c:543 +#: ../camel/camel-smime-context.c:546 msgid "Cannot add CMS Signer information" msgstr "无法添加 CMS 签名者信息" -#: ../camel/camel-smime-context.c:613 ../camel/camel-smime-context.c:1065 +#: ../camel/camel-smime-context.c:616 ../camel/camel-smime-context.c:1084 msgid "Cannot create encoder context" msgstr "无法创建编码器上下文" -#: ../camel/camel-smime-context.c:619 +#: ../camel/camel-smime-context.c:622 msgid "Failed to add data to CMS encoder" msgstr "将数据添加到 CMS 编码器失败" -#: ../camel/camel-smime-context.c:624 ../camel/camel-smime-context.c:1082 +#: ../camel/camel-smime-context.c:627 ../camel/camel-smime-context.c:1100 msgid "Failed to encode data" msgstr "编码数据失败" -#: ../camel/camel-smime-context.c:697 +#: ../camel/camel-smime-context.c:700 msgid "Unverified" msgstr "未校验" -#: ../camel/camel-smime-context.c:699 +#: ../camel/camel-smime-context.c:702 msgid "Good signature" msgstr "完好签名" -#: ../camel/camel-smime-context.c:701 +#: ../camel/camel-smime-context.c:704 msgid "Bad signature" msgstr "无效签名" -#: ../camel/camel-smime-context.c:703 +#: ../camel/camel-smime-context.c:706 msgid "Content tampered with or altered in transit" msgstr "内容在传送过程中被篡改" -#: ../camel/camel-smime-context.c:705 +#: ../camel/camel-smime-context.c:708 msgid "Signing certificate not found" msgstr "签名证书找不到" -#: ../camel/camel-smime-context.c:707 +#: ../camel/camel-smime-context.c:710 msgid "Signing certificate not trusted" msgstr "签名证书不可信" -#: ../camel/camel-smime-context.c:709 +#: ../camel/camel-smime-context.c:712 msgid "Signature algorithm unknown" msgstr "签名算法未知" -#: ../camel/camel-smime-context.c:711 +#: ../camel/camel-smime-context.c:714 msgid "Signature algorithm unsupported" msgstr "签名算法不支持" -#: ../camel/camel-smime-context.c:713 +#: ../camel/camel-smime-context.c:716 msgid "Malformed signature" msgstr "签名格式不对" -#: ../camel/camel-smime-context.c:715 +#: ../camel/camel-smime-context.c:718 msgid "Processing error" msgstr "处理错误" -#: ../camel/camel-smime-context.c:753 +#: ../camel/camel-smime-context.c:772 msgid "No signed data in signature" msgstr "签名中没有签名数据" -#: ../camel/camel-smime-context.c:758 +#: ../camel/camel-smime-context.c:777 msgid "Digests missing from enveloped data" msgstr "信封数据缺少摘要" -#: ../camel/camel-smime-context.c:771 ../camel/camel-smime-context.c:781 +#: ../camel/camel-smime-context.c:790 ../camel/camel-smime-context.c:800 msgid "Cannot calculate digests" msgstr "无法计算摘要" -#: ../camel/camel-smime-context.c:788 ../camel/camel-smime-context.c:792 +#: ../camel/camel-smime-context.c:807 ../camel/camel-smime-context.c:811 msgid "Cannot set message digests" msgstr "无法设置信件摘要" -#: ../camel/camel-smime-context.c:802 ../camel/camel-smime-context.c:807 +#: ../camel/camel-smime-context.c:821 ../camel/camel-smime-context.c:826 msgid "Certificate import failed" msgstr "证书导入失败" -#: ../camel/camel-smime-context.c:817 +#: ../camel/camel-smime-context.c:836 #, c-format msgid "Certificate is the only message, cannot verify certificates" msgstr "只有证书的信件,无法校验证书" -#: ../camel/camel-smime-context.c:820 +#: ../camel/camel-smime-context.c:839 #, c-format msgid "Certificate is the only message, certificates imported and verified" msgstr "只有证书的信件,证书已导入并校验" -#: ../camel/camel-smime-context.c:824 +#: ../camel/camel-smime-context.c:843 msgid "Cannot find signature digests" msgstr "找不到签名摘要" -#: ../camel/camel-smime-context.c:840 +#: ../camel/camel-smime-context.c:859 #, c-format msgid "Signer: %s <%s>: %s\n" msgstr "签名者:%s <%s>:%s\n" -#: ../camel/camel-smime-context.c:941 ../camel/camel-smime-context.c:1165 +#: ../camel/camel-smime-context.c:960 ../camel/camel-smime-context.c:1183 msgid "Decoder failed" msgstr "解码器失败" -#: ../camel/camel-smime-context.c:1000 +#: ../camel/camel-smime-context.c:1019 msgid "Cannot find common bulk encryption algorithm" msgstr "找不到公共批量加密算法" -#: ../camel/camel-smime-context.c:1008 +#: ../camel/camel-smime-context.c:1027 msgid "Cannot allocate slot for encryption bulk key" msgstr "无法为加密批量密钥分配密钥槽" -#: ../camel/camel-smime-context.c:1019 +#: ../camel/camel-smime-context.c:1038 msgid "Cannot create CMS Message" msgstr "无法创建 CMS 信件" -#: ../camel/camel-smime-context.c:1025 +#: ../camel/camel-smime-context.c:1044 msgid "Cannot create CMS Enveloped data" msgstr "无法创建 CMS 信封数据" -#: ../camel/camel-smime-context.c:1031 +#: ../camel/camel-smime-context.c:1050 msgid "Cannot attach CMS Enveloped data" msgstr "无法附加 CMS 信封数据" -#: ../camel/camel-smime-context.c:1037 +#: ../camel/camel-smime-context.c:1056 msgid "Cannot attach CMS data object" msgstr "无法附加 CMS 数据对象" -#: ../camel/camel-smime-context.c:1046 +#: ../camel/camel-smime-context.c:1065 msgid "Cannot create CMS Recipient information" msgstr "无法创建 CMS 收件人信息" -#: ../camel/camel-smime-context.c:1051 +#: ../camel/camel-smime-context.c:1070 msgid "Cannot add CMS Recipient information" msgstr "无法添加 CMS 收件人信息" -#: ../camel/camel-smime-context.c:1076 +#: ../camel/camel-smime-context.c:1094 msgid "Failed to add data to encoder" msgstr "将数据添加到编码器失败" -#: ../camel/camel-smime-context.c:1172 +#: ../camel/camel-smime-context.c:1190 msgid "S/MIME Decrypt: No encrypted content found" msgstr "S/MIME 解密:没有找到加密内容" -#: ../camel/camel-smime-context.c:1200 +#: ../camel/camel-smime-context.c:1218 msgid "import keys: unimplemented" msgstr "导入密钥:尚未实现" -#: ../camel/camel-smime-context.c:1208 +#: ../camel/camel-smime-context.c:1226 msgid "export keys: unimplemented" msgstr "导出密钥:尚未实现" @@ -2235,126 +2395,7 @@ msgstr "回收站" msgid "Junk" msgstr "垃圾" -#: ../camel/camel-tcp-stream-openssl.c:564 -msgid "Unable to get issuer's certificate" -msgstr "无法获取发行者的证书" - -#: ../camel/camel-tcp-stream-openssl.c:566 -msgid "Unable to get Certificate Revocation List" -msgstr "无法获取证书吊销列表签名" - -#: ../camel/camel-tcp-stream-openssl.c:568 -msgid "Unable to decrypt certificate signature" -msgstr "无法解密认证签名" - -#: ../camel/camel-tcp-stream-openssl.c:570 -msgid "Unable to decrypt Certificate Revocation List signature" -msgstr "无法解密证书吊销列表签名" - -#: ../camel/camel-tcp-stream-openssl.c:572 -msgid "Unable to decode issuer's public key" -msgstr "无法对发行者的公钥进行解码" - -#: ../camel/camel-tcp-stream-openssl.c:574 -msgid "Certificate signature failure" -msgstr "证书签名失败" - -#: ../camel/camel-tcp-stream-openssl.c:576 -msgid "Certificate Revocation List signature failure" -msgstr "证书吊销列表签名失败" - -#: ../camel/camel-tcp-stream-openssl.c:578 -msgid "Certificate not yet valid" -msgstr "证书未生效" - -#: ../camel/camel-tcp-stream-openssl.c:580 -msgid "Certificate has expired" -msgstr "证书已过期" - -#: ../camel/camel-tcp-stream-openssl.c:582 -#, fuzzy -msgid "Certificate Revocation List (CRL) not yet valid" -msgstr "证书吊销列表签名失败" - -#: ../camel/camel-tcp-stream-openssl.c:584 -#, fuzzy -msgid "Certificate Revocation List (CRL) has expired" -msgstr "证书吊销列表签名失败" - -#: ../camel/camel-tcp-stream-openssl.c:589 -#, fuzzy -msgid "Error in Certificate Revocation List (CRL)" -msgstr "无法获取证书吊销列表签名" - -#: ../camel/camel-tcp-stream-openssl.c:591 -msgid "Out of memory" -msgstr "内存耗尽" - -#: ../camel/camel-tcp-stream-openssl.c:593 -msgid "Zero-depth self-signed certificate" -msgstr "零深度自签名证书" - -#: ../camel/camel-tcp-stream-openssl.c:595 -msgid "Self-signed certificate in chain" -msgstr "链中的自签名证书" - -#: ../camel/camel-tcp-stream-openssl.c:597 -msgid "Unable to get issuer's certificate locally" -msgstr "无法在本地获取发行者的证书" - -#: ../camel/camel-tcp-stream-openssl.c:599 -msgid "Unable to verify leaf signature" -msgstr "无法校验叶子签名" - -#: ../camel/camel-tcp-stream-openssl.c:601 -msgid "Certificate chain too long" -msgstr "证书链过长" - -#: ../camel/camel-tcp-stream-openssl.c:603 -msgid "Certificate Revoked" -msgstr "证书已撤销" - -#: ../camel/camel-tcp-stream-openssl.c:605 -msgid "Invalid Certificate Authority (CA)" -msgstr "无效的证书颁发机构(CA)" - -#: ../camel/camel-tcp-stream-openssl.c:607 -msgid "Path length exceeded" -msgstr "超长的路径长度" - -#: ../camel/camel-tcp-stream-openssl.c:609 -msgid "Invalid purpose" -msgstr "无效目的" - -#: ../camel/camel-tcp-stream-openssl.c:611 -msgid "Certificate untrusted" -msgstr "不信任的证书" - -#: ../camel/camel-tcp-stream-openssl.c:613 -msgid "Certificate rejected" -msgstr "已拒绝的证书" - -#: ../camel/camel-tcp-stream-openssl.c:616 -msgid "Subject/Issuer mismatch" -msgstr "主题/发行者不匹配" - -#: ../camel/camel-tcp-stream-openssl.c:618 -msgid "AKID/SKID mismatch" -msgstr "AKID/SKID 不匹配" - -#: ../camel/camel-tcp-stream-openssl.c:620 -msgid "AKID/Issuer serial mismatch" -msgstr "AKID/发行者序列号不匹配" - -#: ../camel/camel-tcp-stream-openssl.c:622 -msgid "Key usage does not support certificate signing" -msgstr "密钥不支持证书签名" - -#: ../camel/camel-tcp-stream-openssl.c:625 -msgid "Error in application verification" -msgstr "应用程序验证错误" - -#: ../camel/camel-tcp-stream-openssl.c:692 ../camel/camel-tcp-stream-ssl.c:873 +#: ../camel/camel-tcp-stream-ssl.c:870 #, c-format msgid "" "Issuer: %s\n" @@ -2367,35 +2408,16 @@ msgstr "" "指纹: %s\n" "签名: %s" -#: ../camel/camel-tcp-stream-openssl.c:698 ../camel/camel-tcp-stream-ssl.c:879 +#: ../camel/camel-tcp-stream-ssl.c:876 msgid "GOOD" msgstr "好" -#: ../camel/camel-tcp-stream-openssl.c:698 ../camel/camel-tcp-stream-ssl.c:879 +#: ../camel/camel-tcp-stream-ssl.c:876 msgid "BAD" msgstr "坏" -#: ../camel/camel-tcp-stream-openssl.c:700 -#, c-format -msgid "" -"Bad certificate from %s:\n" -"\n" -"%s\n" -"\n" -"%s\n" -"\n" -"Do you wish to accept anyway?" -msgstr "" -"来自 %s 的错误证书:\n" -"\n" -"%s\n" -"\n" -"%s\n" -"\n" -"您仍然希望接受吗?" - #. construct our user prompt -#: ../camel/camel-tcp-stream-ssl.c:883 +#: ../camel/camel-tcp-stream-ssl.c:880 #, c-format msgid "" "SSL Certificate check for %s:\n" @@ -2410,7 +2432,7 @@ msgstr "" "\n" "您希望接受吗?" -#: ../camel/camel-tcp-stream-ssl.c:927 +#: ../camel/camel-tcp-stream-ssl.c:924 #, c-format msgid "" "Certificate problem: %s\n" @@ -2419,7 +2441,7 @@ msgstr "" "证书问题:%s\n" "发行者:%s" -#: ../camel/camel-tcp-stream-ssl.c:979 +#: ../camel/camel-tcp-stream-ssl.c:976 #, c-format msgid "" "Bad certificate domain: %s\n" @@ -2428,7 +2450,7 @@ msgstr "" "无效的证书域名:%s\n" "发行者:%s" -#: ../camel/camel-tcp-stream-ssl.c:997 +#: ../camel/camel-tcp-stream-ssl.c:994 #, c-format msgid "" "Certificate expired: %s\n" @@ -2437,7 +2459,7 @@ msgstr "" "证书过期:%s\n" "发行者:%s" -#: ../camel/camel-tcp-stream-ssl.c:1014 +#: ../camel/camel-tcp-stream-ssl.c:1011 #, c-format msgid "" "Certificate revocation list expired: %s\n" @@ -2451,17 +2473,18 @@ msgstr "" msgid "Could not parse URL '%s'" msgstr "无法解析 URL“%s”" -#: ../camel/camel-vee-folder.c:580 -#, c-format +#: ../camel/camel-vee-folder.c:577 +#, fuzzy, c-format +#| msgid "Error storing '%s': " msgid "Error storing '%s': %s" -msgstr "存储“%s”错误:%s" +msgstr "存储“%s”出错:" -#: ../camel/camel-vee-folder.c:657 +#: ../camel/camel-vee-folder.c:654 #, c-format msgid "No such message %s in %s" msgstr "在 %2$s 中没有信件 %1$s" -#: ../camel/camel-vee-folder.c:816 ../camel/camel-vee-folder.c:822 +#: ../camel/camel-vee-folder.c:813 ../camel/camel-vee-folder.c:819 msgid "Cannot copy or move messages into a Virtual Folder" msgstr "无法将信件移动或复制到虚拟文件夹中" @@ -2488,7 +2511,7 @@ msgstr "无法将信件复制到回收站文件夹" msgid "Cannot copy messages to the Junk folder" msgstr "无法将信件复制到垃圾邮件文件夹" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:136 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:137 #, c-format msgid "" "Cannot get message: %s\n" @@ -2497,87 +2520,90 @@ msgstr "" "无法获取信件:%s\n" " %s" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:136 -#: ../camel/providers/local/camel-maildir-folder.c:262 -#: ../camel/providers/local/camel-maildir-folder.c:291 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:137 +#: ../camel/providers/local/camel-maildir-folder.c:264 +#: ../camel/providers/local/camel-maildir-folder.c:293 +#: ../camel/providers/local/camel-maildir-folder.c:401 #: ../camel/providers/local/camel-mbox-folder.c:363 #: ../camel/providers/local/camel-mbox-folder.c:414 #: ../camel/providers/local/camel-mh-folder.c:226 msgid "No such message" msgstr "没有该信件" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:148 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:149 #: ../camel/providers/imap4/camel-imap4-folder.c:814 -#: ../camel/providers/nntp/camel-nntp-folder.c:175 -#: ../camel/providers/nntp/camel-nntp-folder.c:250 -#: ../camel/providers/nntp/camel-nntp-folder.c:410 +#: ../camel/providers/nntp/camel-nntp-folder.c:173 +#: ../camel/providers/nntp/camel-nntp-folder.c:248 +#: ../camel/providers/nntp/camel-nntp-folder.c:408 #: ../camel/providers/pop3/camel-pop3-folder.c:268 -#: ../camel/providers/pop3/camel-pop3-folder.c:578 -#: ../camel/providers/pop3/camel-pop3-folder.c:639 -#: ../camel/providers/pop3/camel-pop3-folder.c:657 +#: ../camel/providers/pop3/camel-pop3-folder.c:587 +#: ../camel/providers/pop3/camel-pop3-folder.c:648 +#: ../camel/providers/pop3/camel-pop3-folder.c:666 msgid "User canceled" msgstr "用户已取消" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:155 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:156 #: ../camel/providers/imap4/camel-imap4-folder.c:819 +#: ../camel/providers/nntp/camel-nntp-folder.c:164 #: ../camel/providers/nntp/camel-nntp-folder.c:166 -#: ../camel/providers/nntp/camel-nntp-folder.c:168 -#: ../camel/providers/nntp/camel-nntp-folder.c:177 -#: ../camel/providers/nntp/camel-nntp-folder.c:252 +#: ../camel/providers/nntp/camel-nntp-folder.c:175 +#: ../camel/providers/nntp/camel-nntp-folder.c:250 #: ../camel/providers/pop3/camel-pop3-folder.c:388 -#: ../camel/providers/pop3/camel-pop3-folder.c:581 -#: ../camel/providers/pop3/camel-pop3-folder.c:642 -#: ../camel/providers/pop3/camel-pop3-folder.c:649 -#: ../camel/providers/pop3/camel-pop3-folder.c:660 +#: ../camel/providers/pop3/camel-pop3-folder.c:590 +#: ../camel/providers/pop3/camel-pop3-folder.c:651 +#: ../camel/providers/pop3/camel-pop3-folder.c:658 +#: ../camel/providers/pop3/camel-pop3-folder.c:669 #, c-format msgid "Cannot get message %s: %s" msgstr "无法获取信件 %s:%s" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:172 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:180 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2463 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:173 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:181 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2501 #: ../camel/providers/imap4/camel-imap4-folder.c:837 msgid "This message is not available in offline mode." msgstr "该信件无法在脱机模式中使用。" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:194 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:201 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1966 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2017 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:195 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:202 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2004 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2055 msgid "Could not get message" msgstr "无法获得信件" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:939 -#: ../camel/providers/imap/camel-imap-folder.c:296 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:982 +#: ../camel/providers/imap/camel-imap-folder.c:295 #, c-format msgid "Could not load summary for %s" -msgstr "无法为 %s 装入概要" +msgstr "无法为 %s 载入概要" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1012 -#, fuzzy, c-format +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1055 +#, c-format msgid "Checking for deleted messages %s" -msgstr "检查新信件" +msgstr "检查已删除的新建 %s" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1287 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1330 msgid "Trash Folder Full. Please Empty." msgstr "回收站文件夹已满。请清空。" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:1521 -#: ../camel/providers/groupwise/camel-groupwise-store.c:633 -#: ../camel/providers/groupwise/camel-groupwise-store.c:763 -#: ../camel/providers/imap/camel-imap-folder.c:3421 -#: ../camel/providers/imap/camel-imap-folder.c:3497 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:1559 +#: ../camel/providers/groupwise/camel-groupwise-store.c:626 +#: ../camel/providers/groupwise/camel-groupwise-store.c:756 +#: ../camel/providers/imap/camel-imap-folder.c:3429 +#: ../camel/providers/imap/camel-imap-folder.c:3505 +#: ../camel/providers/imapx/camel-imapx-server.c:3631 +#: ../camel/providers/imapx/camel-imapx-server.c:3750 #, c-format msgid "Fetching summary information for new messages in %s" msgstr "从 %s 中的新信件中获取概要信息" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2317 -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2360 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2355 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2398 #, c-format msgid "Cannot append message to folder '%s': %s" msgstr "无法将信件追加到文件夹“%s”:%s" -#: ../camel/providers/groupwise/camel-groupwise-folder.c:2348 +#: ../camel/providers/groupwise/camel-groupwise-folder.c:2386 #, c-format msgid "Cannot create message: %s" msgstr "无法创建信件:%s" @@ -2607,12 +2633,14 @@ msgstr "检查新邮件" #: ../camel/providers/hula/camel-hula-provider.c:50 #: ../camel/providers/imap/camel-imap-provider.c:46 #: ../camel/providers/imap4/camel-imap4-provider.c:40 +#: ../camel/providers/imapx/camel-imapx-provider.c:52 msgid "C_heck for new messages in all folders" msgstr "在所有文件夹中检查新信件(_H)" #: ../camel/providers/groupwise/camel-groupwise-provider.c:59 #: ../camel/providers/imap/camel-imap-provider.c:68 #: ../camel/providers/imap4/camel-imap4-provider.c:51 +#: ../camel/providers/imapx/camel-imapx-provider.c:80 #: ../camel/providers/local/camel-local-provider.c:46 #: ../camel/providers/local/camel-local-provider.c:86 #: ../camel/providers/local/camel-local-provider.c:106 @@ -2629,6 +2657,7 @@ msgstr "检查新信件的垃圾内容(_U)" #: ../camel/providers/groupwise/camel-groupwise-provider.c:65 #: ../camel/providers/imap/camel-imap-provider.c:74 +#: ../camel/providers/imapx/camel-imapx-provider.c:86 msgid "Only check for Junk messages in the IN_BOX folder" msgstr "仅在收件箱中检查垃圾邮件(_B)" @@ -2641,9 +2670,8 @@ msgid "SOAP Settings" msgstr "SOAP 设置" #: ../camel/providers/groupwise/camel-groupwise-provider.c:75 -#, fuzzy msgid "Post Office Agent SOAP _Port:" -msgstr "邮局代理 SOAP 端口:" +msgstr "邮局代理 SOAP 端口(_P):" #: ../camel/providers/groupwise/camel-groupwise-provider.c:87 msgid "Novell GroupWise" @@ -2657,7 +2685,7 @@ msgstr "访问 Novell GroupWise 服务器" #: ../camel/providers/hula/camel-hula-provider.c:93 #: ../camel/providers/imap/camel-imap-provider.c:100 #: ../camel/providers/imap4/camel-imap4-provider.c:83 -#: ../camel/providers/imapp/camel-imapp-provider.c:67 +#: ../camel/providers/imapx/camel-imapx-provider.c:112 #: ../camel/providers/nntp/camel-nntp-provider.c:74 #: ../camel/providers/pop3/camel-pop3-provider.c:74 msgid "Password" @@ -2672,45 +2700,48 @@ msgstr "该选项将使用纯文本密码连接到 GroupWise 服务器。" msgid "Host or user not available in url" msgstr "URL 中的主机或用户不可用" -#: ../camel/providers/groupwise/camel-groupwise-store.c:204 -#: ../camel/providers/imap/camel-imap-store.c:1358 +#: ../camel/providers/groupwise/camel-groupwise-store.c:197 +#: ../camel/providers/imap/camel-imap-store.c:1356 +#: ../camel/providers/imapx/camel-imapx-server.c:2901 msgid "You did not enter a password." msgstr "您没有输入密码。" -#: ../camel/providers/groupwise/camel-groupwise-store.c:319 +#: ../camel/providers/groupwise/camel-groupwise-store.c:312 msgid "Some features may not work correctly with your current server version" msgstr "某些特性可能无法与您目前的服务器版本共同工作" -#: ../camel/providers/groupwise/camel-groupwise-store.c:540 -#: ../camel/providers/imap/camel-imap-store.c:1849 -#: ../camel/providers/imap/camel-imap-store.c:2047 +#: ../camel/providers/groupwise/camel-groupwise-store.c:533 +#: ../camel/providers/imap/camel-imap-store.c:1879 +#: ../camel/providers/imap/camel-imap-store.c:2077 +#: ../camel/providers/imapx/camel-imapx-store.c:376 #, c-format msgid "No such folder %s" msgstr "没有文件夹 %s" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1266 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1201 msgid "Cannot create GroupWise folders in offline mode." msgstr "无法在脱机模式下创建 GroupWise 文件夹。" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1280 -#: ../camel/providers/imap/camel-imap-store.c:1924 -#: ../camel/providers/imap/camel-imap-store.c:2304 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1215 +#: ../camel/providers/imap/camel-imap-store.c:1954 +#: ../camel/providers/imap/camel-imap-store.c:2355 +#: ../camel/providers/imapx/camel-imapx-store.c:820 msgid "The parent folder is not allowed to contain subfolders" msgstr "父文件夹不允许含有子文件夹" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1359 -#: ../camel/providers/groupwise/camel-groupwise-store.c:1382 -#, fuzzy, c-format +#: ../camel/providers/groupwise/camel-groupwise-store.c:1294 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1317 +#, c-format msgid "Cannot rename GroupWise folder '%s' to '%s'" msgstr "无法将 GroupWise 文件夹“%s”重命名为“%s”" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1414 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1349 #: ../camel/providers/groupwise/camel-groupwise-transport.c:120 #, c-format msgid "GroupWise server %s" msgstr "GroupWise 服务器 %s" -#: ../camel/providers/groupwise/camel-groupwise-store.c:1416 +#: ../camel/providers/groupwise/camel-groupwise-store.c:1351 #, c-format msgid "GroupWise service for %s on %s" msgstr "%2$s 为 %1$s 提供的 GroupWise 服务" @@ -2741,27 +2772,32 @@ msgstr "无法发送信件:%s" #: ../camel/providers/hula/camel-hula-provider.c:48 #: ../camel/providers/imap/camel-imap-provider.c:44 +#: ../camel/providers/imapx/camel-imapx-provider.c:44 msgid "Checking for New Mail" msgstr "检查新邮件" #: ../camel/providers/hula/camel-hula-provider.c:53 #: ../camel/providers/imap/camel-imap-provider.c:52 +#: ../camel/providers/imapx/camel-imapx-provider.c:58 msgid "Connection to Server" msgstr "连接服务器" #: ../camel/providers/hula/camel-hula-provider.c:55 #: ../camel/providers/imap/camel-imap-provider.c:54 +#: ../camel/providers/imapx/camel-imapx-provider.c:60 msgid "_Use custom command to connect to server" msgstr "使用自定义命令连接到服务器(_U)" #: ../camel/providers/hula/camel-hula-provider.c:57 #: ../camel/providers/imap/camel-imap-provider.c:56 +#: ../camel/providers/imapx/camel-imapx-provider.c:62 msgid "Command:" msgstr "命令:" #: ../camel/providers/hula/camel-hula-provider.c:60 #: ../camel/providers/imap/camel-imap-provider.c:60 #: ../camel/providers/imap4/camel-imap4-provider.c:43 +#: ../camel/providers/imapx/camel-imapx-provider.c:70 #: ../camel/providers/nntp/camel-nntp-provider.c:44 msgid "Folders" msgstr "文件夹" @@ -2769,12 +2805,14 @@ msgstr "文件夹" #: ../camel/providers/hula/camel-hula-provider.c:62 #: ../camel/providers/imap/camel-imap-provider.c:62 #: ../camel/providers/imap4/camel-imap4-provider.c:45 +#: ../camel/providers/imapx/camel-imapx-provider.c:72 msgid "_Show only subscribed folders" msgstr "只显示订阅了的文件夹(_S)" #: ../camel/providers/hula/camel-hula-provider.c:64 #: ../camel/providers/imap/camel-imap-provider.c:64 #: ../camel/providers/imap4/camel-imap4-provider.c:47 +#: ../camel/providers/imapx/camel-imapx-provider.c:75 msgid "O_verride server-supplied folder namespace" msgstr "覆盖服务器提供的文件夹命名空间(_V)" @@ -2807,12 +2845,12 @@ msgstr "没有输入流" #: ../camel/providers/imap/camel-imap-command.c:229 #: ../camel/providers/imap/camel-imap-command.c:278 #: ../camel/providers/imap/camel-imap-command.c:492 -#: ../camel/providers/imap/camel-imap-store.c:3051 +#: ../camel/providers/imap/camel-imap-store.c:3126 msgid "Operation cancelled" msgstr "操作已取消" #: ../camel/providers/imap/camel-imap-command.c:331 -#: ../camel/providers/imap/camel-imap-store.c:3056 +#: ../camel/providers/imap/camel-imap-store.c:3131 #, c-format msgid "Server unexpectedly disconnected: %s" msgstr "服务器意外地中止了连接:%s" @@ -2852,65 +2890,68 @@ msgstr "IMAP 服务器应答不含有 %s 信息" msgid "Unexpected OK response from IMAP server: %s" msgstr "来自 IMAP 服务器意外的 OK 应答:%s" -#: ../camel/providers/imap/camel-imap-folder.c:91 +#: ../camel/providers/imap/camel-imap-folder.c:90 msgid "Always check for new mail in this folder" msgstr "总是检查此文件夹中的新邮件(_B)" -#: ../camel/providers/imap/camel-imap-folder.c:277 +#: ../camel/providers/imap/camel-imap-folder.c:276 #, c-format msgid "Could not create directory %s: %s" msgstr "无法创建目录 %s:%s" #. Check UIDs and flags of all messages we already know of. -#: ../camel/providers/imap/camel-imap-folder.c:919 +#: ../camel/providers/imap/camel-imap-folder.c:918 +#: ../camel/providers/imapx/camel-imapx-server.c:3668 #, c-format msgid "Scanning for changed messages in %s" msgstr "扫描 %s 中更改了的信件" -#: ../camel/providers/imap/camel-imap-folder.c:1987 +#: ../camel/providers/imap/camel-imap-folder.c:1986 #, c-format msgid "Unexpected response status '%s' after APPEND command" msgstr "APPEND 命令后返回了未知的响应状态“%s”" -#: ../camel/providers/imap/camel-imap-folder.c:2002 +#: ../camel/providers/imap/camel-imap-folder.c:2001 msgid "No response on continuation after APPEND command" msgstr "APPEND 命令后续无响应" -#: ../camel/providers/imap/camel-imap-folder.c:2047 +#: ../camel/providers/imap/camel-imap-folder.c:2046 msgid "Unknown error occurred during APPEND command!" msgstr "在 APPEND 命令时发生了错误!" -#: ../camel/providers/imap/camel-imap-folder.c:2878 +#: ../camel/providers/imap/camel-imap-folder.c:2877 #, c-format msgid "Unable to retrieve message: %s" msgstr "无法获取信件:%s" -#: ../camel/providers/imap/camel-imap-folder.c:2913 +#: ../camel/providers/imap/camel-imap-folder.c:2912 +#: ../camel/providers/imapx/camel-imapx-server.c:4782 #, c-format msgid "Cannot get message with message ID %s: %s" msgstr "无法获取信件 ID %s:%s" -#: ../camel/providers/imap/camel-imap-folder.c:2914 +#: ../camel/providers/imap/camel-imap-folder.c:2913 +#: ../camel/providers/imapx/camel-imapx-server.c:4783 msgid "No such message available." msgstr "没有该信件。" -#: ../camel/providers/imap/camel-imap-folder.c:2975 -#: ../camel/providers/imap/camel-imap-folder.c:3808 -#: ../camel/providers/nntp/camel-nntp-folder.c:238 +#: ../camel/providers/imap/camel-imap-folder.c:2974 +#: ../camel/providers/imap/camel-imap-folder.c:3819 +#: ../camel/providers/nntp/camel-nntp-folder.c:236 msgid "This message is not currently available" msgstr "该信件目前不可用" -#: ../camel/providers/imap/camel-imap-folder.c:3624 +#: ../camel/providers/imap/camel-imap-folder.c:3632 #, c-format msgid "Incomplete server response: no information provided for message %d" msgstr "不完整的服务器响应:没有为第%d封信提供信息" -#: ../camel/providers/imap/camel-imap-folder.c:3632 +#: ../camel/providers/imap/camel-imap-folder.c:3640 #, c-format msgid "Incomplete server response: no UID provided for message %d" msgstr "不完整的服务器响应:没有为第%d封信提供 UID" -#: ../camel/providers/imap/camel-imap-folder.c:3846 +#: ../camel/providers/imap/camel-imap-folder.c:3857 msgid "Could not find message body in FETCH response." msgstr "无法在 FETCH 应答中找到信体。" @@ -2918,7 +2959,7 @@ msgstr "无法在 FETCH 应答中找到信体。" #: ../camel/providers/imap/camel-imap-message-cache.c:244 #, c-format msgid "Could not open cache directory: %s" -msgstr "无法打开缓冲器目录:%s" +msgstr "无法打开缓存目录:%s" #: ../camel/providers/imap/camel-imap-message-cache.c:330 #: ../camel/providers/imap/camel-imap-message-cache.c:387 @@ -2934,25 +2975,30 @@ msgid "Failed to cache %s: %s" msgstr "缓存 %s 失败:%s" #: ../camel/providers/imap/camel-imap-provider.c:48 +#: ../camel/providers/imapx/camel-imapx-provider.c:54 msgid "Ch_eck for new messages in subscribed folders" msgstr "在订阅的文件夹中检查新信件(_E)" #: ../camel/providers/imap/camel-imap-provider.c:66 #: ../camel/providers/imap4/camel-imap4-provider.c:49 +#: ../camel/providers/imapx/camel-imapx-provider.c:77 msgid "Namespace:" msgstr "命名空间:" #: ../camel/providers/imap/camel-imap-provider.c:70 #: ../camel/providers/imap4/camel-imap4-provider.c:53 +#: ../camel/providers/imapx/camel-imapx-provider.c:82 msgid "_Apply filters to new messages in INBOX on this server" msgstr "应用过滤规则到本服务器上收件箱中的新信件(_A)" #: ../camel/providers/imap/camel-imap-provider.c:72 +#: ../camel/providers/imapx/camel-imapx-provider.c:84 msgid "Check new messages for Jun_k contents" msgstr "检查新信件的垃圾内容(_K)" #: ../camel/providers/imap/camel-imap-provider.c:76 #: ../camel/providers/imap4/camel-imap4-provider.c:59 +#: ../camel/providers/imapx/camel-imapx-provider.c:88 msgid "Automatically synchroni_ze remote mail locally" msgstr "自动将远程邮件同步到本地(_Z)" @@ -2961,111 +3007,125 @@ msgid "IMAP" msgstr "IMAP" #: ../camel/providers/imap/camel-imap-provider.c:85 +#: ../camel/providers/imapx/camel-imapx-provider.c:98 msgid "For reading and storing mail on IMAP servers." msgstr "IMAP 服务器上的邮件的读写。" #: ../camel/providers/imap/camel-imap-provider.c:102 -#: ../camel/providers/imapp/camel-imapp-provider.c:69 +#: ../camel/providers/imapx/camel-imapx-provider.c:114 msgid "This option will connect to the IMAP server using a plaintext password." msgstr "该选项将使用纯文本密码连接到 IMAP 服务器。" -#: ../camel/providers/imap/camel-imap-store.c:437 +#: ../camel/providers/imap/camel-imap-store.c:435 #: ../camel/providers/imap4/camel-imap4-store.c:210 +#: ../camel/providers/imapx/camel-imapx-store.c:204 #, c-format msgid "IMAP server %s" msgstr "IMAP 服务器 %s" -#: ../camel/providers/imap/camel-imap-store.c:439 +#: ../camel/providers/imap/camel-imap-store.c:437 #: ../camel/providers/imap4/camel-imap4-store.c:212 +#: ../camel/providers/imapx/camel-imapx-store.c:206 #, c-format msgid "IMAP service for %s on %s" msgstr "%2$s 为 %1$s 提供的 IMAP 服务" -#: ../camel/providers/imap/camel-imap-store.c:568 -#: ../camel/providers/imap/camel-imap-store.c:583 +#: ../camel/providers/imap/camel-imap-store.c:566 +#: ../camel/providers/imap/camel-imap-store.c:581 #: ../camel/providers/imap4/camel-imap4-store.c:247 #: ../camel/providers/imap4/camel-imap4-store.c:262 #: ../camel/providers/nntp/camel-nntp-store.c:182 #: ../camel/providers/nntp/camel-nntp-store.c:197 -#: ../camel/providers/pop3/camel-pop3-store.c:170 -#: ../camel/providers/pop3/camel-pop3-store.c:184 +#: ../camel/providers/pop3/camel-pop3-store.c:192 +#: ../camel/providers/pop3/camel-pop3-store.c:206 #: ../camel/providers/smtp/camel-smtp-transport.c:259 #: ../camel/providers/smtp/camel-smtp-transport.c:274 #, c-format msgid "Could not connect to %s: %s" msgstr "无法连接到 %s:%s" -#: ../camel/providers/imap/camel-imap-store.c:569 +#: ../camel/providers/imap/camel-imap-store.c:567 #: ../camel/providers/imap4/camel-imap4-store.c:248 #: ../camel/providers/nntp/camel-nntp-store.c:183 -#: ../camel/providers/pop3/camel-pop3-store.c:171 +#: ../camel/providers/pop3/camel-pop3-store.c:193 #: ../camel/providers/smtp/camel-smtp-transport.c:260 msgid "SSL unavailable" msgstr "SSL 不可用" -#: ../camel/providers/imap/camel-imap-store.c:580 -#: ../camel/providers/imap/camel-imap-store.c:862 +#: ../camel/providers/imap/camel-imap-store.c:578 +#: ../camel/providers/imap/camel-imap-store.c:860 +#: ../camel/providers/imapx/camel-imapx-server.c:2595 +#: ../camel/providers/imapx/camel-imapx-server.c:2693 msgid "Connection cancelled" msgstr "连接已取消" -#: ../camel/providers/imap/camel-imap-store.c:691 -#: ../camel/providers/imap/camel-imap-store.c:710 -#: ../camel/providers/imap/camel-imap-store.c:716 -#: ../camel/providers/imap/camel-imap-store.c:742 +#: ../camel/providers/imap/camel-imap-store.c:689 +#: ../camel/providers/imap/camel-imap-store.c:708 +#: ../camel/providers/imap/camel-imap-store.c:714 +#: ../camel/providers/imap/camel-imap-store.c:740 #: ../camel/providers/imap4/camel-imap4-store.c:310 #: ../camel/providers/imap4/camel-imap4-store.c:325 #: ../camel/providers/imap4/camel-imap4-store.c:334 +#: ../camel/providers/imapx/camel-imapx-server.c:2764 +#: ../camel/providers/imapx/camel-imapx-server.c:2795 #, c-format msgid "Failed to connect to IMAP server %s in secure mode: %s" msgstr "以安全模式连接到 IMAP 服务器 %s 失败:%s" -#: ../camel/providers/imap/camel-imap-store.c:692 +#: ../camel/providers/imap/camel-imap-store.c:690 +#: ../camel/providers/imapx/camel-imapx-server.c:2765 #: ../camel/providers/smtp/camel-smtp-transport.c:332 msgid "STARTTLS not supported" msgstr "不支持 STARTTLS" -#: ../camel/providers/imap/camel-imap-store.c:711 +#: ../camel/providers/imap/camel-imap-store.c:709 +#: ../camel/providers/imapx/camel-imapx-server.c:2796 msgid "SSL negotiations failed" msgstr "SSL 协商失败" -#: ../camel/providers/imap/camel-imap-store.c:717 +#: ../camel/providers/imap/camel-imap-store.c:715 #: ../camel/providers/imap4/camel-imap4-store.c:335 #: ../camel/providers/smtp/camel-smtp-transport.c:371 msgid "SSL is not available in this build" msgstr "本次编译中未包含 SSL" -#: ../camel/providers/imap/camel-imap-store.c:865 +#: ../camel/providers/imap/camel-imap-store.c:863 +#: ../camel/providers/imapx/camel-imapx-server.c:2598 #, c-format msgid "Could not connect with command \"%s\": %s" msgstr "无法使用命令“%s”连接:%s" #. create a dummy "." parent inbox, use to scan, then put back at the top level -#: ../camel/providers/imap/camel-imap-store.c:1053 -#: ../camel/providers/imap/camel-imap-store.c:2400 +#: ../camel/providers/imap/camel-imap-store.c:1051 +#: ../camel/providers/imap/camel-imap-store.c:2451 #: ../camel/providers/imap4/camel-imap4-store-summary.c:356 #: ../camel/providers/imap4/camel-imap4-store.c:1403 -#: ../camel/providers/local/camel-maildir-folder.c:80 +#: ../camel/providers/imapx/camel-imapx-store.c:428 +#: ../camel/providers/imapx/camel-imapx-store.c:1001 +#: ../camel/providers/local/camel-maildir-folder.c:81 #: ../camel/providers/local/camel-maildir-store.c:219 #: ../camel/providers/local/camel-maildir-store.c:291 #: ../camel/providers/local/camel-maildir-store.c:517 #: ../camel/providers/local/camel-maildir-store.c:530 -#: ../camel/providers/local/camel-spool-store.c:463 -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:264 +#: ../camel/providers/local/camel-spool-store.c:461 msgid "Inbox" msgstr "收件箱" -#: ../camel/providers/imap/camel-imap-store.c:1305 +#: ../camel/providers/imap/camel-imap-store.c:1303 +#: ../camel/providers/imapx/camel-imapx-server.c:2860 #, c-format msgid "IMAP server %s does not support requested authentication type %s" msgstr "IMAP 服务器 %s 不支持要求的验证类型 %s" -#: ../camel/providers/imap/camel-imap-store.c:1315 +#: ../camel/providers/imap/camel-imap-store.c:1313 +#: ../camel/providers/imapx/camel-imapx-server.c:2871 #: ../camel/providers/smtp/camel-smtp-transport.c:506 #, c-format msgid "No support for authentication type %s" msgstr "不支持验证类型 %s" -#: ../camel/providers/imap/camel-imap-store.c:1389 +#: ../camel/providers/imap/camel-imap-store.c:1387 +#: ../camel/providers/imapx/camel-imapx-server.c:2940 #, c-format msgid "" "Unable to authenticate to IMAP server.\n" @@ -3076,31 +3136,32 @@ msgstr "" "%s\n" "\n" -#: ../camel/providers/imap/camel-imap-store.c:1861 -#: ../camel/providers/imap/camel-imap-store.c:2242 +#: ../camel/providers/imap/camel-imap-store.c:1891 +#: ../camel/providers/imap/camel-imap-store.c:2293 #: ../camel/providers/imap4/camel-imap4-store.c:954 +#: ../camel/providers/imapx/camel-imapx-store.c:803 #, c-format msgid "" "The folder name \"%s\" is invalid because it contains the character \"%c\"" msgstr "文件夹名“%s”无效,原因是其中含有字符“%c”" -#: ../camel/providers/imap/camel-imap-store.c:1978 +#: ../camel/providers/imap/camel-imap-store.c:2008 #: ../camel/providers/local/camel-maildir-store.c:192 -#: ../camel/providers/local/camel-mbox-store.c:204 +#: ../camel/providers/local/camel-mbox-store.c:202 #: ../camel/providers/local/camel-mh-store.c:249 #, c-format msgid "Cannot create folder '%s': folder exists." msgstr "无法创建文件夹“%s”:文件夹已存在。" -#: ../camel/providers/imap/camel-imap-store.c:2253 +#: ../camel/providers/imap/camel-imap-store.c:2304 +#: ../camel/providers/imapx/camel-imapx-store.c:812 #, c-format msgid "Unknown parent folder: %s" msgstr "未知的父文件夹:%s" -#: ../camel/providers/imap/camel-imap-store.c:3053 -#, fuzzy +#: ../camel/providers/imap/camel-imap-store.c:3128 msgid "Server unexpectedly disconnected" -msgstr "服务器意外地中止了连接:%s" +msgstr "服务器意外断开 " #: ../camel/providers/imap4/camel-imap4-command.c:572 #: ../camel/providers/imap4/camel-imap4-command.c:579 @@ -3251,10 +3312,9 @@ msgid "" msgstr "该选项将使用纯文本密码连接到 IMAPv4rev1 服务器。" #: ../camel/providers/imap4/camel-imap4-store.c:259 -#: ../camel/providers/imapp/camel-imapp-store.c:249 #: ../camel/providers/nntp/camel-nntp-store.c:194 #: ../camel/providers/nntp/camel-nntp-store.c:213 -#: ../camel/providers/pop3/camel-pop3-store.c:181 +#: ../camel/providers/pop3/camel-pop3-store.c:203 #: ../camel/providers/smtp/camel-smtp-transport.c:271 msgid "Connection canceled" msgstr "连接已取消" @@ -3267,7 +3327,7 @@ msgid "" msgstr "以安全模式连接到 IMAP 服务器 %s 失败:服务器不支持 STARTTLS" #: ../camel/providers/imap4/camel-imap4-store.c:326 -#: ../camel/providers/pop3/camel-pop3-store.c:249 +#: ../camel/providers/pop3/camel-pop3-store.c:276 msgid "TLS negotiations failed" msgstr "TLS 协商失败" @@ -3412,37 +3472,33 @@ msgstr "无数据" msgid "IMAP server %s unexpectedly disconnected: %s" msgstr "IMAP4 服务器 %s 意外断开连接:%s" -#: ../camel/providers/imapp/camel-imapp-provider.c:41 -#: ../camel/providers/pop3/camel-pop3-provider.c:43 -msgid "Message storage" -msgstr "信件存储" +#: ../camel/providers/imapx/camel-imapx-folder.c:87 +#, c-format +msgid "Could not create folder summary for %s" +msgstr "无法为 %s 创建文件夹概要" + +#: ../camel/providers/imapx/camel-imapx-folder.c:95 +#, c-format +msgid "Could not create cache for %s" +msgstr "无法为 %s 创建缓存文件" -#: ../camel/providers/imapp/camel-imapp-provider.c:49 +#: ../camel/providers/imapx/camel-imapx-provider.c:50 +msgid "Use I_dle if the server supports it" +msgstr "若服务器支持,使用 I_dle" + +#: ../camel/providers/imapx/camel-imapx-provider.c:65 +msgid "Numbe_r of cached connections to use" +msgstr "要使用的缓存连接数(_R)" + +#: ../camel/providers/imapx/camel-imapx-provider.c:96 msgid "IMAP+" msgstr "IMAP+" -#: ../camel/providers/imapp/camel-imapp-provider.c:51 -msgid "" -"Experimental IMAP 4(.1) client\n" -"This is untested and unsupported code, you want to use plain imap instead.\n" -"\n" -" !!! DO NOT USE THIS FOR PRODUCTION EMAIL !!!\n" -msgstr "" -"试验性 IMAP 4(.1) 客户端\n" -"此功能是未测试的代码,不被支持,您应该换用纯 IMAP。\n" -"\n" -" !!! 不要对重要邮件使用此功能 !!!\n" - -#: ../camel/providers/imapp/camel-imapp-store.c:252 +#: ../camel/providers/imapx/camel-imapx-server.c:2696 #, c-format msgid "Could not connect to %s (port %s): %s" msgstr "无法连接到 %s(端口 %s):%s" -#: ../camel/providers/imapp/camel-imapp-store.c:348 -#, c-format -msgid "Could not connect to POP server on %s" -msgstr "无法连接到 %s 上的 POP 服务器" - #: ../camel/providers/local/camel-local-folder.c:178 msgid "Index message body data" msgstr "索引信体数据" @@ -3456,9 +3512,9 @@ msgstr "~%s (%s)" #. /var/spool/mail relative path + protocol #: ../camel/providers/local/camel-local-folder.c:399 #: ../camel/providers/local/camel-local-folder.c:402 -#, fuzzy, c-format +#, c-format msgid "mailbox: %s (%s)" -msgstr "邮件箱:%s (%s)" +msgstr "邮箱:%s (%s)" #. a full path + protocol #: ../camel/providers/local/camel-local-folder.c:406 @@ -3524,53 +3580,53 @@ msgstr "" msgid "Standard Unix mbox spool directory" msgstr "标准 Unix mbox spool 目录" -#: ../camel/providers/local/camel-local-store.c:165 -#: ../camel/providers/local/camel-local-store.c:276 -#: ../camel/providers/local/camel-mbox-store.c:359 -#: ../camel/providers/local/camel-spool-store.c:128 +#: ../camel/providers/local/camel-local-store.c:163 +#: ../camel/providers/local/camel-local-store.c:274 +#: ../camel/providers/local/camel-mbox-store.c:357 +#: ../camel/providers/local/camel-spool-store.c:126 #, c-format msgid "Store root %s is not an absolute path" msgstr "存储根目录 %s 不是绝对路径" -#: ../camel/providers/local/camel-local-store.c:172 +#: ../camel/providers/local/camel-local-store.c:170 #, c-format msgid "Store root %s is not a regular directory" msgstr "存储根目录 %s 不是普通目录" -#: ../camel/providers/local/camel-local-store.c:181 -#: ../camel/providers/local/camel-local-store.c:189 -#: ../camel/providers/local/camel-local-store.c:287 +#: ../camel/providers/local/camel-local-store.c:179 +#: ../camel/providers/local/camel-local-store.c:187 +#: ../camel/providers/local/camel-local-store.c:285 #, c-format msgid "Cannot get folder: %s: %s" msgstr "无法获取文件夹:%s:%s" -#: ../camel/providers/local/camel-local-store.c:201 +#: ../camel/providers/local/camel-local-store.c:199 msgid "Local stores do not have an inbox" msgstr "本地存储没有收件箱" -#: ../camel/providers/local/camel-local-store.c:247 +#: ../camel/providers/local/camel-local-store.c:245 #, c-format msgid "Local mail file %s" msgstr "本地邮件文件 %s" -#: ../camel/providers/local/camel-local-store.c:342 +#: ../camel/providers/local/camel-local-store.c:340 #, c-format msgid "Could not rename folder %s to %s: %s" msgstr "无法将文件夹 %s 改名为 %s:%s" -#: ../camel/providers/local/camel-local-store.c:410 +#: ../camel/providers/local/camel-local-store.c:408 #, c-format msgid "Could not rename '%s': %s" msgstr "无法重命名“%s”:%s" -#: ../camel/providers/local/camel-local-store.c:435 -#: ../camel/providers/local/camel-mbox-store.c:300 +#: ../camel/providers/local/camel-local-store.c:433 +#: ../camel/providers/local/camel-mbox-store.c:298 #, c-format msgid "Could not delete folder index file '%s': %s" msgstr "无法删除文件夹索引文件“%s”:%s" -#: ../camel/providers/local/camel-local-store.c:458 -#: ../camel/providers/local/camel-mbox-store.c:324 +#: ../camel/providers/local/camel-local-store.c:456 +#: ../camel/providers/local/camel-mbox-store.c:322 #, c-format msgid "Could not delete folder meta file '%s': %s" msgstr "无法删除文件夹元文件“%s”:%s" @@ -3579,19 +3635,20 @@ msgstr "无法删除文件夹元文件“%s”:%s" msgid "Unable to add message to summary: unknown reason" msgstr "无法将信件添加到概要中:未知的原因" -#: ../camel/providers/local/camel-maildir-folder.c:228 +#: ../camel/providers/local/camel-maildir-folder.c:230 msgid "Maildir append message canceled" msgstr "邮件目录附加消息已取消" -#: ../camel/providers/local/camel-maildir-folder.c:231 +#: ../camel/providers/local/camel-maildir-folder.c:233 #, c-format msgid "Cannot append message to maildir folder: %s: %s" msgstr "无法将信件附加到邮件目录文件夹:%s:%s" -#: ../camel/providers/local/camel-maildir-folder.c:261 -#: ../camel/providers/local/camel-maildir-folder.c:290 -#: ../camel/providers/local/camel-maildir-folder.c:304 -#: ../camel/providers/local/camel-maildir-folder.c:312 +#: ../camel/providers/local/camel-maildir-folder.c:263 +#: ../camel/providers/local/camel-maildir-folder.c:292 +#: ../camel/providers/local/camel-maildir-folder.c:306 +#: ../camel/providers/local/camel-maildir-folder.c:314 +#: ../camel/providers/local/camel-maildir-folder.c:400 #: ../camel/providers/local/camel-mbox-folder.c:362 #: ../camel/providers/local/camel-mbox-folder.c:413 #: ../camel/providers/local/camel-mbox-folder.c:434 @@ -3608,27 +3665,31 @@ msgstr "" "无法从文件夹 %2$s 获取信件:%1$s\n" " %3$s" -#: ../camel/providers/local/camel-maildir-folder.c:313 +#: ../camel/providers/local/camel-maildir-folder.c:315 msgid "Invalid message contents" msgstr "无效的信件内容" +#: ../camel/providers/local/camel-maildir-folder.c:418 +msgid "Cannot transfer message to destination folder" +msgstr "无法将信件转移到目标文件夹" + #: ../camel/providers/local/camel-maildir-store.c:148 #: ../camel/providers/local/camel-maildir-store.c:173 -#: ../camel/providers/local/camel-mbox-store.c:176 -#: ../camel/providers/local/camel-mbox-store.c:188 +#: ../camel/providers/local/camel-mbox-store.c:174 +#: ../camel/providers/local/camel-mbox-store.c:186 #, c-format msgid "Cannot create folder '%s': %s" msgstr "无法创建文件夹“%s”:%s" #: ../camel/providers/local/camel-maildir-store.c:161 -#: ../camel/providers/local/camel-mbox-store.c:147 +#: ../camel/providers/local/camel-mbox-store.c:145 #: ../camel/providers/local/camel-mh-store.c:217 #, c-format msgid "Cannot get folder '%s': %s" msgstr "无法获取文件夹“%s”:%s" #: ../camel/providers/local/camel-maildir-store.c:165 -#: ../camel/providers/local/camel-mbox-store.c:155 +#: ../camel/providers/local/camel-mbox-store.c:153 #: ../camel/providers/local/camel-mh-store.c:224 #, c-format msgid "Cannot get folder '%s': folder does not exist." @@ -3651,30 +3712,30 @@ msgid "not a maildir directory" msgstr "不是 maildir 目录" #: ../camel/providers/local/camel-maildir-store.c:440 -#: ../camel/providers/local/camel-spool-store.c:330 -#: ../camel/providers/local/camel-spool-store.c:344 +#: ../camel/providers/local/camel-spool-store.c:328 +#: ../camel/providers/local/camel-spool-store.c:342 #, c-format msgid "Could not scan folder '%s': %s" msgstr "无法扫描文件夹“%s”:%s" -#: ../camel/providers/local/camel-maildir-summary.c:437 -#: ../camel/providers/local/camel-maildir-summary.c:556 +#: ../camel/providers/local/camel-maildir-summary.c:432 +#: ../camel/providers/local/camel-maildir-summary.c:551 #, c-format msgid "Cannot open maildir directory path: %s: %s" msgstr "无法打开邮件目录路径:%s:%s" -#: ../camel/providers/local/camel-maildir-summary.c:549 +#: ../camel/providers/local/camel-maildir-summary.c:544 msgid "Checking folder consistency" msgstr "检查文件夹一致性" -#: ../camel/providers/local/camel-maildir-summary.c:658 +#: ../camel/providers/local/camel-maildir-summary.c:637 msgid "Checking for new messages" msgstr "检查新信件" -#: ../camel/providers/local/camel-maildir-summary.c:748 -#: ../camel/providers/local/camel-mbox-summary.c:526 -#: ../camel/providers/local/camel-mbox-summary.c:722 -#: ../camel/providers/local/camel-mbox-summary.c:842 +#: ../camel/providers/local/camel-maildir-summary.c:724 +#: ../camel/providers/local/camel-mbox-summary.c:529 +#: ../camel/providers/local/camel-mbox-summary.c:725 +#: ../camel/providers/local/camel-mbox-summary.c:845 #: ../camel/providers/local/camel-spool-summary.c:150 msgid "Storing folder" msgstr "存储文件夹" @@ -3708,19 +3769,19 @@ msgstr "文件夹好像已经被不可恢复地破坏了。" msgid "Message construction failed." msgstr "信件构建失败。" -#: ../camel/providers/local/camel-mbox-store.c:166 -#: ../camel/providers/local/camel-mbox-store.c:365 +#: ../camel/providers/local/camel-mbox-store.c:164 +#: ../camel/providers/local/camel-mbox-store.c:363 msgid "Cannot create a folder by this name." msgstr "无法以此名称创建文件夹。" -#: ../camel/providers/local/camel-mbox-store.c:198 +#: ../camel/providers/local/camel-mbox-store.c:196 #, c-format msgid "Cannot get folder '%s': not a regular file." msgstr "无法获取文件夹“%s”:不是普通文件" -#: ../camel/providers/local/camel-mbox-store.c:228 -#: ../camel/providers/local/camel-mbox-store.c:239 -#: ../camel/providers/local/camel-mbox-store.c:262 +#: ../camel/providers/local/camel-mbox-store.c:226 +#: ../camel/providers/local/camel-mbox-store.c:237 +#: ../camel/providers/local/camel-mbox-store.c:260 #, c-format msgid "" "Could not delete folder '%s':\n" @@ -3729,120 +3790,120 @@ msgstr "" "无法删除文件夹“%s”:\n" "%s" -#: ../camel/providers/local/camel-mbox-store.c:247 +#: ../camel/providers/local/camel-mbox-store.c:245 #, c-format msgid "'%s' is not a regular file." msgstr "“%s”并不是普通文件。" -#: ../camel/providers/local/camel-mbox-store.c:254 +#: ../camel/providers/local/camel-mbox-store.c:252 #, c-format msgid "Folder '%s' is not empty. Not deleted." msgstr "文件夹“%s”非空。没有删除。" -#: ../camel/providers/local/camel-mbox-store.c:276 -#: ../camel/providers/local/camel-mbox-store.c:288 +#: ../camel/providers/local/camel-mbox-store.c:274 +#: ../camel/providers/local/camel-mbox-store.c:286 #, c-format msgid "Could not delete folder summary file '%s': %s" msgstr "无法删除文件夹概要文件“%s”:%s" -#: ../camel/providers/local/camel-mbox-store.c:378 +#: ../camel/providers/local/camel-mbox-store.c:376 #, c-format msgid "Cannot create directory '%s': %s." msgstr "无法创建目录“%s”:%s" -#: ../camel/providers/local/camel-mbox-store.c:392 +#: ../camel/providers/local/camel-mbox-store.c:390 #, c-format msgid "Cannot create folder: %s: %s" msgstr "无法创建文件夹:%s:%s" -#: ../camel/providers/local/camel-mbox-store.c:394 +#: ../camel/providers/local/camel-mbox-store.c:392 msgid "Folder already exists" msgstr "文件夹已经存在" -#: ../camel/providers/local/camel-mbox-store.c:485 +#: ../camel/providers/local/camel-mbox-store.c:483 msgid "The new folder name is illegal." msgstr "指定的文件夹名称不合法。" -#: ../camel/providers/local/camel-mbox-store.c:498 +#: ../camel/providers/local/camel-mbox-store.c:496 #, c-format msgid "Could not rename '%s': '%s': %s" msgstr "无法重命名“%s”:“%s”:%s" -#: ../camel/providers/local/camel-mbox-store.c:579 +#: ../camel/providers/local/camel-mbox-store.c:577 #, c-format msgid "Could not rename '%s' to %s: %s" msgstr "无法将“%s”重命名为 %s:%s" -#: ../camel/providers/local/camel-mbox-summary.c:532 +#: ../camel/providers/local/camel-mbox-summary.c:535 #, c-format msgid "Could not open folder: %s: %s" msgstr "无法打开文件夹:%s:%s" -#: ../camel/providers/local/camel-mbox-summary.c:582 +#: ../camel/providers/local/camel-mbox-summary.c:585 #, c-format msgid "Fatal mail parser error near position %ld in folder %s" msgstr "在文件夹 %2$s 中邻近 %1$ld 的位置出现致命的解析错误" -#: ../camel/providers/local/camel-mbox-summary.c:659 +#: ../camel/providers/local/camel-mbox-summary.c:662 #, c-format msgid "Cannot check folder: %s: %s" msgstr "无法检查文件夹:%s:%s" -#: ../camel/providers/local/camel-mbox-summary.c:727 -#: ../camel/providers/local/camel-mbox-summary.c:847 +#: ../camel/providers/local/camel-mbox-summary.c:730 +#: ../camel/providers/local/camel-mbox-summary.c:850 #: ../camel/providers/local/camel-spool-summary.c:155 #, c-format msgid "Could not open file: %s: %s" msgstr "无法打开文件:%s:%s" -#: ../camel/providers/local/camel-mbox-summary.c:739 +#: ../camel/providers/local/camel-mbox-summary.c:742 #: ../camel/providers/local/camel-spool-summary.c:168 #, c-format msgid "Cannot open temporary mailbox: %s" msgstr "无法打开临时邮件箱:%s" -#: ../camel/providers/local/camel-mbox-summary.c:752 -#: ../camel/providers/local/camel-mbox-summary.c:956 +#: ../camel/providers/local/camel-mbox-summary.c:755 +#: ../camel/providers/local/camel-mbox-summary.c:961 #, c-format msgid "Could not close source folder %s: %s" msgstr "无法关闭来源文件夹 %s:%s" -#: ../camel/providers/local/camel-mbox-summary.c:761 +#: ../camel/providers/local/camel-mbox-summary.c:764 #, c-format msgid "Could not close temporary folder: %s" msgstr "无法关闭临时文件夹:%s" -#: ../camel/providers/local/camel-mbox-summary.c:776 +#: ../camel/providers/local/camel-mbox-summary.c:779 #, c-format msgid "Could not rename folder: %s" msgstr "无法重命名文件夹:%s" -#: ../camel/providers/local/camel-mbox-summary.c:858 -#: ../camel/providers/local/camel-mbox-summary.c:1083 +#: ../camel/providers/local/camel-mbox-summary.c:861 +#: ../camel/providers/local/camel-mbox-summary.c:1090 #, c-format msgid "Could not store folder: %s" msgstr "无法存储文件夹:%s" -#: ../camel/providers/local/camel-mbox-summary.c:897 -#: ../camel/providers/local/camel-mbox-summary.c:905 -#: ../camel/providers/local/camel-mbox-summary.c:1113 +#: ../camel/providers/local/camel-mbox-summary.c:901 +#: ../camel/providers/local/camel-mbox-summary.c:909 #: ../camel/providers/local/camel-mbox-summary.c:1121 +#: ../camel/providers/local/camel-mbox-summary.c:1129 msgid "Summary and folder mismatch, even after a sync" msgstr "即使同步后,概要和文件夹仍然不匹配" -#: ../camel/providers/local/camel-mbox-summary.c:1046 +#: ../camel/providers/local/camel-mbox-summary.c:1053 #: ../camel/providers/local/camel-spool-summary.c:334 #, c-format msgid "Unknown error: %s" msgstr "未知的错误:%s" -#: ../camel/providers/local/camel-mbox-summary.c:1189 -#: ../camel/providers/local/camel-mbox-summary.c:1215 +#: ../camel/providers/local/camel-mbox-summary.c:1197 +#: ../camel/providers/local/camel-mbox-summary.c:1223 #, c-format msgid "Writing to temporary mailbox failed: %s" msgstr "写入临时 mailbox 失败:%s" -#: ../camel/providers/local/camel-mbox-summary.c:1206 +#: ../camel/providers/local/camel-mbox-summary.c:1214 #, c-format msgid "Writing to temporary mailbox failed: %s: %s" msgstr "写入临时 mailbox 失败:%s:%s" @@ -3871,22 +3932,22 @@ msgstr "无法获取文件夹“%s”:不是目录。" msgid "Cannot open MH directory path: %s: %s" msgstr "无法打开 MH 目录:%s:%s" -#: ../camel/providers/local/camel-spool-store.c:134 +#: ../camel/providers/local/camel-spool-store.c:132 #, c-format msgid "Spool '%s' cannot be opened: %s" msgstr "无法打开脱机文件“%s”:%s" -#: ../camel/providers/local/camel-spool-store.c:146 +#: ../camel/providers/local/camel-spool-store.c:144 #, c-format msgid "Spool '%s' is not a regular file or directory" msgstr "脱机文件“%s”不是普通文件或目录" -#: ../camel/providers/local/camel-spool-store.c:165 +#: ../camel/providers/local/camel-spool-store.c:163 #, c-format msgid "Folder '%s/%s' does not exist." msgstr "文件夹“%s/%s”不存在。" -#: ../camel/providers/local/camel-spool-store.c:175 +#: ../camel/providers/local/camel-spool-store.c:173 #, c-format msgid "" "Could not open folder '%s':\n" @@ -3895,12 +3956,12 @@ msgstr "" "无法打开文件夹“%s”:\n" "%s" -#: ../camel/providers/local/camel-spool-store.c:179 +#: ../camel/providers/local/camel-spool-store.c:177 #, c-format msgid "Folder '%s' does not exist." msgstr "文件夹“%s”不存在。" -#: ../camel/providers/local/camel-spool-store.c:184 +#: ../camel/providers/local/camel-spool-store.c:182 #, c-format msgid "" "Could not create folder '%s':\n" @@ -3909,30 +3970,30 @@ msgstr "" "无法创建文件夹“%s”:\n" "%s" -#: ../camel/providers/local/camel-spool-store.c:192 +#: ../camel/providers/local/camel-spool-store.c:190 #, c-format msgid "'%s' is not a mailbox file." msgstr "“%s”不是邮件箱文件。" -#: ../camel/providers/local/camel-spool-store.c:209 +#: ../camel/providers/local/camel-spool-store.c:207 msgid "Store does not support an INBOX" msgstr "存储并不支持收件箱" -#: ../camel/providers/local/camel-spool-store.c:221 +#: ../camel/providers/local/camel-spool-store.c:219 #, c-format msgid "Spool mail file %s" msgstr "脱机邮件文件 %s" -#: ../camel/providers/local/camel-spool-store.c:221 +#: ../camel/providers/local/camel-spool-store.c:219 #, c-format msgid "Spool folder tree %s" msgstr "脱机文件夹树 %s" -#: ../camel/providers/local/camel-spool-store.c:229 +#: ../camel/providers/local/camel-spool-store.c:227 msgid "Spool folders cannot be renamed" msgstr "脱机文件夹无法改名" -#: ../camel/providers/local/camel-spool-store.c:237 +#: ../camel/providers/local/camel-spool-store.c:235 msgid "Spool folders cannot be deleted" msgstr "脱机文件夹无法删除" @@ -3959,26 +4020,26 @@ msgstr "" "无法同步脱机文件夹 %s:%s\n" "文件夹可能已损坏,副本保存在“%s”" -#: ../camel/providers/nntp/camel-nntp-folder.c:137 -#: ../camel/providers/nntp/camel-nntp-folder.c:194 -#: ../camel/providers/nntp/camel-nntp-folder.c:226 +#: ../camel/providers/nntp/camel-nntp-folder.c:135 +#: ../camel/providers/nntp/camel-nntp-folder.c:192 +#: ../camel/providers/nntp/camel-nntp-folder.c:224 #, c-format msgid "Internal error: UID in invalid format: %s" msgstr "内部错误:UID 的格式无效:%s" -#: ../camel/providers/nntp/camel-nntp-folder.c:367 -#: ../camel/providers/nntp/camel-nntp-folder.c:370 +#: ../camel/providers/nntp/camel-nntp-folder.c:365 +#: ../camel/providers/nntp/camel-nntp-folder.c:368 +#: ../camel/providers/nntp/camel-nntp-folder.c:410 #: ../camel/providers/nntp/camel-nntp-folder.c:412 -#: ../camel/providers/nntp/camel-nntp-folder.c:414 #, c-format msgid "Posting failed: %s" msgstr "发表失败:%s" -#: ../camel/providers/nntp/camel-nntp-folder.c:432 +#: ../camel/providers/nntp/camel-nntp-folder.c:430 msgid "You cannot post NNTP messages while working offline!" msgstr "您离线时无法投递 NNTP 信件!" -#: ../camel/providers/nntp/camel-nntp-folder.c:443 +#: ../camel/providers/nntp/camel-nntp-folder.c:441 msgid "You cannot copy messages from a NNTP folder!" msgstr "您无法从 NNTP 文件夹复制信件!" @@ -4087,26 +4148,26 @@ msgid "No such folder: %s" msgstr "没有文件夹:%s" #: ../camel/providers/nntp/camel-nntp-summary.c:272 -#: ../camel/providers/nntp/camel-nntp-summary.c:370 +#: ../camel/providers/nntp/camel-nntp-summary.c:373 #, c-format msgid "%s: Scanning new messages" msgstr "%s:正在扫描新信件" -#: ../camel/providers/nntp/camel-nntp-summary.c:279 +#: ../camel/providers/nntp/camel-nntp-summary.c:282 #, c-format msgid "Unexpected server response from xover: %s" msgstr "来自 xover 的意外服务器应答:%s" -#: ../camel/providers/nntp/camel-nntp-summary.c:384 +#: ../camel/providers/nntp/camel-nntp-summary.c:387 #, c-format msgid "Unexpected server response from head: %s" msgstr "来自 head 的意外服务器应答:%s" -#: ../camel/providers/nntp/camel-nntp-summary.c:420 +#: ../camel/providers/nntp/camel-nntp-summary.c:423 msgid "Use cancel" msgstr "使用取消" -#: ../camel/providers/nntp/camel-nntp-summary.c:422 +#: ../camel/providers/nntp/camel-nntp-summary.c:425 #, c-format msgid "Operation failed: %s" msgstr "操作失败:%s" @@ -4128,23 +4189,27 @@ msgstr "销毁旧信件" msgid "Expunging deleted messages" msgstr "彻底销毁已删除的信件" -#: ../camel/providers/pop3/camel-pop3-folder.c:530 -#: ../camel/providers/pop3/camel-pop3-folder.c:552 +#: ../camel/providers/pop3/camel-pop3-folder.c:539 +#: ../camel/providers/pop3/camel-pop3-folder.c:561 #, c-format msgid "No message with UID %s" msgstr "没有 UID 为 %s 的信件" #. Sigh, most of the crap in this function is so that the cancel button #. returns the proper exception code. Sigh. -#: ../camel/providers/pop3/camel-pop3-folder.c:559 +#: ../camel/providers/pop3/camel-pop3-folder.c:568 #, c-format msgid "Retrieving POP message %d" msgstr "正在获取 POP 信件 %d" -#: ../camel/providers/pop3/camel-pop3-folder.c:649 +#: ../camel/providers/pop3/camel-pop3-folder.c:658 msgid "Unknown reason" msgstr "未知原因" +#: ../camel/providers/pop3/camel-pop3-provider.c:43 +msgid "Message storage" +msgstr "信件存储" + #: ../camel/providers/pop3/camel-pop3-provider.c:45 msgid "_Leave messages on server" msgstr "在服务器上保留信件(_L)" @@ -4183,56 +4248,62 @@ msgstr "" "该选项使 Evolution 在连接到 POP 服务器时使用 APOP 协议。即使是声称支持这一功" "能的服务器,也不一定能使所有用户工作。" -#: ../camel/providers/pop3/camel-pop3-store.c:207 +#: ../camel/providers/pop3/camel-pop3-store.c:229 #, c-format msgid "Failed to read a valid greeting from POP server %s" msgstr "从 POP 服务器 %s 读取欢迎词失败" -#: ../camel/providers/pop3/camel-pop3-store.c:224 -#: ../camel/providers/pop3/camel-pop3-store.c:238 -#: ../camel/providers/pop3/camel-pop3-store.c:248 -#: ../camel/providers/pop3/camel-pop3-store.c:254 +#: ../camel/providers/pop3/camel-pop3-store.c:246 +#: ../camel/providers/pop3/camel-pop3-store.c:275 +#: ../camel/providers/pop3/camel-pop3-store.c:281 #, c-format msgid "Failed to connect to POP server %s in secure mode: %s" msgstr "以安全模式连接到 POP 服务器 %s 失败:%s" -#: ../camel/providers/pop3/camel-pop3-store.c:225 +#: ../camel/providers/pop3/camel-pop3-store.c:247 msgid "STLS not supported by server" msgstr "服务器不支持 STLS" -#: ../camel/providers/pop3/camel-pop3-store.c:255 +#. Translators: Last %s is an optional explanation beginning with ": " separator +#: ../camel/providers/pop3/camel-pop3-store.c:263 +#, c-format +msgid "Failed to connect to POP server %s in secure mode%s" +msgstr "以安全模式连接到 POP 服务器 %s 失败:%s" + +#: ../camel/providers/pop3/camel-pop3-store.c:282 msgid "TLS is not available in this build" msgstr "本次编译中未包含 TLS" -#: ../camel/providers/pop3/camel-pop3-store.c:361 +#: ../camel/providers/pop3/camel-pop3-store.c:388 #, c-format msgid "Could not connect to POP server %s" msgstr "无法连接到 POP 服务器 %s" -#: ../camel/providers/pop3/camel-pop3-store.c:402 -#: ../camel/providers/pop3/camel-pop3-store.c:535 +#: ../camel/providers/pop3/camel-pop3-store.c:429 +#: ../camel/providers/pop3/camel-pop3-store.c:567 #, c-format msgid "" "Unable to connect to POP server %s: No support for requested authentication " "mechanism." msgstr "无法连接到 POP 服务器 %s:不支持请求认证机制。" -#: ../camel/providers/pop3/camel-pop3-store.c:418 +#. Translators: Last %s is an optional explanation beginning with ": " separator +#: ../camel/providers/pop3/camel-pop3-store.c:448 #, c-format -msgid "SASL '%s' Login failed for POP server %s: %s" -msgstr "使用 SASL“%s”登录 POP 服务器 %s 失败:%s" +msgid "SASL '%s' Login failed for POP server %s%s" +msgstr "使用 SASL“%s”登录 POP 服务器 %s 失败%s" -#: ../camel/providers/pop3/camel-pop3-store.c:430 +#: ../camel/providers/pop3/camel-pop3-store.c:462 #, c-format msgid "Cannot login to POP server %s: SASL Protocol error" msgstr "无法登录到 POP 服务器 %s:SASL 协议错误" -#: ../camel/providers/pop3/camel-pop3-store.c:449 +#: ../camel/providers/pop3/camel-pop3-store.c:481 #, c-format msgid "Failed to authenticate on POP server %s: %s" msgstr "认证到 POP 服务器 %s 失败:%s" -#: ../camel/providers/pop3/camel-pop3-store.c:508 +#: ../camel/providers/pop3/camel-pop3-store.c:540 #, c-format msgid "" "Unable to connect to POP server %s:\tInvalid APOP ID received. Impersonation " @@ -4241,8 +4312,7 @@ msgstr "" "无法连接到 POP 服务器 %s:\t接收到非法的 APOP ID。可能是冒名攻击。请联系您的" "管理员。" -#: ../camel/providers/pop3/camel-pop3-store.c:549 -#: ../camel/providers/pop3/camel-pop3-store.c:562 +#: ../camel/providers/pop3/camel-pop3-store.c:581 #, c-format msgid "" "Unable to connect to POP server %s.\n" @@ -4251,16 +4321,27 @@ msgstr "" "无法连接到 POP 服务器 %s。\n" "发送密码错误:%s" -#: ../camel/providers/pop3/camel-pop3-store.c:556 +#. Translators: Last %s is an optional explanation beginning with ": " separator +#: ../camel/providers/pop3/camel-pop3-store.c:591 +#, c-format +msgid "" +"Unable to connect to POP server %s.\n" +"Error sending username%s" +msgstr "" +"无法连接到 POP 服务器 %s。\n" +"发送用户名错误%s" + +#. Translators: Last %s is an optional explanation beginning with ": " separator +#: ../camel/providers/pop3/camel-pop3-store.c:601 #, c-format msgid "" "Unable to connect to POP server %s.\n" -"Error sending username: %s" +"Error sending password%s" msgstr "" "无法连接到 POP 服务器 %s。\n" -"发送用户名错误:%s" +"发送密码错误:%s" -#: ../camel/providers/pop3/camel-pop3-store.c:669 +#: ../camel/providers/pop3/camel-pop3-store.c:707 #, c-format msgid "No such folder '%s'." msgstr "没有文件夹“%s”。" @@ -4569,85 +4650,85 @@ msgstr "QUIT 命令失败:%s" msgid "QUIT command failed" msgstr "QUIT 命令失败" -#: ../libedataserver/e-categories.c:47 +#: ../libedataserver/e-categories.c:44 msgid "Business" msgstr "商务" -#: ../libedataserver/e-categories.c:48 +#: ../libedataserver/e-categories.c:45 msgid "Competition" msgstr "完成" -#: ../libedataserver/e-categories.c:49 +#: ../libedataserver/e-categories.c:46 msgid "Favorites" msgstr "最爱" -#: ../libedataserver/e-categories.c:50 +#: ../libedataserver/e-categories.c:47 msgid "Gifts" msgstr "礼物" -#: ../libedataserver/e-categories.c:51 +#: ../libedataserver/e-categories.c:48 msgid "Goals/Objectives" msgstr "目标" -#: ../libedataserver/e-categories.c:52 +#: ../libedataserver/e-categories.c:49 msgid "Holiday" msgstr "假日" -#: ../libedataserver/e-categories.c:53 +#: ../libedataserver/e-categories.c:50 msgid "Holiday Cards" msgstr "假日卡" #. important people (e.g. new business partners) -#: ../libedataserver/e-categories.c:55 +#: ../libedataserver/e-categories.c:52 msgid "Hot Contacts" msgstr "亲密联系人" -#: ../libedataserver/e-categories.c:56 +#: ../libedataserver/e-categories.c:53 msgid "Ideas" msgstr "想法" -#: ../libedataserver/e-categories.c:57 +#: ../libedataserver/e-categories.c:54 msgid "International" msgstr "国际" -#: ../libedataserver/e-categories.c:58 +#: ../libedataserver/e-categories.c:55 msgid "Key Customer" msgstr "关键客户" -#: ../libedataserver/e-categories.c:59 +#: ../libedataserver/e-categories.c:56 msgid "Miscellaneous" msgstr "杂类" -#: ../libedataserver/e-categories.c:60 +#: ../libedataserver/e-categories.c:57 msgid "Personal" msgstr "个人" -#: ../libedataserver/e-categories.c:61 +#: ../libedataserver/e-categories.c:58 msgid "Phone Calls" msgstr "通电话" #. Translators: "Status" is a category name; it can mean anything user wants to -#: ../libedataserver/e-categories.c:63 +#: ../libedataserver/e-categories.c:60 msgid "Status" msgstr "状态" -#: ../libedataserver/e-categories.c:64 +#: ../libedataserver/e-categories.c:61 msgid "Strategies" msgstr "策略" -#: ../libedataserver/e-categories.c:65 +#: ../libedataserver/e-categories.c:62 msgid "Suppliers" msgstr "供应商" -#: ../libedataserver/e-categories.c:66 +#: ../libedataserver/e-categories.c:63 msgid "Time & Expenses" msgstr "时间和花费" -#: ../libedataserver/e-categories.c:67 +#: ../libedataserver/e-categories.c:64 msgid "VIP" msgstr "VIP" -#: ../libedataserver/e-categories.c:68 +#: ../libedataserver/e-categories.c:65 msgid "Waiting" msgstr "等候" @@ -4655,7 +4736,7 @@ msgstr "等候" #. in 12-hour format. #. strftime format of a weekday, a date and a #. time, in 12-hour format. -#: ../libedataserver/e-time-utils.c:1635 ../libedataserver/e-time-utils.c:1900 +#: ../libedataserver/e-time-utils.c:1635 ../libedataserver/e-time-utils.c:1902 msgid "%a %m/%d/%Y %I:%M:%S %p" msgstr "%Y-%m-%d %A%p%I:%M:%S" @@ -4663,7 +4744,7 @@ msgstr "%Y-%m-%d %A%p%I:%M:%S" #. in 24-hour format. #. strftime format of a weekday, a date and a #. time, in 24-hour format. -#: ../libedataserver/e-time-utils.c:1640 ../libedataserver/e-time-utils.c:1891 +#: ../libedataserver/e-time-utils.c:1640 ../libedataserver/e-time-utils.c:1893 msgid "%a %m/%d/%Y %H:%M:%S" msgstr "%Y-%m-%d %A %H:%M:%S" @@ -4671,7 +4752,7 @@ msgstr "%Y-%m-%d %A %H:%M:%S" #. in 12-hour format, without seconds. #. strftime format of a weekday, a date and a #. time, in 12-hour format, without seconds. -#: ../libedataserver/e-time-utils.c:1645 ../libedataserver/e-time-utils.c:1896 +#: ../libedataserver/e-time-utils.c:1645 ../libedataserver/e-time-utils.c:1898 msgid "%a %m/%d/%Y %I:%M %p" msgstr "%Y-%m-%d %A%p%I:%M" @@ -4679,7 +4760,7 @@ msgstr "%Y-%m-%d %A%p%I:%M" #. in 24-hour format, without seconds. #. strftime format of a weekday, a date and a #. time, in 24-hour format, without seconds. -#: ../libedataserver/e-time-utils.c:1650 ../libedataserver/e-time-utils.c:1887 +#: ../libedataserver/e-time-utils.c:1650 ../libedataserver/e-time-utils.c:1889 msgid "%a %m/%d/%Y %H:%M" msgstr "%Y-%m-%d %A %H:%M" @@ -4697,8 +4778,8 @@ msgstr "%Y-%m-%d %A %H" #. strptime format of a weekday and a date. #. strftime format of a weekday and a date. -#: ../libedataserver/e-time-utils.c:1663 ../libedataserver/e-time-utils.c:1763 -#: ../libedataserver/e-time-utils.c:1882 +#: ../libedataserver/e-time-utils.c:1663 ../libedataserver/e-time-utils.c:1765 +#: ../libedataserver/e-time-utils.c:1884 msgid "%a %m/%d/%Y" msgstr "%Y-%m-%d %A" @@ -4738,19 +4819,19 @@ msgstr "%Y-%m-%d %H" #. strptime format of a weekday and a date. #. This is the preferred date format for the locale. -#: ../libedataserver/e-time-utils.c:1697 ../libedataserver/e-time-utils.c:1766 +#: ../libedataserver/e-time-utils.c:1697 ../libedataserver/e-time-utils.c:1768 msgid "%m/%d/%Y" msgstr "%Y-%m-%d" #. strptime format for a time of day, in 12-hour format. #. strftime format of a time in 12-hour format. -#: ../libedataserver/e-time-utils.c:1824 ../libedataserver/e-time-utils.c:1944 +#: ../libedataserver/e-time-utils.c:1826 ../libedataserver/e-time-utils.c:1946 msgid "%I:%M:%S %p" msgstr "%p%I:%M:%S" #. strptime format for a time of day, in 24-hour format. #. strftime format of a time in 24-hour format. -#: ../libedataserver/e-time-utils.c:1828 ../libedataserver/e-time-utils.c:1936 +#: ../libedataserver/e-time-utils.c:1830 ../libedataserver/e-time-utils.c:1938 msgid "%H:%M:%S" msgstr "%H:%M:%S" @@ -4758,24 +4839,24 @@ msgstr "%H:%M:%S" #. in 12-hour format. #. strftime format of a time in 12-hour format, #. without seconds. -#: ../libedataserver/e-time-utils.c:1833 ../libedataserver/e-time-utils.c:1941 +#: ../libedataserver/e-time-utils.c:1835 ../libedataserver/e-time-utils.c:1943 msgid "%I:%M %p" msgstr "%p%I:%M" #. strptime format for time of day, without seconds 24-hour format. #. strftime format of a time in 24-hour format, #. without seconds. -#: ../libedataserver/e-time-utils.c:1837 ../libedataserver/e-time-utils.c:1933 +#: ../libedataserver/e-time-utils.c:1839 ../libedataserver/e-time-utils.c:1935 msgid "%H:%M" msgstr "%H:%M" #. strptime format for time of day, without seconds 24-hour format, and no colon. -#: ../libedataserver/e-time-utils.c:1840 +#: ../libedataserver/e-time-utils.c:1842 msgid "%H%M" msgstr "%H%M" #. strptime format for hour and AM/PM, 12-hour format. -#: ../libedataserver/e-time-utils.c:1844 +#: ../libedataserver/e-time-utils.c:1846 msgid "%I %p" msgstr "%p%I" @@ -4787,57 +4868,61 @@ msgstr "匿名访问 LDAP 服务器" msgid "Failed to authenticate.\n" msgstr "身份验证失败。\n" -#: ../libedataserverui/e-categories-dialog.c:338 +#: ../libedataserverui/e-categories-dialog.c:145 +msgid "Category Icon" +msgstr "类别图标" + +#: ../libedataserverui/e-categories-dialog.c:151 +msgid "_No Image" +msgstr "无图像(_N)" + +#: ../libedataserverui/e-categories-dialog.c:372 #, c-format msgid "" "There is already a category '%s' in the configuration. Please use another " "name" msgstr "配置中已经有类别“%s”了。请使用另外一个名称" -#: ../libedataserverui/e-categories-dialog.c:641 +#: ../libedataserverui/e-categories-dialog.c:680 msgid "Icon" msgstr "图标" -#: ../libedataserverui/e-categories-dialog.c:646 +#: ../libedataserverui/e-categories-dialog.c:685 msgid "Category" msgstr "类别" #: ../libedataserverui/e-categories-dialog.ui.h:1 -msgid "Category Icon" -msgstr "类别图标" - -#: ../libedataserverui/e-categories-dialog.ui.h:2 msgid "Category Properties" msgstr "类别属性" -#: ../libedataserverui/e-categories-dialog.ui.h:3 +#: ../libedataserverui/e-categories-dialog.ui.h:2 msgid "Category _Icon" msgstr "类别图标(_I)" -#: ../libedataserverui/e-categories-dialog.ui.h:4 +#: ../libedataserverui/e-categories-dialog.ui.h:3 msgid "Category _Name" msgstr "类别名称(_N)" -#: ../libedataserverui/e-categories-dialog.ui.h:5 +#: ../libedataserverui/e-categories-dialog.ui.h:4 msgid "Item(s) _belong to these categories:" msgstr "项目属于这些类别(_B):" -#: ../libedataserverui/e-categories-dialog.ui.h:6 +#: ../libedataserverui/e-categories-dialog.ui.h:5 msgid "_Available Categories:" msgstr "可用类别(_A):" -#: ../libedataserverui/e-categories-dialog.ui.h:7 +#: ../libedataserverui/e-categories-dialog.ui.h:6 msgid "_Edit" msgstr "编辑(_E)" -#: ../libedataserverui/e-categories-dialog.ui.h:8 +#: ../libedataserverui/e-categories-dialog.ui.h:7 msgid "categories" msgstr "类别" -#: ../libedataserverui/e-category-completion.c:290 -#, fuzzy, c-format +#: ../libedataserverui/e-category-completion.c:292 +#, c-format msgid "Create category \"%s\"" -msgstr "类别列表" +msgstr "创建类别“%s”" #: ../libedataserverui/e-cell-renderer-color.c:222 msgid "Color Info" @@ -4847,19 +4932,19 @@ msgstr "颜色信息" msgid "The color to render" msgstr "用于渲染的颜色" -#: ../libedataserverui/e-name-selector-dialog.c:292 +#: ../libedataserverui/e-name-selector-dialog.c:300 msgid "Select Contacts from Address Book" msgstr "从地址簿中选择联系人" -#: ../libedataserverui/e-name-selector-dialog.c:579 +#: ../libedataserverui/e-name-selector-dialog.c:639 msgid "_Add" msgstr "添加(_A)" -#: ../libedataserverui/e-name-selector-dialog.c:604 +#: ../libedataserverui/e-name-selector-dialog.c:643 msgid "_Remove" msgstr "删除(_R)" -#: ../libedataserverui/e-name-selector-dialog.c:781 +#: ../libedataserverui/e-name-selector-dialog.c:828 #: ../libedataserverui/e-name-selector-dialog.ui.h:6 msgid "Any Category" msgstr "任何类别" @@ -4889,7 +4974,6 @@ msgid "Cate_gory:" msgstr "类别(_G):" #: ../libedataserverui/e-name-selector-dialog.ui.h:8 -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:261 msgid "Contacts" msgstr "联系人" @@ -4902,56 +4986,56 @@ msgid "_Search:" msgstr "搜索(_S):" #. To Translators: This would be similiar to "Expand MyList Inline" where MyList is a Contact List -#: ../libedataserverui/e-name-selector-entry.c:2455 +#: ../libedataserverui/e-name-selector-entry.c:2511 #, c-format msgid "E_xpand %s Inline" msgstr "嵌入式展开 %s(_X)" #. Copy Contact Item -#: ../libedataserverui/e-name-selector-entry.c:2470 +#: ../libedataserverui/e-name-selector-entry.c:2526 #, c-format msgid "Cop_y %s" msgstr "复制 %s(_Y)" #. Cut Contact Item -#: ../libedataserverui/e-name-selector-entry.c:2480 +#: ../libedataserverui/e-name-selector-entry.c:2536 #, c-format msgid "C_ut %s" msgstr "剪切 %s(_U)" #. Edit Contact item -#: ../libedataserverui/e-name-selector-entry.c:2497 +#: ../libedataserverui/e-name-selector-entry.c:2553 #, c-format msgid "_Edit %s" msgstr "编辑 %s(_E)" -#: ../libedataserverui/e-name-selector-list.c:469 +#: ../libedataserverui/e-name-selector-list.c:479 #, c-format msgid "_Delete %s" msgstr "删除 %s(_D)" -#: ../libedataserverui/e-passwords.c:234 +#: ../libedataserverui/e-passwords.c:240 #, c-format msgid "Keyring key is unusable: no user or host name" msgstr "密钥环不可用:没有用户或主机名" -#: ../libedataserverui/e-passwords.c:1093 +#: ../libedataserverui/e-passwords.c:1099 msgid "You have the Caps Lock key on." msgstr "您打开了 Caps Lock。" -#: ../libedataserverui/e-passwords.c:1215 +#: ../libedataserverui/e-passwords.c:1221 msgid "_Remember this passphrase" msgstr "记住此密码句(_R)" -#: ../libedataserverui/e-passwords.c:1216 +#: ../libedataserverui/e-passwords.c:1222 msgid "_Remember this passphrase for the remainder of this session" msgstr "本次会话记住此密码句(_R)" -#: ../libedataserverui/e-passwords.c:1221 +#: ../libedataserverui/e-passwords.c:1227 msgid "_Remember this password" msgstr "记住此密码(_R)" -#: ../libedataserverui/e-passwords.c:1222 +#: ../libedataserverui/e-passwords.c:1228 msgid "_Remember this password for the remainder of this session" msgstr "本次会话记住此密码(_R)" @@ -4960,203 +5044,293 @@ msgstr "本次会话记住此密码(_R)" msgid "Select destination" msgstr "选择目的地" -#: ../libedataserverui/e-source-selector-dialog.c:156 +#: ../libedataserverui/e-source-selector-dialog.c:172 msgid "_Destination" msgstr "目的(_D)" -#: ../servers/exchange/lib/e2k-autoconfig.c:1694 -#: ../servers/exchange/storage/exchange-account.c:954 -#, c-format -msgid "Enter password for %s" -msgstr "输入 %s 的密码" +#: ../servers/groupwise/e-gw-connection.c:227 +msgid "Invalid connection" +msgstr "无效连接" -#: ../servers/exchange/lib/e2k-autoconfig.c:1695 -#: ../servers/exchange/storage/exchange-account.c:959 -msgid "Enter password" -msgstr "输入密码" +#: ../servers/groupwise/e-gw-connection.c:231 +msgid "Invalid response from server" +msgstr "服务器的响应无效" -#. i18n: These are Outlook's words for the default roles in -#. the folder permissions dialog. -#: ../servers/exchange/lib/e2k-security-descriptor.c:844 -msgid "Owner" -msgstr "所有者" +#: ../servers/groupwise/e-gw-connection.c:233 +msgid "No response from the server" +msgstr "服务器的响应无效" -#: ../servers/exchange/lib/e2k-security-descriptor.c:854 -msgid "Publishing Editor" -msgstr "发布编辑器" +#: ../servers/groupwise/e-gw-connection.c:239 +msgid "Bad parameter" +msgstr "无效参数" -#: ../servers/exchange/lib/e2k-security-descriptor.c:862 -msgid "Editor" -msgstr "编辑器" +#~ msgid "%s: there was no self contact UID stored in gconf" +#~ msgstr "%s:gconf 中没有存储自身联系人的 UID" -#: ../servers/exchange/lib/e2k-security-descriptor.c:869 -msgid "Publishing Author" -msgstr "发布作者" +#~ msgid "This is a digitally signed message part" +#~ msgstr "这是信件的数字签名部分" -#: ../servers/exchange/lib/e2k-security-descriptor.c:875 -msgid "Author" -msgstr "作者" +#~ msgid "Kerberos 4" +#~ msgstr "Kerberos 4" -#: ../servers/exchange/lib/e2k-security-descriptor.c:880 -msgid "Non-editing Author" -msgstr "非编辑作者" +#~ msgid "" +#~ "This option will connect to the server using Kerberos 4 authentication." +#~ msgstr "该选项将用 Kerberos 4 认证连接到服务器。" -#: ../servers/exchange/lib/e2k-security-descriptor.c:884 -msgid "Reviewer" -msgstr "复查者" +#~ msgid "" +#~ "Could not get Kerberos ticket:\n" +#~ "%s" +#~ msgstr "" +#~ "无法获取 Kerberos 标签:\n" +#~ "%s" -#: ../servers/exchange/lib/e2k-security-descriptor.c:886 -msgid "Contributor" -msgstr "贡献者" +#~ msgid "Unable to get issuer's certificate" +#~ msgstr "无法获取发行者的证书" -#: ../servers/exchange/lib/e2k-security-descriptor.c:888 -msgid "None" -msgstr "无" +#~ msgid "Unable to get Certificate Revocation List" +#~ msgstr "无法获取证书吊销列表签名" -#: ../servers/exchange/lib/e2k-security-descriptor.c:903 -msgid "Custom" -msgstr "自定义" +#~ msgid "Unable to decrypt certificate signature" +#~ msgstr "无法解密认证签名" -#: ../servers/exchange/storage/e-storage.c:557 -msgid "Generic error" -msgstr "常规错误" +#~ msgid "Unable to decrypt Certificate Revocation List signature" +#~ msgstr "无法解密证书吊销列表签名" -#: ../servers/exchange/storage/e-storage.c:559 -msgid "A folder with the same name already exists" -msgstr "已经存在同名文件夹" +#~ msgid "Unable to decode issuer's public key" +#~ msgstr "无法对发行者的公钥进行解码" -#: ../servers/exchange/storage/e-storage.c:561 -msgid "The specified folder type is not valid" -msgstr "指定的文件类型无效" +#~ msgid "Certificate signature failure" +#~ msgstr "证书签名失败" -#: ../servers/exchange/storage/e-storage.c:563 -msgid "I/O error" -msgstr "I/O 错误" +#~ msgid "Certificate Revocation List signature failure" +#~ msgstr "证书吊销列表签名失败" -#: ../servers/exchange/storage/e-storage.c:565 -msgid "Not enough space to create the folder" -msgstr "没有足够的空间创建文件夹" +#~ msgid "Certificate not yet valid" +#~ msgstr "证书未生效" -#: ../servers/exchange/storage/e-storage.c:567 -msgid "The folder is not empty" -msgstr "文件夹为空" +#~ msgid "Certificate has expired" +#~ msgstr "证书已过期" -#: ../servers/exchange/storage/e-storage.c:569 -msgid "The specified folder was not found" -msgstr "指定的文件未找到" +#, fuzzy +#~ msgid "Certificate Revocation List (CRL) not yet valid" +#~ msgstr "证书吊销列表签名失败" -#: ../servers/exchange/storage/e-storage.c:571 -msgid "Function not implemented in this storage" -msgstr "功能未在此存储中实现" +#, fuzzy +#~ msgid "Certificate Revocation List (CRL) has expired" +#~ msgstr "证书吊销列表签名失败" -#: ../servers/exchange/storage/e-storage.c:575 -msgid "Operation not supported" -msgstr "操作不支持" +#, fuzzy +#~ msgid "Error in Certificate Revocation List (CRL)" +#~ msgstr "无法获取证书吊销列表签名" -#: ../servers/exchange/storage/e-storage.c:577 -msgid "The specified type is not supported in this storage" -msgstr "此存储不支持指定类型" +#~ msgid "Out of memory" +#~ msgstr "内存耗尽" -#: ../servers/exchange/storage/e-storage.c:579 -msgid "The specified folder cannot be modified or removed" -msgstr "无法修改或删除指定的文件夹" +#~ msgid "Zero-depth self-signed certificate" +#~ msgstr "零深度自签名证书" -#: ../servers/exchange/storage/e-storage.c:581 -msgid "Cannot make a folder a child of one of its descendants" -msgstr "无法将文件夹变成其子文件夹的子文件夹" +#~ msgid "Self-signed certificate in chain" +#~ msgstr "链中的自签名证书" -#: ../servers/exchange/storage/e-storage.c:583 -msgid "Cannot create a folder with that name" -msgstr "无法以此名称创建文件夹" +#~ msgid "Unable to get issuer's certificate locally" +#~ msgstr "无法在本地获取发行者的证书" -#: ../servers/exchange/storage/e-storage.c:585 -msgid "This operation cannot be performed in off-line mode" -msgstr "该信件无法在脱机模式中使用" +#~ msgid "Unable to verify leaf signature" +#~ msgstr "无法校验叶子签名" -#. i18n: This is the title of an "other user's folders" -#. hierarchy. Eg, "John Doe's Folders". -#: ../servers/exchange/storage/exchange-account.c:639 -#, c-format -msgid "%s's Folders" -msgstr "%s 的文件夹" +#~ msgid "Certificate chain too long" +#~ msgstr "证书链过长" -#: ../servers/exchange/storage/exchange-account.c:1259 -msgid "Personal Folders" -msgstr "个人文件夹" +#~ msgid "Certificate Revoked" +#~ msgstr "证书已撤销" -#: ../servers/exchange/storage/exchange-account.c:1274 -msgid "Favorite Public Folders" -msgstr "收藏的公开文件夹" +#~ msgid "Invalid Certificate Authority (CA)" +#~ msgstr "无效的证书颁发机构(CA)" -#. i18n: Outlookism -#: ../servers/exchange/storage/exchange-account.c:1291 -msgid "All Public Folders" -msgstr "全部公开文件夹" +#~ msgid "Path length exceeded" +#~ msgstr "超长的路径长度" -#. i18n: Outlookism -#: ../servers/exchange/storage/exchange-account.c:1305 -msgid "Global Address List" -msgstr "全局地址列表" +#~ msgid "Invalid purpose" +#~ msgstr "无效目的" -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:262 -msgid "Deleted Items" -msgstr "已删项" +#~ msgid "Certificate untrusted" +#~ msgstr "不信任的证书" -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:263 -msgid "Drafts" -msgstr "草稿" +#~ msgid "Certificate rejected" +#~ msgstr "已拒绝的证书" -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:265 -msgid "Journal" -msgstr "日记" +#~ msgid "Subject/Issuer mismatch" +#~ msgstr "主题/发行者不匹配" -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:266 -msgid "Notes" -msgstr "备忘" +#~ msgid "AKID/SKID mismatch" +#~ msgstr "AKID/SKID 不匹配" -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:267 -msgid "Outbox" -msgstr "发件箱" +#~ msgid "AKID/Issuer serial mismatch" +#~ msgstr "AKID/发行者序列号不匹配" -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:268 -msgid "Sent Items" -msgstr "已发项" +#~ msgid "Key usage does not support certificate signing" +#~ msgstr "密钥不支持证书签名" -#: ../servers/exchange/storage/exchange-hierarchy-foreign.c:269 -msgid "Tasks" -msgstr "任务" +#~ msgid "Error in application verification" +#~ msgstr "应用程序验证错误" -#: ../servers/groupwise/e-gw-connection.c:225 -msgid "Invalid connection" -msgstr "无效连接" +#~ msgid "" +#~ "Bad certificate from %s:\n" +#~ "\n" +#~ "%s\n" +#~ "\n" +#~ "%s\n" +#~ "\n" +#~ "Do you wish to accept anyway?" +#~ msgstr "" +#~ "来自 %s 的错误证书:\n" +#~ "\n" +#~ "%s\n" +#~ "\n" +#~ "%s\n" +#~ "\n" +#~ "您仍然希望接受吗?" -#: ../servers/groupwise/e-gw-connection.c:229 -msgid "Invalid response from server" -msgstr "服务器的响应无效" +#~ msgid "" +#~ "Experimental IMAP 4(.1) client\n" +#~ "This is untested and unsupported code, you want to use plain imap " +#~ "instead.\n" +#~ "\n" +#~ " !!! DO NOT USE THIS FOR PRODUCTION EMAIL !!!\n" +#~ msgstr "" +#~ "试验性 IMAP 4(.1) 客户端\n" +#~ "此功能是未测试的代码,不被支持,您应该换用纯 IMAP。\n" +#~ "\n" +#~ " !!! 不要对重要邮件使用此功能 !!!\n" -#: ../servers/groupwise/e-gw-connection.c:231 -msgid "No response from the server" -msgstr "服务器的响应无效" +#~ msgid "Could not connect to POP server on %s" +#~ msgstr "无法连接到 %s 上的 POP 服务器" -#: ../servers/groupwise/e-gw-connection.c:237 -msgid "Bad parameter" -msgstr "无效参数" +#~ msgid "Enter password for %s" +#~ msgstr "输入 %s 的密码" + +#~ msgid "Enter password" +#~ msgstr "输入密码" + +#~ msgid "Owner" +#~ msgstr "所有者" + +#~ msgid "Publishing Editor" +#~ msgstr "发布编辑器" + +#~ msgid "Editor" +#~ msgstr "编辑器" + +#~ msgid "Publishing Author" +#~ msgstr "发布作者" + +#~ msgid "Author" +#~ msgstr "作者" -#: ../src/GNOME_Evolution_DataServer.server.in.in.h:1 -msgid "Evolution Addressbook file backend" -msgstr "Evolution 地址簿文件后端" +#~ msgid "Non-editing Author" +#~ msgstr "非编辑作者" -#: ../src/GNOME_Evolution_DataServer.server.in.in.h:2 -msgid "Evolution Calendar file and webcal backend" -msgstr "Evolution 日历文件和 Webcal 后端" +#~ msgid "Reviewer" +#~ msgstr "复查者" -#: ../src/GNOME_Evolution_DataServer.server.in.in.h:3 -msgid "Evolution Data Server interface check service" -msgstr "Evolution 数据服务器接口检查服务" +#~ msgid "Contributor" +#~ msgstr "贡献者" -#: ../src/GNOME_Evolution_DataServer.server.in.in.h:4 -msgid "Evolution Data Server logging service" -msgstr "Evolution 数据服务器日志服务" +#~ msgid "None" +#~ msgstr "无" + +#~ msgid "Custom" +#~ msgstr "自定义" + +#~ msgid "Generic error" +#~ msgstr "常规错误" + +#~ msgid "A folder with the same name already exists" +#~ msgstr "已经存在同名文件夹" + +#~ msgid "The specified folder type is not valid" +#~ msgstr "指定的文件类型无效" + +#~ msgid "I/O error" +#~ msgstr "I/O 错误" + +#~ msgid "Not enough space to create the folder" +#~ msgstr "没有足够的空间创建文件夹" + +#~ msgid "The folder is not empty" +#~ msgstr "文件夹为空" + +#~ msgid "The specified folder was not found" +#~ msgstr "指定的文件未找到" + +#~ msgid "Function not implemented in this storage" +#~ msgstr "功能未在此存储中实现" + +#~ msgid "Operation not supported" +#~ msgstr "操作不支持" + +#~ msgid "The specified type is not supported in this storage" +#~ msgstr "此存储不支持指定类型" + +#~ msgid "The specified folder cannot be modified or removed" +#~ msgstr "无法修改或删除指定的文件夹" + +#~ msgid "Cannot make a folder a child of one of its descendants" +#~ msgstr "无法将文件夹变成其子文件夹的子文件夹" + +#~ msgid "Cannot create a folder with that name" +#~ msgstr "无法以此名称创建文件夹" + +#~ msgid "This operation cannot be performed in off-line mode" +#~ msgstr "该信件无法在脱机模式中使用" + +#~ msgid "%s's Folders" +#~ msgstr "%s 的文件夹" + +#~ msgid "Personal Folders" +#~ msgstr "个人文件夹" + +#~ msgid "Favorite Public Folders" +#~ msgstr "收藏的公开文件夹" + +#~ msgid "All Public Folders" +#~ msgstr "全部公开文件夹" + +#~ msgid "Global Address List" +#~ msgstr "全局地址列表" + +#~ msgid "Deleted Items" +#~ msgstr "已删项" + +#~ msgid "Drafts" +#~ msgstr "草稿" + +#~ msgid "Journal" +#~ msgstr "日记" + +#~ msgid "Notes" +#~ msgstr "备忘" + +#~ msgid "Outbox" +#~ msgstr "发件箱" + +#~ msgid "Sent Items" +#~ msgstr "已发项" + +#~ msgid "Tasks" +#~ msgstr "任务" + +#~ msgid "Evolution Addressbook file backend" +#~ msgstr "Evolution 地址簿文件后端" + +#~ msgid "Evolution Calendar file and webcal backend" +#~ msgstr "Evolution 日历文件和 Webcal 后端" + +#~ msgid "Evolution Data Server interface check service" +#~ msgstr "Evolution 数据服务器接口检查服务" + +#~ msgid "Evolution Data Server logging service" +#~ msgstr "Evolution 数据服务器日志服务" #~ msgid "\"%s\" on book before \"%s\"" #~ msgstr "“%2$s”前的“%1$s”" @@ -5179,9 +5353,6 @@ msgstr "Evolution 数据服务器日志服务" #~ msgid "%s: canceled" #~ msgstr "%s:已取消" -#~ msgid "%s: Invalid source." -#~ msgstr "%s:无效来源。" - #~ msgid "%s: no factories available for URI `%s'" #~ msgstr "%s:对于 URI“%s”没有可用的工厂" -- cgit v1.2.1 From a1e2670ff27d5c4d865551a07b256e12cad5c736 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fridrich=20=C5=A0trba?= Date: Mon, 13 Sep 2010 23:49:55 +0200 Subject: Don't dupplicate wspiapi.h internally This will put the responsibility to load a libary correctly to the one who implements teh wspiapi.h header. --- camel/Makefile.am | 3 +- camel/camel-net-utils-win32.h | 381 ------------------------------------------ camel/camel-net-utils.c | 6 +- configure.ac | 3 + 4 files changed, 9 insertions(+), 384 deletions(-) delete mode 100644 camel/camel-net-utils-win32.h diff --git a/camel/Makefile.am b/camel/Makefile.am index 1f2e26d43..bbb0b0c53 100644 --- a/camel/Makefile.am +++ b/camel/Makefile.am @@ -2,8 +2,7 @@ SUBDIRS = . providers tests if OS_WIN32 LIBCAMEL_PLATFORM_DEP_SOURCES = \ - camel-win32.c \ - camel-net-utils-win32.h + camel-win32.c LIBCAMEL_PROVIDER_PLATFORM_DEP_SOURCES = LOCK_HELPER = else diff --git a/camel/camel-net-utils-win32.h b/camel/camel-net-utils-win32.h deleted file mode 100644 index a4f21f513..000000000 --- a/camel/camel-net-utils-win32.h +++ /dev/null @@ -1,381 +0,0 @@ -/** - * This file has no copyright assigned and is placed in the Public Domain. - * This file is part of the w64 mingw-runtime package. - * No warranty is given; refer to the file DISCLAIMER within this package. - */ -#ifndef _CAMEL_NET_UTILS_WIN32_H_ -#define _CAMEL_NET_UTILS_WIN32_H_ - -#include -#include -#include -#include -#include - -#define _COMPAT_STRCPY_S(_Dst,_Size,_Src) strcpy((_Dst),(_Src)) -#define _COMPAT_STRCAT_S(_Dst,_Size,_Src) strcat((_Dst),(_Src)) -#define _COMPAT_STRNCPY_S(_Dst,_Size,_Src,_Count) strncpy((_Dst),(_Src),(_Count)); (_Dst)[(_Size) - 1] = 0 -#define _COMPAT_SPRINTF_S_1(_Dst,_Size,_Format,_Arg1) sprintf((_Dst),(_Format),(_Arg1)) - -#ifndef _COMPAT_COUNTOF -#ifndef __cplusplus -#define _COMPAT_COUNTOF(_Array) (sizeof(_Array) / sizeof(_Array[0])) -#else -template char (&__COMPAT_countof_helper(__CountofType (&_Array)[_N]))[_N]; -#define _COMPAT_COUNTOF(_Array) sizeof(__COMPAT_countof_helper(_Array)) -#endif -#endif - -#define CompatMalloc(tSize) calloc(1,(tSize)) -#define CompatFree(p) free(p) -#define CompatSwap(a,b,c) { (c) = (a); (a) = (b); (b) = (c); } -#define getaddrinfo CompatGetAddrInfo -#define getnameinfo CompatGetNameInfo -#define freeaddrinfo CompatFreeAddrInfo - -typedef int (WINAPI *COMPAT_PGETADDRINFO)(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res); -typedef int (WINAPI *COMPAT_PGETNAMEINFO)(const struct sockaddr *sa,socklen_t salen,char *host,size_t hostlen,char *serv,size_t servlen,int flags); -typedef void (WINAPI *COMPAT_PFREEADDRINFO)(struct addrinfo *ai); - -G_BEGIN_DECLS - - static char *WINAPI CompatStrdup (const char *pszString) { - char *pszMemory; - size_t cchMemory; - if(!pszString) return(NULL); - cchMemory = strlen(pszString) + 1; - pszMemory = (char *) CompatMalloc(cchMemory); - if(!pszMemory) return(NULL); - _COMPAT_STRCPY_S(pszMemory,cchMemory,pszString); - return pszMemory; - } - - static WINBOOL WINAPI CompatParseV4Address (const char *pszAddress,PDWORD pdwAddress) { - DWORD dwAddress = 0; - const char *pcNext = NULL; - int iCount = 0; - for(pcNext = pszAddress;*pcNext!='\0';pcNext++) - if(*pcNext=='.') iCount++; - if(iCount!=3) return FALSE; - dwAddress = inet_addr(pszAddress); - if(dwAddress==INADDR_NONE) return FALSE; - *pdwAddress = dwAddress; - return TRUE; - } - - static struct addrinfo *WINAPI CompatNewAddrInfo (int iSocketType,int iProtocol,WORD wPort,DWORD dwAddress) { - struct addrinfo *ptNew; - struct sockaddr_in *ptAddress; - ptNew = (struct addrinfo *) CompatMalloc(sizeof(struct addrinfo)); - if(!ptNew) return NULL; - ptAddress = (struct sockaddr_in *) CompatMalloc(sizeof(struct sockaddr_in)); - if(!ptAddress) { - CompatFree(ptNew); - return NULL; - } - ptAddress->sin_family = AF_INET; - ptAddress->sin_port = wPort; - ptAddress->sin_addr.s_addr = dwAddress; - ptNew->ai_family = PF_INET; - ptNew->ai_socktype = iSocketType; - ptNew->ai_protocol = iProtocol; - ptNew->ai_addrlen = sizeof(struct sockaddr_in); - ptNew->ai_addr = (struct sockaddr *) ptAddress; - return ptNew; - } - - static int WINAPI CompatQueryDNS(const char *pszNodeName,int iSocketType,int iProtocol,WORD wPort,char pszAlias[NI_MAXHOST],struct addrinfo **pptResult) { - struct addrinfo **pptNext = pptResult; - struct hostent *ptHost = NULL; - char **ppAddresses; - *pptNext = NULL; - pszAlias[0] = '\0'; - ptHost = gethostbyname(pszNodeName); - if(ptHost) { - if((ptHost->h_addrtype==AF_INET) && (ptHost->h_length==sizeof(struct in_addr))) { - for(ppAddresses = ptHost->h_addr_list;*ppAddresses!=NULL;ppAddresses++) { - *pptNext = CompatNewAddrInfo(iSocketType,iProtocol,wPort,((struct in_addr *) *ppAddresses)->s_addr); - if(!*pptNext) return EAI_MEMORY; - pptNext = &((*pptNext)->ai_next); - } - } - _COMPAT_STRNCPY_S(pszAlias,NI_MAXHOST,ptHost->h_name,NI_MAXHOST - 1); - return 0; - } - switch(WSAGetLastError()) { - case WSAHOST_NOT_FOUND: return EAI_NONAME; - case WSATRY_AGAIN: return EAI_AGAIN; - case WSANO_RECOVERY: return EAI_FAIL; - case WSANO_DATA: return EAI_NODATA; - default: return EAI_NONAME; - } - } - - static int WINAPI CompatLookupNode(const char *pszNodeName,int iSocketType,int iProtocol,WORD wPort,WINBOOL bAI_CANONNAME,struct addrinfo **pptResult) { - int iError = 0; - int iAliasCount = 0; - char szFQDN1[NI_MAXHOST] = ""; - char szFQDN2[NI_MAXHOST] = ""; - char *pszName = szFQDN1; - char *pszAlias = szFQDN2; - char *pszScratch = NULL; - _COMPAT_STRNCPY_S(pszName,NI_MAXHOST,pszNodeName,NI_MAXHOST - 1); - for(;;) { - iError = CompatQueryDNS(pszNodeName,iSocketType,iProtocol,wPort,pszAlias,pptResult); - if(iError) break; - if(*pptResult) break; - if((!strlen(pszAlias)) || (!strcmp(pszName,pszAlias)) || (++iAliasCount==16)) { - iError = EAI_FAIL; - break; - } - CompatSwap(pszName,pszAlias,pszScratch); - } - if(!iError && bAI_CANONNAME) { - (*pptResult)->ai_canonname = CompatStrdup(pszAlias); - if(!(*pptResult)->ai_canonname) iError = EAI_MEMORY; - } - return iError; - } - - static int WINAPI CompatClone (WORD wPort,struct addrinfo *ptResult) { - struct addrinfo *ptNext = NULL; - struct addrinfo *ptNew = NULL; - for(ptNext = ptResult; ptNext!=NULL;) { - ptNew = CompatNewAddrInfo(SOCK_DGRAM,ptNext->ai_protocol,wPort,((struct sockaddr_in *) ptNext->ai_addr)->sin_addr.s_addr); - if(!ptNew) break; - ptNew->ai_next = ptNext->ai_next; - ptNext->ai_next = ptNew; - ptNext = ptNew->ai_next; - } - if(ptNext!=NULL) return EAI_MEMORY; - return 0; - } - - - static void WINAPI CompatLegacyFreeAddrInfo (struct addrinfo *ptHead) { - struct addrinfo *ptNext; - for(ptNext = ptHead;ptNext!=NULL;ptNext = ptHead) { - if(ptNext->ai_canonname) CompatFree(ptNext->ai_canonname); - if(ptNext->ai_addr) CompatFree(ptNext->ai_addr); - ptHead = ptNext->ai_next; - CompatFree(ptNext); - } - } - - static int WINAPI CompatLegacyGetAddrInfo(const char *pszNodeName,const char *pszServiceName,const struct addrinfo *ptHints,struct addrinfo **pptResult) { - int iError = 0; - int iFlags = 0; - int iFamily = PF_UNSPEC; - int iSocketType = 0; - int iProtocol = 0; - WORD wPort = 0; - DWORD dwAddress = 0; - struct servent *ptService = NULL; - char *pc = NULL; - WINBOOL bClone = FALSE; - WORD wTcpPort = 0; - WORD wUdpPort = 0; - *pptResult = NULL; - if((!pszNodeName) && (!pszServiceName)) return EAI_NONAME; - if(ptHints) { - if((ptHints->ai_addrlen!=0) || (ptHints->ai_canonname!=NULL) || (ptHints->ai_addr!=NULL) || (ptHints->ai_next!=NULL)) return EAI_FAIL; - iFlags = ptHints->ai_flags; - if((iFlags & AI_CANONNAME) && !pszNodeName) return EAI_BADFLAGS; - iFamily = ptHints->ai_family; - if((iFamily!=PF_UNSPEC) && (iFamily!=PF_INET)) return EAI_FAMILY; - iSocketType = ptHints->ai_socktype; - if((iSocketType!=0) && (iSocketType!=SOCK_STREAM) && (iSocketType!=SOCK_DGRAM) && (iSocketType!=SOCK_RAW)) return EAI_SOCKTYPE; - iProtocol = ptHints->ai_protocol; - } - if(pszServiceName) { - wPort = (WORD) strtoul(pszServiceName,&pc,10); - if(*pc=='\0') { - wPort = wTcpPort = wUdpPort = htons(wPort); - if(iSocketType==0) { - bClone = TRUE; - iSocketType = SOCK_STREAM; - } - } else { - if((iSocketType==0) || (iSocketType==SOCK_DGRAM)) { - ptService = getservbyname(pszServiceName,"udp"); - if(ptService) wPort = wUdpPort = ptService->s_port; - } - if((iSocketType==0) || (iSocketType==SOCK_STREAM)) { - ptService = getservbyname(pszServiceName,"tcp"); - if(ptService) wPort = wTcpPort = ptService->s_port; - } - if(wPort==0) return (iSocketType ? EAI_SERVICE : EAI_NONAME); - if(iSocketType==0) { - iSocketType = (wTcpPort) ? SOCK_STREAM : SOCK_DGRAM; - bClone = (wTcpPort && wUdpPort); - } - } - } - if((!pszNodeName) || (CompatParseV4Address(pszNodeName,&dwAddress))) { - if(!pszNodeName) { - dwAddress = htonl((iFlags & AI_PASSIVE) ? INADDR_ANY : INADDR_LOOPBACK); - } - *pptResult = CompatNewAddrInfo(iSocketType,iProtocol,wPort,dwAddress); - if(!(*pptResult)) iError = EAI_MEMORY; - if(!iError && pszNodeName) { - (*pptResult)->ai_flags |= AI_NUMERICHOST; - if(iFlags & AI_CANONNAME) { - (*pptResult)->ai_canonname = - CompatStrdup(inet_ntoa(*((struct in_addr *) &dwAddress))); - if(!(*pptResult)->ai_canonname) iError = EAI_MEMORY; - } - } - } else if(iFlags & AI_NUMERICHOST) iError = EAI_NONAME; - else iError = CompatLookupNode(pszNodeName,iSocketType,iProtocol,wPort,(iFlags & AI_CANONNAME),pptResult); - if(!iError && bClone) iError = CompatClone(wUdpPort,*pptResult); - if(iError) { - CompatLegacyFreeAddrInfo(*pptResult); - *pptResult = NULL; - } - return (iError); - } - - static int WINAPI CompatLegacyGetNameInfo(const struct sockaddr *ptSocketAddress,socklen_t tSocketLength,char *pszNodeName,size_t tNodeLength,char *pszServiceName,size_t tServiceLength,int iFlags) { - struct servent *ptService; - WORD wPort; - char szBuffer[] = "65535"; - char *pszService = szBuffer; - struct hostent *ptHost; - struct in_addr tAddress; - char *pszNode = NULL; - char *pc = NULL; - - if((!ptSocketAddress) || (tSocketLength < sizeof(struct sockaddr))) return EAI_FAIL; - if(ptSocketAddress->sa_family!=AF_INET) return EAI_FAMILY; - if(tSocketLength < sizeof(struct sockaddr_in)) return EAI_FAIL; - if(!(pszNodeName && tNodeLength) && !(pszServiceName && tServiceLength)) return EAI_NONAME; - if((iFlags & NI_NUMERICHOST) && (iFlags & NI_NAMEREQD)) return EAI_BADFLAGS; - if(pszServiceName && tServiceLength) { - wPort = ((struct sockaddr_in *) ptSocketAddress)->sin_port; - if(iFlags & NI_NUMERICSERV) { - _COMPAT_SPRINTF_S_1(szBuffer,_COMPAT_COUNTOF(szBuffer),"%u",ntohs(wPort)); - } else { - ptService = getservbyport(wPort,(iFlags & NI_DGRAM) ? "udp" : NULL); - if(ptService && ptService->s_name) { - pszService = ptService->s_name; - } else { - _COMPAT_SPRINTF_S_1(szBuffer,_COMPAT_COUNTOF(szBuffer),"%u",ntohs(wPort)); - } - } - if(tServiceLength > strlen(pszService)) - _COMPAT_STRCPY_S(pszServiceName,tServiceLength,pszService); - else return EAI_FAIL; - } - if(pszNodeName && tNodeLength) { - tAddress = ((struct sockaddr_in *) ptSocketAddress)->sin_addr; - if(iFlags & NI_NUMERICHOST) { - pszNode = inet_ntoa(tAddress); - } else { - ptHost = gethostbyaddr((char *) &tAddress,sizeof(struct in_addr),AF_INET); - if(ptHost && ptHost->h_name) { - pszNode = ptHost->h_name; - if((iFlags & NI_NOFQDN) && ((pc = strchr(pszNode,'.'))!=NULL)) *pc = '\0'; - } else { - if(iFlags & NI_NAMEREQD) { - switch(WSAGetLastError()) { - case WSAHOST_NOT_FOUND: return EAI_NONAME; - case WSATRY_AGAIN: return EAI_AGAIN; - case WSANO_RECOVERY: return EAI_FAIL; - default: return EAI_NONAME; - } - } else pszNode = inet_ntoa(tAddress); - } - } - if(tNodeLength > strlen(pszNode)) _COMPAT_STRCPY_S(pszNodeName,tNodeLength,pszNode); - else return EAI_FAIL; - } - return 0; - } - - typedef struct { - char const *pszName; - FARPROC pfAddress; - } COMPAT_FUNCTION; - -#define COMPAT_FUNCTION_ARRAY { "getaddrinfo",(FARPROC) CompatLegacyGetAddrInfo,"getnameinfo",(FARPROC) CompatLegacyGetNameInfo,"freeaddrinfo",(FARPROC) CompatLegacyFreeAddrInfo,} - - static FARPROC WINAPI CompatLoad(WORD wFunction) { - HMODULE hLibrary = NULL; - static WINBOOL bInitialized = FALSE; - static COMPAT_FUNCTION rgtGlobal[] = COMPAT_FUNCTION_ARRAY; - static const int iNumGlobal = (sizeof(rgtGlobal) / sizeof(COMPAT_FUNCTION)); - COMPAT_FUNCTION rgtLocal[] = COMPAT_FUNCTION_ARRAY; - FARPROC fScratch = NULL; - int i = 0; - if(bInitialized) return (rgtGlobal[wFunction].pfAddress); - for(;;) { - CHAR SystemDir[MAX_PATH + 1]; - CHAR Path[MAX_PATH + 8]; - if(GetSystemDirectoryA(SystemDir,MAX_PATH)==0) break; - _COMPAT_STRCPY_S(Path,_COMPAT_COUNTOF(Path),SystemDir); - _COMPAT_STRCAT_S(Path,_COMPAT_COUNTOF(Path),"\\ws2_32"); - hLibrary = LoadLibraryA(Path); - if(hLibrary!=NULL) { - fScratch = GetProcAddress(hLibrary,"getaddrinfo"); - if(!fScratch) { - FreeLibrary(hLibrary); - hLibrary = NULL; - } - } - if(hLibrary!=NULL) break; - _COMPAT_STRCPY_S(Path,_COMPAT_COUNTOF(Path),SystemDir); - _COMPAT_STRCAT_S(Path,_COMPAT_COUNTOF(Path),"\\wship6"); - hLibrary = LoadLibraryA(Path); - if(hLibrary!=NULL) { - fScratch = GetProcAddress(hLibrary,"getaddrinfo"); - if(!fScratch) { - FreeLibrary(hLibrary); - hLibrary = NULL; - } - } - break; - } - if(hLibrary!=NULL) { - for(i = 0;i < iNumGlobal;i++) { - rgtLocal[i].pfAddress = GetProcAddress(hLibrary,rgtLocal[i].pszName); - if(!(rgtLocal[i].pfAddress)) { - FreeLibrary(hLibrary); - hLibrary = NULL; - break; - } - } - if(hLibrary!=NULL) { - for(i = 0;i < iNumGlobal;i++) - rgtGlobal[i].pfAddress = rgtLocal[i].pfAddress; - } - } - bInitialized = TRUE; - return (rgtGlobal[wFunction].pfAddress); - } - - static int WINAPI CompatGetAddrInfo(const char *nodename,const char *servname,const struct addrinfo *hints,struct addrinfo **res) { - int iError; - static COMPAT_PGETADDRINFO pfGetAddrInfo = NULL; - if(!pfGetAddrInfo) pfGetAddrInfo = (COMPAT_PGETADDRINFO) CompatLoad(0); - iError = (*pfGetAddrInfo)(nodename,servname,hints,res); - WSASetLastError(iError); - return iError; - } - - static int WINAPI CompatGetNameInfo (const struct sockaddr *sa,socklen_t salen,char *host,size_t hostlen,char *serv,size_t servlen,int flags) { - int iError; - static COMPAT_PGETNAMEINFO pfGetNameInfo = NULL; - if(!pfGetNameInfo) pfGetNameInfo = (COMPAT_PGETNAMEINFO) CompatLoad(1); - iError = (*pfGetNameInfo)(sa,salen,host,hostlen,serv,servlen,flags); - WSASetLastError(iError); - return iError; - } - - static void WINAPI CompatFreeAddrInfo (struct addrinfo *ai) { - static COMPAT_PFREEADDRINFO pfFreeAddrInfo = NULL; - if(!pfFreeAddrInfo) pfFreeAddrInfo = (COMPAT_PFREEADDRINFO) CompatLoad(2); - (*pfFreeAddrInfo)(ai); - } - -G_END_DECLS -#endif diff --git a/camel/camel-net-utils.c b/camel/camel-net-utils.c index 3ca1ae1e8..aa97ce065 100644 --- a/camel/camel-net-utils.c +++ b/camel/camel-net-utils.c @@ -35,7 +35,11 @@ #include "camel-msgport.h" #include "camel-net-utils.h" #ifdef G_OS_WIN32 -#include "camel-net-utils-win32.h" +#include +#include +#ifdef HAVE_WSPIAPI_H +#include +#endif #endif #include "camel-operation.h" diff --git a/configure.ac b/configure.ac index faffef032..f64867512 100644 --- a/configure.ac +++ b/configure.ac @@ -933,6 +933,9 @@ fi AM_CONDITIONAL(ENABLE_IPv6, [test "x$enable_ipv6" = "xyes"]) +AC_CHECK_HEADER([wspiapi.h], + [AC_DEFINE([HAVE_WSPIAPI_H], 1, [Have ])],,) + dnl ****************************** dnl Calendar support dnl ****************************** -- cgit v1.2.1 From 5e04a3462d5266b5a651562ab32fd572b348fc7a Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Tue, 14 Sep 2010 22:57:18 +0100 Subject: Bug 629714 - endless loop in imapx_parse_status() --- camel/providers/imapx/camel-imapx-utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/camel/providers/imapx/camel-imapx-utils.c b/camel/providers/imapx/camel-imapx-utils.c index f77ed3aa0..359891e95 100644 --- a/camel/providers/imapx/camel-imapx-utils.c +++ b/camel/providers/imapx/camel-imapx-utils.c @@ -1731,7 +1731,7 @@ imapx_parse_status(CamelIMAPXStream *is, CamelException *ex) /* ignore anything we dont know about */ do { tok = camel_imapx_stream_token(is, &token, &len, ex); - if (tok == '\n') { + if (tok == '\n' || tok < 0) { camel_exception_set (ex, 1, "server response truncated"); imapx_free_status(sinfo); return NULL; -- cgit v1.2.1 From 24696bf5e1039695e51714788a17d020249245ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fridrich=20=C5=A0trba?= Date: Wed, 15 Sep 2010 10:51:19 +0200 Subject: Increase safety on Windows Call SetDllDirectory() to reduce risk of DLL hijacking, and call SetProcessDEPPolicy() to reduce risk of rogue code execution. --- addressbook/libedata-book/e-data-book-factory.c | 33 +++++++++++++++++++++++++ calendar/libedata-cal/e-data-cal-factory.c | 33 +++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/addressbook/libedata-book/e-data-book-factory.c b/addressbook/libedata-book/e-data-book-factory.c index 821764ca5..5781adf07 100644 --- a/addressbook/libedata-book/e-data-book-factory.c +++ b/addressbook/libedata-book/e-data-book-factory.c @@ -38,6 +38,17 @@ #include "e-book-backend.h" #include "e-book-backend-factory.h" +#ifdef G_OS_WIN32 +#include +#include +#ifndef PROCESS_DEP_ENABLE +#define PROCESS_DEP_ENABLE 0x00000001 +#endif +#ifndef PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION +#define PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION 0x00000002 +#endif +#endif + #define d(x) static void impl_BookFactory_getBook(EDataBookFactory *factory, const gchar *IN_uri, DBusGMethodInvocation *context); @@ -425,6 +436,28 @@ main (gint argc, gchar **argv) guint32 request_name_ret; EOfflineListener *eol; +#ifdef G_OS_WIN32 + /* Reduce risks */ + { + typedef BOOL (WINAPI *t_SetDllDirectoryA) (LPCSTR lpPathName); + t_SetDllDirectoryA p_SetDllDirectoryA; + + p_SetDllDirectoryA = GetProcAddress (GetModuleHandle ("kernel32.dll"), "SetDllDirectoryA"); + if (p_SetDllDirectoryA) + (*p_SetDllDirectoryA) (""); + } +#ifndef _WIN64 + { + typedef BOOL (WINAPI *t_SetProcessDEPPolicy) (DWORD dwFlags); + t_SetProcessDEPPolicy p_SetProcessDEPPolicy; + + p_SetProcessDEPPolicy = GetProcAddress (GetModuleHandle ("kernel32.dll"), "SetProcessDEPPolicy"); + if (p_SetProcessDEPPolicy) + (*p_SetProcessDEPPolicy) (PROCESS_DEP_ENABLE|PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION); + } +#endif +#endif + g_type_init (); g_set_prgname (E_PRGNAME); if (!g_thread_supported ()) g_thread_init (NULL); diff --git a/calendar/libedata-cal/e-data-cal-factory.c b/calendar/libedata-cal/e-data-cal-factory.c index a26d84f28..a50073d1b 100644 --- a/calendar/libedata-cal/e-data-cal-factory.c +++ b/calendar/libedata-cal/e-data-cal-factory.c @@ -46,6 +46,17 @@ #include "e-data-cal-factory.h" #include "e-cal-backend-loader-factory.h" +#ifdef G_OS_WIN32 +#include +#include +#ifndef PROCESS_DEP_ENABLE +#define PROCESS_DEP_ENABLE 0x00000001 +#endif +#ifndef PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION +#define PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION 0x00000002 +#endif +#endif + #define d(x) static void impl_CalFactory_getCal (EDataCalFactory *factory, const gchar *IN_uri, EDataCalObjType type, DBusGMethodInvocation *context); @@ -707,6 +718,28 @@ main (gint argc, gchar **argv) guint32 request_name_ret; EOfflineListener *eol; +#ifdef G_OS_WIN32 + /* Reduce risks */ + { + typedef BOOL (WINAPI *t_SetDllDirectoryA) (LPCSTR lpPathName); + t_SetDllDirectoryA p_SetDllDirectoryA; + + p_SetDllDirectoryA = GetProcAddress (GetModuleHandle ("kernel32.dll"), "SetDllDirectoryA"); + if (p_SetDllDirectoryA) + (*p_SetDllDirectoryA) (""); + } +#ifndef _WIN64 + { + typedef BOOL (WINAPI *t_SetProcessDEPPolicy) (DWORD dwFlags); + t_SetProcessDEPPolicy p_SetProcessDEPPolicy; + + p_SetProcessDEPPolicy = GetProcAddress (GetModuleHandle ("kernel32.dll"), "SetProcessDEPPolicy"); + if (p_SetProcessDEPPolicy) + (*p_SetProcessDEPPolicy) (PROCESS_DEP_ENABLE|PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION); + } +#endif +#endif + setlocale (LC_ALL, ""); bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); -- cgit v1.2.1 From c26662e2125144cf2378b5fdf0dd02a618b32fed Mon Sep 17 00:00:00 2001 From: Chenthill Palanisamy Date: Thu, 16 Sep 2010 16:37:45 +0530 Subject: Updated licenses for imapx to LGPLv2 --- camel/providers/imapx/camel-imapx-folder.c | 19 +++++++++---------- camel/providers/imapx/camel-imapx-folder.h | 18 +++++++++--------- camel/providers/imapx/camel-imapx-provider.c | 19 +++++++++---------- camel/providers/imapx/camel-imapx-server.c | 18 ++++++++++++++++++ camel/providers/imapx/camel-imapx-server.h | 18 ++++++++---------- camel/providers/imapx/camel-imapx-store.c | 19 +++++++++---------- camel/providers/imapx/camel-imapx-store.h | 18 +++++++++--------- camel/providers/imapx/camel-imapx-stream.c | 18 +++++++++--------- camel/providers/imapx/camel-imapx-stream.h | 14 ++++++++------ camel/providers/imapx/camel-imapx-utils.c | 18 ++++++++++++++++++ camel/providers/imapx/camel-imapx-utils.h | 18 ++++++++++++++++++ camel/providers/imapx/camel-imapx-view-summary.c | 16 +++++++--------- camel/providers/imapx/camel-imapx-view-summary.h | 16 ++++++++-------- camel/providers/imapx/test-imapx.c | 19 +++++++++++++++++++ 14 files changed, 158 insertions(+), 90 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-folder.c b/camel/providers/imapx/camel-imapx-folder.c index bdd398d92..44f841041 100644 --- a/camel/providers/imapx/camel-imapx-folder.c +++ b/camel/providers/imapx/camel-imapx-folder.c @@ -1,24 +1,23 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* camel-imap-folder.c : class for a imap folder */ - /* * Authors: Michael Zucchi * - * Copyright (C) 2002 Ximian, Inc. (www.ximian.com) + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H diff --git a/camel/providers/imapx/camel-imapx-folder.h b/camel/providers/imapx/camel-imapx-folder.h index 41ce4a6a1..5371a0da4 100644 --- a/camel/providers/imapx/camel-imapx-folder.h +++ b/camel/providers/imapx/camel-imapx-folder.h @@ -4,21 +4,21 @@ /* * Authors: Michael Zucchi * - * Copyright (C) 2002 Ximian, Inc. (www.ximian.com) + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifndef CAMEL_IMAPX_FOLDER_H diff --git a/camel/providers/imapx/camel-imapx-provider.c b/camel/providers/imapx/camel-imapx-provider.c index cac2c59c7..c704ed0f4 100644 --- a/camel/providers/imapx/camel-imapx-provider.c +++ b/camel/providers/imapx/camel-imapx-provider.c @@ -1,26 +1,25 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* camel-pop3-provider.c: pop3 provider registration code */ - /* * Authors : * Dan Winship * Michael Zucchi * - * Copyright (C) 2002 Ximian, Inc. (www.ximian.com) + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index a9e9eb8f1..a11a979e6 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -1,3 +1,21 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifdef HAVE_CONFIG_H #include diff --git a/camel/providers/imapx/camel-imapx-server.h b/camel/providers/imapx/camel-imapx-server.h index 31c8fe263..0b86402f6 100644 --- a/camel/providers/imapx/camel-imapx-server.h +++ b/camel/providers/imapx/camel-imapx-server.h @@ -1,11 +1,9 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* - * Copyright (C) 2005 Novell Inc. + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * Authors: - * Michael Zucchi - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, @@ -13,10 +11,10 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifndef _CAMEL_IMAPX_SERVER_H diff --git a/camel/providers/imapx/camel-imapx-store.c b/camel/providers/imapx/camel-imapx-store.c index be30538d2..79567ea1f 100644 --- a/camel/providers/imapx/camel-imapx-store.c +++ b/camel/providers/imapx/camel-imapx-store.c @@ -1,24 +1,23 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* camel-imap-store.c : class for a imap store */ - /* * Authors: Michael Zucchi * - * Copyright (C) 2000-2002 Ximian, Inc. (www.ximian.com) + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H diff --git a/camel/providers/imapx/camel-imapx-store.h b/camel/providers/imapx/camel-imapx-store.h index e5af0a261..93ea68666 100644 --- a/camel/providers/imapx/camel-imapx-store.h +++ b/camel/providers/imapx/camel-imapx-store.h @@ -4,21 +4,21 @@ /* * Authors: Michael Zucchi * - * Copyright (C) 2002 Ximian, Inc. (www.ximian.com) + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifndef CAMEL_IMAPX_STORE_H diff --git a/camel/providers/imapx/camel-imapx-stream.c b/camel/providers/imapx/camel-imapx-stream.c index 2cb68ca03..6fe0fd37a 100644 --- a/camel/providers/imapx/camel-imapx-stream.c +++ b/camel/providers/imapx/camel-imapx-stream.c @@ -3,21 +3,21 @@ * Author: * Michael Zucchi * - * Copyright 1999, 2000 Ximian, Inc. (www.ximian.com) + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 - * USA + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H diff --git a/camel/providers/imapx/camel-imapx-stream.h b/camel/providers/imapx/camel-imapx-stream.h index 27138c2ee..5568c3a73 100644 --- a/camel/providers/imapx/camel-imapx-stream.h +++ b/camel/providers/imapx/camel-imapx-stream.h @@ -3,8 +3,10 @@ * * Authors: Michael Zucchi * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, @@ -12,10 +14,10 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifndef _CAMEL_IMAPX_STREAM_H diff --git a/camel/providers/imapx/camel-imapx-utils.c b/camel/providers/imapx/camel-imapx-utils.c index 359891e95..aab048c1d 100644 --- a/camel/providers/imapx/camel-imapx-utils.c +++ b/camel/providers/imapx/camel-imapx-utils.c @@ -1,3 +1,21 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #include #include diff --git a/camel/providers/imapx/camel-imapx-utils.h b/camel/providers/imapx/camel-imapx-utils.h index b6b47aa8c..ec22116b1 100644 --- a/camel/providers/imapx/camel-imapx-utils.h +++ b/camel/providers/imapx/camel-imapx-utils.h @@ -1,3 +1,21 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ #ifndef _CAMEL_IMAPX_UTILS_H #define _CAMEL_IMAPX_UTILS_H diff --git a/camel/providers/imapx/camel-imapx-view-summary.c b/camel/providers/imapx/camel-imapx-view-summary.c index 20d01f27f..342cda145 100644 --- a/camel/providers/imapx/camel-imapx-view-summary.c +++ b/camel/providers/imapx/camel-imapx-view-summary.c @@ -1,11 +1,9 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; fill-column: 160 -*- * - * Copyright (C) 2005 Novell Inc. + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * - * Authors: Michael Zucchi - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, @@ -13,10 +11,10 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H diff --git a/camel/providers/imapx/camel-imapx-view-summary.h b/camel/providers/imapx/camel-imapx-view-summary.h index 6a4307fe6..d2022c35e 100644 --- a/camel/providers/imapx/camel-imapx-view-summary.h +++ b/camel/providers/imapx/camel-imapx-view-summary.h @@ -1,10 +1,10 @@ /* - * Copyright (C) 2000 Ximian Inc. - * * Authors: Michael Zucchi * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public * License as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, @@ -12,10 +12,10 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. */ #ifndef _CAMEL_IMAPX_VIEW_SUMMARY_H diff --git a/camel/providers/imapx/test-imapx.c b/camel/providers/imapx/test-imapx.c index 2f139d766..1c3af52ce 100644 --- a/camel/providers/imapx/test-imapx.c +++ b/camel/providers/imapx/test-imapx.c @@ -1,3 +1,22 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + #include #include "camel-imapx-store.h" #include "camel-imapx-folder.h" -- cgit v1.2.1 From edf54fc75a1968da9bf78427503720a6980c7478 Mon Sep 17 00:00:00 2001 From: Christian Kirbach Date: Thu, 16 Sep 2010 21:53:16 +0200 Subject: [l10n] Updated German translation --- po/de.po | 153 +++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 76 insertions(+), 77 deletions(-) diff --git a/po/de.po b/po/de.po index 433dfea6e..fca35cbfe 100644 --- a/po/de.po +++ b/po/de.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: evolution-data-server\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-08-01 01:41+0200\n" -"PO-Revision-Date: 2010-08-01 01:43+0200\n" +"POT-Creation-Date: 2010-09-16 21:52+0200\n" +"PO-Revision-Date: 2010-09-16 21:53+0200\n" "Last-Translator: Christian Kirbach \n" "Language-Team: Deutsch \n" "MIME-Version: 1.0\n" @@ -624,15 +624,15 @@ msgstr "SIP-Adresse" msgid "Unnamed List" msgstr "Namenlose Liste" -#: ../addressbook/libedata-book/e-data-book-factory.c:290 +#: ../addressbook/libedata-book/e-data-book-factory.c:301 #, c-format msgid "Empty URI" msgstr "Leere Adresse" -#: ../addressbook/libedata-book/e-data-book-factory.c:305 -#: ../addressbook/libedata-book/e-data-book-factory.c:332 -#: ../calendar/libedata-cal/e-data-cal-factory.c:324 -#: ../calendar/libedata-cal/e-data-cal-factory.c:333 +#: ../addressbook/libedata-book/e-data-book-factory.c:316 +#: ../addressbook/libedata-book/e-data-book-factory.c:343 +#: ../calendar/libedata-cal/e-data-cal-factory.c:335 +#: ../calendar/libedata-cal/e-data-cal-factory.c:344 #, c-format msgid "Invalid source" msgstr "Ungültige Quelle" @@ -1064,7 +1064,7 @@ msgstr "Es ist eine CORBA-Exception aufgetreten" #: ../calendar/libecal/e-cal.c:4032 #: ../calendar/libedata-cal/e-cal-backend-util.c:148 -#: ../camel/camel-net-utils.c:523 +#: ../camel/camel-net-utils.c:527 #: ../camel/providers/groupwise/camel-groupwise-transport.c:214 #: ../camel/providers/imap/camel-imap-command.c:432 #: ../camel/providers/imap/camel-imap-store.c:741 @@ -1335,17 +1335,17 @@ msgstr "Kalenderänderungen können nicht abgerufen werden" msgid "Cannot retrieve calendar free/busy list" msgstr "Verfügbarkeitsliste des Kalenders kann nicht abgerufen werden" -#: ../calendar/libedata-cal/e-data-cal-factory.c:340 +#: ../calendar/libedata-cal/e-data-cal-factory.c:351 #, c-format msgid "Invalid URI" msgstr "Ungültige Adresse" -#: ../calendar/libedata-cal/e-data-cal-factory.c:351 +#: ../calendar/libedata-cal/e-data-cal-factory.c:362 #, c-format msgid "No backend factory for '%s' of '%s'" msgstr "Keine Backend-Factory für »%s« von »%s«" -#: ../calendar/libedata-cal/e-data-cal-factory.c:391 +#: ../calendar/libedata-cal/e-data-cal-factory.c:402 #, c-format msgid "Could not instantiate backend" msgstr "Backend-Instanz konnte nicht angelegt werden" @@ -1449,10 +1449,10 @@ msgstr "Ordner »%s« wird für den Offline-Modus vorbereitet" #: ../camel/providers/imap/camel-imap-store.c:1843 #: ../camel/providers/imap/camel-imap-store.c:2280 #: ../camel/providers/imap/camel-imap-store.c:3089 -#: ../camel/providers/imapx/camel-imapx-store.c:170 -#: ../camel/providers/imapx/camel-imapx-store.c:676 -#: ../camel/providers/imapx/camel-imapx-store.c:732 -#: ../camel/providers/imapx/camel-imapx-store.c:784 +#: ../camel/providers/imapx/camel-imapx-store.c:169 +#: ../camel/providers/imapx/camel-imapx-store.c:675 +#: ../camel/providers/imapx/camel-imapx-store.c:731 +#: ../camel/providers/imapx/camel-imapx-store.c:783 msgid "You must be working online to complete this operation" msgstr "Sie müssen online arbeiten, um diesen Vorgang abzuschließen" @@ -1865,40 +1865,40 @@ msgstr "Fehler beim Kopieren der temporären E-Mail-Datei: %s" msgid "parse error" msgstr "Fehler bei der Syntaxanalyse" -#: ../camel/camel-net-utils.c:503 ../camel/camel-net-utils.c:678 -#: ../camel/camel-net-utils.c:817 +#: ../camel/camel-net-utils.c:507 ../camel/camel-net-utils.c:682 +#: ../camel/camel-net-utils.c:821 #: ../camel/providers/pop3/camel-pop3-store.c:478 #: ../camel/providers/pop3/camel-pop3-store.c:578 msgid "Canceled" msgstr "Abgesagt" -#: ../camel/camel-net-utils.c:523 +#: ../camel/camel-net-utils.c:527 msgid "cannot create thread" msgstr "Thread konnte nicht erstellt werden" -#: ../camel/camel-net-utils.c:682 +#: ../camel/camel-net-utils.c:686 #, c-format msgid "Resolving: %s" msgstr "%s wird aufgelöst" -#: ../camel/camel-net-utils.c:704 +#: ../camel/camel-net-utils.c:708 msgid "Host lookup failed" msgstr "Finden eines Rechners gescheitert" -#: ../camel/camel-net-utils.c:706 +#: ../camel/camel-net-utils.c:710 #, c-format msgid "Host lookup failed: %s: %s" msgstr "Finden eines Rechners gescheitert: %s: %s" -#: ../camel/camel-net-utils.c:821 +#: ../camel/camel-net-utils.c:825 msgid "Resolving address" msgstr "Adresse wird aufgelöst" -#: ../camel/camel-net-utils.c:841 +#: ../camel/camel-net-utils.c:845 msgid "Name lookup failed" msgstr "Namenssuche fehlgeschlagen" -#: ../camel/camel-net-utils.c:844 +#: ../camel/camel-net-utils.c:848 #, c-format msgid "Name lookup failed: %s" msgstr "Namenssuche fehlgeschlagen: %s" @@ -2655,8 +2655,8 @@ msgstr "Bitte leeren Sie den Müll, er ist voll." #: ../camel/providers/groupwise/camel-groupwise-store.c:756 #: ../camel/providers/imap/camel-imap-folder.c:3429 #: ../camel/providers/imap/camel-imap-folder.c:3505 -#: ../camel/providers/imapx/camel-imapx-server.c:3624 -#: ../camel/providers/imapx/camel-imapx-server.c:3742 +#: ../camel/providers/imapx/camel-imapx-server.c:3649 +#: ../camel/providers/imapx/camel-imapx-server.c:3768 #, c-format msgid "Fetching summary information for new messages in %s" msgstr "" @@ -2700,14 +2700,14 @@ msgstr "Nach neuen E-Mails sehen" #: ../camel/providers/hula/camel-hula-provider.c:50 #: ../camel/providers/imap/camel-imap-provider.c:46 #: ../camel/providers/imap4/camel-imap4-provider.c:40 -#: ../camel/providers/imapx/camel-imapx-provider.c:52 +#: ../camel/providers/imapx/camel-imapx-provider.c:51 msgid "C_heck for new messages in all folders" msgstr "In allen Ordnern nach neuen E-Mails se_hen" #: ../camel/providers/groupwise/camel-groupwise-provider.c:59 #: ../camel/providers/imap/camel-imap-provider.c:68 #: ../camel/providers/imap4/camel-imap4-provider.c:51 -#: ../camel/providers/imapx/camel-imapx-provider.c:80 +#: ../camel/providers/imapx/camel-imapx-provider.c:79 #: ../camel/providers/local/camel-local-provider.c:46 #: ../camel/providers/local/camel-local-provider.c:86 #: ../camel/providers/local/camel-local-provider.c:106 @@ -2724,7 +2724,7 @@ msgstr "Neue Nachrichten auf _unerwünschten Inhalt prüfen" #: ../camel/providers/groupwise/camel-groupwise-provider.c:65 #: ../camel/providers/imap/camel-imap-provider.c:74 -#: ../camel/providers/imapx/camel-imapx-provider.c:86 +#: ../camel/providers/imapx/camel-imapx-provider.c:85 msgid "Only check for Junk messages in the IN_BOX folder" msgstr "A_usschließlich den Eingangsordner auf unerwünschte Nachrichten prüfen" @@ -2753,7 +2753,7 @@ msgstr "Für den Zugriff auf Novell GroupWise-Server" #: ../camel/providers/hula/camel-hula-provider.c:93 #: ../camel/providers/imap/camel-imap-provider.c:100 #: ../camel/providers/imap4/camel-imap4-provider.c:83 -#: ../camel/providers/imapx/camel-imapx-provider.c:112 +#: ../camel/providers/imapx/camel-imapx-provider.c:111 #: ../camel/providers/nntp/camel-nntp-provider.c:74 #: ../camel/providers/pop3/camel-pop3-provider.c:74 msgid "Password" @@ -2772,7 +2772,7 @@ msgstr "Rechner oder Benutzer in der URL nicht verfügbar" #: ../camel/providers/groupwise/camel-groupwise-store.c:197 #: ../camel/providers/imap/camel-imap-store.c:1356 -#: ../camel/providers/imapx/camel-imapx-server.c:2895 +#: ../camel/providers/imapx/camel-imapx-server.c:2919 msgid "You did not enter a password." msgstr "Sie haben kein Passwort eingegeben." @@ -2785,7 +2785,7 @@ msgstr "" #: ../camel/providers/groupwise/camel-groupwise-store.c:533 #: ../camel/providers/imap/camel-imap-store.c:1879 #: ../camel/providers/imap/camel-imap-store.c:2077 -#: ../camel/providers/imapx/camel-imapx-store.c:376 +#: ../camel/providers/imapx/camel-imapx-store.c:375 #, c-format msgid "No such folder %s" msgstr "Ordner »%s« nicht vorhanden" @@ -2797,7 +2797,7 @@ msgstr "GroupWise-Ordner können im Offline-Modus nicht angelegt werden." #: ../camel/providers/groupwise/camel-groupwise-store.c:1215 #: ../camel/providers/imap/camel-imap-store.c:1954 #: ../camel/providers/imap/camel-imap-store.c:2355 -#: ../camel/providers/imapx/camel-imapx-store.c:820 +#: ../camel/providers/imapx/camel-imapx-store.c:819 msgid "The parent folder is not allowed to contain subfolders" msgstr "Der Elternordner darf keine Unterordner enthalten" @@ -2846,32 +2846,32 @@ msgstr "Nachricht konnte nicht verschickt werden: %s" #: ../camel/providers/hula/camel-hula-provider.c:48 #: ../camel/providers/imap/camel-imap-provider.c:44 -#: ../camel/providers/imapx/camel-imapx-provider.c:44 +#: ../camel/providers/imapx/camel-imapx-provider.c:43 msgid "Checking for New Mail" msgstr "Nach neuen E-Mails sehen" #: ../camel/providers/hula/camel-hula-provider.c:53 #: ../camel/providers/imap/camel-imap-provider.c:52 -#: ../camel/providers/imapx/camel-imapx-provider.c:58 +#: ../camel/providers/imapx/camel-imapx-provider.c:57 msgid "Connection to Server" msgstr "Server-Verbindung" #: ../camel/providers/hula/camel-hula-provider.c:55 #: ../camel/providers/imap/camel-imap-provider.c:54 -#: ../camel/providers/imapx/camel-imapx-provider.c:60 +#: ../camel/providers/imapx/camel-imapx-provider.c:59 msgid "_Use custom command to connect to server" msgstr "_Benutzerdefinierten Befehl für die Server-Verbindung verwenden" #: ../camel/providers/hula/camel-hula-provider.c:57 #: ../camel/providers/imap/camel-imap-provider.c:56 -#: ../camel/providers/imapx/camel-imapx-provider.c:62 +#: ../camel/providers/imapx/camel-imapx-provider.c:61 msgid "Command:" msgstr "Befehl:" #: ../camel/providers/hula/camel-hula-provider.c:60 #: ../camel/providers/imap/camel-imap-provider.c:60 #: ../camel/providers/imap4/camel-imap4-provider.c:43 -#: ../camel/providers/imapx/camel-imapx-provider.c:70 +#: ../camel/providers/imapx/camel-imapx-provider.c:69 #: ../camel/providers/nntp/camel-nntp-provider.c:44 msgid "Folders" msgstr "Ordner" @@ -2879,14 +2879,14 @@ msgstr "Ordner" #: ../camel/providers/hula/camel-hula-provider.c:62 #: ../camel/providers/imap/camel-imap-provider.c:62 #: ../camel/providers/imap4/camel-imap4-provider.c:45 -#: ../camel/providers/imapx/camel-imapx-provider.c:72 +#: ../camel/providers/imapx/camel-imapx-provider.c:71 msgid "_Show only subscribed folders" msgstr "Nur abonnierte Ordner an_zeigen" #: ../camel/providers/hula/camel-hula-provider.c:64 #: ../camel/providers/imap/camel-imap-provider.c:64 #: ../camel/providers/imap4/camel-imap4-provider.c:47 -#: ../camel/providers/imapx/camel-imapx-provider.c:75 +#: ../camel/providers/imapx/camel-imapx-provider.c:74 msgid "O_verride server-supplied folder namespace" msgstr "Über vom Server vorgegebenen Ordner-Namensraum hin_wegsetzen" @@ -2977,7 +2977,7 @@ msgstr "Ordner %s konnte nicht angelegt werden: %s" #. Check UIDs and flags of all messages we already know of. #: ../camel/providers/imap/camel-imap-folder.c:918 -#: ../camel/providers/imapx/camel-imapx-server.c:3660 +#: ../camel/providers/imapx/camel-imapx-server.c:3686 #, c-format msgid "Scanning for changed messages in %s" msgstr "Geänderte Nachrichten werden in %s gesucht" @@ -3001,13 +3001,13 @@ msgid "Unable to retrieve message: %s" msgstr "Nachricht konnte nicht abgerufen werden: %s" #: ../camel/providers/imap/camel-imap-folder.c:2912 -#: ../camel/providers/imapx/camel-imapx-server.c:4775 +#: ../camel/providers/imapx/camel-imapx-server.c:4800 #, c-format msgid "Cannot get message with message ID %s: %s" msgstr "Nachricht mit Kennung %s konnte nicht abgerufen werden: %s" #: ../camel/providers/imap/camel-imap-folder.c:2913 -#: ../camel/providers/imapx/camel-imapx-server.c:4776 +#: ../camel/providers/imapx/camel-imapx-server.c:4801 msgid "No such message available." msgstr "Nachricht nicht verfügbar." @@ -3052,30 +3052,30 @@ msgid "Failed to cache %s: %s" msgstr "%s konnte nicht in den Zwischenspeicher geladen werden: %s" #: ../camel/providers/imap/camel-imap-provider.c:48 -#: ../camel/providers/imapx/camel-imapx-provider.c:54 +#: ../camel/providers/imapx/camel-imapx-provider.c:53 msgid "Ch_eck for new messages in subscribed folders" msgstr "In abonnierten Ordnern nach neuen E-Mails se_hen" #: ../camel/providers/imap/camel-imap-provider.c:66 #: ../camel/providers/imap4/camel-imap4-provider.c:49 -#: ../camel/providers/imapx/camel-imapx-provider.c:77 +#: ../camel/providers/imapx/camel-imapx-provider.c:76 msgid "Namespace:" msgstr "Namensraum:" #: ../camel/providers/imap/camel-imap-provider.c:70 #: ../camel/providers/imap4/camel-imap4-provider.c:53 -#: ../camel/providers/imapx/camel-imapx-provider.c:82 +#: ../camel/providers/imapx/camel-imapx-provider.c:81 msgid "_Apply filters to new messages in INBOX on this server" msgstr "Filter auf neue Nachrichten in INBOX dieses Servers _anwenden" #: ../camel/providers/imap/camel-imap-provider.c:72 -#: ../camel/providers/imapx/camel-imapx-provider.c:84 +#: ../camel/providers/imapx/camel-imapx-provider.c:83 msgid "Check new messages for Jun_k contents" msgstr "Neue Nachrichten auf _unerwünschten Inhalt prüfen" #: ../camel/providers/imap/camel-imap-provider.c:76 #: ../camel/providers/imap4/camel-imap4-provider.c:59 -#: ../camel/providers/imapx/camel-imapx-provider.c:88 +#: ../camel/providers/imapx/camel-imapx-provider.c:87 msgid "Automatically synchroni_ze remote mail locally" msgstr "Entfernte E-Mails automatisch lokal a_bgleichen" @@ -3084,12 +3084,12 @@ msgid "IMAP" msgstr "IMAP" #: ../camel/providers/imap/camel-imap-provider.c:85 -#: ../camel/providers/imapx/camel-imapx-provider.c:98 +#: ../camel/providers/imapx/camel-imapx-provider.c:97 msgid "For reading and storing mail on IMAP servers." msgstr "Zum Lesen und Speichern von E-Mails auf IMAP-Servern." #: ../camel/providers/imap/camel-imap-provider.c:102 -#: ../camel/providers/imapx/camel-imapx-provider.c:114 +#: ../camel/providers/imapx/camel-imapx-provider.c:113 msgid "This option will connect to the IMAP server using a plaintext password." msgstr "" "Dies stellt unter Verwendung eines unverschlüsselten Passworts eine " @@ -3097,14 +3097,14 @@ msgstr "" #: ../camel/providers/imap/camel-imap-store.c:435 #: ../camel/providers/imap4/camel-imap4-store.c:210 -#: ../camel/providers/imapx/camel-imapx-store.c:204 +#: ../camel/providers/imapx/camel-imapx-store.c:203 #, c-format msgid "IMAP server %s" msgstr "IMAP-Server %s" #: ../camel/providers/imap/camel-imap-store.c:437 #: ../camel/providers/imap4/camel-imap4-store.c:212 -#: ../camel/providers/imapx/camel-imapx-store.c:206 +#: ../camel/providers/imapx/camel-imapx-store.c:205 #, c-format msgid "IMAP service for %s on %s" msgstr "IMAP-Dienst für %s auf %s" @@ -3133,8 +3133,8 @@ msgstr "SSL nicht verfügbar" #: ../camel/providers/imap/camel-imap-store.c:578 #: ../camel/providers/imap/camel-imap-store.c:860 -#: ../camel/providers/imapx/camel-imapx-server.c:2589 -#: ../camel/providers/imapx/camel-imapx-server.c:2687 +#: ../camel/providers/imapx/camel-imapx-server.c:2613 +#: ../camel/providers/imapx/camel-imapx-server.c:2711 msgid "Connection cancelled" msgstr "Verbindung abgebrochen" @@ -3145,20 +3145,20 @@ msgstr "Verbindung abgebrochen" #: ../camel/providers/imap4/camel-imap4-store.c:310 #: ../camel/providers/imap4/camel-imap4-store.c:325 #: ../camel/providers/imap4/camel-imap4-store.c:334 -#: ../camel/providers/imapx/camel-imapx-server.c:2758 -#: ../camel/providers/imapx/camel-imapx-server.c:2789 +#: ../camel/providers/imapx/camel-imapx-server.c:2782 +#: ../camel/providers/imapx/camel-imapx-server.c:2813 #, c-format msgid "Failed to connect to IMAP server %s in secure mode: %s" msgstr "Verbindung mit IMAP-Server %s im sicheren Modus ist gescheitert: %s" #: ../camel/providers/imap/camel-imap-store.c:690 -#: ../camel/providers/imapx/camel-imapx-server.c:2759 +#: ../camel/providers/imapx/camel-imapx-server.c:2783 #: ../camel/providers/smtp/camel-smtp-transport.c:332 msgid "STARTTLS not supported" msgstr "STARTTLS nicht unterstützt" #: ../camel/providers/imap/camel-imap-store.c:709 -#: ../camel/providers/imapx/camel-imapx-server.c:2790 +#: ../camel/providers/imapx/camel-imapx-server.c:2814 msgid "SSL negotiations failed" msgstr "SSL-»Verhandlungen« gescheitert" @@ -3169,7 +3169,7 @@ msgid "SSL is not available in this build" msgstr "SSL ist in diesem Build nicht verfügbar" #: ../camel/providers/imap/camel-imap-store.c:863 -#: ../camel/providers/imapx/camel-imapx-server.c:2592 +#: ../camel/providers/imapx/camel-imapx-server.c:2616 #, c-format msgid "Could not connect with command \"%s\": %s" msgstr "Verbindung mit Befehl »%s« konnte nicht hergestellt werden: %s" @@ -3179,8 +3179,8 @@ msgstr "Verbindung mit Befehl »%s« konnte nicht hergestellt werden: %s" #: ../camel/providers/imap/camel-imap-store.c:2451 #: ../camel/providers/imap4/camel-imap4-store-summary.c:356 #: ../camel/providers/imap4/camel-imap4-store.c:1403 -#: ../camel/providers/imapx/camel-imapx-store.c:428 -#: ../camel/providers/imapx/camel-imapx-store.c:1001 +#: ../camel/providers/imapx/camel-imapx-store.c:427 +#: ../camel/providers/imapx/camel-imapx-store.c:1000 #: ../camel/providers/local/camel-maildir-folder.c:81 #: ../camel/providers/local/camel-maildir-store.c:219 #: ../camel/providers/local/camel-maildir-store.c:291 @@ -3191,20 +3191,20 @@ msgid "Inbox" msgstr "Eingang" #: ../camel/providers/imap/camel-imap-store.c:1303 -#: ../camel/providers/imapx/camel-imapx-server.c:2854 +#: ../camel/providers/imapx/camel-imapx-server.c:2878 #, c-format msgid "IMAP server %s does not support requested authentication type %s" msgstr "IMAP-Server %s unterstützt den verlangten Legitimationstyp %s nicht." #: ../camel/providers/imap/camel-imap-store.c:1313 -#: ../camel/providers/imapx/camel-imapx-server.c:2865 +#: ../camel/providers/imapx/camel-imapx-server.c:2889 #: ../camel/providers/smtp/camel-smtp-transport.c:506 #, c-format msgid "No support for authentication type %s" msgstr "Keine Unterstützung für Legitimationstyp %s" #: ../camel/providers/imap/camel-imap-store.c:1387 -#: ../camel/providers/imapx/camel-imapx-server.c:2934 +#: ../camel/providers/imapx/camel-imapx-server.c:2958 #, c-format msgid "" "Unable to authenticate to IMAP server.\n" @@ -3218,7 +3218,7 @@ msgstr "" #: ../camel/providers/imap/camel-imap-store.c:1891 #: ../camel/providers/imap/camel-imap-store.c:2293 #: ../camel/providers/imap4/camel-imap4-store.c:954 -#: ../camel/providers/imapx/camel-imapx-store.c:803 +#: ../camel/providers/imapx/camel-imapx-store.c:802 #, c-format msgid "" "The folder name \"%s\" is invalid because it contains the character \"%c\"" @@ -3233,7 +3233,7 @@ msgid "Cannot create folder '%s': folder exists." msgstr "Ordner »%s« konnte nicht angelegt werden: Ordner existiert." #: ../camel/providers/imap/camel-imap-store.c:2304 -#: ../camel/providers/imapx/camel-imapx-store.c:812 +#: ../camel/providers/imapx/camel-imapx-store.c:811 #, c-format msgid "Unknown parent folder: %s" msgstr "Unbekannter Elternerdner: %s" @@ -3589,33 +3589,29 @@ msgstr "Keine Daten" msgid "IMAP server %s unexpectedly disconnected: %s" msgstr "Verbindung mit IMAP-Server %s unerwartet getrennt: %s" -#: ../camel/providers/imapx/camel-imapx-folder.c:87 +#: ../camel/providers/imapx/camel-imapx-folder.c:86 #, c-format msgid "Could not create folder summary for %s" msgstr "Zusammenfassung für %s konnte nicht erstellt werden" -#: ../camel/providers/imapx/camel-imapx-folder.c:95 +#: ../camel/providers/imapx/camel-imapx-folder.c:94 #, c-format msgid "Could not create cache for %s" msgstr "Zwischenspeicher konnte nicht für »%s« angelegt werden" -#: ../camel/providers/imapx/camel-imapx-provider.c:47 -msgid "Use _Quick Resync if the server supports it" -msgstr "»_Schnelles Abgleichen« verwenden, falls es der Server unterstützt" - -#: ../camel/providers/imapx/camel-imapx-provider.c:50 +#: ../camel/providers/imapx/camel-imapx-provider.c:49 msgid "Use I_dle if the server supports it" msgstr "»Untätig« verwen_den, falls der Server es unterstützt" -#: ../camel/providers/imapx/camel-imapx-provider.c:65 +#: ../camel/providers/imapx/camel-imapx-provider.c:64 msgid "Numbe_r of cached connections to use" msgstr "Anzahl de_r zu verwendenden zwischengespeicherten Verbindungen" -#: ../camel/providers/imapx/camel-imapx-provider.c:96 +#: ../camel/providers/imapx/camel-imapx-provider.c:95 msgid "IMAP+" msgstr "IMAP+" -#: ../camel/providers/imapx/camel-imapx-server.c:2690 +#: ../camel/providers/imapx/camel-imapx-server.c:2714 #, c-format msgid "Could not connect to %s (port %s): %s" msgstr "Verbindung mit %s (Port %s) gescheitert: %s" @@ -3694,7 +3690,7 @@ msgid "" "For reading and storing local mail in external standard mbox spool files.\n" "May also be used to read a tree of Elm, Pine, or Mutt style folders." msgstr "" -"Zum Lesen und Speichern von lokaler E-Mails in externen Standard-mbox-" +"Zum Lesen und Speichern von lokalen E-Mails in externen Standard-mbox-" "Spooldateien.\n" "Kann außerdem zum Einlesen eines Baums mit Elm-, Pine- oder Mutt-Ordnern " "verwendet werden." @@ -5222,6 +5218,9 @@ msgstr "Server liefert keine Antwort" msgid "Bad parameter" msgstr "Fehlerhafter Parameter" +#~ msgid "Use _Quick Resync if the server supports it" +#~ msgstr "»_Schnelles Abgleichen« verwenden, falls es der Server unterstützt" + #~ msgid "%sPlease enter the IMAP password for %s@%s" #~ msgstr "%s Bitte geben Sie das IMAP-Passwort für %s@%s ein" -- cgit v1.2.1 From 7dfbd0660bd8311ea7e06bf76e578afdc15840cd Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Mon, 20 Sep 2010 11:25:10 +0100 Subject: Bug 630135 - No UI feedback when imapx connection fails Don't call camel_operation_cancel(NULL). That has undesired effects. Only call camel_operation_cancel(server->op) if it's non-NULL -- i.e. if the parser thread had actually started up and set it. --- camel/providers/imapx/camel-imapx-server.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index a11a979e6..61121da1f 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -4647,7 +4647,8 @@ imapx_server_finalise(CamelIMAPXServer *is, CamelIMAPXServerClass *isclass) QUEUE_UNLOCK(is); is->parser_quit = TRUE; - camel_operation_cancel (is->op); + if (is->op) + camel_operation_cancel (is->op); if (is->parser_thread) g_thread_join (is->parser_thread); -- cgit v1.2.1 From ebb8a861406825a27ef3f8f09039455bdbe7ca9e Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Mon, 20 Sep 2010 13:30:13 +0100 Subject: Bug 630150 - imapx attempts to connect to server when already cancelled --- camel/providers/imapx/camel-imapx-store.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/camel/providers/imapx/camel-imapx-store.c b/camel/providers/imapx/camel-imapx-store.c index 79567ea1f..1fd4148c7 100644 --- a/camel/providers/imapx/camel-imapx-store.c +++ b/camel/providers/imapx/camel-imapx-store.c @@ -211,6 +211,11 @@ camel_imapx_store_get_server(CamelIMAPXStore *store, CamelException *ex) { CamelIMAPXServer *server = NULL; + if (camel_operation_cancel_check(NULL)) { + camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL, + _("Cancelled")); + return NULL; + } CAMEL_SERVICE_REC_LOCK (store, connect_lock); if (store->server && camel_imapx_server_connect(store->server, ex)) { -- cgit v1.2.1 From 1cccc30897f4bb8003841636cbddc639170a62fb Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Mon, 20 Sep 2010 13:47:48 +0100 Subject: Bug 630152 - imapx_parser_thread registers wrong operation --- camel/providers/imapx/camel-imapx-server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index 61121da1f..b0397a743 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -4494,7 +4494,7 @@ imapx_parser_thread (gpointer d) CamelOperation *op; op = camel_operation_new (NULL, NULL); - op = camel_operation_register (op); + camel_operation_register (op); is->op = op; while (!camel_exception_is_set (&ex) && is->stream) { -- cgit v1.2.1 From 6bab108176cdbeb1ee259ab01160db4c5fbbba5d Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Mon, 20 Sep 2010 15:18:03 +0100 Subject: Bug 629916 - imapx fails to handle errors in imapx_command_idle_stop() --- camel/providers/imapx/camel-imapx-server.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c index b0397a743..5d6b1e20c 100644 --- a/camel/providers/imapx/camel-imapx-server.c +++ b/camel/providers/imapx/camel-imapx-server.c @@ -942,7 +942,9 @@ imapx_command_start_next(CamelIMAPXServer *is, CamelException *ex) if (imapx_in_idle (is) && !camel_dlist_empty (&is->queue)) { /* if imapx_stop_idle() returns FALSE, it was only pending and we can go ahead and send a new command - immediately. If it returns TRUE, we must wait. */ + immediately. If it returns TRUE, either it sent the + DONE to exit IDLE mode, or there was an error. + Either way, we do nothing more right now. */ if (imapx_stop_idle (is, ex)) { c(printf ("waiting for idle to stop \n")); return; @@ -1725,7 +1727,10 @@ imapx_continuation(CamelIMAPXServer *imap, CamelException *ex, gboolean litplus) /* IDLE got cancelled after we sent the command, while we were waiting for this continuation. Send DONE immediately. */ - imapx_command_idle_stop(imap, ex); + if (!imapx_command_idle_stop (imap, ex)) { + IDLE_UNLOCK(imap->idle); + return -1; + } imap->idle->state = IMAPX_IDLE_OFF; } else { c(printf("idle starts in wrong state %d\n", @@ -2052,6 +2057,11 @@ imapx_command_idle_stop (CamelIMAPXServer *is, CamelException *ex) { if (!is->stream || camel_stream_printf((CamelStream *)is->stream, "%s", "DONE\r\n") == -1) { camel_exception_set (ex, 1, "Unable to issue DONE"); + c(printf("Failed to issue DONE to terminate IDLE\n")); + is->state = IMAPX_SHUTDOWN; + if (is->op) + camel_operation_cancel(is->op); + is->parser_quit = TRUE; return FALSE; } @@ -2218,9 +2228,13 @@ imapx_stop_idle (CamelIMAPXServer *is, CamelException *ex) break; case IMAPX_IDLE_STARTED: - imapx_command_idle_stop (is, ex); - idle->state = IMAPX_IDLE_OFF; + /* We set 'stopped' even if sending DONE fails, to ensure that + our caller doesn't try to submit its own command. */ stopped = TRUE; + if (!imapx_command_idle_stop (is, ex)) + break; + + idle->state = IMAPX_IDLE_OFF; c(printf("Stopping idle after %ld seconds\n", (long)(now - idle->started))); case IMAPX_IDLE_PENDING: -- cgit v1.2.1 From 237352d97330812bbbb0f061c3a01e35374da19c Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Mon, 20 Sep 2010 13:29:20 +0100 Subject: Bug 630149 - imapx_sync() never returns error --- camel/providers/imapx/camel-imapx-folder.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/camel/providers/imapx/camel-imapx-folder.c b/camel/providers/imapx/camel-imapx-folder.c index 44f841041..87b49d06f 100644 --- a/camel/providers/imapx/camel-imapx-folder.c +++ b/camel/providers/imapx/camel-imapx-folder.c @@ -172,19 +172,20 @@ imapx_sync (CamelFolder *folder, gboolean expunge, CamelException *ex) ex = &eex; server = camel_imapx_store_get_server(is, ex); - if (server) - camel_imapx_server_sync_changes (server, folder, ex); + if (!server) + return; + + camel_imapx_server_sync_changes (server, folder, ex); /* Sync twice - make sure deleted flags are written out, then sync again incase expunge changed anything */ camel_exception_clear(ex); - if (server && expunge) { + if (expunge) { camel_imapx_server_expunge(server, folder, ex); camel_exception_clear(ex); } - if (server) - camel_object_unref(server); + camel_object_unref(server); } static CamelMimeMessage * -- cgit v1.2.1 From 4eef23360571d75a6cf83fecbc47cf0784e78267 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Mon, 20 Sep 2010 23:08:57 +0100 Subject: Fix string freeze break The string 'Cancelled' didn't previously exist in 2.30, although it exists in many other places in 2.32 and master. Instead of adding a this new string, instead use 'Operation cancelled', which already existed a number of times in 2.30. --- camel/providers/imapx/camel-imapx-store.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/camel/providers/imapx/camel-imapx-store.c b/camel/providers/imapx/camel-imapx-store.c index 1fd4148c7..cb9823d56 100644 --- a/camel/providers/imapx/camel-imapx-store.c +++ b/camel/providers/imapx/camel-imapx-store.c @@ -213,7 +213,7 @@ camel_imapx_store_get_server(CamelIMAPXStore *store, CamelException *ex) if (camel_operation_cancel_check(NULL)) { camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL, - _("Cancelled")); + _("Operation cancelled")); return NULL; } CAMEL_SERVICE_REC_LOCK (store, connect_lock); -- cgit v1.2.1