summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@novell.com>2010-09-24 11:43:50 -0500
committerFederico Mena Quintero <federico@novell.com>2010-09-24 11:43:50 -0500
commitd4f0f65a53f0163e410a06684ac4c3404f5fd989 (patch)
tree80a3c43b1053bc9f658b12fe1d05c4fe69b6c4fc
parent192ec4d20f07fb5cf71e02ce5b7ea90eaa99595a (diff)
parent4eef23360571d75a6cf83fecbc47cf0784e78267 (diff)
downloadevolution-data-server-camel-socks-proxy.tar.gz
Merge branch 'gnome-2-30' into camel-socks-proxycamel-socks-proxy
-rw-r--r--NEWS18
-rw-r--r--addressbook/backends/webdav/e-book-backend-webdav.c16
-rw-r--r--addressbook/libedata-book/e-data-book-factory.c33
-rw-r--r--calendar/backends/caldav/e-cal-backend-caldav.c3
-rw-r--r--calendar/libedata-cal/e-data-cal-factory.c33
-rw-r--r--camel/Makefile.am3
-rw-r--r--camel/camel-net-utils-win32.h381
-rw-r--r--camel/camel-net-utils.c6
-rw-r--r--camel/camel-operation.c47
-rw-r--r--camel/providers/imapx/camel-imapx-folder.c80
-rw-r--r--camel/providers/imapx/camel-imapx-folder.h19
-rw-r--r--camel/providers/imapx/camel-imapx-provider.c25
-rw-r--r--camel/providers/imapx/camel-imapx-server.c586
-rw-r--r--camel/providers/imapx/camel-imapx-server.h23
-rw-r--r--camel/providers/imapx/camel-imapx-store.c159
-rw-r--r--camel/providers/imapx/camel-imapx-store.h20
-rw-r--r--camel/providers/imapx/camel-imapx-stream.c18
-rw-r--r--camel/providers/imapx/camel-imapx-stream.h14
-rw-r--r--camel/providers/imapx/camel-imapx-summary.c49
-rw-r--r--camel/providers/imapx/camel-imapx-summary.h4
-rw-r--r--camel/providers/imapx/camel-imapx-utils.c54
-rw-r--r--camel/providers/imapx/camel-imapx-utils.h22
-rw-r--r--camel/providers/imapx/camel-imapx-view-summary.c16
-rw-r--r--camel/providers/imapx/camel-imapx-view-summary.h16
-rw-r--r--camel/providers/imapx/test-imapx.c19
-rw-r--r--configure.ac5
-rw-r--r--po/de.po828
-rw-r--r--po/zh_CN.po2451
28 files changed, 2679 insertions, 2269 deletions
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
---------------------------------------
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)
"<propfind xmlns=\"DAV:\"><prop><getetag/></prop></propfind>";
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/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 <windows.h>
+#include <conio.h>
+#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/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) {
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 <windows.h>
+#include <conio.h>
+#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");
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 <stdio.h>
-#include <stdlib.h>
-#include <malloc.h>
-#include <string.h>
-#include <ws2tcpip.h>
-
-#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 <typename __CountofType,size_t _N> 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 <winsock2.h>
+#include <ws2tcpip.h>
+#ifdef HAVE_WSPIAPI_H
+#include <wspiapi.h>
+#endif
#endif
#include "camel-operation.h"
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);
}
}
diff --git a/camel/providers/imapx/camel-imapx-folder.c b/camel/providers/imapx/camel-imapx-folder.c
index 3d9b0c048..87b49d06f 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 <notzed@ximian.com>
*
- * 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
@@ -129,25 +128,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 +162,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 +171,21 @@ 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)
+ 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 (is->server && expunge) {
- camel_imapx_server_expunge(is->server, folder, ex);
+ if (expunge) {
+ camel_imapx_server_expunge(server, folder, ex);
camel_exception_clear(ex);
}
+ 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-folder.h b/camel/providers/imapx/camel-imapx-folder.h
index ae7144a23..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 <notzed@ximian.com>
*
- * 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
@@ -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-provider.c b/camel/providers/imapx/camel-imapx-provider.c
index 01f547d73..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 <danw@ximian.com>
* Michael Zucchi <notzed@ximian.com>
*
- * 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
@@ -40,8 +39,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") },
+/* 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" },
+*/
{ 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 5f3437836..768a4ff44 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 <config.h>
@@ -139,7 +157,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 +179,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);
@@ -170,6 +188,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,
@@ -263,6 +282,8 @@ struct _CamelIMAPXJob {
/* used for biulding uidset stuff */
gint index;
gint last_index;
+ gboolean update_unseen;
+ gboolean dummy_exception;
struct _uidset_state uidset;
/* changes during refresh */
CamelFolderChangeInfo *changes;
@@ -273,6 +294,7 @@ struct _CamelIMAPXJob {
guint32 off_set;
GArray *on_user; /* imapx_flag_change */
GArray *off_user;
+ gint unread_change;
} sync_changes;
struct {
gchar *path;
@@ -307,6 +329,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);
@@ -501,7 +524,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;
@@ -716,7 +739,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;
@@ -726,7 +749,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 ();
@@ -765,8 +788,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) {
@@ -844,6 +866,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.
@@ -881,7 +918,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);
@@ -905,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;
@@ -925,8 +964,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)
@@ -944,7 +984,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 == NULL || strcmp(ic->select, is->select) == 0) {
+ 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);
@@ -968,14 +1009,17 @@ 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 &&
+ !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);
@@ -1013,6 +1057,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);
@@ -1058,20 +1111,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:
@@ -1095,7 +1147,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;
@@ -1105,7 +1157,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;
@@ -1119,7 +1171,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;
}
@@ -1134,12 +1186,12 @@ imapx_is_job_in_queue (CamelIMAPXServer *is, const gchar *folder_name, guint32 t
}
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)
@@ -1147,7 +1199,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);
}
@@ -1221,21 +1273,40 @@ 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 = imapx_parse_uids(imap->stream, ex);
+ GPtrArray *uids;
+ gboolean unsolicited = TRUE;
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 == '(') {
+ unsolicited = FALSE;
+ 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++) {
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;
@@ -1343,9 +1414,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));
@@ -1395,6 +1468,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);
@@ -1433,6 +1507,24 @@ 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
+ 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)) {
+ 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 {
+ c(printf("Not updating unread count for new message %s\n", mi->uid));
+ }
}
binfo = (CamelMessageInfoBase *) mi;
@@ -1450,10 +1542,15 @@ 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);
+ }
}
+
+ if (free_user_flags && server_user_flags)
+ camel_flag_list_free (&server_user_flags);
+
}
}
}
@@ -1513,6 +1610,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));
}
@@ -1530,7 +1628,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"));
@@ -1549,11 +1648,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:
@@ -1587,10 +1682,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;
@@ -1631,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",
@@ -1685,7 +1784,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;
@@ -1899,6 +1998,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);
@@ -1954,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;
}
@@ -1986,7 +2094,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;
@@ -2026,7 +2134,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;
@@ -2035,8 +2144,13 @@ 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;
job->op = camel_operation_registered ();
if (imapx_register_job (is, job))
@@ -2074,7 +2188,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));
@@ -2114,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:
@@ -2208,7 +2326,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
@@ -2216,7 +2334,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;
@@ -2230,7 +2347,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);
}
@@ -2247,7 +2366,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?ic->status->text:"<unknown reason>");
+ }
cw->complete(is, cw);
cw = cn;
cn = cn->next;
@@ -2257,11 +2382,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;
@@ -2270,12 +2393,17 @@ 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;
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! */
if (is->uidvalidity && is->uidvalidity != ((CamelIMAPXSummary *)is->select_folder->summary)->uidvalidity)
@@ -2314,7 +2442,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))
@@ -2323,15 +2451,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;
@@ -2347,6 +2472,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, 0);
+
+ 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);
}
@@ -2701,7 +2886,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 "
@@ -2828,6 +3013,19 @@ imapx_reconnect (CamelIMAPXServer *is, CamelException *ex)
if (camel_exception_is_set (ex))
goto exception;
}
+ 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);
+ camel_imapx_command_free (ic);
+
+ 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;
@@ -2890,7 +3088,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, ")");
@@ -2956,7 +3154,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, ")");
@@ -2968,7 +3166,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;
@@ -2987,7 +3185,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;
@@ -3097,7 +3295,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;
@@ -3109,7 +3307,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",
@@ -3224,6 +3425,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;
@@ -3248,7 +3451,7 @@ imapx_command_step_fetch_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic)
if (i<infos->len) {
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;
@@ -3277,10 +3480,27 @@ 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;i<infos->len;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);
@@ -3374,7 +3594,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
@@ -3416,7 +3636,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);
}
@@ -3442,7 +3662,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;
}
@@ -3456,6 +3678,7 @@ imapx_job_scan_changes_done(CamelIMAPXServer *is, CamelIMAPXCommand *ic)
for (i=0;i<infos->len;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);
}
@@ -3473,9 +3696,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;
@@ -3497,7 +3722,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);
@@ -3506,6 +3730,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);
@@ -3529,22 +3770,26 @@ 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);
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;
@@ -3565,6 +3810,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 */
@@ -3574,7 +3820,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);
@@ -3619,10 +3865,10 @@ imapx_job_refresh_info_start (CamelIMAPXServer *is, CamelIMAPXJob *job)
}
}
} else {
- if (is->cinfo && is->cinfo->capa & IMAPX_CAPABILITY_CONDSTORE)
- ic = camel_imapx_command_new (is, "STATUS", NULL, "STATUS %f (MESSAGES UNSEEN UIDNEXT HIGHESTMODSEQ)", folder);
+ if (is->cinfo->capa & IMAPX_CAPABILITY_CONDSTORE)
+ 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;
@@ -3650,6 +3896,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,
@@ -3664,17 +3913,43 @@ 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;
+
+ /* If QRESYNC-capable we'll have got all flags changes in SELECT */
+ if (can_qresync)
+ goto qresync_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);
+ qresync_done:
+ isum->modseq = ifolder->modseq_on_server;
+ 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 %" 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 %" 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));
+ goto done;
+ }
}
+ imapx_job_scan_changes_start (is, job);
+ return;
+
done:
imapx_job_done (is, job);
}
@@ -3707,7 +3982,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);
}
@@ -3739,7 +4014,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;
@@ -3894,7 +4169,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;
@@ -3930,7 +4205,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;
@@ -3961,10 +4236,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;
@@ -3987,7 +4259,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 }
};
/*
@@ -4031,21 +4305,23 @@ imapx_command_sync_changes_done (CamelIMAPXServer *is, CamelIMAPXCommand *ic)
gint i;
for (i=0;i<job->u.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. */
+ ((CamelIMAPXFolder *)job->folder)->unread_on_server += job->u.sync_changes.unread_change;
}
if (job->commands == 0) {
@@ -4111,7 +4387,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;
@@ -4124,6 +4400,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);
}
}
@@ -4139,7 +4423,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;
@@ -4224,7 +4508,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) {
@@ -4271,7 +4555,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;
}
@@ -4290,11 +4574,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);
@@ -4348,11 +4632,30 @@ 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;
+ if (is->op)
+ camel_operation_cancel (is->op);
+
+ if (is->parser_thread)
+ g_thread_join (is->parser_thread);
+
+ if (is->cinfo && 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
@@ -4409,11 +4712,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;
@@ -4433,39 +4731,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 *
@@ -4488,7 +4770,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)
@@ -4697,7 +4979,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;
}
@@ -4869,7 +5151,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;
@@ -4921,7 +5203,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 22bd7da7a..6b3934815 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 <notzed@ximian.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,
@@ -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
@@ -74,7 +72,6 @@ struct _CamelIMAPXServer {
/* info on currently selected folder */
struct _CamelFolder *select_folder;
- gchar *select;
struct _CamelFolderChangeInfo *changes;
struct _CamelFolder *select_pending;
guint32 permanentflags;
@@ -102,6 +99,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;
};
@@ -115,7 +114,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..cb9823d56 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 <notzed@ximian.com>
*
- * 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
@@ -124,6 +123,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
@@ -204,16 +206,53 @@ 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;
+
+ if (camel_operation_cancel_check(NULL)) {
+ camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
+ _("Operation cancelled"));
+ return 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 +262,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 +312,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 +577,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 +597,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 +673,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 +728,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 +740,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 +778,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 +789,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 +806,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 +814,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 +822,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 +833,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 +959,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 +982,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 +1044,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 +1080,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 +1111,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 +1124,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 +1133,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..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 <notzed@ximian.com>
*
- * 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
@@ -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;
@@ -79,6 +80,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
}
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 <notzed@ximian.com>
*
- * 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 <notzed@ximian.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
+ * 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-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..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
@@ -58,8 +60,8 @@ struct _CamelIMAPXSummary {
CamelFolderSummary parent;
guint32 version;
- guint32 validity;
guint32 uidnext;
+ guint64 validity;
guint64 modseq;
};
diff --git a/camel/providers/imapx/camel-imapx-utils.c b/camel/providers/imapx/camel-imapx-utils.c
index 274736d58..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 <ctype.h>
#include <errno.h>
@@ -75,6 +93,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 }
};
@@ -87,7 +107,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;
@@ -96,13 +116,11 @@ 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) {
- p = token;
- // FIXME: ascii_toupper
- while ((c=*p))
- *p++ = toupper(c);
+ if (tok == IMAPX_TOK_TOKEN || tok == IMAPX_TOK_INT) {
+ 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;
}
@@ -114,6 +132,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;
@@ -219,12 +238,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)
@@ -234,9 +255,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)
@@ -266,8 +288,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)
@@ -339,9 +364,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;
@@ -355,9 +381,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)
@@ -1721,7 +1749,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;
diff --git a/camel/providers/imapx/camel-imapx-utils.h b/camel/providers/imapx/camel-imapx-utils.h
index 277ec7ffd..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
@@ -69,10 +87,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);
/* ********************************************************************** */
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 <notzed@ximian.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,
@@ -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 <notzed@ximian.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
+ * 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 <glib.h>
#include "camel-imapx-store.h"
#include "camel-imapx-folder.h"
diff --git a/configure.ac b/configure.ac
index 062c0c4c8..f64867512 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])
@@ -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 <wspiapi.h>])],,)
+
dnl ******************************
dnl Calendar support
dnl ******************************
diff --git a/po/de.po b/po/de.po
index 340fed626..fca35cbfe 100644
--- a/po/de.po
+++ b/po/de.po
@@ -6,24 +6,23 @@
# Christian Kintner <mail@christian-kintner.de>, 2006.
# Andre Klapper <ak-47@gmx.net>, 2007-2009.
# Mario Blättermann <mariobl@gnome.org>, 2009, 2010.
-# Christian Kirbach <Christian.Kirbach@googlemail.com>, 2010.
#
# Based on German Evolution translation.
# Copyright on Evolution translation is held by its translators.
+# Christian Kirbach <Christian.Kirbach@googlemail.com>, 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 <mariobl@gnome.org>\n"
+"Report-Msgid-Bugs-To: \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 <Christian.Kirbach@googlemail.com>\n"
"Language-Team: Deutsch <gnome-de@gnome.org>\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,20 +619,20 @@ 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"
-#: ../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:323
-#: ../calendar/libedata-cal/e-data-cal-factory.c:332
+#: ../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"
@@ -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: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
@@ -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:351
#, 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: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:390
+#: ../calendar/libedata-cal/e-data-cal-factory.c:402
#, 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: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"
@@ -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: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:521
+#: ../camel/camel-net-utils.c:527
msgid "cannot create thread"
msgstr "Thread konnte nicht erstellt werden"
-#: ../camel/camel-net-utils.c:678
+#: ../camel/camel-net-utils.c:686
#, c-format
msgid "Resolving: %s"
msgstr "%s wird aufgelöst"
-#: ../camel/camel-net-utils.c:700
+#: ../camel/camel-net-utils.c:708
msgid "Host lookup failed"
msgstr "Finden eines Rechners gescheitert"
-#: ../camel/camel-net-utils.c:702
+#: ../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:809
+#: ../camel/camel-net-utils.c:825
msgid "Resolving address"
msgstr "Adresse wird aufgelöst"
-#: ../camel/camel-net-utils.c:829
+#: ../camel/camel-net-utils.c:845
msgid "Name lookup failed"
msgstr "Namenssuche fehlgeschlagen"
-#: ../camel/camel-net-utils.c:832
+#: ../camel/camel-net-utils.c:848
#, 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:3649
+#: ../camel/providers/imapx/camel-imapx-server.c:3768
#, 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: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:72
+#: ../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
@@ -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:85
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:111
#: ../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:2919
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:375
#, 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:819
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 "
@@ -2839,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:54
+#: ../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:56
+#: ../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:58
+#: ../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:64
+#: ../camel/providers/imapx/camel-imapx-provider.c:69
#: ../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: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:68
+#: ../camel/providers/imapx/camel-imapx-provider.c:74
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:3686
#, 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: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:4801
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: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:70
+#: ../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:74
+#: ../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:76
+#: ../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:80
+#: ../camel/providers/imapx/camel-imapx-provider.c:87
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: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:106
+#: ../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 "
@@ -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: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:169
+#: ../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"
@@ -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:2613
+#: ../camel/providers/imapx/camel-imapx-server.c:2711
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: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:2058
+#: ../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:2072
+#: ../camel/providers/imapx/camel-imapx-server.c:2814
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:2616
#, 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: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
@@ -3180,17 +3191,20 @@ msgid "Inbox"
msgstr "Eingang"
#: ../camel/providers/imap/camel-imap-store.c:1303
+#: ../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: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:2958
#, 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:802
#, 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:811
#, 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,33 @@ 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: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:92
+#: ../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:46
+#: ../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:60
+#: ../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:88
+#: ../camel/providers/imapx/camel-imapx-provider.c:95
msgid "IMAP+"
msgstr "IMAP+"
-#: ../camel/providers/imapx/camel-imapx-server.c:2020
+#: ../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"
-#: ../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"
@@ -3677,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."
@@ -3740,7 +3753,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 +3854,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 +3955,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 +4189,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 +4240,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 +4278,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 +4319,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 +4373,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 +4387,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 +4399,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 +4426,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 +4452,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 +4461,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 +4471,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 +4481,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 +4696,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 +4799,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 +4885,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 +4893,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 +4901,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 +4909,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 +4988,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 +5028,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 +5083,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 +5137,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 +5198,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 +5218,12 @@ 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"
+
#~ msgid ""
#~ "Experimental IMAP 4(.1) client\n"
#~ "This is untested and unsupported code, you want to use plain imap "
@@ -5272,11 +5300,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"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index ac607f84e..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 <zyangmath@gmail.com>, 2008.
# Aron Xu <happyaron.xu@gmail.com>, 2009.
+# Yinghua Wang <wantinghard@gmail.com>, 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 <happyaron.xu@gmail.com>\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 <wantinghard@gmail.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\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,62 +1162,188 @@ 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:141
+#: ../calendar/libedata-cal/e-cal-backend-util.c:143
msgid "Query refused"
msgstr "查询被拒绝"
-#: ../calendar/libedata-cal/e-cal-backend-util.c:148
+#: ../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-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-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"
msgstr "该密码不支持签名"
@@ -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/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/imapp/camel-imapp-provider.c:49
+#: ../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"
+"Error sending username%s"
msgstr ""
"无法连接到 POP 服务器 %s。\n"
-"发送用户名错误:%s"
+"发送用户名错误%s"
-#: ../camel/providers/pop3/camel-pop3-store.c:669
+#. 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 password%s"
+msgstr ""
+"无法连接到 POP 服务器 %s。\n"
+"发送密码错误:%s"
+
+#: ../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
-msgid "Item(s) belong to these _categories:"
-msgstr "项目属于这些类别(_C):"
+#: ../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 的密码"
-#: ../src/GNOME_Evolution_DataServer.server.in.in.h:1
-msgid "Evolution Addressbook file backend"
-msgstr "Evolution 地址簿文件后端"
+#~ msgid "Enter password"
+#~ msgstr "输入密码"
-#: ../src/GNOME_Evolution_DataServer.server.in.in.h:2
-msgid "Evolution Calendar file and webcal backend"
-msgstr "Evolution 日历文件和 Webcal 后端"
+#~ msgid "Owner"
+#~ msgstr "所有者"
-#: ../src/GNOME_Evolution_DataServer.server.in.in.h:3
-msgid "Evolution Data Server interface check service"
-msgstr "Evolution 数据服务器接口检查服务"
+#~ msgid "Publishing Editor"
+#~ msgstr "发布编辑器"
-#: ../src/GNOME_Evolution_DataServer.server.in.in.h:4
-msgid "Evolution Data Server logging service"
-msgstr "Evolution 数据服务器日志服务"
+#~ msgid "Editor"
+#~ msgstr "编辑器"
+
+#~ msgid "Publishing Author"
+#~ msgstr "发布作者"
+
+#~ msgid "Author"
+#~ msgstr "作者"
+
+#~ msgid "Non-editing Author"
+#~ msgstr "非编辑作者"
+
+#~ msgid "Reviewer"
+#~ msgstr "复查者"
+
+#~ msgid "Contributor"
+#~ msgstr "贡献者"
+
+#~ 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”没有可用的工厂"