Merge lp:~jelmer/ubuntu/natty/evolution-mapi/newer-openchange into lp:ubuntu/natty/evolution-mapi

Proposed by Jelmer Vernooij
Status: Merged
Merged at revision: 14
Proposed branch: lp:~jelmer/ubuntu/natty/evolution-mapi/newer-openchange
Merge into: lp:ubuntu/natty/evolution-mapi
Diff against target: 3800 lines (+1667/-578)
29 files modified
NEWS (+30/-0)
configure (+10/-10)
configure.ac (+1/-1)
debian/changelog (+10/-0)
debian/control (+6/-4)
debian/patches/01_openchange_compat (+247/-0)
debian/patches/series (+1/-0)
debian/rules (+2/-1)
debian/watch (+1/-1)
po/ca.po (+371/-154)
po/ca@valencia.po (+378/-148)
po/eu.po (+61/-71)
src/account-setup-eplugin/exchange-mapi-account-listener.c (+4/-2)
src/addressbook/e-book-backend-mapi-contacts.c (+5/-15)
src/addressbook/e-book-backend-mapi-gal.c (+33/-2)
src/addressbook/e-book-backend-mapi.c (+76/-22)
src/addressbook/e-book-backend-mapi.h (+2/-0)
src/calendar/e-cal-backend-mapi.c (+24/-10)
src/camel/camel-mapi-folder.c (+35/-28)
src/camel/camel-mapi-private.h (+0/-4)
src/camel/camel-mapi-store.c (+4/-0)
src/camel/camel-mapi-transport.c (+11/-1)
src/camel/camel-mapi-utils.c (+75/-9)
src/camel/camel-mapi-utils.h (+1/-1)
src/libexchangemapi/exchange-mapi-cal-utils.c (+34/-46)
src/libexchangemapi/exchange-mapi-connection.c (+198/-35)
src/libexchangemapi/exchange-mapi-mail-utils.c (+10/-13)
src/libexchangemapi/exchange-mapi-utils.c (+34/-0)
src/libexchangemapi/exchange-mapi-utils.h (+3/-0)
To merge this branch: bzr merge lp:~jelmer/ubuntu/natty/evolution-mapi/newer-openchange
Reviewer Review Type Date Requested Status
Martin Pitt Approve
Ubuntu Sponsors Pending
Review via email: mp+47898@code.launchpad.net

Description of the change

This fixes the dependency on libexchangemapi-1.0-0 in debian/rules (bug 693573) and fixes compatibility with the newer version of OpenChange that's in natty.

To post a comment you must log in.
Revision history for this message
Jelmer Vernooij (jelmer) wrote :

Please note that evolution-data-server is currently uninstallable on natty because it has a dependency on libgdata7 which is only in maverick, not natty. (see bug 709751)

Revision history for this message
Martin Pitt (pitti) wrote :

Thank you!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'NEWS'
2--- NEWS 2010-10-19 15:03:33 +0000
3+++ NEWS 2011-01-29 12:46:35 +0000
4@@ -1,3 +1,33 @@
5+evolution-mapi 0.32.1 2010-11-15
6+---------------------------------
7+
8+Bug Fixes:
9+ Bug #608388 - Copying a mail from another account loses
10+ headers (Milan Crha)
11+ Bug #629481 - Critical warning from mapi_sync function (Milan Crha)
12+ Bug #629484 - Do not refresh 'Favourites' folder itself (Milan Crha)
13+ Bug #629492 - Messages can be without recipients (Milan Crha)
14+ Bug #629499 - Runs incoming filters in all folders (Milan Crha)
15+ Bug #629507 - Gal re-fetches itself (Milan Crha)
16+ Bug #629603 - Allow calendar refresh on demand (Milan Crha)
17+ Bug #629836 - Crash on an event fetching (Milan Crha)
18+ Bug #630698 - Cannot remove just created folder (Punit Jain)
19+ Bug #630712 - Crash in add_cal_esource (Milan Crha)
20+ Bug #631496 - Crash fetching property unsupported by
21+ cast_mapi_SPropValue (Milan Crha)
22+ Bug #631621 - Cannot connect after update (Milan Crha)
23+ Bug #632449 - Copy message to Inbox tries to send it (Milan Crha)
24+ Bug #633182 - Meeting invites sent also to organiser (Milan Crha)
25+ Bug #633185 - Can't handle Birthdays before 01/01/1970 (Milan Crha)
26+
27+Misc:
28+ Unable to send mail after fix for bug #608388 (Milan Crha)
29+
30+Translations:
31+ Carles Ferrando (ca@valencia)
32+ Gil Forcada (ca)
33+ Inaki Larranaga Murgoitio (eu)
34+
35 evolution-mapi 0.32.0 2010-09-27
36 ---------------------------------
37
38
39=== modified file 'configure'
40--- configure 2010-11-03 16:33:05 +0000
41+++ configure 2011-01-29 12:46:35 +0000
42@@ -1,6 +1,6 @@
43 #! /bin/sh
44 # Guess values for system-dependent variables and create Makefiles.
45-# Generated by GNU Autoconf 2.65 for evolution-mapi 0.32.0.
46+# Generated by GNU Autoconf 2.65 for evolution-mapi 0.32.1.
47 #
48 # Report bugs to <http://bugzilla.gnome.org/browse.cgi?product=evolution-mapi>.
49 #
50@@ -702,8 +702,8 @@
51 # Identity of this package.
52 PACKAGE_NAME='evolution-mapi'
53 PACKAGE_TARNAME='evolution-mapi'
54-PACKAGE_VERSION='0.32.0'
55-PACKAGE_STRING='evolution-mapi 0.32.0'
56+PACKAGE_VERSION='0.32.1'
57+PACKAGE_STRING='evolution-mapi 0.32.1'
58 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/browse.cgi?product=evolution-mapi'
59 PACKAGE_URL=''
60
61@@ -1544,7 +1544,7 @@
62 # Omit some internal or obsolete options to make the list less imposing.
63 # This message is too long to be a string in the A/UX 3.1 sh.
64 cat <<_ACEOF
65-\`configure' configures evolution-mapi 0.32.0 to adapt to many kinds of systems.
66+\`configure' configures evolution-mapi 0.32.1 to adapt to many kinds of systems.
67
68 Usage: $0 [OPTION]... [VAR=VALUE]...
69
70@@ -1614,7 +1614,7 @@
71
72 if test -n "$ac_init_help"; then
73 case $ac_init_help in
74- short | recursive ) echo "Configuration of evolution-mapi 0.32.0:";;
75+ short | recursive ) echo "Configuration of evolution-mapi 0.32.1:";;
76 esac
77 cat <<\_ACEOF
78
79@@ -1768,7 +1768,7 @@
80 test -n "$ac_init_help" && exit $ac_status
81 if $ac_init_version; then
82 cat <<\_ACEOF
83-evolution-mapi configure 0.32.0
84+evolution-mapi configure 0.32.1
85 generated by GNU Autoconf 2.65
86
87 Copyright (C) 2009 Free Software Foundation, Inc.
88@@ -2139,7 +2139,7 @@
89 This file contains any messages produced by compilers while
90 running configure, to aid debugging if configure makes a mistake.
91
92-It was created by evolution-mapi $as_me 0.32.0, which was
93+It was created by evolution-mapi $as_me 0.32.1, which was
94 generated by GNU Autoconf 2.65. Invocation command line was
95
96 $ $0 $@
97@@ -2947,7 +2947,7 @@
98
99 # Define the identity of the package.
100 PACKAGE='evolution-mapi'
101- VERSION='0.32.0'
102+ VERSION='0.32.1'
103
104
105 cat >>confdefs.h <<_ACEOF
106@@ -14140,7 +14140,7 @@
107 # report actual input values of CONFIG_FILES etc. instead of their
108 # values after options handling.
109 ac_log="
110-This file was extended by evolution-mapi $as_me 0.32.0, which was
111+This file was extended by evolution-mapi $as_me 0.32.1, which was
112 generated by GNU Autoconf 2.65. Invocation command line was
113
114 CONFIG_FILES = $CONFIG_FILES
115@@ -14206,7 +14206,7 @@
116 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
117 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
118 ac_cs_version="\\
119-evolution-mapi config.status 0.32.0
120+evolution-mapi config.status 0.32.1
121 configured by $0, generated by GNU Autoconf 2.65,
122 with options \\"\$ac_cs_config\\"
123
124
125=== modified file 'configure.ac'
126--- configure.ac 2010-11-03 16:33:05 +0000
127+++ configure.ac 2011-01-29 12:46:35 +0000
128@@ -3,7 +3,7 @@
129 dnl Modified for GNOME Evolution MAPI Provider by Johnny Jacob <jjohnny@novell.com>
130
131 AC_PREREQ(2.58)
132-AC_INIT([evolution-mapi], [0.32.0], [http://bugzilla.gnome.org/browse.cgi?product=evolution-mapi])
133+AC_INIT([evolution-mapi], [0.32.1], [http://bugzilla.gnome.org/browse.cgi?product=evolution-mapi])
134 AM_INIT_AUTOMAKE([gnu 1.9])
135 AC_CONFIG_SRCDIR(README)
136 AC_CONFIG_HEADERS(config.h)
137
138=== modified file 'debian/changelog'
139--- debian/changelog 2010-11-03 16:33:05 +0000
140+++ debian/changelog 2011-01-29 12:46:35 +0000
141@@ -1,3 +1,13 @@
142+evolution-mapi (0.32.1-0ubuntu1) natty; urgency=low
143+
144+ * New upstream release.
145+ * Update watch file for 0.32.
146+ * 01_openchange_compat: Add patch to fix compatibility with current
147+ OpenChange.
148+ * Fix library dependencies. LP: #693573
149+
150+ -- Jelmer Vernooij <jelmer@debian.org> Sat, 29 Jan 2011 13:07:06 +0100
151+
152 evolution-mapi (0.32.0-0ubuntu1) natty; urgency=low
153
154 * New upstream release.
155
156=== modified file 'debian/control'
157--- debian/control 2010-11-03 16:33:05 +0000
158+++ debian/control 2011-01-29 12:46:35 +0000
159@@ -29,9 +29,11 @@
160 libedata-book1.2-dev (>= 2.31.6),
161 libcamel1.2-dev (>= 2.31.6),
162 evolution-dev (>= 2.31.1),
163- libmapi-dev (>= 1:0.9), samba4-dev,
164+ libmapi-dev (>= 1:0.11~bzr1932),
165+ samba4-dev,
166 libgtk2.0-dev (>= 2.20.0),
167- gtk-doc-tools (>= 1.9)
168+ gtk-doc-tools (>= 1.9),
169+ dh-autoreconf
170
171 Package: evolution-mapi
172 Architecture: any
173@@ -61,7 +63,7 @@
174 Evolution MAPI provider.
175
176 Package: libexchangemapi1.0-0
177-Depends: libexchangemapi-1.0-0
178+Depends: libexchangemapi-1.0-0, ${misc:Depends}
179 Architecture: all
180 Section: oldlibs
181 Description: transitional dummy package for exchangemapi
182@@ -88,7 +90,7 @@
183 for using libexchangemapi.
184
185 Package: libexchangemapi1.0-dev
186-Depends: libexchangemapi-1.0-dev
187+Depends: libexchangemapi-1.0-dev, ${misc:Depends}
188 Architecture: all
189 Section: oldlibs
190 Description: transitional dummy package for exchangemapi - dev files
191
192=== added directory 'debian/patches'
193=== added file 'debian/patches/01_openchange_compat'
194--- debian/patches/01_openchange_compat 1970-01-01 00:00:00 +0000
195+++ debian/patches/01_openchange_compat 2011-01-29 12:46:35 +0000
196@@ -0,0 +1,247 @@
197+=== modified file 'configure.ac'
198+--- old/configure.ac 2010-09-27 10:28:11 +0000
199++++ new/configure.ac 2011-01-25 18:44:56 +0000
200+@@ -253,6 +253,20 @@
201+ fi
202+
203+ dnl ****************************
204++dnl Check for MAPIInitialize function with two params
205++dnl ****************************
206++AC_MSG_CHECKING([libmapi MAPIInitialize function with two params])
207++save_cflags=$CFLAGS; CFLAGS=$LIBMAPI_CFLAGS
208++save_libs=$LIBS; LIBS="$LIBMAPI_LIBS"
209++AC_LINK_IFELSE([AC_LANG_PROGRAM(
210++ [[#include <libmapi/libmapi.h>]],
211++ [[MAPIInitialize (NULL, NULL)]])],
212++ [AC_DEFINE(HAVE_LIBMAPI_CONTEXT_PARAM, 1, [libmapi uses context parameters]) ac_cv_have_lcp=yes],[ac_cv_have_lcp=no])
213++CFLAGS=$save_cflags
214++LIBS=$save_libs
215++AC_MSG_RESULT([$ac_cv_have_lcp])
216++
217++dnl ****************************
218+ dnl Expose version information
219+ dnl ****************************
220+ API_VERSION=$EDS_PACKAGE
221+
222+=== modified file 'src/libexchangemapi/exchange-mapi-connection.c'
223+--- old/src/libexchangemapi/exchange-mapi-connection.c 2010-10-19 10:33:25 +0000
224++++ new/src/libexchangemapi/exchange-mapi-connection.c 2011-01-25 19:24:59 +0000
225+@@ -143,6 +143,10 @@
226+ g_propagate_error (perror, error);
227+ }
228+
229++#ifdef HAVE_LIBMAPI_CONTEXT_PARAM
230++struct mapi_context *mapi_ctx = NULL;
231++#endif
232++
233+ typedef struct _ExchangeMapiConnectionPrivate ExchangeMapiConnectionPrivate;
234+
235+ struct _ExchangeMapiConnectionPrivate {
236+@@ -2808,7 +2812,11 @@
237+
238+ mapi_object_init(&obj_folder_src);
239+ mapi_object_init(&obj_folder_dst);
240+- mapi_id_array_init(&msg_id_array);
241++ mapi_id_array_init (
242++ #ifdef HAVE_LIBMAPI_CONTEXT_PARAM
243++ mapi_ctx,
244++ #endif
245++ &msg_id_array);
246+
247+ for (l = mid_list; l != NULL; l = g_slist_next (l))
248+ mapi_id_array_add_id (&msg_id_array, *((mapi_id_t *)l->data));
249+@@ -3602,7 +3610,11 @@
250+ }
251+ }
252+
253+- ms = MAPIInitialize (profpath);
254++ ms = MAPIInitialize (
255++ #ifdef HAVE_LIBMAPI_CONTEXT_PARAM
256++ &mapi_ctx,
257++ #endif
258++ profpath);
259+ if (ms == MAPI_E_SESSION_LIMIT) {
260+ /* do nothing, the profile store is already initialized */
261+ /* but this shouldn't happen */
262+@@ -3664,15 +3676,31 @@
263+ /* Initialize libmapi logger*/
264+ if (g_getenv ("MAPI_DEBUG")) {
265+ debug_log_level = atoi (g_getenv ("MAPI_DEBUG"));
266+- SetMAPIDumpData(TRUE);
267+- SetMAPIDebugLevel(debug_log_level);
268++ SetMAPIDumpData (
269++ #ifdef HAVE_LIBMAPI_CONTEXT_PARAM
270++ mapi_ctx,
271++ #endif
272++ TRUE);
273++ SetMAPIDebugLevel (
274++ #ifdef HAVE_LIBMAPI_CONTEXT_PARAM
275++ mapi_ctx,
276++ #endif
277++ debug_log_level);
278+ }
279+
280+ g_debug("Loading profile %s ", profname);
281+
282+- ms = MapiLogonEx (&session, profname, password);
283++ ms = MapiLogonEx (
284++ #ifdef HAVE_LIBMAPI_CONTEXT_PARAM
285++ mapi_ctx,
286++ #endif
287++ &session, profname, password);
288+ if (ms == MAPI_E_NOT_FOUND && try_create_profile (profname, password))
289+- ms = MapiLogonEx (&session, profname, password);
290++ ms = MapiLogonEx (
291++ #ifdef HAVE_LIBMAPI_CONTEXT_PARAM
292++ mapi_ctx,
293++ #endif
294++ &session, profname, password);
295+
296+ if (ms != MAPI_E_SUCCESS) {
297+ make_mapi_error (perror, "MapiLogonEx", ms);
298+@@ -3717,34 +3745,60 @@
299+ profname = exchange_mapi_util_profile_name (username, domain, server, TRUE);
300+
301+ /* Delete any existing profiles with the same profilename */
302+- ms = DeleteProfile (profname);
303++ ms = DeleteProfile (
304++ #ifdef HAVE_LIBMAPI_CONTEXT_PARAM
305++ mapi_ctx,
306++ #endif
307++ profname);
308+ /* don't bother to check error - it would be valid if we got an error */
309+
310+- ms = CreateProfile (profname, username, password, OC_PROFILE_NOPASSWORD);
311++ ms = CreateProfile (
312++ #ifdef HAVE_LIBMAPI_CONTEXT_PARAM
313++ mapi_ctx,
314++ #endif
315++ profname, username, password, OC_PROFILE_NOPASSWORD);
316+ if (ms != MAPI_E_SUCCESS) {
317+ make_mapi_error (perror, "CreateProfile", ms);
318+ goto cleanup;
319+ }
320+
321+- mapi_profile_add_string_attr(profname, "binding", server);
322+- mapi_profile_add_string_attr(profname, "workstation", workstation);
323+- mapi_profile_add_string_attr(profname, "domain", domain);
324++ #ifdef HAVE_LIBMAPI_CONTEXT_PARAM
325++ #define add_string_attr(_prof,_aname,_val) \
326++ mapi_profile_add_string_attr (mapi_ctx, _prof, _aname, _val)
327++ #else
328++ #define add_string_attr(_prof,_aname,_val) \
329++ mapi_profile_add_string_attr (_prof, _aname, _val)
330++ #endif
331++
332++ add_string_attr (profname, "binding", server);
333++ add_string_attr (profname, "workstation", workstation);
334++ add_string_attr (profname, "domain", domain);
335+
336+ if ((flags & CREATE_PROFILE_FLAG_USE_SSL) != 0)
337+- mapi_profile_add_string_attr (profname, "seal", "true");
338++ add_string_attr (profname, "seal", "true");
339+
340+ /* This is only convenient here and should be replaced at some point */
341+- mapi_profile_add_string_attr(profname, "codepage", "0x4e4");
342+- mapi_profile_add_string_attr(profname, "language", "0x409");
343+- mapi_profile_add_string_attr(profname, "method", "0x409");
344++ add_string_attr (profname, "codepage", "0x4e4");
345++ add_string_attr (profname, "language", "0x409");
346++ add_string_attr (profname, "method", "0x409");
347++
348++ #undef add_string_attr
349+
350+ /* Login now */
351+ g_debug("Logging into the server... ");
352+- ms = MapiLogonProvider (&session, profname, password, PROVIDER_ID_NSPI);
353++ ms = MapiLogonProvider (
354++ #ifdef HAVE_LIBMAPI_CONTEXT_PARAM
355++ mapi_ctx,
356++ #endif
357++ &session, profname, password, PROVIDER_ID_NSPI);
358+ if (ms != MAPI_E_SUCCESS) {
359+ make_mapi_error (perror, "MapiLogonProvider", ms);
360+ g_debug ("Deleting profile %s ", profname);
361+- DeleteProfile (profname);
362++ DeleteProfile (
363++ #ifdef HAVE_LIBMAPI_CONTEXT_PARAM
364++ mapi_ctx,
365++ #endif
366++ profname);
367+ goto cleanup;
368+ }
369+ g_debug("MapiLogonProvider : succeeded \n");
370+@@ -3753,7 +3807,11 @@
371+ if (ms != MAPI_E_SUCCESS) {
372+ make_mapi_error (perror, "ProcessNetworkProfile", ms);
373+ g_debug ("Deleting profile %s ", profname);
374+- DeleteProfile (profname);
375++ DeleteProfile (
376++ #ifdef HAVE_LIBMAPI_CONTEXT_PARAM
377++ mapi_ctx,
378++ #endif
379++ profname);
380+ goto cleanup;
381+ }
382+ g_debug("ProcessNetworkProfile : succeeded \n");
383+@@ -3807,7 +3865,11 @@
384+
385+ g_debug ("Deleting profile %s ", profile);
386+
387+- ms = DeleteProfile (profile);
388++ ms = DeleteProfile (
389++ #ifdef HAVE_LIBMAPI_CONTEXT_PARAM
390++ mapi_ctx,
391++ #endif
392++ profile);
393+ if (ms == MAPI_E_SUCCESS) {
394+ result = TRUE;
395+ } else {
396+@@ -3820,4 +3882,21 @@
397+ return result;
398+ }
399+
400++void
401++exchange_mapi_rename_profile (const gchar *old_name, const gchar *new_name)
402++{
403++ g_return_if_fail (old_name != NULL);
404++ g_return_if_fail (new_name != NULL);
405++
406++ g_static_rec_mutex_lock (&profile_mutex);
407++
408++ RenameProfile (
409++ #ifdef HAVE_LIBMAPI_CONTEXT_PARAM
410++ mapi_ctx,
411++ #endif
412++ old_name, new_name);
413++
414++ g_static_rec_mutex_unlock (&profile_mutex);
415++}
416++
417+ /* profile related functions - end */
418+
419+=== modified file 'src/libexchangemapi/exchange-mapi-connection.h'
420+--- old/src/libexchangemapi/exchange-mapi-connection.h 2010-08-02 22:02:21 +0000
421++++ new/src/libexchangemapi/exchange-mapi-connection.h 2011-01-25 18:44:56 +0000
422+@@ -240,6 +240,7 @@
423+ mapi_profile_callback_t cb, gpointer data, GError **perror);
424+
425+ gboolean exchange_mapi_delete_profile (const gchar *profile, GError **perror);
426++void exchange_mapi_rename_profile (const gchar *old_name, const gchar *new_name);
427+
428+ /* utility functions */
429+
430+
431+=== modified file 'src/libexchangemapi/exchange-mapi-utils.c'
432+--- old/src/libexchangemapi/exchange-mapi-utils.c 2010-11-02 17:03:41 +0000
433++++ new/src/libexchangemapi/exchange-mapi-utils.c 2011-01-25 18:44:56 +0000
434+@@ -947,7 +947,7 @@
435+ old_name = g_strdup_printf ("%s@%s", username, domain);
436+ old_name = g_strcanon (old_name, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@", '_');
437+
438+- RenameProfile (old_name, res);
439++ exchange_mapi_rename_profile (old_name, res);
440+
441+ g_free (old_name);
442+ }
443+
444
445=== added file 'debian/patches/series'
446--- debian/patches/series 1970-01-01 00:00:00 +0000
447+++ debian/patches/series 2011-01-29 12:46:35 +0000
448@@ -0,0 +1,1 @@
449+01_openchange_compat
450
451=== modified file 'debian/rules'
452--- debian/rules 2010-09-14 20:50:55 +0000
453+++ debian/rules 2011-01-29 12:46:35 +0000
454@@ -2,6 +2,7 @@
455
456 include /usr/share/cdbs/1/rules/debhelper.mk
457 include /usr/share/cdbs/1/class/gnome.mk
458+include /usr/share/cdbs/1/rules/autoreconf.mk
459
460 DEB_DH_MAKESHLIBS_ARGS_evolution-mapi += --no-act
461-DEB_DH_MAKESHLIBS_ARGS_libexchangemapi-1.0-0 += -V 'libexchangemapi-1.0-0 (>= 0.30), libexchangemapi-1.0-0 (<< 0.31)'
462+DEB_DH_MAKESHLIBS_ARGS_libexchangemapi-1.0-0 += -V 'libexchangemapi-1.0-0 (>= 0.32), libexchangemapi-1.0-0 (<< 0.33)'
463
464=== modified file 'debian/watch'
465--- debian/watch 2010-09-14 20:50:55 +0000
466+++ debian/watch 2011-01-29 12:46:35 +0000
467@@ -1,2 +1,2 @@
468 version=3
469-http://ftp.gnome.org/pub/GNOME/sources/evolution-mapi/([\d\.]+)[02468]/evolution-mapi-([\d\.]+)\.tar\.gz debian uupdate
470+http://ftp.gnome.org/pub/GNOME/sources/evolution-mapi/0.32/evolution-mapi-([\d\.]+)\.tar\.gz debian uupdate
471
472=== modified file 'po/ca.po'
473--- po/ca.po 2010-09-14 20:50:55 +0000
474+++ po/ca.po 2011-01-29 12:46:35 +0000
475@@ -8,16 +8,21 @@
476 msgstr ""
477 "Project-Id-Version: evolution-mapi\n"
478 "Report-Msgid-Bugs-To: \n"
479-"POT-Creation-Date: 2010-03-10 08:54+0100\n"
480-"PO-Revision-Date: 2010-02-28 20:25+0100\n"
481+"POT-Creation-Date: 2010-10-10 22:53+0200\n"
482+"PO-Revision-Date: 2010-09-29 16:18+0200\n"
483 "Last-Translator: David Planella <david.planella@gmail.com>\n"
484 "Language-Team: Catalan <tradgnome@softcatala.org>\n"
485 "MIME-Version: 1.0\n"
486 "Content-Type: text/plain; charset=UTF-8\n"
487 "Content-Transfer-Encoding: 8bit\n"
488
489-#: ../src/account-setup-eplugin/exchange-mapi-account-listener.c:624
490-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:226
491+#: ../src/account-setup-eplugin/exchange-mapi-account-listener.c:684
492+#: ../src/account-setup-eplugin/exchange-mapi-account-listener.c:686
493+msgid "Global Address List"
494+msgstr "Llista d'adreces global"
495+
496+#: ../src/account-setup-eplugin/exchange-mapi-account-listener.c:1001
497+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:229
498 #, c-format
499 msgid "Enter Password for %s@%s"
500 msgstr "Introduïu la contrasenya per a %s@%s"
501@@ -26,19 +31,19 @@
502 #. using GtkEntryCompletion in the username gtkentry. But plugins
503 #. as of now does not have access to it
504 #. TODO : Fix strings
505-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:135
506+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:133
507 msgid "Select username"
508 msgstr "Seleccioneu el nom d'usuari"
509
510-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:145
511+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:143
512 msgid "Full name"
513 msgstr "Nom complet"
514
515-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:150
516-msgid "User name"
517+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:148
518+msgid "Username"
519 msgstr "Nom d'usuari"
520
521-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:215
522+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:217
523 msgid ""
524 "Server, username and domain name cannot be empty. Please fill them with "
525 "correct values."
526@@ -46,126 +51,199 @@
527 "El servidor, el nom d'usuari i el nom del domini no poden ser buits. Hauríeu "
528 "d'escriure-hi valors correctes."
529
530-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:253
531+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:273
532 msgid "Authentication finished successfully."
533 msgstr "Ha finalitzat satisfactòriament l'autenticació."
534
535-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:259
536-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:269
537+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:279
538+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:290
539 msgid "Authentication failed."
540 msgstr "Ha fallat l'autenticació."
541
542-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:324
543+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:368
544 msgid "_Domain name:"
545 msgstr "Nom del _domini:"
546
547-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:334
548+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:378
549 msgid "_Authenticate"
550 msgstr "_Autentica"
551
552-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:436
553+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:388
554+msgid "_Use secure connection"
555+msgstr "_Utilitza una connexió segura"
556+
557+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:523
558 msgid "Personal Folders"
559 msgstr "Carpetes personals"
560
561-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:498
562+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:658
563 msgid "_Location:"
564 msgstr "_Ubicació:"
565
566-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:101
567+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:775
568+#, c-format
569+msgid "Failed to create address book '%s': %s"
570+msgstr "No s'ha pogut crear la llibreta d'adreces «%s»: %s"
571+
572+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:778
573+#, c-format
574+msgid "Failed to create address book '%s'"
575+msgstr "No s'ha pogut crear la llibreta d'adreces «%s»"
576+
577+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:882
578+#, c-format
579+msgid "Failed to create calendar '%s': %s"
580+msgstr "No s'ha pogut crear el calendari «%s»: %s"
581+
582+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:885
583+#, c-format
584+msgid "Failed to create calendar '%s'"
585+msgstr "No s'ha pogut crear el calendari «%s»"
586+
587+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:100
588 msgid "Folder"
589 msgstr "Carpeta"
590
591-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:106
592+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:105
593 msgid "Size"
594 msgstr "Mida"
595
596-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:126
597+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:128
598 msgid "Unable to retrieve folder size information"
599 msgstr "No s'ha pogut obtenir la informació sobre la mida de la carpeta"
600
601-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:147
602+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:169
603+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:371
604 msgid "Folder Size"
605 msgstr "Mida de la carpeta"
606
607-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:156
608-msgid "Fetching folder list ..."
609-msgstr "S'està recollint la llista de carpetes..."
610+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:180
611+msgid "Fetching folder list…"
612+msgstr "S'està recollint la llista de carpetes…"
613
614 #. Miscellaneous settings
615-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:270
616+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:356
617 msgid "Miscellaneous"
618 msgstr "Miscel·lània"
619
620-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:283
621+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:369
622 msgid "View the size of all Exchange folders"
623 msgstr "Mostra la mida de totes les carpetes de l'Exchange"
624
625-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:285
626-msgid "Folders Size"
627-msgstr "Mida de les carpetes"
628-
629-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:296
630+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:382
631 #: ../src/account-setup-eplugin/org-gnome-exchange-mapi.eplug.xml.h:1
632 msgid "Exchange Settings"
633 msgstr "Paràmetres de l'Exchange"
634
635-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:305
636+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:391
637 msgid "Folder size"
638 msgstr "Mida de la carpeta"
639
640-#. To translators : This is used to cache the downloaded contacts from GAL.
641-#. First %d : Number of contacts cached till now.
642-#. Second %d : Total number of contacts which need to be cached.
643-#. So (%d/%d) displays the progress.
644-#. Example: Caching the GAL entries (1200/50000)...
645-#.
646-#: ../src/addressbook/e-book-backend-mapi-gal.c:223
647-#, c-format
648-msgid "Caching the GAL entries (%d/%d)... "
649-msgstr ""
650-"S'estan carregant les entrades de la llista d'adreces global (GAL) a la "
651-"memòria cau (%d de %d)..."
652-
653-#. To translators : Here Evolution MAPI downloads the entries from the GAL server
654-#: ../src/addressbook/e-book-backend-mapi-gal.c:795
655-msgid "Downloading GAL entries from server..."
656-msgstr ""
657-"S'estan baixant les entrades de la llista d'adreces global (GAL) del "
658-"servidor..."
659-
660-#: ../src/calendar/e-cal-backend-mapi.c:116
661-#: ../src/calendar/e-cal-backend-mapi.c:1143
662-#: ../src/camel/camel-mapi-store.c:568
663-msgid "Authentication failed"
664-msgstr "Ha fallat l'autenticació"
665+#: ../src/addressbook/e-book-backend-mapi.c:555
666+msgid "Cannot connect"
667+msgstr "No s'ha pogut connectar"
668+
669+#: ../src/addressbook/e-book-backend-mapi.c:698
670+msgid "Searching"
671+msgstr "S'està cercant"
672+
673+#: ../src/addressbook/e-book-backend-mapi.c:2022
674+#: ../src/calendar/e-cal-backend-mapi.c:133
675+#: ../src/camel/camel-mapi-folder.c:1543 ../src/camel/camel-mapi-folder.c:1564
676+msgid "Unknown error"
677+msgstr "S'ha produït un error desconegut"
678+
679+#: ../src/addressbook/e-book-backend-mapi-contacts.c:713
680+#: ../src/calendar/e-cal-backend-mapi.c:331
681+msgid "Failed to remove public folder"
682+msgstr "No s'ha pogut suprimir el directori públic"
683+
684+#: ../src/addressbook/e-book-backend-mapi-contacts.c:770
685+#: ../src/calendar/e-cal-backend-mapi.c:1775
686+#: ../src/calendar/e-cal-backend-mapi.c:2267
687+msgid "Failed to create item on a server"
688+msgstr "No s'ha pogut crear l'element al servidor"
689+
690+#: ../src/addressbook/e-book-backend-mapi-contacts.c:896
691+#: ../src/calendar/e-cal-backend-mapi.c:2008
692+msgid "Failed to modify item on a server"
693+msgstr "No s'ha pogut modificar l'element en el servidor"
694+
695+#: ../src/addressbook/e-book-backend-mapi-contacts.c:1043
696+#: ../src/addressbook/e-book-backend-mapi-contacts.c:1109
697+#: ../src/addressbook/e-book-backend-mapi-contacts.c:1160
698+#: ../src/calendar/e-cal-backend-mapi.c:1301
699+#: ../src/calendar/e-cal-backend-mapi.c:1322
700+msgid "Failed to fetch items from a server"
701+msgstr "No s'ha pogut recollir els elements del servidor"
702+
703+#. Translators : This is used to cache the downloaded contacts from a server.
704+#. %d is an index of the contact.
705+#: ../src/addressbook/e-book-backend-mapi-contacts.c:1061
706+#, c-format
707+msgid "Caching contact %d"
708+msgstr "S'està desant a la memòria intermèdia el contacte %d"
709+
710+#. Translators : This is used to cache the downloaded contacts from a server.
711+#. The first %d is an index of the contact,
712+#. the second %d is total count of conacts on the server.
713+#: ../src/addressbook/e-book-backend-mapi-contacts.c:1065
714+#, c-format
715+msgid "Caching contact %d/%d"
716+msgstr "S'està desant a la memòria intermèdia el contacte %d/%d"
717+
718+#. Translators : This is used to cache the downloaded contacts from GAL.
719+#. %d is an index of the GAL entry.
720+#: ../src/addressbook/e-book-backend-mapi-gal.c:127
721+#, c-format
722+msgid "Caching GAL contact %d"
723+msgstr "S'està desant a la memòria intermèdia el contacte de la LAG %d"
724+
725+#. Translators : This is used to cache the downloaded contacts from GAL.
726+#. The first %d is an index of the GAL entry,
727+#. the second %d is total count of entries in GAL.
728+#: ../src/addressbook/e-book-backend-mapi-gal.c:131
729+#, c-format
730+msgid "Caching GAL contact %d/%d"
731+msgstr "S'està desant a la memòria intermèdia el contacte de la LAG %d/%d"
732+
733+#: ../src/addressbook/e-book-backend-mapi-gal.c:181
734+#: ../src/addressbook/e-book-backend-mapi-gal.c:228
735+msgid "Failed to fetch GAL entries"
736+msgstr "No s'han pogut aconseguir les entrades de la LAG"
737
738 #. To translators: This message is displayed on the status bar when calendar/tasks/memo items are being fetched from the server.
739-#: ../src/calendar/e-cal-backend-mapi.c:392
740+#: ../src/calendar/e-cal-backend-mapi.c:376
741 #, c-format
742 msgid "Loading items in folder %s"
743 msgstr "S'estan carregant els elements a la carpeta %s"
744
745-#. FIXME: String : We need to restart evolution-data-server
746-#: ../src/calendar/e-cal-backend-mapi.c:624
747-#: ../src/calendar/e-cal-backend-mapi.c:635
748-#: ../src/calendar/e-cal-backend-mapi.c:663
749-#: ../src/calendar/e-cal-backend-mapi.c:725
750-#: ../src/calendar/e-cal-backend-mapi.c:735
751-msgid "Error fetching changes from the server."
752-msgstr "S'ha produït un error en recollir els canvis del servidor."
753-
754-#: ../src/calendar/e-cal-backend-mapi.c:1063
755-#: ../src/calendar/e-cal-backend-mapi.c:1073
756-#: ../src/calendar/e-cal-backend-mapi.c:1178
757-#: ../src/calendar/e-cal-backend-mapi.c:1260
758+#: ../src/calendar/e-cal-backend-mapi.c:766
759+#: ../src/calendar/e-cal-backend-mapi.c:792
760+#: ../src/calendar/e-cal-backend-mapi.c:839
761+#: ../src/calendar/e-cal-backend-mapi.c:918
762+#: ../src/calendar/e-cal-backend-mapi.c:941
763+#, c-format
764+msgid "Failed to fetch changes from a server: %s"
765+msgstr "No s'han pogut recollir els canvis del servidor: %s"
766+
767+#: ../src/calendar/e-cal-backend-mapi.c:771
768+#: ../src/calendar/e-cal-backend-mapi.c:797
769+#: ../src/calendar/e-cal-backend-mapi.c:844
770+#: ../src/calendar/e-cal-backend-mapi.c:923
771+#: ../src/calendar/e-cal-backend-mapi.c:946
772+msgid "Failed to fetch changes from a server"
773+msgstr "No s'han pogut recollir els canvis del servidor"
774+
775+#: ../src/calendar/e-cal-backend-mapi.c:1435
776+msgid "Could not create thread for populating cache"
777+msgstr "No s'ha pogut crear el fil per emplenar la memòria cau"
778+
779+#: ../src/calendar/e-cal-backend-mapi.c:1497
780 msgid "Could not create cache file"
781 msgstr "No s'ha pogut crear el fitxer de memòria cau"
782
783-#: ../src/calendar/e-cal-backend-mapi.c:1189
784-msgid "Could not create thread for populating cache"
785-msgstr "No s'ha pogut crear el fil per emplenar la memòria cau"
786-
787-#: ../src/calendar/e-cal-backend-mapi.c:1610
788+#: ../src/calendar/e-cal-backend-mapi.c:1902
789 msgid ""
790 "Support for modifying single instances of a recurring appointment is not yet "
791 "implemented. No change was made to the appointment on the server."
792@@ -174,140 +252,148 @@
793 "individuals d'una cita periòdica. No s'ha fet cap canvi a la cita al "
794 "servidor."
795
796-#: ../src/camel/camel-mapi-folder.c:493
797+#: ../src/calendar/e-cal-backend-mapi.c:2515
798+msgid "Failed to get Free/Busy data"
799+msgstr "No s'ha pogut obtenir les dades de lliure/ocupat"
800+
801+#: ../src/camel/camel-mapi-folder.c:356
802 #, c-format
803 msgid "Updating local summary cache for new messages in %s"
804 msgstr ""
805 "S'està actualitzant la memòria cau del resum local dels missatges nous a %s"
806
807-#: ../src/camel/camel-mapi-folder.c:725
808+#: ../src/camel/camel-mapi-folder.c:592
809 #, c-format
810 msgid "Retrieving message IDs from server for %s"
811 msgstr ""
812 "S'estan obtenint els identificadors dels missatges del servidor per a %s"
813
814-#: ../src/camel/camel-mapi-folder.c:747
815+#: ../src/camel/camel-mapi-folder.c:622
816 #, c-format
817 msgid "Removing deleted messages from cache in %s"
818 msgstr "S'estan eliminant els missatges suprimits de la memòria cau a %s"
819
820 #. TODO : Check for online state
821-#: ../src/camel/camel-mapi-folder.c:1018
822-msgid "Fetching summary information for new messages in"
823-msgstr "S'està recollint la informació de resum dels missatges nous a"
824+#: ../src/camel/camel-mapi-folder.c:952
825+#, c-format
826+msgid "Fetching summary information for new messages in %s"
827+msgstr "S'està recollint la informació de resum dels missatges nous a %s"
828
829-#: ../src/camel/camel-mapi-folder.c:1120 ../src/camel/camel-mapi-folder.c:1884
830-#: ../src/camel/camel-mapi-folder.c:1892
831+#: ../src/camel/camel-mapi-folder.c:1075 ../src/camel/camel-mapi-folder.c:1210
832+#: ../src/camel/camel-mapi-folder.c:1220
833+#, c-format
834 msgid "This message is not available in offline mode."
835 msgstr "Aquest missatge no està disponible en mode fora de línia."
836
837-#: ../src/camel/camel-mapi-folder.c:1133
838+#: ../src/camel/camel-mapi-folder.c:1092
839+#, c-format
840+msgid "Fetching items failed: %s"
841+msgstr "Ha fallat la recol·lecció dels elements: %s"
842+
843+#: ../src/camel/camel-mapi-folder.c:1097
844 msgid "Fetching items failed"
845 msgstr "Ha fallat la recol·lecció d'elements"
846
847-#: ../src/camel/camel-mapi-folder.c:1848
848+#: ../src/camel/camel-mapi-folder.c:1170
849 #, c-format
850-msgid ""
851-"Cannot get message: %s\n"
852-" %s"
853-msgstr ""
854-"No s'ha pogut obtenir el missatge: %s\n"
855-" %s"
856+msgid "Cannot get message %s: %s"
857+msgstr "No s'ha pogut obtenir el missatge %s: %s"
858
859-#: ../src/camel/camel-mapi-folder.c:1848
860+#: ../src/camel/camel-mapi-folder.c:1171
861 msgid "No such message"
862 msgstr "No hi ha tal missatge"
863
864-#: ../src/camel/camel-mapi-folder.c:1860
865-msgid "Message fetching cancelled by user."
866-msgstr "L'usuari ha cancel·lat la recollida del missatge."
867-
868-#: ../src/camel/camel-mapi-folder.c:1867
869-#, c-format
870-msgid "Cannot get message %s: %s"
871-msgstr "No s'ha pogut obtenir el missatge %s: %s"
872-
873-#: ../src/camel/camel-mapi-folder.c:1915 ../src/camel/camel-mapi-folder.c:1924
874+#: ../src/camel/camel-mapi-folder.c:1246
875+#, c-format
876+msgid "Could not get message: %s"
877+msgstr "No s'ha pogut obtenir el missatge: %s"
878+
879+#: ../src/camel/camel-mapi-folder.c:1252 ../src/camel/camel-mapi-folder.c:1265
880+#, c-format
881 msgid "Could not get message"
882 msgstr "No s'ha pogut obtenir el missatge"
883
884-#: ../src/camel/camel-mapi-folder.c:2210
885+#: ../src/camel/camel-mapi-folder.c:1402
886+#, c-format
887+msgid "Failed to empty Trash: %s"
888+msgstr "No s'ha pogut buidar la paperera: %s"
889+
890+#: ../src/camel/camel-mapi-folder.c:1407
891+msgid "Failed to empty Trash"
892+msgstr "No s'ha pogut buidar la paperera"
893+
894+#: ../src/camel/camel-mapi-folder.c:1626
895 #, c-format
896 msgid "Cannot append message to folder '%s'"
897 msgstr "No es pot afegir el missatge a la carpeta «%s»"
898
899-#: ../src/camel/camel-mapi-folder.c:2217
900+#: ../src/camel/camel-mapi-folder.c:1634 ../src/camel/camel-mapi-folder.c:1659
901+#, c-format
902 msgid "Offline."
903 msgstr "Fora de línia."
904
905-#: ../src/camel/camel-mapi-folder.c:2337
906+#: ../src/camel/camel-mapi-folder.c:1804
907 #, c-format
908 msgid "Could not load summary for %s"
909 msgstr "No s'ha pogut carregar el resum per a %s"
910
911-#: ../src/camel/camel-mapi-provider.c:51
912+#: ../src/camel/camel-mapi-provider.c:44
913 msgid "Checking for new mail"
914 msgstr "S'està comprovant si hi ha correu nou"
915
916-#: ../src/camel/camel-mapi-provider.c:53
917+#: ../src/camel/camel-mapi-provider.c:46
918 msgid "C_heck for new messages in all folders"
919 msgstr "_Comprova si hi ha correu nou a totes les carpetes"
920
921-#: ../src/camel/camel-mapi-provider.c:57
922+#: ../src/camel/camel-mapi-provider.c:50
923 msgid "Options"
924 msgstr "Opcions"
925
926-#: ../src/camel/camel-mapi-provider.c:59
927+#: ../src/camel/camel-mapi-provider.c:52
928 msgid "Automatically synchroni_ze account locally"
929 msgstr "Sincronit_za el compte localment de manera automàtica"
930
931 #. i18n: copy from evolution:camel-imap-provider.c
932-#: ../src/camel/camel-mapi-provider.c:62
933+#: ../src/camel/camel-mapi-provider.c:55
934 msgid "_Apply filters to new messages in Inbox on this server"
935 msgstr ""
936 "_Aplica els filtres als missatges nous de la safata d'entrada en aquest "
937 "servidor"
938
939-#: ../src/camel/camel-mapi-provider.c:64
940+#: ../src/camel/camel-mapi-provider.c:57
941 msgid "Check new messages for _Junk contents"
942 msgstr "Comprova si els missatges són _brossa"
943
944-#: ../src/camel/camel-mapi-provider.c:66
945+#: ../src/camel/camel-mapi-provider.c:59
946 msgid "Only check for Junk messag_es in the Inbox folder"
947 msgstr "Només comprova el corre_u brossa a la safata d'entrada"
948
949-#: ../src/camel/camel-mapi-provider.c:78
950-msgid "For accessing Microsoft Exchange / OpenChange servers using MAPI"
951+#: ../src/camel/camel-mapi-provider.c:70
952+msgid "For accessing Microsoft Exchange/OpenChange servers using MAPI"
953 msgstr ""
954-"Per accedir a servidors Exchange de Microsoft / OpenChange a través del MAPI"
955+"Per accedir a servidors Exchange de Microsoft/OpenChange a través del MAPI"
956
957-#: ../src/camel/camel-mapi-provider.c:93
958+#: ../src/camel/camel-mapi-provider.c:85
959 msgid "Password"
960 msgstr "Contrasenya"
961
962-#: ../src/camel/camel-mapi-provider.c:94
963+#: ../src/camel/camel-mapi-provider.c:86
964 msgid ""
965-"This option will connect to the Openchange server using a plaintext password."
966+"This option will connect to the OpenChange server using a plaintext password."
967 msgstr ""
968-"Aquesta opció us connectarà al servidor OpenChange a través d'una "
969-"contrasenya de text pla."
970-
971-#: ../src/camel/camel-mapi-store.c:63
972-msgid "Favorites"
973-msgstr "Preferits"
974-
975-#: ../src/camel/camel-mapi-store.c:64
976-msgid "All Public Folders"
977-msgstr "Totes les carpetes públiques"
978-
979-#: ../src/camel/camel-mapi-store.c:313 ../src/camel/camel-mapi-transport.c:128
980+"Aquesta opció us connectarà al servidor OpenChange amb una contrasenya de "
981+"text pla."
982+
983+#. Translators: The %s is replaced with a server's host name
984+#: ../src/camel/camel-mapi-store.c:315 ../src/camel/camel-mapi-transport.c:133
985 #, c-format
986 msgid "Exchange MAPI server %s"
987 msgstr "Servidor MAPI Exchange %s"
988
989 #. To translators : Example string : Exchange MAPI service for
990 #. _username_ on _server host name__
991-#: ../src/camel/camel-mapi-store.c:317 ../src/camel/camel-mapi-transport.c:130
992+#. Translators: The first %s is replaced with a user name, the second with a server's host name
993+#: ../src/camel/camel-mapi-store.c:319 ../src/camel/camel-mapi-transport.c:136
994 #, c-format
995 msgid "Exchange MAPI service for %s on %s"
996 msgstr "Servei MAPI Exchange per a %s a %s"
997@@ -316,57 +402,188 @@
998 #. for prompting the user if it is available.
999 #. Second %s is : Username.
1000 #. Third %s is : Server host name.
1001-#: ../src/camel/camel-mapi-store.c:355
1002+#: ../src/camel/camel-mapi-store.c:361
1003 #, c-format
1004 msgid "%s Please enter the MAPI password for %s@%s"
1005 msgstr "%s Introduïu la contrasenya MAPI per a %s@%s"
1006
1007-#: ../src/camel/camel-mapi-store.c:368
1008+#: ../src/camel/camel-mapi-store.c:376
1009+#, c-format
1010 msgid "You did not enter a password."
1011 msgstr "No heu introduït cap contrasenya."
1012
1013-#: ../src/camel/camel-mapi-store.c:376
1014-#, c-format
1015-msgid "Unable to authenticate to Exchange MAPI server."
1016-msgstr "No s'ha pogut autenticar al servidor MAPI Exchange."
1017-
1018-#: ../src/camel/camel-mapi-store.c:552
1019+#: ../src/camel/camel-mapi-store.c:384
1020+#, c-format
1021+msgid "Unable to authenticate to Exchange MAPI server: %s"
1022+msgstr "No s'ha pogut autenticar al servidor MAPI Exchange: %s"
1023+
1024+#: ../src/camel/camel-mapi-store.c:387
1025+msgid "Unable to authenticate to Exchange MAPI server"
1026+msgstr "No s'ha pogut autenticar al servidor MAPI Exchange"
1027+
1028+#: ../src/camel/camel-mapi-store.c:564
1029+#, c-format
1030 msgid "Cannot create MAPI folders in offline mode."
1031 msgstr "No es poden crear carpetes MAPI en mode fora de línia."
1032
1033-#: ../src/camel/camel-mapi-store.c:557
1034+#: ../src/camel/camel-mapi-store.c:571
1035 #, c-format
1036-msgid "Cannot create new folder `%s'"
1037+msgid "Cannot create new folder '%s'"
1038 msgstr "No s'ha pogut crear la carpeta nova «%s»"
1039
1040-#: ../src/camel/camel-mapi-store.c:692
1041-#, c-format
1042-msgid "Cannot rename MAPI folder `%s'. Folder does not exist."
1043+#: ../src/camel/camel-mapi-store.c:585
1044+#, c-format
1045+msgid "Authentication failed"
1046+msgstr "Ha fallat l'autenticació"
1047+
1048+#: ../src/camel/camel-mapi-store.c:610
1049+#, c-format
1050+msgid "Cannot create folder '%s': %s"
1051+msgstr "No s'ha pogut crear la carpeta «%s»: %s"
1052+
1053+#: ../src/camel/camel-mapi-store.c:615
1054+#, c-format
1055+msgid "Cannot create folder '%s'"
1056+msgstr "No s'ha pogut crear la carpeta «%s»"
1057+
1058+#: ../src/camel/camel-mapi-store.c:708
1059+#, c-format
1060+msgid "Cannot remove folder '%s': %s"
1061+msgstr "No es pot suprimir la carpeta «%s»: %s"
1062+
1063+#: ../src/camel/camel-mapi-store.c:715
1064+#, c-format
1065+msgid "Cannot remove folder '%s'"
1066+msgstr "No es pot suprimir la carpeta «%s»"
1067+
1068+#: ../src/camel/camel-mapi-store.c:805
1069+#, c-format
1070+msgid "Cannot rename MAPI folder '%s'. Folder does not exist."
1071 msgstr ""
1072 "No es pot canviar el nom de la carpeta MAPI «%s». No existeix la carpeta."
1073
1074-#: ../src/camel/camel-mapi-store.c:703
1075+#: ../src/camel/camel-mapi-store.c:817
1076 #, c-format
1077-msgid "Cannot rename MAPI default folder `%s' to `%s'."
1078+msgid "Cannot rename MAPI default folder '%s' to '%s'."
1079 msgstr "No es pot canviar el nom de la carpeta MAPI predeterminada «%s» a «%s»."
1080
1081-#: ../src/camel/camel-mapi-store.c:727 ../src/camel/camel-mapi-store.c:742
1082-#: ../src/camel/camel-mapi-store.c:791
1083+#. Translators: '%s to %s' is current name of the folder and new name of the folder.
1084+#: ../src/camel/camel-mapi-store.c:844 ../src/camel/camel-mapi-store.c:869
1085+#: ../src/camel/camel-mapi-store.c:931
1086 #, c-format
1087-msgid "Cannot rename MAPI folder `%s' to `%s'"
1088+msgid "Cannot rename MAPI folder '%s' to '%s'"
1089 msgstr "No es pot canviar el nom de la carpeta MAPI «%s» a «%s»"
1090
1091-#: ../src/camel/camel-mapi-store.c:1367
1092+#. Translators: '%s to %s' is current name of the folder and new name of the folder.
1093+#. The last '%s' is a detailed error message.
1094+#: ../src/camel/camel-mapi-store.c:862 ../src/camel/camel-mapi-store.c:925
1095+#, c-format
1096+msgid "Cannot rename MAPI folder '%s' to '%s': %s"
1097+msgstr "No es pot canviar el nom de la carpeta MAPI «%s» a «%s»: %s"
1098+
1099+#: ../src/camel/camel-mapi-store.c:1494
1100+#, c-format
1101 msgid "Folder list not available in offline mode."
1102 msgstr "La llista de carpetes no està disponible en mode fora de línia."
1103
1104-#. Fixme : Set a better error message. Would be helful in troubleshooting.
1105-#: ../src/camel/camel-mapi-transport.c:116
1106+#: ../src/camel/camel-mapi-transport.c:99
1107+#: ../src/camel/camel-mapi-transport.c:120
1108+#, c-format
1109 msgid "Could not send message."
1110 msgstr "No s'ha pogut enviar el missatge."
1111
1112-#~ msgid "Global Address List / Active Directory"
1113-#~ msgstr "Global Address List / Active Directory"
1114+#: ../src/camel/camel-mapi-transport.c:115
1115+#, c-format
1116+msgid "Could not send message: %s"
1117+msgstr "No s'ha pogut enviar el missatge: %s"
1118+
1119+#: ../src/libexchangemapi/exchange-mapi-connection.c:107
1120+msgid "Failed to login into the server"
1121+msgstr "No s'ha pogut autenticar al servidor"
1122+
1123+#: ../src/libexchangemapi/exchange-mapi-connection.c:108
1124+msgid "Cannot create more sessions, session limit was reached"
1125+msgstr ""
1126+"No s'ha pogut crear més sessions, s'ha arribat al límit de sessions permeses"
1127+
1128+#: ../src/libexchangemapi/exchange-mapi-connection.c:109
1129+msgid "User cancelled operation"
1130+msgstr "L'usuari ha cancel·lat l'operació"
1131+
1132+#: ../src/libexchangemapi/exchange-mapi-connection.c:110
1133+msgid "Unable to abort"
1134+msgstr "No s'ha pogut avortar"
1135+
1136+#: ../src/libexchangemapi/exchange-mapi-connection.c:111
1137+msgid "Network error"
1138+msgstr "S'ha produït un error de xarxa"
1139+
1140+#: ../src/libexchangemapi/exchange-mapi-connection.c:112
1141+msgid "Disk error"
1142+msgstr "S'ha produït un error de disc"
1143+
1144+#: ../src/libexchangemapi/exchange-mapi-connection.c:113
1145+msgid "Password change required"
1146+msgstr "Cal canviar la contrasenya"
1147+
1148+#: ../src/libexchangemapi/exchange-mapi-connection.c:114
1149+msgid "Password expired"
1150+msgstr "La contrasenya ha expirat"
1151+
1152+#: ../src/libexchangemapi/exchange-mapi-connection.c:115
1153+msgid "Invalid workstation account"
1154+msgstr "El compte de l'estació de treball no és vàlid"
1155+
1156+#: ../src/libexchangemapi/exchange-mapi-connection.c:116
1157+msgid "Invalid access time"
1158+msgstr "L'hora d'accés no és vàlida"
1159+
1160+#: ../src/libexchangemapi/exchange-mapi-connection.c:117
1161+msgid "Account is disabled"
1162+msgstr "El compte està inhabilitat"
1163+
1164+#: ../src/libexchangemapi/exchange-mapi-connection.c:118
1165+msgid "End of session"
1166+msgstr "S'ha finalitzat la sessió"
1167+
1168+#: ../src/libexchangemapi/exchange-mapi-connection.c:126
1169+#, c-format
1170+msgid "MAPI error %s (0x%x) occurred"
1171+msgstr "S'ha produït l'error %s (0x%x) de MAPI"
1172+
1173+#. Translators: The first '%s' is replaced with an error context,
1174+#. aka where the error occurred, the second '%s' is replaced with
1175+#. the error message.
1176+#: ../src/libexchangemapi/exchange-mapi-connection.c:136
1177+#, c-format
1178+msgctxt "EXCHANGEMAPI_ERROR"
1179+msgid "%s: %s"
1180+msgstr "%s: %s"
1181+
1182+#: ../src/libexchangemapi/exchange-mapi-connection.c:3282
1183+msgid "All Public Folders"
1184+msgstr "Totes les carpetes públiques"
1185+
1186+#~ msgid "Folders Size"
1187+#~ msgstr "Mida de les carpetes"
1188+
1189+#~ msgid "Downloading GAL entries from server..."
1190+#~ msgstr ""
1191+#~ "S'estan baixant les entrades de la llista d'adreces global (GAL) del "
1192+#~ "servidor..."
1193+
1194+#~ msgid ""
1195+#~ "Cannot get message: %s\n"
1196+#~ " %s"
1197+#~ msgstr ""
1198+#~ "No s'ha pogut obtenir el missatge: %s\n"
1199+#~ " %s"
1200+
1201+#~ msgid "Message fetching cancelled by user."
1202+#~ msgstr "L'usuari ha cancel·lat la recollida del missatge."
1203+
1204+#~ msgid "Favorites"
1205+#~ msgstr "Preferits"
1206
1207 #~ msgid "_Global Catalog server name:"
1208 #~ msgstr "Nom del servidor del _Global Catalog"
1209
1210=== modified file 'po/ca@valencia.po'
1211--- po/ca@valencia.po 2010-09-14 20:50:55 +0000
1212+++ po/ca@valencia.po 2011-01-29 12:46:35 +0000
1213@@ -8,16 +8,23 @@
1214 msgstr ""
1215 "Project-Id-Version: evolution-mapi\n"
1216 "Report-Msgid-Bugs-To: \n"
1217-"POT-Creation-Date: 2010-04-22 00:00+0200\n"
1218+"POT-Creation-Date: 2010-10-26 11:01+0200\n"
1219 "PO-Revision-Date: 2010-02-28 20:25+0100\n"
1220 "Last-Translator: David Planella <david.planella@gmail.com>\n"
1221 "Language-Team: Catalan <tradgnome@softcatala.org>\n"
1222+"Language: ca\n"
1223 "MIME-Version: 1.0\n"
1224 "Content-Type: text/plain; charset=UTF-8\n"
1225 "Content-Transfer-Encoding: 8bit\n"
1226
1227-#: ../src/account-setup-eplugin/exchange-mapi-account-listener.c:632
1228-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:233
1229+#: ../src/account-setup-eplugin/exchange-mapi-account-listener.c:685
1230+#: ../src/account-setup-eplugin/exchange-mapi-account-listener.c:687
1231+#, fuzzy
1232+msgid "Global Address List"
1233+msgstr "Global Address List / Active Directory"
1234+
1235+#: ../src/account-setup-eplugin/exchange-mapi-account-listener.c:1003
1236+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:229
1237 #, c-format
1238 msgid "Enter Password for %s@%s"
1239 msgstr "Introduïu la contrasenya per a %s@%s"
1240@@ -26,19 +33,20 @@
1241 #. using GtkEntryCompletion in the username gtkentry. But plugins
1242 #. as of now does not have access to it
1243 #. TODO : Fix strings
1244-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:138
1245+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:133
1246 msgid "Select username"
1247 msgstr "Seleccioneu el nom d'usuari"
1248
1249-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:148
1250+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:143
1251 msgid "Full name"
1252 msgstr "Nom complet"
1253
1254-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:153
1255-msgid "User name"
1256+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:148
1257+#, fuzzy
1258+msgid "Username"
1259 msgstr "Nom d'usuari"
1260
1261-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:222
1262+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:217
1263 msgid ""
1264 "Server, username and domain name cannot be empty. Please fill them with "
1265 "correct values."
1266@@ -46,126 +54,205 @@
1267 "El servidor, el nom d'usuari i el nom del domini no poden ser buits. Hauríeu "
1268 "d'escriure-hi valors correctes."
1269
1270-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:260
1271+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:273
1272 msgid "Authentication finished successfully."
1273 msgstr "Ha finalitzat satisfactòriament l'autenticació."
1274
1275-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:266
1276-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:276
1277+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:279
1278+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:290
1279 msgid "Authentication failed."
1280 msgstr "Ha fallat l'autenticació."
1281
1282-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:331
1283+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:368
1284 msgid "_Domain name:"
1285 msgstr "Nom del _domini:"
1286
1287-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:341
1288+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:378
1289 msgid "_Authenticate"
1290 msgstr "_Autentica"
1291
1292-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:479
1293+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:388
1294+msgid "_Use secure connection"
1295+msgstr ""
1296+
1297+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:523
1298 msgid "Personal Folders"
1299 msgstr "Carpetes personals"
1300
1301-#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:599
1302+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:658
1303 msgid "_Location:"
1304 msgstr "_Ubicació:"
1305
1306-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:101
1307+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:775
1308+#, c-format
1309+msgid "Failed to create address book '%s': %s"
1310+msgstr ""
1311+
1312+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:778
1313+#, c-format
1314+msgid "Failed to create address book '%s'"
1315+msgstr ""
1316+
1317+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:882
1318+#, c-format
1319+msgid "Failed to create calendar '%s': %s"
1320+msgstr ""
1321+
1322+#: ../src/account-setup-eplugin/exchange-mapi-account-setup.c:885
1323+#, c-format
1324+msgid "Failed to create calendar '%s'"
1325+msgstr ""
1326+
1327+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:100
1328 msgid "Folder"
1329 msgstr "Carpeta"
1330
1331-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:106
1332+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:105
1333 msgid "Size"
1334 msgstr "Mida"
1335
1336-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:126
1337+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:128
1338 msgid "Unable to retrieve folder size information"
1339 msgstr "No s'ha pogut obtindre la informació sobre la mida de la carpeta"
1340
1341-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:147
1342+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:169
1343+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:371
1344 msgid "Folder Size"
1345 msgstr "Mida de la carpeta"
1346
1347-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:156
1348-msgid "Fetching folder list ..."
1349+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:180
1350+#, fuzzy
1351+msgid "Fetching folder list…"
1352 msgstr "S'està recollint la llista de carpetes..."
1353
1354 #. Miscellaneous settings
1355-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:275
1356+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:356
1357 msgid "Miscellaneous"
1358 msgstr "Miscel·lània"
1359
1360-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:288
1361+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:369
1362 msgid "View the size of all Exchange folders"
1363 msgstr "Mostra la mida de totes les carpetes de l'Exchange"
1364
1365-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:290
1366-msgid "Folders Size"
1367-msgstr "Mida de les carpetes"
1368-
1369-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:301
1370+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:382
1371 #: ../src/account-setup-eplugin/org-gnome-exchange-mapi.eplug.xml.h:1
1372 msgid "Exchange Settings"
1373 msgstr "Paràmetres de l'Exchange"
1374
1375-#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:310
1376+#: ../src/account-setup-eplugin/exchange-mapi-account-settings.c:391
1377 msgid "Folder size"
1378 msgstr "Mida de la carpeta"
1379
1380-#. To translators : This is used to cache the downloaded contacts from GAL.
1381-#. First %d : Number of contacts cached till now.
1382-#. Second %d : Total number of contacts which need to be cached.
1383-#. So (%d/%d) displays the progress.
1384-#. Example: Caching the GAL entries (1200/50000)...
1385-#.
1386-#: ../src/addressbook/e-book-backend-mapi-gal.c:221
1387-#, c-format
1388-msgid "Caching the GAL entries (%d/%d)... "
1389+#: ../src/addressbook/e-book-backend-mapi.c:555
1390+msgid "Cannot connect"
1391+msgstr ""
1392+
1393+#: ../src/addressbook/e-book-backend-mapi.c:698
1394+msgid "Searching"
1395+msgstr ""
1396+
1397+#: ../src/addressbook/e-book-backend-mapi.c:2022
1398+#: ../src/calendar/e-cal-backend-mapi.c:133
1399+#: ../src/camel/camel-mapi-folder.c:1543 ../src/camel/camel-mapi-folder.c:1564
1400+msgid "Unknown error"
1401+msgstr ""
1402+
1403+#: ../src/addressbook/e-book-backend-mapi-contacts.c:713
1404+#: ../src/calendar/e-cal-backend-mapi.c:331
1405+msgid "Failed to remove public folder"
1406+msgstr ""
1407+
1408+#: ../src/addressbook/e-book-backend-mapi-contacts.c:770
1409+#: ../src/calendar/e-cal-backend-mapi.c:1775
1410+#: ../src/calendar/e-cal-backend-mapi.c:2267
1411+#, fuzzy
1412+msgid "Failed to create item on a server"
1413+msgstr "No s'ha pogut autenticar al servidor MAPI Exchange."
1414+
1415+#: ../src/addressbook/e-book-backend-mapi-contacts.c:896
1416+#: ../src/calendar/e-cal-backend-mapi.c:2008
1417+msgid "Failed to modify item on a server"
1418+msgstr ""
1419+
1420+#: ../src/addressbook/e-book-backend-mapi-contacts.c:1043
1421+#: ../src/addressbook/e-book-backend-mapi-contacts.c:1109
1422+#: ../src/addressbook/e-book-backend-mapi-contacts.c:1160
1423+#: ../src/calendar/e-cal-backend-mapi.c:1301
1424+#: ../src/calendar/e-cal-backend-mapi.c:1322
1425+#, fuzzy
1426+msgid "Failed to fetch items from a server"
1427+msgstr "S'ha produït un error en recollir els canvis del servidor."
1428+
1429+#. Translators : This is used to cache the downloaded contacts from a server.
1430+#. %d is an index of the contact.
1431+#: ../src/addressbook/e-book-backend-mapi-contacts.c:1061
1432+#, c-format
1433+msgid "Caching contact %d"
1434+msgstr ""
1435+
1436+#. Translators : This is used to cache the downloaded contacts from a server.
1437+#. The first %d is an index of the contact,
1438+#. the second %d is total count of conacts on the server.
1439+#: ../src/addressbook/e-book-backend-mapi-contacts.c:1065
1440+#, c-format
1441+msgid "Caching contact %d/%d"
1442+msgstr ""
1443+
1444+#. Translators : This is used to cache the downloaded contacts from GAL.
1445+#. %d is an index of the GAL entry.
1446+#: ../src/addressbook/e-book-backend-mapi-gal.c:127
1447+#, c-format
1448+msgid "Caching GAL contact %d"
1449+msgstr ""
1450+
1451+#. Translators : This is used to cache the downloaded contacts from GAL.
1452+#. The first %d is an index of the GAL entry,
1453+#. the second %d is total count of entries in GAL.
1454+#: ../src/addressbook/e-book-backend-mapi-gal.c:131
1455+#, fuzzy, c-format
1456+msgid "Caching GAL contact %d/%d"
1457 msgstr ""
1458 "S'estan carregant les entrades de la llista d'adreces global (GAL) a la "
1459 "memòria cau (%d de %d)..."
1460
1461-#. To translators : Here Evolution MAPI downloads the entries from the GAL server
1462-#: ../src/addressbook/e-book-backend-mapi-gal.c:793
1463-msgid "Downloading GAL entries from server..."
1464+#: ../src/addressbook/e-book-backend-mapi-gal.c:181
1465+#: ../src/addressbook/e-book-backend-mapi-gal.c:228
1466+msgid "Failed to fetch GAL entries"
1467 msgstr ""
1468-"S'estan baixant les entrades de la llista d'adreces global (GAL) del "
1469-"servidor..."
1470-
1471-#: ../src/calendar/e-cal-backend-mapi.c:191
1472-#: ../src/calendar/e-cal-backend-mapi.c:1218
1473-#: ../src/camel/camel-mapi-store.c:568
1474-msgid "Authentication failed"
1475-msgstr "Ha fallat l'autenticació"
1476
1477 #. To translators: This message is displayed on the status bar when calendar/tasks/memo items are being fetched from the server.
1478-#: ../src/calendar/e-cal-backend-mapi.c:467
1479+#: ../src/calendar/e-cal-backend-mapi.c:376
1480 #, c-format
1481 msgid "Loading items in folder %s"
1482 msgstr "S'estan carregant els elements a la carpeta %s"
1483
1484-#. FIXME: String : We need to restart evolution-data-server
1485-#: ../src/calendar/e-cal-backend-mapi.c:699
1486-#: ../src/calendar/e-cal-backend-mapi.c:710
1487-#: ../src/calendar/e-cal-backend-mapi.c:738
1488-#: ../src/calendar/e-cal-backend-mapi.c:800
1489-#: ../src/calendar/e-cal-backend-mapi.c:810
1490-msgid "Error fetching changes from the server."
1491-msgstr "S'ha produït un error en recollir els canvis del servidor."
1492-
1493-#: ../src/calendar/e-cal-backend-mapi.c:1138
1494-#: ../src/calendar/e-cal-backend-mapi.c:1148
1495-#: ../src/calendar/e-cal-backend-mapi.c:1253
1496-#: ../src/calendar/e-cal-backend-mapi.c:1335
1497+#: ../src/calendar/e-cal-backend-mapi.c:766
1498+#: ../src/calendar/e-cal-backend-mapi.c:792
1499+#: ../src/calendar/e-cal-backend-mapi.c:839
1500+#: ../src/calendar/e-cal-backend-mapi.c:918
1501+#: ../src/calendar/e-cal-backend-mapi.c:941
1502+#, fuzzy, c-format
1503+msgid "Failed to fetch changes from a server: %s"
1504+msgstr "S'ha produït un error en recollir els canvis del servidor."
1505+
1506+#: ../src/calendar/e-cal-backend-mapi.c:771
1507+#: ../src/calendar/e-cal-backend-mapi.c:797
1508+#: ../src/calendar/e-cal-backend-mapi.c:844
1509+#: ../src/calendar/e-cal-backend-mapi.c:923
1510+#: ../src/calendar/e-cal-backend-mapi.c:946
1511+#, fuzzy
1512+msgid "Failed to fetch changes from a server"
1513+msgstr "S'ha produït un error en recollir els canvis del servidor."
1514+
1515+#: ../src/calendar/e-cal-backend-mapi.c:1435
1516+msgid "Could not create thread for populating cache"
1517+msgstr "No s'ha pogut crear el fil per emplenar la memòria cau"
1518+
1519+#: ../src/calendar/e-cal-backend-mapi.c:1497
1520 msgid "Could not create cache file"
1521 msgstr "No s'ha pogut crear el fitxer de memòria cau"
1522
1523-#: ../src/calendar/e-cal-backend-mapi.c:1264
1524-msgid "Could not create thread for populating cache"
1525-msgstr "No s'ha pogut crear el fil per emplenar la memòria cau"
1526-
1527-#: ../src/calendar/e-cal-backend-mapi.c:1698
1528+#: ../src/calendar/e-cal-backend-mapi.c:1902
1529 msgid ""
1530 "Support for modifying single instances of a recurring appointment is not yet "
1531 "implemented. No change was made to the appointment on the server."
1532@@ -174,140 +261,150 @@
1533 "individuals d'una cita periòdica. No s'ha fet cap canvi a la cita al "
1534 "servidor."
1535
1536-#: ../src/camel/camel-mapi-folder.c:493
1537+#: ../src/calendar/e-cal-backend-mapi.c:2515
1538+msgid "Failed to get Free/Busy data"
1539+msgstr ""
1540+
1541+#: ../src/camel/camel-mapi-folder.c:356
1542 #, c-format
1543 msgid "Updating local summary cache for new messages in %s"
1544 msgstr ""
1545 "S'està actualitzant la memòria cau del resum local dels missatges nous a %s"
1546
1547-#: ../src/camel/camel-mapi-folder.c:723
1548+#: ../src/camel/camel-mapi-folder.c:592
1549 #, c-format
1550 msgid "Retrieving message IDs from server for %s"
1551 msgstr ""
1552 "S'estan obtenint els identificadors dels missatges del servidor per a %s"
1553
1554-#: ../src/camel/camel-mapi-folder.c:745
1555+#: ../src/camel/camel-mapi-folder.c:622
1556 #, c-format
1557 msgid "Removing deleted messages from cache in %s"
1558 msgstr "S'estan eliminant els missatges suprimits de la memòria cau a %s"
1559
1560 #. TODO : Check for online state
1561-#: ../src/camel/camel-mapi-folder.c:1013
1562-msgid "Fetching summary information for new messages in"
1563+#: ../src/camel/camel-mapi-folder.c:952
1564+#, fuzzy, c-format
1565+msgid "Fetching summary information for new messages in %s"
1566 msgstr "S'està recollint la informació de resum dels missatges nous a"
1567
1568-#: ../src/camel/camel-mapi-folder.c:1115 ../src/camel/camel-mapi-folder.c:1869
1569-#: ../src/camel/camel-mapi-folder.c:1877
1570+#: ../src/camel/camel-mapi-folder.c:1075 ../src/camel/camel-mapi-folder.c:1210
1571+#: ../src/camel/camel-mapi-folder.c:1220
1572+#, c-format
1573 msgid "This message is not available in offline mode."
1574 msgstr "Este missatge no està disponible en mode fora de línia."
1575
1576-#: ../src/camel/camel-mapi-folder.c:1128
1577+#: ../src/camel/camel-mapi-folder.c:1092
1578+#, fuzzy, c-format
1579+msgid "Fetching items failed: %s"
1580+msgstr "Ha fallat la recol·lecció d'elements"
1581+
1582+#: ../src/camel/camel-mapi-folder.c:1097
1583 msgid "Fetching items failed"
1584 msgstr "Ha fallat la recol·lecció d'elements"
1585
1586-#: ../src/camel/camel-mapi-folder.c:1833
1587+#: ../src/camel/camel-mapi-folder.c:1170
1588 #, c-format
1589-msgid ""
1590-"Cannot get message: %s\n"
1591-" %s"
1592-msgstr ""
1593-"No s'ha pogut obtindre el missatge: %s\n"
1594-" %s"
1595+msgid "Cannot get message %s: %s"
1596+msgstr "No s'ha pogut obtindre el missatge %s: %s"
1597
1598-#: ../src/camel/camel-mapi-folder.c:1833
1599+#: ../src/camel/camel-mapi-folder.c:1171
1600 msgid "No such message"
1601 msgstr "No hi ha tal missatge"
1602
1603-#: ../src/camel/camel-mapi-folder.c:1845
1604-msgid "Message fetching cancelled by user."
1605-msgstr "L'usuari ha cancel·lat la recollida del missatge."
1606+#: ../src/camel/camel-mapi-folder.c:1246
1607+#, fuzzy, c-format
1608+msgid "Could not get message: %s"
1609+msgstr "No s'ha pogut obtindre el missatge"
1610
1611-#: ../src/camel/camel-mapi-folder.c:1852
1612+#: ../src/camel/camel-mapi-folder.c:1252 ../src/camel/camel-mapi-folder.c:1265
1613 #, c-format
1614-msgid "Cannot get message %s: %s"
1615-msgstr "No s'ha pogut obtindre el missatge %s: %s"
1616-
1617-#: ../src/camel/camel-mapi-folder.c:1900 ../src/camel/camel-mapi-folder.c:1909
1618 msgid "Could not get message"
1619 msgstr "No s'ha pogut obtindre el missatge"
1620
1621-#: ../src/camel/camel-mapi-folder.c:2195
1622+#: ../src/camel/camel-mapi-folder.c:1402
1623+#, c-format
1624+msgid "Failed to empty Trash: %s"
1625+msgstr ""
1626+
1627+#: ../src/camel/camel-mapi-folder.c:1407
1628+msgid "Failed to empty Trash"
1629+msgstr ""
1630+
1631+#: ../src/camel/camel-mapi-folder.c:1626
1632 #, c-format
1633 msgid "Cannot append message to folder '%s'"
1634 msgstr "No es pot afegir el missatge a la carpeta «%s»"
1635
1636-#: ../src/camel/camel-mapi-folder.c:2202
1637+#: ../src/camel/camel-mapi-folder.c:1634 ../src/camel/camel-mapi-folder.c:1659
1638+#, c-format
1639 msgid "Offline."
1640 msgstr "Fora de línia."
1641
1642-#: ../src/camel/camel-mapi-folder.c:2322
1643+#: ../src/camel/camel-mapi-folder.c:1804
1644 #, c-format
1645 msgid "Could not load summary for %s"
1646 msgstr "No s'ha pogut carregar el resum per a %s"
1647
1648-#: ../src/camel/camel-mapi-provider.c:51
1649+#: ../src/camel/camel-mapi-provider.c:44
1650 msgid "Checking for new mail"
1651 msgstr "S'està comprovant si hi ha correu nou"
1652
1653-#: ../src/camel/camel-mapi-provider.c:53
1654+#: ../src/camel/camel-mapi-provider.c:46
1655 msgid "C_heck for new messages in all folders"
1656 msgstr "_Comprova si hi ha correu nou a totes les carpetes"
1657
1658-#: ../src/camel/camel-mapi-provider.c:57
1659+#: ../src/camel/camel-mapi-provider.c:50
1660 msgid "Options"
1661 msgstr "Opcions"
1662
1663-#: ../src/camel/camel-mapi-provider.c:59
1664+#: ../src/camel/camel-mapi-provider.c:52
1665 msgid "Automatically synchroni_ze account locally"
1666 msgstr "Sincronit_za el compte localment de manera automàtica"
1667
1668 #. i18n: copy from evolution:camel-imap-provider.c
1669-#: ../src/camel/camel-mapi-provider.c:62
1670+#: ../src/camel/camel-mapi-provider.c:55
1671 msgid "_Apply filters to new messages in Inbox on this server"
1672 msgstr ""
1673 "_Aplica els filtres als missatges nous de la safata d'entrada en este "
1674 "servidor"
1675
1676-#: ../src/camel/camel-mapi-provider.c:64
1677+#: ../src/camel/camel-mapi-provider.c:57
1678 msgid "Check new messages for _Junk contents"
1679 msgstr "Comprova si els missatges són _brossa"
1680
1681-#: ../src/camel/camel-mapi-provider.c:66
1682+#: ../src/camel/camel-mapi-provider.c:59
1683 msgid "Only check for Junk messag_es in the Inbox folder"
1684 msgstr "Només comprova el corre_u brossa a la safata d'entrada"
1685
1686-#: ../src/camel/camel-mapi-provider.c:78
1687-msgid "For accessing Microsoft Exchange / OpenChange servers using MAPI"
1688+#: ../src/camel/camel-mapi-provider.c:70
1689+#, fuzzy
1690+msgid "For accessing Microsoft Exchange/OpenChange servers using MAPI"
1691 msgstr ""
1692 "Per accedir a servidors Exchange de Microsoft / OpenChange a través del MAPI"
1693
1694-#: ../src/camel/camel-mapi-provider.c:93
1695+#: ../src/camel/camel-mapi-provider.c:85
1696 msgid "Password"
1697 msgstr "Contrasenya"
1698
1699-#: ../src/camel/camel-mapi-provider.c:94
1700+#: ../src/camel/camel-mapi-provider.c:86
1701+#, fuzzy
1702 msgid ""
1703-"This option will connect to the Openchange server using a plaintext password."
1704+"This option will connect to the OpenChange server using a plaintext password."
1705 msgstr ""
1706 "Esta opció vos connectarà al servidor OpenChange a través d'una contrasenya "
1707 "de text pla."
1708
1709-#: ../src/camel/camel-mapi-store.c:63
1710-msgid "Favorites"
1711-msgstr "Preferits"
1712-
1713-#: ../src/camel/camel-mapi-store.c:64
1714-msgid "All Public Folders"
1715-msgstr "Totes les carpetes públiques"
1716-
1717-#: ../src/camel/camel-mapi-store.c:313 ../src/camel/camel-mapi-transport.c:128
1718+#. Translators: The %s is replaced with a server's host name
1719+#: ../src/camel/camel-mapi-store.c:315 ../src/camel/camel-mapi-transport.c:143
1720 #, c-format
1721 msgid "Exchange MAPI server %s"
1722 msgstr "Servidor MAPI Exchange %s"
1723
1724 #. To translators : Example string : Exchange MAPI service for
1725 #. _username_ on _server host name__
1726-#: ../src/camel/camel-mapi-store.c:317 ../src/camel/camel-mapi-transport.c:130
1727+#. Translators: The first %s is replaced with a user name, the second with a server's host name
1728+#: ../src/camel/camel-mapi-store.c:319 ../src/camel/camel-mapi-transport.c:146
1729 #, c-format
1730 msgid "Exchange MAPI service for %s on %s"
1731 msgstr "Servei MAPI Exchange per a %s a %s"
1732@@ -316,57 +413,190 @@
1733 #. for prompting the user if it is available.
1734 #. Second %s is : Username.
1735 #. Third %s is : Server host name.
1736-#: ../src/camel/camel-mapi-store.c:355
1737+#: ../src/camel/camel-mapi-store.c:361
1738 #, c-format
1739 msgid "%s Please enter the MAPI password for %s@%s"
1740 msgstr "%s Introduïu la contrasenya MAPI per a %s@%s"
1741
1742-#: ../src/camel/camel-mapi-store.c:368
1743+#: ../src/camel/camel-mapi-store.c:376
1744+#, c-format
1745 msgid "You did not enter a password."
1746 msgstr "No heu introduït cap contrasenya."
1747
1748-#: ../src/camel/camel-mapi-store.c:376
1749+#: ../src/camel/camel-mapi-store.c:384
1750+#, fuzzy, c-format
1751+msgid "Unable to authenticate to Exchange MAPI server: %s"
1752+msgstr "No s'ha pogut autenticar al servidor MAPI Exchange."
1753+
1754+#: ../src/camel/camel-mapi-store.c:387
1755+#, fuzzy
1756+msgid "Unable to authenticate to Exchange MAPI server"
1757+msgstr "No s'ha pogut autenticar al servidor MAPI Exchange."
1758+
1759+#: ../src/camel/camel-mapi-store.c:564
1760 #, c-format
1761-msgid "Unable to authenticate to Exchange MAPI server."
1762-msgstr "No s'ha pogut autenticar al servidor MAPI Exchange."
1763-
1764-#: ../src/camel/camel-mapi-store.c:552
1765 msgid "Cannot create MAPI folders in offline mode."
1766 msgstr "No es poden crear carpetes MAPI en mode fora de línia."
1767
1768-#: ../src/camel/camel-mapi-store.c:557
1769-#, c-format
1770-msgid "Cannot create new folder `%s'"
1771-msgstr "No s'ha pogut crear la carpeta nova «%s»"
1772-
1773-#: ../src/camel/camel-mapi-store.c:741
1774-#, c-format
1775-msgid "Cannot rename MAPI folder `%s'. Folder does not exist."
1776+#: ../src/camel/camel-mapi-store.c:571
1777+#, fuzzy, c-format
1778+msgid "Cannot create new folder '%s'"
1779+msgstr "No s'ha pogut crear la carpeta nova «%s»"
1780+
1781+#: ../src/camel/camel-mapi-store.c:585
1782+#, c-format
1783+msgid "Authentication failed"
1784+msgstr "Ha fallat l'autenticació"
1785+
1786+#: ../src/camel/camel-mapi-store.c:610
1787+#, fuzzy, c-format
1788+msgid "Cannot create folder '%s': %s"
1789+msgstr "No s'ha pogut crear la carpeta nova «%s»"
1790+
1791+#: ../src/camel/camel-mapi-store.c:615
1792+#, fuzzy, c-format
1793+msgid "Cannot create folder '%s'"
1794+msgstr "No s'ha pogut crear la carpeta nova «%s»"
1795+
1796+#: ../src/camel/camel-mapi-store.c:708
1797+#, fuzzy, c-format
1798+msgid "Cannot remove folder '%s': %s"
1799+msgstr "No es pot canviar el nom de la carpeta MAPI «%s» a «%s»"
1800+
1801+#: ../src/camel/camel-mapi-store.c:715
1802+#, fuzzy, c-format
1803+msgid "Cannot remove folder '%s'"
1804+msgstr "No s'ha pogut crear la carpeta nova «%s»"
1805+
1806+#: ../src/camel/camel-mapi-store.c:805
1807+#, fuzzy, c-format
1808+msgid "Cannot rename MAPI folder '%s'. Folder does not exist."
1809 msgstr ""
1810 "No es pot canviar el nom de la carpeta MAPI «%s». No existeix la carpeta."
1811
1812-#: ../src/camel/camel-mapi-store.c:752
1813-#, c-format
1814-msgid "Cannot rename MAPI default folder `%s' to `%s'."
1815-msgstr "No es pot canviar el nom de la carpeta MAPI predeterminada «%s» a «%s»."
1816-
1817-#: ../src/camel/camel-mapi-store.c:776 ../src/camel/camel-mapi-store.c:791
1818-#: ../src/camel/camel-mapi-store.c:842
1819-#, c-format
1820-msgid "Cannot rename MAPI folder `%s' to `%s'"
1821-msgstr "No es pot canviar el nom de la carpeta MAPI «%s» a «%s»"
1822-
1823-#: ../src/camel/camel-mapi-store.c:1381
1824+#: ../src/camel/camel-mapi-store.c:817
1825+#, fuzzy, c-format
1826+msgid "Cannot rename MAPI default folder '%s' to '%s'."
1827+msgstr ""
1828+"No es pot canviar el nom de la carpeta MAPI predeterminada «%s» a «%s»."
1829+
1830+#. Translators: '%s to %s' is current name of the folder and new name of the folder.
1831+#: ../src/camel/camel-mapi-store.c:844 ../src/camel/camel-mapi-store.c:869
1832+#: ../src/camel/camel-mapi-store.c:931
1833+#, fuzzy, c-format
1834+msgid "Cannot rename MAPI folder '%s' to '%s'"
1835+msgstr "No es pot canviar el nom de la carpeta MAPI «%s» a «%s»"
1836+
1837+#. Translators: '%s to %s' is current name of the folder and new name of the folder.
1838+#. The last '%s' is a detailed error message.
1839+#: ../src/camel/camel-mapi-store.c:862 ../src/camel/camel-mapi-store.c:925
1840+#, fuzzy, c-format
1841+msgid "Cannot rename MAPI folder '%s' to '%s': %s"
1842+msgstr "No es pot canviar el nom de la carpeta MAPI «%s» a «%s»"
1843+
1844+#: ../src/camel/camel-mapi-store.c:1494
1845+#, c-format
1846 msgid "Folder list not available in offline mode."
1847 msgstr "La llista de carpetes no està disponible en mode fora de línia."
1848
1849-#. Fixme : Set a better error message. Would be helful in troubleshooting.
1850-#: ../src/camel/camel-mapi-transport.c:116
1851+#: ../src/camel/camel-mapi-transport.c:109
1852+#: ../src/camel/camel-mapi-transport.c:130
1853+#, c-format
1854 msgid "Could not send message."
1855 msgstr "No s'ha pogut enviar el missatge."
1856
1857-#~ msgid "Global Address List / Active Directory"
1858-#~ msgstr "Global Address List / Active Directory"
1859+#: ../src/camel/camel-mapi-transport.c:125
1860+#, fuzzy, c-format
1861+msgid "Could not send message: %s"
1862+msgstr "No s'ha pogut enviar el missatge."
1863+
1864+#: ../src/libexchangemapi/exchange-mapi-connection.c:107
1865+msgid "Failed to login into the server"
1866+msgstr ""
1867+
1868+#: ../src/libexchangemapi/exchange-mapi-connection.c:108
1869+msgid "Cannot create more sessions, session limit was reached"
1870+msgstr ""
1871+
1872+#: ../src/libexchangemapi/exchange-mapi-connection.c:109
1873+msgid "User cancelled operation"
1874+msgstr ""
1875+
1876+#: ../src/libexchangemapi/exchange-mapi-connection.c:110
1877+msgid "Unable to abort"
1878+msgstr ""
1879+
1880+#: ../src/libexchangemapi/exchange-mapi-connection.c:111
1881+msgid "Network error"
1882+msgstr ""
1883+
1884+#: ../src/libexchangemapi/exchange-mapi-connection.c:112
1885+msgid "Disk error"
1886+msgstr ""
1887+
1888+#: ../src/libexchangemapi/exchange-mapi-connection.c:113
1889+msgid "Password change required"
1890+msgstr ""
1891+
1892+#: ../src/libexchangemapi/exchange-mapi-connection.c:114
1893+#, fuzzy
1894+msgid "Password expired"
1895+msgstr "Contrasenya"
1896+
1897+#: ../src/libexchangemapi/exchange-mapi-connection.c:115
1898+msgid "Invalid workstation account"
1899+msgstr ""
1900+
1901+#: ../src/libexchangemapi/exchange-mapi-connection.c:116
1902+msgid "Invalid access time"
1903+msgstr ""
1904+
1905+#: ../src/libexchangemapi/exchange-mapi-connection.c:117
1906+msgid "Account is disabled"
1907+msgstr ""
1908+
1909+#: ../src/libexchangemapi/exchange-mapi-connection.c:118
1910+msgid "End of session"
1911+msgstr ""
1912+
1913+#: ../src/libexchangemapi/exchange-mapi-connection.c:126
1914+#, c-format
1915+msgid "MAPI error %s (0x%x) occurred"
1916+msgstr ""
1917+
1918+#. Translators: The first '%s' is replaced with an error context,
1919+#. aka where the error occurred, the second '%s' is replaced with
1920+#. the error message.
1921+#: ../src/libexchangemapi/exchange-mapi-connection.c:136
1922+#, c-format
1923+msgctxt "EXCHANGEMAPI_ERROR"
1924+msgid "%s: %s"
1925+msgstr ""
1926+
1927+#: ../src/libexchangemapi/exchange-mapi-connection.c:3308
1928+msgid "All Public Folders"
1929+msgstr "Totes les carpetes públiques"
1930+
1931+#~ msgid "Folders Size"
1932+#~ msgstr "Mida de les carpetes"
1933+
1934+#~ msgid "Downloading GAL entries from server..."
1935+#~ msgstr ""
1936+#~ "S'estan baixant les entrades de la llista d'adreces global (GAL) del "
1937+#~ "servidor..."
1938+
1939+#~ msgid ""
1940+#~ "Cannot get message: %s\n"
1941+#~ " %s"
1942+#~ msgstr ""
1943+#~ "No s'ha pogut obtenir el missatge: %s\n"
1944+#~ " %s"
1945+
1946+#~ msgid "Message fetching cancelled by user."
1947+#~ msgstr "L'usuari ha cancel·lat la recollida del missatge."
1948+
1949+#~ msgid "Favorites"
1950+#~ msgstr "Preferits"
1951
1952 #~ msgid "_Global Catalog server name:"
1953 #~ msgstr "Nom del servidor del _Global Catalog"
1954
1955=== modified file 'po/eu.po'
1956--- po/eu.po 2010-11-03 16:33:05 +0000
1957+++ po/eu.po 2011-01-29 12:46:35 +0000
1958@@ -1,14 +1,14 @@
1959-# translation of eu_to_be_translate.po to Basque
1960+# translation of eu.po to Basque
1961 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
1962 # This file is distributed under the same license as the PACKAGE package.
1963 #
1964 # Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>, 2009, 2010.
1965 msgid ""
1966 msgstr ""
1967-"Project-Id-Version: eu_to_be_translate\n"
1968-"Report-Msgid-Bugs-To: \n"
1969-"POT-Creation-Date: 2010-09-23 19:40+0200\n"
1970-"PO-Revision-Date: 2010-09-23 20:41+0200\n"
1971+"Project-Id-Version: eu\n"
1972+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=evolution-mapi\n"
1973+"POT-Creation-Date: 2010-10-04 13:55+0000\n"
1974+"PO-Revision-Date: 2010-10-05 22:22+0200\n"
1975 "Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>\n"
1976 "Language-Team: Basque <itzulpena@euskalgnu.org>\n"
1977 "MIME-Version: 1.0\n"
1978@@ -140,41 +140,41 @@
1979 msgid "Folder size"
1980 msgstr "Karpetaren tamaina"
1981
1982-#: ../src/addressbook/e-book-backend-mapi.c:549
1983+#: ../src/addressbook/e-book-backend-mapi.c:555
1984 msgid "Cannot connect"
1985 msgstr "Ezin da konektatu"
1986
1987-#: ../src/addressbook/e-book-backend-mapi.c:692
1988+#: ../src/addressbook/e-book-backend-mapi.c:698
1989 msgid "Searching"
1990 msgstr "Bilaketa"
1991
1992-#: ../src/addressbook/e-book-backend-mapi.c:1960
1993-#: ../src/calendar/e-cal-backend-mapi.c:132
1994-#: ../src/camel/camel-mapi-folder.c:1539 ../src/camel/camel-mapi-folder.c:1560
1995+#: ../src/addressbook/e-book-backend-mapi.c:2022
1996+#: ../src/calendar/e-cal-backend-mapi.c:133
1997+#: ../src/camel/camel-mapi-folder.c:1543 ../src/camel/camel-mapi-folder.c:1564
1998 msgid "Unknown error"
1999 msgstr "Errore ezezaguna"
2000
2001 #: ../src/addressbook/e-book-backend-mapi-contacts.c:713
2002-#: ../src/calendar/e-cal-backend-mapi.c:322
2003+#: ../src/calendar/e-cal-backend-mapi.c:331
2004 msgid "Failed to remove public folder"
2005 msgstr "Huts egin du karpeta publikoa kentzean"
2006
2007 #: ../src/addressbook/e-book-backend-mapi-contacts.c:770
2008-#: ../src/calendar/e-cal-backend-mapi.c:1767
2009-#: ../src/calendar/e-cal-backend-mapi.c:2259
2010+#: ../src/calendar/e-cal-backend-mapi.c:1775
2011+#: ../src/calendar/e-cal-backend-mapi.c:2267
2012 msgid "Failed to create item on a server"
2013 msgstr "Huts egin du elementua sortzean zerbitzarian"
2014
2015 #: ../src/addressbook/e-book-backend-mapi-contacts.c:896
2016-#: ../src/calendar/e-cal-backend-mapi.c:2000
2017+#: ../src/calendar/e-cal-backend-mapi.c:2008
2018 msgid "Failed to modify item on a server"
2019 msgstr "Huts egin du elementua aldatzean zerbitzarian"
2020
2021 #: ../src/addressbook/e-book-backend-mapi-contacts.c:1043
2022 #: ../src/addressbook/e-book-backend-mapi-contacts.c:1109
2023 #: ../src/addressbook/e-book-backend-mapi-contacts.c:1160
2024-#: ../src/calendar/e-cal-backend-mapi.c:1293
2025-#: ../src/calendar/e-cal-backend-mapi.c:1314
2026+#: ../src/calendar/e-cal-backend-mapi.c:1301
2027+#: ../src/calendar/e-cal-backend-mapi.c:1322
2028 msgid "Failed to fetch items from a server"
2029 msgstr "Huts egin du elementuak zerbitzaritik eskuratzean"
2030
2031@@ -208,43 +208,43 @@
2032 msgid "Caching GAL contact %d/%d"
2033 msgstr "GAL kontaktuak cachean gordetzen (%d / %d)"
2034
2035-#: ../src/addressbook/e-book-backend-mapi-gal.c:162
2036-#: ../src/addressbook/e-book-backend-mapi-gal.c:197
2037+#: ../src/addressbook/e-book-backend-mapi-gal.c:181
2038+#: ../src/addressbook/e-book-backend-mapi-gal.c:228
2039 msgid "Failed to fetch GAL entries"
2040 msgstr "Huts egin du GAL sarrerak lortzean"
2041
2042 #. To translators: This message is displayed on the status bar when calendar/tasks/memo items are being fetched from the server.
2043-#: ../src/calendar/e-cal-backend-mapi.c:367
2044+#: ../src/calendar/e-cal-backend-mapi.c:376
2045 #, c-format
2046 msgid "Loading items in folder %s"
2047 msgstr "Elementuak kargatzen %s karpetan"
2048
2049-#: ../src/calendar/e-cal-backend-mapi.c:758
2050-#: ../src/calendar/e-cal-backend-mapi.c:784
2051-#: ../src/calendar/e-cal-backend-mapi.c:831
2052-#: ../src/calendar/e-cal-backend-mapi.c:910
2053-#: ../src/calendar/e-cal-backend-mapi.c:933
2054+#: ../src/calendar/e-cal-backend-mapi.c:766
2055+#: ../src/calendar/e-cal-backend-mapi.c:792
2056+#: ../src/calendar/e-cal-backend-mapi.c:839
2057+#: ../src/calendar/e-cal-backend-mapi.c:918
2058+#: ../src/calendar/e-cal-backend-mapi.c:941
2059 #, c-format
2060 msgid "Failed to fetch changes from a server: %s"
2061 msgstr "Huts egin du aldaketak eskuratzean zerbitzaritik: %s"
2062
2063-#: ../src/calendar/e-cal-backend-mapi.c:763
2064-#: ../src/calendar/e-cal-backend-mapi.c:789
2065-#: ../src/calendar/e-cal-backend-mapi.c:836
2066-#: ../src/calendar/e-cal-backend-mapi.c:915
2067-#: ../src/calendar/e-cal-backend-mapi.c:938
2068+#: ../src/calendar/e-cal-backend-mapi.c:771
2069+#: ../src/calendar/e-cal-backend-mapi.c:797
2070+#: ../src/calendar/e-cal-backend-mapi.c:844
2071+#: ../src/calendar/e-cal-backend-mapi.c:923
2072+#: ../src/calendar/e-cal-backend-mapi.c:946
2073 msgid "Failed to fetch changes from a server"
2074 msgstr "Huts egin du aldaketak zerbitzaritik eskuratzean"
2075
2076-#: ../src/calendar/e-cal-backend-mapi.c:1427
2077+#: ../src/calendar/e-cal-backend-mapi.c:1435
2078 msgid "Could not create thread for populating cache"
2079 msgstr "Ezin izan da haririk sortu cachea betetzeko"
2080
2081-#: ../src/calendar/e-cal-backend-mapi.c:1489
2082+#: ../src/calendar/e-cal-backend-mapi.c:1497
2083 msgid "Could not create cache file"
2084 msgstr "Ezin izan da cacheko fitxategia sortu"
2085
2086-#: ../src/calendar/e-cal-backend-mapi.c:1894
2087+#: ../src/calendar/e-cal-backend-mapi.c:1902
2088 msgid ""
2089 "Support for modifying single instances of a recurring appointment is not yet "
2090 "implemented. No change was made to the appointment on the server."
2091@@ -252,85 +252,85 @@
2092 "Hitzordu errepikakor baten instantzia eraldatzea ez dago oraindik "
2093 "inplementatuta. Ez da hitzorduaren aldaketarik egin zerbitzarian."
2094
2095-#: ../src/calendar/e-cal-backend-mapi.c:2507
2096+#: ../src/calendar/e-cal-backend-mapi.c:2515
2097 msgid "Failed to get Free/Busy data"
2098 msgstr "Huts egin du Libre/Lanpetuta datuak lortzean"
2099
2100-#: ../src/camel/camel-mapi-folder.c:357
2101+#: ../src/camel/camel-mapi-folder.c:356
2102 #, c-format
2103 msgid "Updating local summary cache for new messages in %s"
2104 msgstr "Lokaleko laburpenaren cachea eguneratzen mezu berrientzako %s(e)n"
2105
2106-#: ../src/camel/camel-mapi-folder.c:593
2107+#: ../src/camel/camel-mapi-folder.c:592
2108 #, c-format
2109 msgid "Retrieving message IDs from server for %s"
2110 msgstr "Mezuen IDak eskuratzen zerbitzaritik %s(r)entzako"
2111
2112-#: ../src/camel/camel-mapi-folder.c:623
2113+#: ../src/camel/camel-mapi-folder.c:622
2114 #, c-format
2115 msgid "Removing deleted messages from cache in %s"
2116 msgstr "Ezabatutako mezuak kentzen cachetik %s(e)n"
2117
2118 #. TODO : Check for online state
2119-#: ../src/camel/camel-mapi-folder.c:948
2120+#: ../src/camel/camel-mapi-folder.c:952
2121 #, c-format
2122 msgid "Fetching summary information for new messages in %s"
2123 msgstr "Laburpenaren informazioa eskuratzen mezu berrientzako %s(e)n"
2124
2125-#: ../src/camel/camel-mapi-folder.c:1071 ../src/camel/camel-mapi-folder.c:1206
2126-#: ../src/camel/camel-mapi-folder.c:1216
2127+#: ../src/camel/camel-mapi-folder.c:1075 ../src/camel/camel-mapi-folder.c:1210
2128+#: ../src/camel/camel-mapi-folder.c:1220
2129 #, c-format
2130 msgid "This message is not available in offline mode."
2131 msgstr "Mezu hau ez dago eskuragarri lineaz kanpoko moduan."
2132
2133-#: ../src/camel/camel-mapi-folder.c:1088
2134+#: ../src/camel/camel-mapi-folder.c:1092
2135 #, c-format
2136 msgid "Fetching items failed: %s"
2137 msgstr "Huts egin du elementuak eskuratzean: %s"
2138
2139-#: ../src/camel/camel-mapi-folder.c:1093
2140+#: ../src/camel/camel-mapi-folder.c:1097
2141 msgid "Fetching items failed"
2142 msgstr "Huts egin du elementuak eskuratzean"
2143
2144-#: ../src/camel/camel-mapi-folder.c:1166
2145+#: ../src/camel/camel-mapi-folder.c:1170
2146 #, c-format
2147 msgid "Cannot get message %s: %s"
2148 msgstr "Ezin da %s mezua eskuratu: %s"
2149
2150-#: ../src/camel/camel-mapi-folder.c:1167
2151+#: ../src/camel/camel-mapi-folder.c:1171
2152 msgid "No such message"
2153 msgstr "Ez dago halako mezurik"
2154
2155-#: ../src/camel/camel-mapi-folder.c:1242
2156+#: ../src/camel/camel-mapi-folder.c:1246
2157 #, c-format
2158 msgid "Could not get message: %s"
2159 msgstr "Ezin izan da mezua eskuratu: %s"
2160
2161-#: ../src/camel/camel-mapi-folder.c:1248 ../src/camel/camel-mapi-folder.c:1261
2162+#: ../src/camel/camel-mapi-folder.c:1252 ../src/camel/camel-mapi-folder.c:1265
2163 #, c-format
2164 msgid "Could not get message"
2165 msgstr "Ezin izan da mezua eskuratu"
2166
2167-#: ../src/camel/camel-mapi-folder.c:1398
2168+#: ../src/camel/camel-mapi-folder.c:1402
2169 #, c-format
2170 msgid "Failed to empty Trash: %s"
2171 msgstr "Huts egin du Zakarrontzia hustutzean: %s"
2172
2173-#: ../src/camel/camel-mapi-folder.c:1403
2174+#: ../src/camel/camel-mapi-folder.c:1407
2175 msgid "Failed to empty Trash"
2176 msgstr "Huts egin du Zakarrontzia hustutzean"
2177
2178-#: ../src/camel/camel-mapi-folder.c:1622
2179+#: ../src/camel/camel-mapi-folder.c:1626
2180 #, c-format
2181 msgid "Cannot append message to folder '%s'"
2182 msgstr "Ezin zaio mezua '%s' karpetari erantsi"
2183
2184-#: ../src/camel/camel-mapi-folder.c:1630 ../src/camel/camel-mapi-folder.c:1655
2185+#: ../src/camel/camel-mapi-folder.c:1634 ../src/camel/camel-mapi-folder.c:1659
2186 #, c-format
2187 msgid "Offline."
2188 msgstr "Lineaz kanpo."
2189
2190-#: ../src/camel/camel-mapi-folder.c:1801
2191+#: ../src/camel/camel-mapi-folder.c:1804
2192 #, c-format
2193 msgid "Could not load summary for %s"
2194 msgstr "Ezin izan da %s(r)en laburpena kargatu"
2195@@ -373,8 +373,7 @@
2196 msgstr "Pasahitza"
2197
2198 #: ../src/camel/camel-mapi-provider.c:86
2199-msgid ""
2200-"This option will connect to the OpenChange server using a plaintext password."
2201+msgid "This option will connect to the OpenChange server using a plaintext password."
2202 msgstr ""
2203 "Aukera honek OpenChange zerbitzariarekin konektatuko zaitu testu arrunteko "
2204 "pasahitzaren bidez."
2205@@ -544,25 +543,16 @@
2206 msgid "MAPI error %s (0x%x) occurred"
2207 msgstr "MAPIren %s (Ox%x) errorea gertatu da"
2208
2209-#: ../src/libexchangemapi/exchange-mapi-connection.c:3244
2210+#. Translators: The first '%s' is replaced with an error context,
2211+#. aka where the error occurred, the second '%s' is replaced with
2212+#. the error message.
2213+#: ../src/libexchangemapi/exchange-mapi-connection.c:132
2214+#, c-format
2215+msgctxt "EXCHANGEMAPI_ERROR"
2216+msgid "%s: %s"
2217+msgstr "%s: %s"
2218+
2219+#: ../src/libexchangemapi/exchange-mapi-connection.c:3278
2220 msgid "All Public Folders"
2221 msgstr "Karpeta publiko guztiak"
2222
2223-#~ msgid "Folders Size"
2224-#~ msgstr "Karpeten tamaina"
2225-
2226-#~ msgid "Downloading GAL entries from server..."
2227-#~ msgstr "GAL sarrerak deskargatzen zerbitzaritik..."
2228-
2229-#~ msgid ""
2230-#~ "Cannot get message: %s\n"
2231-#~ " %s"
2232-#~ msgstr ""
2233-#~ "Ezin da mezua lortu: %s\n"
2234-#~ " %s"
2235-
2236-#~ msgid "Message fetching cancelled by user."
2237-#~ msgstr "Erabiltzaileak bertan behera utzi du mezua eskuratzea."
2238-
2239-#~ msgid "Favorites"
2240-#~ msgstr "Gogokoak"
2241
2242=== modified file 'src/account-setup-eplugin/exchange-mapi-account-listener.c'
2243--- src/account-setup-eplugin/exchange-mapi-account-listener.c 2010-10-19 15:03:33 +0000
2244+++ src/account-setup-eplugin/exchange-mapi-account-listener.c 2011-01-29 12:46:35 +0000
2245@@ -314,7 +314,8 @@
2246 ESource *source = temp_list->data;
2247
2248 if (source && E_IS_SOURCE (source)) {
2249- if (strcmp (e_source_get_property (source, "public"), "yes") != 0)
2250+ if (!e_source_get_property (source, "public") ||
2251+ strcmp (e_source_get_property (source, "public"), "yes") != 0)
2252 e_source_group_remove_source (group, source);
2253 }
2254 }
2255@@ -714,7 +715,8 @@
2256 ESource *source = temp_list->data;
2257
2258 if (source && E_IS_SOURCE (source)) {
2259- if (strcmp(e_source_get_property(source, "public"), "yes") != 0)
2260+ if (!e_source_get_property (source, "public") ||
2261+ strcmp (e_source_get_property (source, "public"), "yes") != 0)
2262 e_source_group_remove_source (group, source);
2263 }
2264 }
2265
2266=== modified file 'src/addressbook/e-book-backend-mapi-contacts.c'
2267--- src/addressbook/e-book-backend-mapi-contacts.c 2010-10-19 15:03:33 +0000
2268+++ src/addressbook/e-book-backend-mapi-contacts.c 2011-01-29 12:46:35 +0000
2269@@ -451,19 +451,14 @@
2270 /* BDAY AND ANNV */
2271 if (e_contact_get (mcd->contact, E_CONTACT_BIRTH_DATE)) {
2272 EContactDate *date = e_contact_get (mcd->contact, E_CONTACT_BIRTH_DATE);
2273- struct tm tmtime;
2274- time_t lt;
2275- NTTIME nt;
2276+ struct tm tmtime = { 0 };
2277 struct FILETIME t;
2278
2279 tmtime.tm_mday = date->day;
2280 tmtime.tm_mon = date->month - 1;
2281 tmtime.tm_year = date->year - 1900;
2282
2283- lt = mktime (&tmtime);
2284- unix_to_nt_time (&nt, lt);
2285- t.dwLowDateTime = (nt << 32) >> 32;
2286- t.dwHighDateTime = (nt >> 32);
2287+ exchange_mapi_util_time_t_to_filetime (mktime (&tmtime) + (24 * 60 * 60), &t);
2288
2289 if (!exchange_mapi_utils_add_spropvalue (mem_ctx, values, n_values, PR_BIRTHDAY, &t))
2290 return FALSE;
2291@@ -471,19 +466,14 @@
2292
2293 if (e_contact_get (mcd->contact, E_CONTACT_ANNIVERSARY)) {
2294 EContactDate *date = e_contact_get (mcd->contact, E_CONTACT_ANNIVERSARY);
2295- struct tm tmtime;
2296- time_t lt;
2297- NTTIME nt;
2298+ struct tm tmtime = { 0 };
2299 struct FILETIME t;
2300
2301 tmtime.tm_mday = date->day;
2302 tmtime.tm_mon = date->month - 1;
2303 tmtime.tm_year = date->year - 1900;
2304
2305- lt = mktime (&tmtime);
2306- unix_to_nt_time (&nt, lt);
2307- t.dwLowDateTime = (nt << 32) >> 32;
2308- t.dwHighDateTime = (nt >> 32);
2309+ exchange_mapi_util_time_t_to_filetime (mktime (&tmtime) + (24 * 60 * 60), &t);
2310
2311 if (!exchange_mapi_utils_add_spropvalue (mem_ctx, values, n_values, PR_WEDDING_ANNIVERSARY, &t))
2312 return FALSE;
2313@@ -762,7 +752,7 @@
2314
2315 mid = exchange_mapi_connection_create_item (conn, olFolderContacts, priv->fid,
2316 mapi_book_write_props, &mcd,
2317- NULL, NULL, NULL, priv->is_public_folder ? MAPI_OPTIONS_USE_PFSTORE : 0, &mapi_error);
2318+ NULL, NULL, NULL, MAPI_OPTIONS_DONT_SUBMIT | (priv->is_public_folder ? MAPI_OPTIONS_USE_PFSTORE : 0), &mapi_error);
2319
2320 e_book_backend_mapi_unlock_connection (ebma);
2321
2322
2323=== modified file 'src/addressbook/e-book-backend-mapi-gal.c'
2324--- src/addressbook/e-book-backend-mapi-gal.c 2010-10-19 15:03:33 +0000
2325+++ src/addressbook/e-book-backend-mapi-gal.c 2011-01-29 12:46:35 +0000
2326@@ -138,6 +138,8 @@
2327 GError *mapi_error = NULL;
2328 struct FetchGalData fgd = { 0 };
2329 ExchangeMapiConnection *conn;
2330+ gchar *last_fetch;
2331+ gboolean fetch_successful;
2332
2333 e_book_backend_mapi_lock_connection (ebma);
2334
2335@@ -145,22 +147,51 @@
2336 if (!conn) {
2337 e_book_backend_mapi_unlock_connection (ebma);
2338 g_propagate_error (error, EDB_ERROR (REPOSITORY_OFFLINE));
2339-
2340 return;
2341 }
2342
2343+ /* GAL doesn't use restrictions yet, thus just fetches all items always */
2344+ last_fetch = e_book_backend_mapi_cache_get (ebma, "gal-last-update");
2345+ if (last_fetch) {
2346+ GTimeVal last_tv = { 0 }, now = { 0 };
2347+
2348+ g_get_current_time (&now);
2349+
2350+ /* refetch gal only once per week */
2351+ if (g_time_val_from_iso8601 (last_fetch, &last_tv) && now.tv_sec - last_tv.tv_sec <= 60 * 60 * 24 * 7) {
2352+ g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_CANCELLED, "Cancelled");
2353+ g_free (last_fetch);
2354+ e_book_backend_mapi_unlock_connection (ebma);
2355+ return;
2356+ }
2357+
2358+ g_free (last_fetch);
2359+ }
2360+
2361 fgd.ebma = ebma;
2362 fgd.book_view = book_view;
2363 fgd.notify_contact_data = notify_contact_data;
2364 fgd.fid = exchange_mapi_connection_get_default_folder_id (conn, olFolderContacts, NULL);
2365
2366- exchange_mapi_connection_fetch_gal (conn, restriction,
2367+ fetch_successful = exchange_mapi_connection_fetch_gal (conn, restriction,
2368 mapi_book_utils_get_prop_list, GET_ALL_KNOWN_IDS,
2369 fetch_gal_cb, &fgd, &mapi_error);
2370
2371 if (mapi_error) {
2372 mapi_error_to_edb_error (error, mapi_error, E_DATA_BOOK_STATUS_OTHER_ERROR, _("Failed to fetch GAL entries"));
2373 g_error_free (mapi_error);
2374+ } else if (!fetch_successful) {
2375+ g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_CANCELLED, "Cancelled");
2376+ } else {
2377+ GTimeVal now = { 0 };
2378+
2379+ g_get_current_time (&now);
2380+
2381+ last_fetch = g_time_val_to_iso8601 (&now);
2382+ if (last_fetch && *last_fetch)
2383+ e_book_backend_mapi_cache_set (ebma, "gal-last-update", last_fetch);
2384+
2385+ g_free (last_fetch);
2386 }
2387
2388 e_book_backend_mapi_unlock_connection (ebma);
2389
2390=== modified file 'src/addressbook/e-book-backend-mapi.c'
2391--- src/addressbook/e-book-backend-mapi.c 2010-10-19 15:03:33 +0000
2392+++ src/addressbook/e-book-backend-mapi.c 2011-01-29 12:46:35 +0000
2393@@ -299,6 +299,7 @@
2394 EBookBackendMAPIClass *ebmac;
2395 glong last_modification_secs = 0;
2396 EDataBookView *book_view;
2397+ GError *error = NULL;
2398
2399 g_return_val_if_fail (ebma != NULL, NULL);
2400 g_return_val_if_fail (E_IS_BOOK_BACKEND_MAPI (ebma), NULL);
2401@@ -324,14 +325,17 @@
2402 if (!ebbm_get_cache_time (ebma, &last_modification_secs))
2403 last_modification_secs = 0;
2404
2405- ebbm_fetch_contacts (ebma, restriction, NULL, &last_modification_secs, NULL);
2406+ ebbm_fetch_contacts (ebma, restriction, NULL, &last_modification_secs, &error);
2407+ if (!error)
2408+ e_book_backend_cache_set_populated (priv->cache);
2409+ else
2410+ e_file_cache_remove_object (E_FILE_CACHE (priv->cache), "populated");
2411
2412 talloc_free (mem_ctx);
2413 }
2414
2415- if (!g_cancellable_is_cancelled (priv->update_cache) && ebmac->op_fetch_known_uids) {
2416+ if (!error && !g_cancellable_is_cancelled (priv->update_cache) && ebmac->op_fetch_known_uids) {
2417 GHashTable *uids = g_hash_table_new_full (g_str_hash, g_str_equal, (GDestroyNotify) g_free, NULL);
2418- GError *error = NULL;
2419
2420 ebmac->op_fetch_known_uids (ebma, priv->update_cache, uids, &error);
2421
2422@@ -347,7 +351,8 @@
2423
2424 if (!uid || g_hash_table_lookup (uids, uid)
2425 || g_str_equal (uid, "populated")
2426- || g_str_equal (uid, "last_update_time"))
2427+ || g_str_equal (uid, "last_update_time")
2428+ || g_str_has_prefix (uid, "key:"))
2429 continue;
2430
2431 /* uid is hold by a cache, thus make a copy before remove */
2432@@ -366,10 +371,11 @@
2433 }
2434
2435 g_hash_table_destroy (uids);
2436- if (error)
2437- g_error_free (error);
2438 }
2439
2440+ if (error)
2441+ g_error_free (error);
2442+
2443 book_view = ebbm_pick_book_view (ebma);
2444 if (book_view)
2445 e_data_book_view_notify_complete (book_view, NULL);
2446@@ -693,7 +699,7 @@
2447
2448 e_book_backend_mapi_update_view_by_cache (bvtd->ebma, bvtd->book_view, &error);
2449
2450- if (!error && priv && priv->conn && !priv->update_cache_thread
2451+ if (!error && priv && priv->conn && (!priv->update_cache_thread || g_cancellable_is_cancelled (priv->update_cache))
2452 && e_book_backend_mapi_book_view_is_running (bvtd->ebma, bvtd->book_view)) {
2453 EBookBackendMAPIClass *ebmac;
2454
2455@@ -701,12 +707,20 @@
2456 if (ebmac && ebmac->op_book_view_thread)
2457 ebmac->op_book_view_thread (bvtd->ebma, bvtd->book_view, &error);
2458
2459- if (!error && !priv->marked_for_offline) {
2460+ if (!error && !e_book_backend_cache_is_populated (priv->cache)) {
2461 /* todo: create restriction based on the book_view */
2462+ g_cancellable_reset (priv->update_cache);
2463 ebbm_fetch_contacts (bvtd->ebma, NULL, bvtd->book_view, NULL, &error);
2464+ g_cancellable_cancel (priv->update_cache);
2465+
2466+ if (!error)
2467+ e_book_backend_cache_set_populated (priv->cache);
2468 }
2469 }
2470
2471+ if (error && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
2472+ g_clear_error (&error);
2473+
2474 /* do not stop book view when filling cache */
2475 if (e_book_backend_mapi_book_view_is_running (bvtd->ebma, bvtd->book_view)
2476 && (!priv->update_cache_thread || g_cancellable_is_cancelled (priv->update_cache)))
2477@@ -1624,6 +1638,54 @@
2478 e_book_backend_notify_remove (E_BOOK_BACKEND (ebma), uid);
2479 }
2480
2481+static gchar *
2482+create_cache_key (const gchar *key)
2483+{
2484+ g_return_val_if_fail (key != NULL, NULL);
2485+
2486+ return g_strconcat ("key:", key, NULL);
2487+}
2488+
2489+void
2490+e_book_backend_mapi_cache_set (EBookBackendMAPI *ebma, const gchar *key, const gchar *value)
2491+{
2492+ gchar *real_key;
2493+
2494+ g_return_if_fail (ebma != NULL);
2495+ g_return_if_fail (E_IS_BOOK_BACKEND_MAPI (ebma));
2496+ g_return_if_fail (ebma->priv != NULL);
2497+ g_return_if_fail (ebma->priv->cache != NULL);
2498+ g_return_if_fail (key != NULL);
2499+
2500+ real_key = create_cache_key (key);
2501+ g_return_if_fail (real_key != NULL);
2502+
2503+ if (!e_file_cache_add_object (E_FILE_CACHE (ebma->priv->cache), real_key, value))
2504+ e_file_cache_replace_object (E_FILE_CACHE (ebma->priv->cache), real_key, value);
2505+
2506+ g_free (real_key);
2507+}
2508+
2509+gchar *
2510+e_book_backend_mapi_cache_get (EBookBackendMAPI *ebma, const gchar *key)
2511+{
2512+ gchar *real_key, *res;
2513+
2514+ g_return_val_if_fail (ebma != NULL, NULL);
2515+ g_return_val_if_fail (E_IS_BOOK_BACKEND_MAPI (ebma), NULL);
2516+ g_return_val_if_fail (ebma->priv != NULL, NULL);
2517+ g_return_val_if_fail (ebma->priv->cache != NULL, NULL);
2518+ g_return_val_if_fail (key != NULL, NULL);
2519+
2520+ real_key = create_cache_key (key);
2521+ g_return_val_if_fail (real_key != NULL, NULL);
2522+
2523+ res = g_strdup (e_file_cache_get_object (E_FILE_CACHE (ebma->priv->cache), real_key));
2524+ g_free (real_key);
2525+
2526+ return res;
2527+}
2528+
2529 /* utility functions/macros */
2530
2531 /* 'data' is one of GET_ALL_KNOWN_IDS or GET_UIDS_ONLY */
2532@@ -1852,15 +1914,10 @@
2533 e_contact_set (contact, mappings[i].field_id, value);
2534 } else if (contact_type == ELEMENT_TYPE_SIMPLE) {
2535 if (value && mappings[i].element_type == PT_SYSTIME) {
2536- struct FILETIME *t = value;
2537- time_t time;
2538- NTTIME nt;
2539+ const struct FILETIME *t = value;
2540 gchar buff[129];
2541+ time_t time = exchange_mapi_util_filetime_to_time_t (t);
2542
2543- nt = t->dwHighDateTime;
2544- nt = nt << 32;
2545- nt |= t->dwLowDateTime;
2546- time = nt_time_to_unix (nt);
2547 e_contact_set (contact, mappings[i].field_id, ctime_r (&time, buff));
2548 }
2549 } else if (contact_type == ELEMENT_TYPE_COMPLEX) {
2550@@ -1872,18 +1929,15 @@
2551 g_list_free (list);
2552 } else if (mappings[i].field_id == E_CONTACT_BIRTH_DATE
2553 || mappings[i].field_id == E_CONTACT_ANNIVERSARY) {
2554- struct FILETIME *t = value;
2555+ const struct FILETIME *t = value;
2556 time_t time;
2557- NTTIME nt;
2558 struct tm * tmtime;
2559 if (value) {
2560 EContactDate date = {0};
2561- nt = t->dwHighDateTime;
2562- nt = nt << 32;
2563- nt |= t->dwLowDateTime;
2564- time = nt_time_to_unix (nt);
2565+
2566+ time = exchange_mapi_util_filetime_to_time_t (t);
2567 tmtime = gmtime (&time);
2568- //FIXME: Move to new libmapi api to get string dates.
2569+
2570 date.day = tmtime->tm_mday;
2571 date.month = tmtime->tm_mon + 1;
2572 date.year = tmtime->tm_year + 1900;
2573
2574=== modified file 'src/addressbook/e-book-backend-mapi.h'
2575--- src/addressbook/e-book-backend-mapi.h 2010-10-19 15:03:33 +0000
2576+++ src/addressbook/e-book-backend-mapi.h 2011-01-29 12:46:35 +0000
2577@@ -105,6 +105,8 @@
2578 gboolean e_book_backend_mapi_is_marked_for_offline (EBookBackendMAPI *ebma);
2579 gboolean e_book_backend_mapi_notify_contact_update (EBookBackendMAPI *ebma, EDataBookView *book_view, EContact *contact, const struct timeval *pr_last_modification_time, gint index, gint total, gpointer notify_contact_data);
2580 void e_book_backend_mapi_notify_contact_removed (EBookBackendMAPI *ebma, const gchar *uid);
2581+void e_book_backend_mapi_cache_set (EBookBackendMAPI *ebma, const gchar *key, const gchar *value);
2582+gchar *e_book_backend_mapi_cache_get (EBookBackendMAPI *ebma, const gchar *key);
2583
2584 /* utility functions/macros */
2585
2586
2587=== modified file 'src/calendar/e-cal-backend-mapi.c'
2588--- src/calendar/e-cal-backend-mapi.c 2010-11-03 16:33:05 +0000
2589+++ src/calendar/e-cal-backend-mapi.c 2011-01-29 12:46:35 +0000
2590@@ -92,6 +92,7 @@
2591 gboolean mode_changed;
2592 icaltimezone *default_zone;
2593 gboolean populating_cache; /* whether in populate_cache */
2594+ GMutex *updating_mutex;
2595
2596 /* timeout handler for syncing sendoptions */
2597 guint sendoptions_sync_timeout;
2598@@ -290,13 +291,21 @@
2599 // CAL_STATIC_CAPABILITY_DELEGATE_SUPPORTED ","
2600 // CAL_STATIC_CAPABILITY_NO_ORGANIZER ","
2601 // CAL_STATIC_CAPABILITY_DELEGATE_TO_MANY ","
2602- CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING
2603+ CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING ","
2604+ CAL_STATIC_CAPABILITY_REFRESH_SUPPORTED
2605 );
2606 }
2607 static void
2608 ecbm_refresh (ECalBackend *backend, EDataCal *cal, GError **perror)
2609 {
2610- g_propagate_error (perror, EDC_ERROR (NotSupported));
2611+ ECalBackendMAPI *cbmapi;
2612+ ECalBackendMAPIPrivate *priv;
2613+
2614+ cbmapi = E_CAL_BACKEND_MAPI (backend);
2615+ priv = cbmapi->priv;
2616+
2617+ if (priv && priv->dlock && priv->dlock->cond)
2618+ g_cond_signal (priv->dlock->cond);
2619 }
2620
2621 static void
2622@@ -681,7 +690,6 @@
2623 ECalBackendMAPI *cbmapi;
2624 ECalBackendMAPIPrivate *priv;
2625 icalcomponent_kind kind;
2626- static GStaticMutex updating = G_STATIC_MUTEX_INIT;
2627 icaltimetype itt_current, itt_cache = icaltime_null_time();
2628 time_t current_time;
2629 struct tm tm;
2630@@ -708,7 +716,7 @@
2631 if (priv->mode == CAL_MODE_LOCAL)
2632 return FALSE;
2633
2634- g_static_mutex_lock (&updating);
2635+ g_mutex_lock (priv->updating_mutex);
2636
2637 serv_time = e_cal_backend_store_get_key_value (priv->store, SERVER_UTC_TIME);
2638 if (serv_time)
2639@@ -764,7 +772,7 @@
2640 }
2641
2642 // e_file_cache_thaw_changes (E_FILE_CACHE (priv->cache));
2643- g_static_mutex_unlock (&updating);
2644+ g_mutex_unlock (priv->updating_mutex);
2645 if (mem_ctx)
2646 talloc_free (mem_ctx);
2647 return FALSE;
2648@@ -790,7 +798,7 @@
2649 }
2650
2651 //e_file_cache_thaw_changes (E_FILE_CACHE (priv->cache));
2652- g_static_mutex_unlock (&updating);
2653+ g_mutex_unlock (priv->updating_mutex);
2654 if (mem_ctx)
2655 talloc_free (mem_ctx);
2656 return FALSE;
2657@@ -838,7 +846,7 @@
2658
2659 g_slist_foreach (did.cache_ids, (GFunc) g_free, NULL);
2660 g_slist_free (did.cache_ids);
2661- g_static_mutex_unlock (&updating);
2662+ g_mutex_unlock (priv->updating_mutex);
2663 return FALSE;
2664 }
2665
2666@@ -915,7 +923,7 @@
2667 e_cal_backend_notify_error (E_CAL_BACKEND (cbmapi), _("Failed to fetch changes from a server"));
2668 }
2669
2670- g_static_mutex_unlock (&updating);
2671+ g_mutex_unlock (priv->updating_mutex);
2672 g_free (or_res);
2673 return FALSE;
2674 }
2675@@ -939,14 +947,14 @@
2676 }
2677
2678 g_free (or_res);
2679- g_static_mutex_unlock (&updating);
2680+ g_mutex_unlock (priv->updating_mutex);
2681 return FALSE;
2682 }
2683 }
2684 g_free (or_res);
2685 }
2686
2687- g_static_mutex_unlock (&updating);
2688+ g_mutex_unlock (priv->updating_mutex);
2689 return TRUE;
2690 }
2691
2692@@ -3603,6 +3611,11 @@
2693 priv->mutex = NULL;
2694 }
2695
2696+ if (priv->updating_mutex) {
2697+ g_mutex_free (priv->updating_mutex);
2698+ priv->updating_mutex = NULL;
2699+ }
2700+
2701 if (priv->store) {
2702 g_object_unref (priv->store);
2703 priv->store = NULL;
2704@@ -3729,6 +3742,7 @@
2705
2706 /* create the mutex for thread safety */
2707 priv->mutex = g_mutex_new ();
2708+ priv->updating_mutex = g_mutex_new ();
2709 priv->populating_cache = FALSE;
2710 priv->op_queue = em_operation_queue_new ((EMOperationQueueFunc) ecbm_operation_cb, cbmapi);
2711
2712
2713=== modified file 'src/camel/camel-mapi-folder.c'
2714--- src/camel/camel-mapi-folder.c 2010-11-03 16:33:05 +0000
2715+++ src/camel/camel-mapi-folder.c 2011-01-29 12:46:35 +0000
2716@@ -56,7 +56,6 @@
2717
2718 //#ifdef ENABLE_THREADS
2719 GStaticMutex search_lock; /* for locking the search object */
2720- GStaticRecMutex cache_lock; /* for locking the cache object */
2721 //#endif
2722
2723 };
2724@@ -162,7 +161,6 @@
2725 struct timeval item_modification_time = { 0 };
2726 struct timeval fi_data_mod_time = { 0 };
2727 guint32 j = 0;
2728- NTTIME ntdate;
2729
2730 MailItem *item = g_new0(MailItem , 1);
2731
2732@@ -201,17 +199,12 @@
2733 /* item->header.from = camel_internet_address_format_address (from_name, from_email); */
2734
2735 if (delivery_date) {
2736- ntdate = delivery_date->dwHighDateTime;
2737- ntdate = ntdate << 32;
2738- ntdate |= delivery_date->dwLowDateTime;
2739- item->header.recieved_time = nt_time_to_unix(ntdate);
2740+ item->header.recieved_time = exchange_mapi_util_filetime_to_time_t (delivery_date);
2741 }
2742
2743 if (last_modification_time) {
2744- ntdate = last_modification_time->dwHighDateTime;
2745- ntdate = ntdate << 32;
2746- ntdate |= last_modification_time->dwLowDateTime;
2747- nttime_to_timeval (&item_modification_time, ntdate);
2748+ item_modification_time.tv_sec = exchange_mapi_util_filetime_to_time_t (last_modification_time);
2749+ item_modification_time.tv_usec = 0;
2750 }
2751
2752 fi_data_mod_time.tv_sec = fi_data->last_modification_time.tv_sec;
2753@@ -501,11 +494,11 @@
2754 camel_folder_change_info_change_uid (changes, mi->info.uid);
2755 camel_message_info_free (pmi);
2756 } else {
2757- CAMEL_MAPI_FOLDER_REC_LOCK (folder, cache_lock);
2758+ camel_folder_summary_lock (folder->summary, CAMEL_FOLDER_SUMMARY_SUMMARY_LOCK);
2759 camel_folder_summary_add (folder->summary,(CamelMessageInfo *)mi);
2760 camel_folder_change_info_add_uid (changes, mi->info.uid);
2761 camel_folder_change_info_recent_uid (changes, mi->info.uid);
2762- CAMEL_MAPI_FOLDER_REC_UNLOCK (folder, cache_lock);
2763+ camel_folder_summary_unlock (folder->summary, CAMEL_FOLDER_SUMMARY_SUMMARY_LOCK);
2764 }
2765
2766 /********************* Summary ends *************************/
2767@@ -641,11 +634,11 @@
2768
2769 /* If it is not in server list, clean our cache */
2770 if (!msg_flags) {
2771- CAMEL_MAPI_FOLDER_REC_LOCK (m->folder, cache_lock);
2772+ camel_folder_summary_lock (m->folder->summary, CAMEL_FOLDER_SUMMARY_SUMMARY_LOCK);
2773 camel_folder_summary_remove_uid (m->folder->summary, uid);
2774 camel_data_cache_remove (mapi_folder->cache, "cache", uid, NULL);
2775 camel_folder_change_info_remove_uid (changes, uid);
2776- CAMEL_MAPI_FOLDER_REC_UNLOCK (m->folder, cache_lock);
2777+ camel_folder_summary_unlock (m->folder->summary, CAMEL_FOLDER_SUMMARY_SUMMARY_LOCK);
2778 } else {
2779 CamelMapiMessageInfo *mapi_info = (CamelMapiMessageInfo *) info;
2780
2781@@ -765,8 +758,10 @@
2782
2783 is_junk_folder = (mapi_folder->type & CAMEL_FOLDER_TYPE_MASK) == CAMEL_FOLDER_TYPE_JUNK;
2784
2785+ camel_folder_summary_lock (folder->summary, CAMEL_FOLDER_SUMMARY_SUMMARY_LOCK);
2786+ camel_folder_summary_prepare_fetch_all (folder->summary, NULL);
2787+
2788 count = camel_folder_summary_count (folder->summary);
2789- CAMEL_MAPI_FOLDER_REC_LOCK (folder, cache_lock);
2790 for (i=0; i < count; i++) {
2791 info = camel_folder_summary_index (folder->summary, i);
2792 mapi_info = (CamelMapiMessageInfo *) info;
2793@@ -783,6 +778,7 @@
2794
2795 /* Why are we getting so much noise here :-/ */
2796 if (!exchange_mapi_util_mapi_ids_from_uid (uid, &temp_fid, mid)) {
2797+ camel_message_info_free (info);
2798 g_free (mid);
2799 continue;
2800 }
2801@@ -819,10 +815,12 @@
2802
2803 mapi_info->server_flags = mapi_info->info.flags;
2804 }
2805- camel_message_info_free (info);
2806+
2807+ if (info)
2808+ camel_message_info_free (info);
2809 }
2810
2811- CAMEL_MAPI_FOLDER_REC_UNLOCK (folder, cache_lock);
2812+ camel_folder_summary_unlock (folder->summary, CAMEL_FOLDER_SUMMARY_SUMMARY_LOCK);
2813
2814 /*
2815 Sync up the READ changes before deleting the message.
2816@@ -884,10 +882,10 @@
2817 for (l = deleted_items; l; l = l->next) {
2818 gchar * deleted_msg_uid = g_strdup_printf ("%016" G_GINT64_MODIFIER "X%016" G_GINT64_MODIFIER "X", fid, *(mapi_id_t *)l->data);
2819
2820- CAMEL_MAPI_FOLDER_REC_LOCK (folder, cache_lock);
2821+ camel_folder_summary_lock (folder->summary, CAMEL_FOLDER_SUMMARY_SUMMARY_LOCK);
2822 camel_folder_summary_remove_uid (folder->summary, deleted_msg_uid);
2823 camel_data_cache_remove(mapi_folder->cache, "cache", deleted_msg_uid, NULL);
2824- CAMEL_MAPI_FOLDER_REC_UNLOCK (folder, cache_lock);
2825+ camel_folder_summary_unlock (folder->summary, CAMEL_FOLDER_SUMMARY_SUMMARY_LOCK);
2826 }
2827
2828 g_slist_free (read_items);
2829@@ -1265,7 +1263,7 @@
2830 }
2831
2832 /* add to cache */
2833- CAMEL_MAPI_FOLDER_REC_LOCK (folder, cache_lock);
2834+ camel_folder_summary_lock (folder->summary, CAMEL_FOLDER_SUMMARY_SUMMARY_LOCK);
2835 if ((cache_stream = camel_data_cache_add (mapi_folder->cache, "cache", uid, NULL))) {
2836 if (camel_data_wrapper_write_to_stream ((CamelDataWrapper *) msg, cache_stream, NULL) == -1
2837 || camel_stream_flush (cache_stream, NULL) == -1) {
2838@@ -1289,7 +1287,7 @@
2839 g_object_unref (cache_stream);
2840 }
2841
2842- CAMEL_MAPI_FOLDER_REC_UNLOCK (folder, cache_lock);
2843+ camel_folder_summary_unlock (folder->summary, CAMEL_FOLDER_SUMMARY_SUMMARY_LOCK);
2844
2845 camel_message_info_free (&mi->info);
2846
2847@@ -1444,11 +1442,11 @@
2848 if (status) {
2849 while (deleted_items_uid) {
2850 const gchar *uid = (gchar *)deleted_items_uid->data;
2851- CAMEL_MAPI_FOLDER_REC_LOCK (folder, cache_lock);
2852+ camel_folder_summary_lock (folder->summary, CAMEL_FOLDER_SUMMARY_SUMMARY_LOCK);
2853 camel_folder_change_info_remove_uid (changes, uid);
2854 camel_folder_summary_remove_uid (folder->summary, uid);
2855 camel_data_cache_remove(mapi_folder->cache, "cache", uid, NULL);
2856- CAMEL_MAPI_FOLDER_REC_UNLOCK (folder, cache_lock);
2857+ camel_folder_summary_unlock (folder->summary, CAMEL_FOLDER_SUMMARY_SUMMARY_LOCK);
2858 deleted_items_uid = g_slist_next (deleted_items_uid);
2859 }
2860 }
2861@@ -1638,14 +1636,14 @@
2862 /* Convert MIME to Item */
2863 from = (CamelAddress *) camel_mime_message_get_from (message);
2864
2865- item = camel_mapi_utils_mime_to_item (message, from, error);
2866+ item = camel_mapi_utils_mime_to_item (message, info ? camel_message_info_flags (info) : 0, from, error);
2867 if (item == NULL)
2868 return FALSE;
2869
2870 mid = exchange_mapi_connection_create_item (camel_mapi_store_get_exchange_connection (mapi_store), -1, fid,
2871 camel_mapi_utils_create_item_build_props, item,
2872 item->recipients, item->attachments,
2873- item->generic_streams, 0, &mapi_error);
2874+ item->generic_streams, MAPI_OPTIONS_DONT_SUBMIT, &mapi_error);
2875
2876 if (!mid) {
2877 if (mapi_error) {
2878@@ -1757,7 +1755,6 @@
2879
2880 #ifdef ENABLE_THREADS
2881 g_static_mutex_init(&mapi_folder->priv->search_lock);
2882- g_static_rec_mutex_init(&mapi_folder->priv->cache_lock);
2883 #endif
2884
2885 mapi_folder->need_rescan = TRUE;
2886@@ -1825,8 +1822,18 @@
2887 /* return NULL; */
2888 /* } */
2889
2890- if (camel_url_get_param (((CamelService *) store)->url, "filter"))
2891- folder->folder_flags |= CAMEL_FOLDER_FILTER_RECENT;
2892+ if ((store->flags & CAMEL_STORE_FILTER_INBOX) != 0) {
2893+ CamelFolderInfo *fi;
2894+
2895+ fi = camel_store_get_folder_info (store, folder_name, 0, NULL);
2896+ if (fi) {
2897+ if ((fi->flags & CAMEL_FOLDER_TYPE_MASK) == CAMEL_FOLDER_TYPE_INBOX) {
2898+ folder->folder_flags |= CAMEL_FOLDER_FILTER_RECENT;
2899+ }
2900+
2901+ camel_store_free_folder_info (store, fi);
2902+ }
2903+ }
2904
2905 mapi_folder->search = camel_folder_search_new ();
2906 if (!mapi_folder->search) {
2907
2908=== modified file 'src/camel/camel-mapi-private.h'
2909--- src/camel/camel-mapi-private.h 2010-10-19 15:03:33 +0000
2910+++ src/camel/camel-mapi-private.h 2011-01-29 12:46:35 +0000
2911@@ -36,10 +36,6 @@
2912 (g_static_mutex_lock(&((CamelMapiFolder *)f)->priv->l))
2913 #define CAMEL_MAPI_FOLDER_UNLOCK(f, l) \
2914 (g_static_mutex_unlock(&((CamelMapiFolder *)f)->priv->l))
2915-#define CAMEL_MAPI_FOLDER_REC_LOCK(f, l) \
2916- (g_static_rec_mutex_lock(&((CamelMapiFolder *)f)->priv->l))
2917-#define CAMEL_MAPI_FOLDER_REC_UNLOCK(f, l) \
2918- (g_static_rec_mutex_unlock(&((CamelMapiFolder *)f)->priv->l))
2919 //#else
2920 #define MAPI_FOLDER_LOCK(f, l)
2921 #define MAPI_FOLDER_UNLOCK(f, l)
2922
2923=== modified file 'src/camel/camel-mapi-store.c'
2924--- src/camel/camel-mapi-store.c 2010-10-19 15:03:33 +0000
2925+++ src/camel/camel-mapi-store.c 2011-01-29 12:46:35 +0000
2926@@ -1963,6 +1963,10 @@
2927 static gboolean
2928 mapi_can_refresh_folder (CamelStore *store, CamelFolderInfo *info, GError **error)
2929 {
2930+ /* skip unselectable folders from automatic refresh */
2931+ if (info && (info->flags & CAMEL_FOLDER_NOSELECT) != 0)
2932+ return FALSE;
2933+
2934 return CAMEL_STORE_CLASS(camel_mapi_store_parent_class)->can_refresh_folder (store, info, error) ||
2935 (camel_url_get_param (((CamelService *)store)->url, "check_all") != NULL);
2936 }
2937
2938=== modified file 'src/camel/camel-mapi-transport.c'
2939--- src/camel/camel-mapi-transport.c 2010-10-19 15:03:33 +0000
2940+++ src/camel/camel-mapi-transport.c 2011-01-29 12:46:35 +0000
2941@@ -63,6 +63,16 @@
2942 guint64 fid = 0;
2943 mapi_id_t mid = 0;
2944
2945+ #define unset(x) g_free (x); x = NULL
2946+
2947+ item->header.flags = MSGFLAG_UNSENT;
2948+ unset (item->header.from);
2949+ unset (item->header.from_email);
2950+ unset (item->header.transport_headers);
2951+ item->header.recieved_time = 0;
2952+
2953+ #undef unset
2954+
2955 mid = exchange_mapi_connection_create_item (conn, olFolderSentMail, fid,
2956 camel_mapi_utils_create_item_build_props, item,
2957 item->recipients, item->attachments, item->generic_streams, MAPI_OPTIONS_DELETE_ON_SUBMIT_FAILURE, perror);
2958@@ -101,7 +111,7 @@
2959 }
2960
2961 /* Convert MIME to MailItem, attacment lists and recipient list.*/
2962- item = camel_mapi_utils_mime_to_item (message, from, NULL);
2963+ item = camel_mapi_utils_mime_to_item (message, 0, from, NULL);
2964
2965 /* send */
2966 st = mapi_message_item_send (conn, item, error);
2967
2968=== modified file 'src/camel/camel-mapi-utils.c'
2969--- src/camel/camel-mapi-utils.c 2010-11-03 16:33:05 +0000
2970+++ src/camel/camel-mapi-utils.c 2011-01-29 12:46:35 +0000
2971@@ -98,12 +98,15 @@
2972 }
2973
2974 static void
2975-mail_item_set_from(MailItem *item, const gchar *from)
2976+mail_item_set_from(MailItem *item, const gchar *from_name, const gchar *from_email)
2977 {
2978 if (item->header.from)
2979 g_free (item->header.from);
2980+ if (item->header.from_email)
2981+ g_free (item->header.from_email);
2982
2983- item->header.from = g_strdup (from);
2984+ item->header.from = g_strdup (from_name);
2985+ item->header.from_email = g_strdup (from_email);
2986 }
2987
2988 static void
2989@@ -310,8 +313,21 @@
2990 return TRUE;
2991 }
2992
2993+static void
2994+mail_item_set_time (time_t *item_time, time_t camel_time, gint camel_offset)
2995+{
2996+ if (camel_time == CAMEL_MESSAGE_DATE_CURRENT) {
2997+ *item_time = 0;
2998+ } else {
2999+ /* Convert to UTC */
3000+ /*camel_time -= (camel_offset / 100) * 60 * 60;
3001+ camel_time -= (camel_offset % 100) * 60;*/
3002+ *item_time = camel_time;
3003+ }
3004+}
3005+
3006 MailItem *
3007-camel_mapi_utils_mime_to_item (CamelMimeMessage *message, CamelAddress *from, GError **error)
3008+camel_mapi_utils_mime_to_item (CamelMimeMessage *message, gint32 message_camel_flags, CamelAddress *from, GError **error)
3009 {
3010 CamelDataWrapper *dw = NULL;
3011 CamelContentType *type;
3012@@ -319,9 +335,12 @@
3013 CamelMultipart *multipart;
3014 CamelInternetAddress *to, *cc, *bcc;
3015 MailItem *item = g_new0 (MailItem, 1);
3016- const gchar *namep;
3017- const gchar *addressp;
3018+ const gchar *namep = NULL;
3019+ const gchar *addressp = NULL;
3020 const gchar *content_type;
3021+ time_t msg_time = 0;
3022+ gint msg_time_offset = 0;
3023+ GArray *headers;
3024
3025 gssize content_size;
3026 GSList *recipient_list = NULL;
3027@@ -340,7 +359,18 @@
3028 namep = NULL;
3029 }
3030
3031- mail_item_set_from (item, namep);
3032+ item->header.flags = 0;
3033+ if (message_camel_flags & CAMEL_MESSAGE_SEEN)
3034+ item->header.flags |= MSGFLAG_READ;
3035+ if (message_camel_flags & CAMEL_MESSAGE_ATTACHMENTS)
3036+ item->header.flags |= MSGFLAG_HASATTACH;
3037+
3038+ mail_item_set_from (item, namep, addressp);
3039+
3040+ msg_time = camel_mime_message_get_date (message, &msg_time_offset);
3041+ if (msg_time == CAMEL_MESSAGE_DATE_CURRENT)
3042+ msg_time = camel_mime_message_get_date_received (message, &msg_time_offset);
3043+ mail_item_set_time (&item->header.recieved_time, msg_time, msg_time_offset);
3044
3045 to = camel_mime_message_get_recipients(message, CAMEL_RECIPIENT_TYPE_TO);
3046 for (i = 0; to && camel_internet_address_get (to, i, &namep, &addressp); i++) {
3047@@ -361,6 +391,25 @@
3048 mail_item_set_subject(item, camel_mime_message_get_subject(message));
3049 }
3050
3051+ headers = camel_medium_get_headers (CAMEL_MEDIUM (message));
3052+ if (headers) {
3053+ GString *hstr = g_string_new ("");
3054+ gint i;
3055+
3056+ for (i = 0; i < headers->len; i++) {
3057+ CamelMediumHeader *h = &g_array_index (headers, CamelMediumHeader, i);
3058+
3059+ if (!h->name || !*h->name || g_ascii_strncasecmp (h->name, "X-Evolution", 11) == 0)
3060+ continue;
3061+
3062+ g_string_append_printf (hstr, "%s: %s\n", h->name, h->value ? h->value : "");
3063+ }
3064+
3065+ camel_medium_free_headers (CAMEL_MEDIUM (message), headers);
3066+
3067+ item->header.transport_headers = g_string_free (hstr, hstr->len == 0);
3068+ }
3069+
3070 /*Add message threading properties */
3071 item->header.references = g_strdup (camel_medium_get_header ((CamelMedium *) message, "References"));
3072 item->header.in_reply_to = g_strdup (camel_medium_get_header ((CamelMedium *) message, "In-Reply-To"));
3073@@ -398,7 +447,6 @@
3074 MailItem *item = (MailItem *) data;
3075 GSList *l;
3076 bool send_rich_info;
3077- uint32_t msgflag;
3078 uint32_t cpid;
3079
3080 #define set_value(hex, val) G_STMT_START { \
3081@@ -415,8 +463,26 @@
3082 send_rich_info = false;
3083 set_value (PR_SEND_RICH_INFO, &send_rich_info);
3084
3085- msgflag = MSGFLAG_UNSENT;
3086- set_value (PR_MESSAGE_FLAGS, &msgflag);
3087+ set_value (PR_MESSAGE_FLAGS, &item->header.flags);
3088+
3089+ if (item->header.from && *item->header.from)
3090+ set_value (PR_SENT_REPRESENTING_NAME_UNICODE, item->header.from);
3091+
3092+ if (item->header.from_email && *item->header.from_email) {
3093+ set_value (PR_SENT_REPRESENTING_ADDRTYPE_UNICODE, "SMTP");
3094+ set_value (PR_SENT_REPRESENTING_EMAIL_ADDRESS_UNICODE, item->header.from_email);
3095+ }
3096+
3097+ if (item->header.recieved_time != 0) {
3098+ struct FILETIME msg_date = { 0 };
3099+
3100+ exchange_mapi_util_time_t_to_filetime (item->header.recieved_time, &msg_date);
3101+
3102+ set_value (PR_MESSAGE_DELIVERY_TIME, &msg_date);
3103+ }
3104+
3105+ if (item->header.transport_headers && *item->header.transport_headers)
3106+ set_value (PR_TRANSPORT_MESSAGE_HEADERS_UNICODE, item->header.transport_headers);
3107
3108 /* Message threading information */
3109 if (item->header.references)
3110
3111=== modified file 'src/camel/camel-mapi-utils.h'
3112--- src/camel/camel-mapi-utils.h 2010-11-03 16:33:05 +0000
3113+++ src/camel/camel-mapi-utils.h 2011-01-29 12:46:35 +0000
3114@@ -31,7 +31,7 @@
3115 #include <camel/camel.h>
3116
3117 MailItem *
3118-camel_mapi_utils_mime_to_item (CamelMimeMessage *message, CamelAddress *from, GError **error);
3119+camel_mapi_utils_mime_to_item (CamelMimeMessage *message, gint32 message_camel_flags, CamelAddress *from, GError **error);
3120
3121 gboolean
3122 camel_mapi_utils_create_item_build_props (ExchangeMapiConnection *conn, mapi_id_t fid, TALLOC_CTX *mem_ctx, struct SPropValue **values, uint32_t *n_values, gpointer data);
3123
3124=== modified file 'src/libexchangemapi/exchange-mapi-cal-utils.c'
3125--- src/libexchangemapi/exchange-mapi-cal-utils.c 2010-11-03 16:33:05 +0000
3126+++ src/libexchangemapi/exchange-mapi-cal-utils.c 2011-01-29 12:46:35 +0000
3127@@ -368,9 +368,14 @@
3128 const gchar *str = NULL;
3129 icalparameter *param;
3130
3131- recipient = g_new0 (ExchangeMAPIRecipient, 1);
3132-
3133 str = icalproperty_get_attendee (att_prop);
3134+ if (!str || g_ascii_strcasecmp (str, org) == 0) {
3135+ att_prop = icalcomponent_get_next_property (icalcomp, ICAL_ATTENDEE_PROPERTY);
3136+ continue;
3137+ }
3138+
3139+ recipient = g_new0 (ExchangeMAPIRecipient, 1);
3140+
3141 if (!g_ascii_strncasecmp (str, "mailto:", 7))
3142 recipient->email_id = (str) + 7;
3143 else
3144@@ -1239,7 +1244,7 @@
3145 struct icaltimetype dtstart, dtend, utc_dtstart, utc_dtend;
3146 const icaltimezone *utc_zone;
3147 const gchar *dtstart_tz_location, *dtend_tz_location, *text = NULL;
3148- struct timeval t;
3149+ time_t tt;
3150
3151 g_return_val_if_fail (conn != NULL, FALSE);
3152 g_return_val_if_fail (mem_ctx != NULL, FALSE);
3153@@ -1275,12 +1280,8 @@
3154
3155 #define set_datetime_value(hex, dtval) G_STMT_START { \
3156 struct FILETIME filetime; \
3157- NTTIME nttime; \
3158- \
3159- nttime = timeval_to_nttime(dtval); \
3160- \
3161- filetime.dwLowDateTime = (nttime << 32) >> 32; \
3162- filetime.dwHighDateTime = nttime >> 32; \
3163+ \
3164+ exchange_mapi_util_time_t_to_filetime (dtval, &filetime); \
3165 \
3166 if (!exchange_mapi_utils_add_spropvalue (mem_ctx, values, n_values, hex, &filetime)) \
3167 return FALSE; \
3168@@ -1288,12 +1289,8 @@
3169
3170 #define set_named_datetime_value(named_id, dtval) G_STMT_START { \
3171 struct FILETIME filetime; \
3172- NTTIME nttime; \
3173- \
3174- nttime = timeval_to_nttime(dtval); \
3175- \
3176- filetime.dwLowDateTime = (nttime << 32) >> 32; \
3177- filetime.dwHighDateTime = nttime >> 32; \
3178+ \
3179+ exchange_mapi_util_time_t_to_filetime (dtval, &filetime); \
3180 \
3181 if (!exchange_mapi_utils_add_spropvalue_named_id (conn, fid, mem_ctx, values, n_values, named_id, &filetime)) \
3182 return FALSE; \
3183@@ -1393,13 +1390,11 @@
3184 }
3185 set_named_value (PidLidReminderSet, &b);
3186 set_named_value (PidLidReminderDelta, &flag32);
3187- t.tv_sec = icaltime_as_timet (utc_dtstart);
3188- t.tv_usec = 0;
3189- set_named_datetime_value (PidLidReminderTime, &t);
3190- t.tv_sec = icaltime_as_timet (utc_dtstart) - (flag32 * SECS_IN_MINUTE);
3191- t.tv_usec = 0;
3192+ tt = icaltime_as_timet (utc_dtstart);
3193+ set_named_datetime_value (PidLidReminderTime, tt);
3194+ tt = icaltime_as_timet (utc_dtstart) - (flag32 * SECS_IN_MINUTE);
3195 /* ReminderNextTime: FIXME for recurrence */
3196- set_named_datetime_value (PidLidReminderSignalTime, &t);
3197+ set_named_datetime_value (PidLidReminderSignalTime, tt);
3198
3199 /* Sensitivity, Private */
3200 flag32 = olNormal; /* default */
3201@@ -1412,15 +1407,13 @@
3202 set_value (PR_SENSITIVITY, &flag32);
3203 set_named_value (PidLidPrivate, &b);
3204
3205- t.tv_sec = icaltime_as_timet (utc_dtstart);
3206- t.tv_usec = 0;
3207- set_named_datetime_value (PidLidCommonStart, &t);
3208- set_datetime_value (PR_START_DATE, &t);
3209+ tt = icaltime_as_timet (utc_dtstart);
3210+ set_named_datetime_value (PidLidCommonStart, tt);
3211+ set_datetime_value (PR_START_DATE, tt);
3212
3213- t.tv_sec = icaltime_as_timet (utc_dtend);
3214- t.tv_usec = 0;
3215- set_named_datetime_value (PidLidCommonEnd, &t);
3216- set_datetime_value (PR_END_DATE, &t);
3217+ tt = icaltime_as_timet (utc_dtend);
3218+ set_named_datetime_value (PidLidCommonEnd, tt);
3219+ set_datetime_value (PR_END_DATE, tt);
3220
3221 b = 1;
3222 set_value (PR_RESPONSE_REQUESTED, &b);
3223@@ -1467,11 +1460,10 @@
3224 set_named_value (PidLidAutoFillLocation, &b);
3225
3226 /* Start */
3227- t.tv_sec = icaltime_as_timet (utc_dtstart);
3228- t.tv_usec = 0;
3229- set_named_datetime_value (PidLidAppointmentStartWhole, &t);
3230+ tt = icaltime_as_timet (utc_dtstart);
3231+ set_named_datetime_value (PidLidAppointmentStartWhole, tt);
3232 /* FIXME: for recurrence */
3233- set_named_datetime_value (PidLidClipStart, &t);
3234+ set_named_datetime_value (PidLidClipStart, tt);
3235
3236 /* Start TZ */
3237 mapi_tzid = exchange_mapi_cal_tz_util_get_mapi_equivalent ((dtstart_tz_location && *dtstart_tz_location) ? dtstart_tz_location : "UTC");
3238@@ -1481,11 +1473,10 @@
3239 }
3240
3241 /* End */
3242- t.tv_sec = icaltime_as_timet (utc_dtend);
3243- t.tv_usec = 0;
3244- set_named_datetime_value (PidLidAppointmentEndWhole, &t);
3245+ tt = icaltime_as_timet (utc_dtend);
3246+ set_named_datetime_value (PidLidAppointmentEndWhole, tt);
3247 /* FIXME: for recurrence */
3248- set_named_datetime_value (PidLidClipEnd, &t);
3249+ set_named_datetime_value (PidLidClipEnd, tt);
3250
3251 /* End TZ */
3252 mapi_tzid = exchange_mapi_cal_tz_util_get_mapi_equivalent ((dtend_tz_location && *dtend_tz_location) ? dtend_tz_location : "UTC");
3253@@ -1726,25 +1717,22 @@
3254 completed = icalproperty_get_completed (prop);
3255
3256 completed.hour = completed.minute = completed.second = 0; completed.is_date = completed.is_utc = 1;
3257- t.tv_sec = icaltime_as_timet (completed);
3258- t.tv_usec = 0;
3259- set_named_datetime_value (PidLidTaskDateCompleted, &t);
3260+ tt = icaltime_as_timet (completed);
3261+ set_named_datetime_value (PidLidTaskDateCompleted, tt);
3262 }
3263
3264 /* Start */
3265 dtstart.hour = dtstart.minute = dtstart.second = 0; dtstart.is_date = dtstart.is_utc = 1;
3266- t.tv_sec = icaltime_as_timet (dtstart);
3267- t.tv_usec = 0;
3268+ tt = icaltime_as_timet (dtstart);
3269 if (!icaltime_is_null_time (dtstart)) {
3270- set_named_datetime_value (PidLidTaskStartDate, &t);
3271+ set_named_datetime_value (PidLidTaskStartDate, tt);
3272 }
3273
3274 /* Due */
3275 dtend.hour = dtend.minute = dtend.second = 0; dtend.is_date = dtend.is_utc = 1;
3276- t.tv_sec = icaltime_as_timet (dtend);
3277- t.tv_usec = 0;
3278+ tt = icaltime_as_timet (dtend);
3279 if (!icaltime_is_null_time (dtend)) {
3280- set_named_datetime_value (PidLidTaskDueDate, &t);
3281+ set_named_datetime_value (PidLidTaskDueDate, tt);
3282 }
3283
3284 /* FIXME: Evolution does not support recurring tasks */
3285
3286=== modified file 'src/libexchangemapi/exchange-mapi-connection.c'
3287--- src/libexchangemapi/exchange-mapi-connection.c 2010-11-03 16:33:05 +0000
3288+++ src/libexchangemapi/exchange-mapi-connection.c 2011-01-29 12:46:35 +0000
3289@@ -28,7 +28,10 @@
3290
3291 #include <glib/gi18n-lib.h>
3292 #include <camel/camel.h>
3293+#include <libedataserver/e-account.h>
3294+#include <libedataserver/e-account-list.h>
3295 #include <libedataserver/e-data-server-util.h>
3296+#include <libedataserver/e-flag.h>
3297
3298 #include "exchange-mapi-connection.h"
3299 #include "exchange-mapi-folder.h"
3300@@ -40,6 +43,7 @@
3301
3302 static void register_connection (ExchangeMapiConnection *conn);
3303 static void unregister_connection (ExchangeMapiConnection *conn);
3304+static gboolean mapi_profile_create (const gchar *username, const gchar *password, const gchar *domain, const gchar *server, guint32 flags, mapi_profile_callback_t callback, gpointer data, GError **perror, gboolean use_locking);
3305 static struct mapi_session *mapi_profile_load (const gchar *profname, const gchar *password, GError **perror);
3306 static void ema_global_lock (void);
3307 static void ema_global_unlock (void);
3308@@ -917,6 +921,38 @@
3309 return res;
3310 }
3311
3312+static gboolean
3313+may_skip_property (uint32_t proptag)
3314+{
3315+ /* skip all "strange" properties */
3316+ gboolean skip = TRUE;
3317+
3318+ switch (proptag & 0xFFFF) {
3319+ case PT_BOOLEAN:
3320+ case PT_I2:
3321+ case PT_LONG:
3322+ case PT_DOUBLE:
3323+ case PT_I8:
3324+ case PT_STRING8:
3325+ case PT_UNICODE:
3326+ case PT_SYSTIME:
3327+ case PT_BINARY:
3328+ case PT_ERROR:
3329+ case PT_CLSID:
3330+ case PT_SVREID:
3331+ case PT_MV_STRING8:
3332+ case PT_MV_UNICODE:
3333+ case PT_MV_BINARY:
3334+ case PT_MV_LONG:
3335+ skip = FALSE;
3336+ break;
3337+ default:
3338+ break;
3339+ }
3340+
3341+ return skip;
3342+}
3343+
3344 /* Returns TRUE if all attachments were read succcesfully, else returns FALSE */
3345 static gboolean
3346 exchange_mapi_util_get_attachments (ExchangeMapiConnection *conn, mapi_id_t fid, mapi_object_t *obj_message, GSList **attach_list, GError **perror)
3347@@ -974,7 +1010,7 @@
3348 struct mapi_SPropValue_array properties;
3349 const uint32_t *ui32;
3350 mapi_object_t obj_attach;
3351- uint32_t z;
3352+ uint32_t z, az;
3353
3354 mapi_object_init(&obj_attach);
3355
3356@@ -992,33 +1028,41 @@
3357 goto loop_cleanup;
3358 }
3359
3360+ mapi_SPropValue_array_named (&obj_attach, &properties);
3361+
3362+ az = 0;
3363 attachment = g_new0 (ExchangeMAPIAttachment, 1);
3364 attachment->cValues = properties.cValues;
3365 attachment->lpProps = g_new0 (struct SPropValue, attachment->cValues + 1);
3366 for (z=0; z < properties.cValues; z++) {
3367+ if (may_skip_property (properties.lpProps[z].ulPropTag)) {
3368+ attachment->cValues--;
3369+ continue;
3370+ }
3371+
3372 cast_SPropValue (
3373 #ifdef HAVE_MEMCTX_ON_CAST_SPROPVALUE
3374 mem_ctx,
3375 #endif
3376- &properties.lpProps[z], &(attachment->lpProps[z]));
3377+ &properties.lpProps[z], &(attachment->lpProps[az]));
3378
3379- if ((attachment->lpProps[z].ulPropTag & 0xFFFF) == PT_STRING8) {
3380+ if ((attachment->lpProps[az].ulPropTag & 0xFFFF) == PT_STRING8) {
3381 struct SPropValue *lpProps;
3382 struct SPropTagArray *tags;
3383 uint32_t prop_count = 0;
3384
3385 /* prefer unicode strings, if available */
3386- tags = set_SPropTagArray (mem_ctx, 0x1, (attachment->lpProps[z].ulPropTag & 0xFFFF0000) | PT_UNICODE);
3387+ tags = set_SPropTagArray (mem_ctx, 0x1, (attachment->lpProps[az].ulPropTag & 0xFFFF0000) | PT_UNICODE);
3388 if (MAPI_E_SUCCESS == GetProps (&obj_attach, tags, &lpProps, &prop_count) && prop_count == 1 && lpProps) {
3389 if ((lpProps->ulPropTag & 0xFFFF) == PT_UNICODE)
3390- attachment->lpProps[z] = *lpProps;
3391+ attachment->lpProps[az] = *lpProps;
3392 }
3393 MAPIFreeBuffer (tags);
3394 }
3395+
3396+ az++;
3397 }
3398
3399- mapi_SPropValue_array_named (&obj_attach, &properties);
3400-
3401 /* just to get all the other streams */
3402 for (z = 0; z < properties.cValues; z++) {
3403 if ((properties.lpProps[z].ulPropTag & 0xFFFF) == PT_BINARY) {
3404@@ -1331,7 +1375,7 @@
3405 /* Modify the recipient table */
3406 ms = ModifyRecipients (obj_message, SRowSet);
3407 if (ms != MAPI_E_SUCCESS) {
3408- make_mapi_error (perror, "ModifyRecpients", ms);
3409+ make_mapi_error (perror, "ModifyRecipients", ms);
3410 goto cleanup;
3411 }
3412
3413@@ -1602,7 +1646,7 @@
3414 if (propsTagArray && propsTagArray->cValues) {
3415 struct SPropValue *lpProps;
3416 struct SPropTagArray *tags;
3417- uint32_t prop_count = 0, k;
3418+ uint32_t prop_count = 0, k, ll;
3419 /* we need to make a local copy of the tag array
3420 * since GetProps will modify the array on any
3421 * errors */
3422@@ -1618,23 +1662,26 @@
3423 properties_array.lpProps = talloc_zero_array (mem_ctx, struct mapi_SPropValue,
3424 prop_count + 1);
3425 properties_array.cValues = prop_count;
3426- for (k = 0; k < prop_count; k++) {
3427+ for (k = 0, ll = 0; k < prop_count; k++, ll++) {
3428 if ((lpProps[k].ulPropTag & 0xFFFF) == PT_MV_BINARY) {
3429 uint32_t ci;
3430
3431- properties_array.lpProps[k].ulPropTag = lpProps[k].ulPropTag;
3432- properties_array.lpProps[k].value.MVbin.cValues = lpProps[k].value.MVbin.cValues;
3433- properties_array.lpProps[k].value.MVbin.bin = (struct SBinary_short *) talloc_array (mem_ctx, struct Binary_r, properties_array.lpProps[k].value.MVbin.cValues);
3434- for (ci = 0; ci < properties_array.lpProps[k].value.MVbin.cValues; ci++) {
3435- properties_array.lpProps[k].value.MVbin.bin[ci].cb = lpProps[k].value.MVbin.lpbin[ci].cb;
3436- properties_array.lpProps[k].value.MVbin.bin[ci].lpb = lpProps[k].value.MVbin.lpbin[ci].lpb;
3437+ properties_array.lpProps[ll].ulPropTag = lpProps[k].ulPropTag;
3438+ properties_array.lpProps[ll].value.MVbin.cValues = lpProps[k].value.MVbin.cValues;
3439+ properties_array.lpProps[ll].value.MVbin.bin = (struct SBinary_short *) talloc_array (mem_ctx, struct Binary_r, properties_array.lpProps[ll].value.MVbin.cValues);
3440+ for (ci = 0; ci < properties_array.lpProps[ll].value.MVbin.cValues; ci++) {
3441+ properties_array.lpProps[ll].value.MVbin.bin[ci].cb = lpProps[k].value.MVbin.lpbin[ci].cb;
3442+ properties_array.lpProps[ll].value.MVbin.bin[ci].lpb = lpProps[k].value.MVbin.lpbin[ci].lpb;
3443 }
3444+ } else if (may_skip_property (lpProps[k].ulPropTag)) {
3445+ ll--;
3446+ properties_array.cValues--;
3447 } else {
3448 cast_mapi_SPropValue (
3449 #ifdef HAVE_MEMCTX_ON_CAST_MAPI_SPROPVALUE
3450 mem_ctx,
3451 #endif
3452- &properties_array.lpProps[k], &lpProps[k]);
3453+ &properties_array.lpProps[ll], &lpProps[k]);
3454 }
3455 }
3456 } else {
3457@@ -1765,7 +1812,7 @@
3458
3459 if (propsTagArray && propsTagArray->cValues) {
3460 struct SPropValue *lpProps;
3461- uint32_t prop_count = 0, k;
3462+ uint32_t prop_count = 0, k, ll;
3463
3464 lpProps = talloc_zero(mem_ctx, struct SPropValue);
3465
3466@@ -1776,12 +1823,18 @@
3467 /* Conversion from SPropValue to mapi_SPropValue. (no padding here) */
3468 properties_array.cValues = prop_count;
3469 properties_array.lpProps = talloc_zero_array (mem_ctx, struct mapi_SPropValue, prop_count + 1);
3470- for (k=0; k < prop_count; k++)
3471- cast_mapi_SPropValue (
3472- #ifdef HAVE_MEMCTX_ON_CAST_MAPI_SPROPVALUE
3473- mem_ctx,
3474- #endif
3475- &properties_array.lpProps[k], &lpProps[k]);
3476+ for (k = 0, ll = 0; k < prop_count; k++, ll++) {
3477+ if (may_skip_property (lpProps[k].ulPropTag)) {
3478+ ll--;
3479+ properties_array.cValues--;
3480+ } else {
3481+ cast_mapi_SPropValue (
3482+ #ifdef HAVE_MEMCTX_ON_CAST_MAPI_SPROPVALUE
3483+ mem_ctx,
3484+ #endif
3485+ &properties_array.lpProps[ll], &lpProps[k]);
3486+ }
3487+ }
3488 } else {
3489 ms = GetPropsAll (obj_message, &properties_array);
3490 if (ms != MAPI_E_SUCCESS)
3491@@ -1974,6 +2027,14 @@
3492
3493 fid = mapi_object_get_id (&obj_folder);
3494 g_debug("Folder %s created with id %016" G_GINT64_MODIFIER "X ", name, fid);
3495+
3496+ /* we should also update folder list locally */
3497+ if (fid != 0 && priv->folders != NULL) {
3498+ ExchangeMAPIFolder *folder = NULL;
3499+ folder = exchange_mapi_folder_new (name, type, MAPI_PERSONAL_FOLDER, fid, pfid, 0, 0, 0);
3500+ if (folder)
3501+ priv->folders = g_slist_append (priv->folders, folder);
3502+ }
3503
3504 cleanup:
3505 mapi_object_release(&obj_folder);
3506@@ -2041,13 +2102,16 @@
3507 CHECK_CORRECT_CONN_AND_GET_PRIV (conn, FALSE);
3508 e_return_val_mapi_error_if_fail (priv->session != NULL, MAPI_E_INVALID_PARAMETER, FALSE);
3509
3510+ g_return_val_if_fail (fid != 0, FALSE);
3511+
3512 g_debug("%s: Entering %s ", G_STRLOC, G_STRFUNC);
3513
3514 folder = NULL;
3515- for (l = exchange_mapi_connection_peek_folders_list (conn); l && !folder; l = l->next) {
3516+ for (l = exchange_mapi_connection_peek_folders_list (conn); l; l = l->next) {
3517 folder = l->data;
3518-
3519- if (!folder || !folder->folder_id || folder->folder_id != fid)
3520+ if (folder && folder->folder_id == fid)
3521+ break;
3522+ else
3523 folder = NULL;
3524 }
3525
3526@@ -3413,6 +3477,89 @@
3527
3528 /* profile related functions - begin */
3529
3530+struct tcp_data
3531+{
3532+ const gchar *profname;
3533+ const gchar *password;
3534+ EFlag *eflag;
3535+ gboolean has_profile;
3536+};
3537+
3538+static gboolean
3539+try_create_profile_main_thread_cb (struct tcp_data *data)
3540+{
3541+ EAccountList *accounts;
3542+ EIterator *iter;
3543+ GConfClient *gconf;
3544+
3545+ g_return_val_if_fail (data != NULL, FALSE);
3546+
3547+ gconf = gconf_client_get_default ();
3548+ accounts = e_account_list_new (gconf);
3549+ for (iter = e_list_get_iterator (E_LIST (accounts)); e_iterator_is_valid (iter); e_iterator_next (iter)) {
3550+ EAccount *account = E_ACCOUNT (e_iterator_get (iter));
3551+ if (account && account->source && account->source->url && g_ascii_strncasecmp (account->source->url, "mapi://", 7) == 0) {
3552+ CamelURL *url = camel_url_new (e_account_get_string (account, E_ACCOUNT_SOURCE_URL), NULL);
3553+ const gchar *domain_name;
3554+
3555+ domain_name = camel_url_get_param (url, "domain");
3556+ if (data->password && *data->password && domain_name && *domain_name && url->user && *url->user && url->host && *url->host) {
3557+ gchar *profname = exchange_mapi_util_profile_name (url->user, domain_name, url->host, FALSE);
3558+
3559+ if (profname && g_str_equal (profname, data->profname)) {
3560+ guint32 cp_flags = (camel_url_get_param (url, "ssl") && g_str_equal (camel_url_get_param (url, "ssl"), "1")) ? CREATE_PROFILE_FLAG_USE_SSL : CREATE_PROFILE_FLAG_NONE;
3561+
3562+ /* do not use locking here, because when this is called then other thread is holding the lock */
3563+ data->has_profile = mapi_profile_create (url->user, data->password, domain_name, url->host, cp_flags, NULL, NULL, NULL, FALSE);
3564+
3565+ g_free (profname);
3566+ camel_url_free (url);
3567+ break;
3568+ }
3569+
3570+ g_free (profname);
3571+ }
3572+
3573+ camel_url_free (url);
3574+ }
3575+ }
3576+
3577+ g_object_unref (accounts);
3578+ g_object_unref (gconf);
3579+
3580+ e_flag_set (data->eflag);
3581+
3582+ return FALSE;
3583+}
3584+
3585+static gboolean
3586+try_create_profile (const gchar *profname, const gchar *password)
3587+{
3588+ struct tcp_data data;
3589+
3590+ g_return_val_if_fail (profname != NULL, FALSE);
3591+ g_return_val_if_fail (*profname != 0, FALSE);
3592+ g_return_val_if_fail (password != NULL, FALSE);
3593+ g_return_val_if_fail (*password != 0, FALSE);
3594+
3595+ data.profname = profname;
3596+ data.password = password;
3597+ data.eflag = e_flag_new ();
3598+ data.has_profile = FALSE;
3599+
3600+ if (!g_main_context_is_owner (g_main_context_default ())) {
3601+ /* function called from other than main thread */
3602+ g_timeout_add (10, (GSourceFunc) try_create_profile_main_thread_cb, &data);
3603+ e_flag_wait (data.eflag);
3604+ } else {
3605+ try_create_profile_main_thread_cb (&data);
3606+ }
3607+
3608+ e_flag_free (data.eflag);
3609+
3610+ return data.has_profile;
3611+}
3612+
3613 static void
3614 mapi_debug_logger (const gchar * domain, GLogLevelFlags level, const gchar * message, gpointer data)
3615 {
3616@@ -3524,6 +3671,9 @@
3617 g_debug("Loading profile %s ", profname);
3618
3619 ms = MapiLogonEx (&session, profname, password);
3620+ if (ms == MAPI_E_NOT_FOUND && try_create_profile (profname, password))
3621+ ms = MapiLogonEx (&session, profname, password);
3622+
3623 if (ms != MAPI_E_SUCCESS) {
3624 make_mapi_error (perror, "MapiLogonEx", ms);
3625 goto cleanup;
3626@@ -3536,11 +3686,12 @@
3627 return session;
3628 }
3629
3630-gboolean
3631-exchange_mapi_create_profile (const gchar *username, const gchar *password, const gchar *domain,
3632- const gchar *server, guint32 flags,
3633- mapi_profile_callback_t callback, gpointer data,
3634- GError **perror)
3635+static gboolean
3636+mapi_profile_create (const gchar *username, const gchar *password, const gchar *domain,
3637+ const gchar *server, guint32 flags,
3638+ mapi_profile_callback_t callback, gpointer data,
3639+ GError **perror,
3640+ gboolean use_locking)
3641 {
3642 enum MAPISTATUS ms;
3643 gboolean result = FALSE;
3644@@ -3552,12 +3703,14 @@
3645 e_return_val_mapi_error_if_fail (username && *username && password && *password &&
3646 domain && *domain && server && *server, MAPI_E_INVALID_PARAMETER, FALSE);
3647
3648- g_static_rec_mutex_lock (&profile_mutex);
3649+ if (use_locking)
3650+ g_static_rec_mutex_lock (&profile_mutex);
3651
3652 g_debug ("Create profile with %s %s %s\n", username, domain, server);
3653
3654 if (!ensure_mapi_init_called (perror)) {
3655- g_static_rec_mutex_unlock (&profile_mutex);
3656+ if (use_locking)
3657+ g_static_rec_mutex_unlock (&profile_mutex);
3658 return FALSE;
3659 }
3660
3661@@ -3627,12 +3780,22 @@
3662 mapi_object_release (&msg_store);
3663 }*/
3664
3665- g_static_rec_mutex_unlock (&profile_mutex);
3666+ if (use_locking)
3667+ g_static_rec_mutex_unlock (&profile_mutex);
3668
3669 return result;
3670 }
3671
3672 gboolean
3673+exchange_mapi_create_profile (const gchar *username, const gchar *password, const gchar *domain,
3674+ const gchar *server, guint32 flags,
3675+ mapi_profile_callback_t callback, gpointer data,
3676+ GError **perror)
3677+{
3678+ return mapi_profile_create (username, password, domain, server, flags, callback, data, perror, TRUE);
3679+}
3680+
3681+gboolean
3682 exchange_mapi_delete_profile (const gchar *profile, GError **perror)
3683 {
3684 gboolean result = FALSE;
3685
3686=== modified file 'src/libexchangemapi/exchange-mapi-mail-utils.c'
3687--- src/libexchangemapi/exchange-mapi-mail-utils.c 2010-10-19 15:03:33 +0000
3688+++ src/libexchangemapi/exchange-mapi-mail-utils.c 2011-01-29 12:46:35 +0000
3689@@ -135,12 +135,7 @@
3690 }
3691
3692 if (delivery_date) {
3693- NTTIME ntdate = { 0 };
3694-
3695- ntdate = delivery_date->dwHighDateTime;
3696- ntdate = ntdate << 32;
3697- ntdate |= delivery_date->dwLowDateTime;
3698- item->header.recieved_time = nt_time_to_unix(ntdate);
3699+ item->header.recieved_time = exchange_mapi_util_filetime_to_time_t (delivery_date);
3700 }
3701
3702 if (flags && (*flags & MSGFLAG_READ) != 0)
3703@@ -304,7 +299,8 @@
3704 GSList *l = NULL;
3705 CamelInternetAddress *to_addr, *cc_addr, *bcc_addr;
3706
3707- g_return_if_fail (item->recipients != NULL);
3708+ if (!item->recipients || item->header.transport_headers)
3709+ return;
3710
3711 to_addr = camel_internet_address_new ();
3712 cc_addr = camel_internet_address_new ();
3713@@ -360,7 +356,9 @@
3714 camel_mime_message_set_recipients(msg, "Bcc", bcc_addr);
3715 }
3716
3717- /*TODO : Unref *_addr ? */
3718+ g_object_unref (to_addr);
3719+ g_object_unref (cc_addr);
3720+ g_object_unref (bcc_addr);
3721 }
3722
3723 static void
3724@@ -404,6 +402,10 @@
3725
3726 g_object_unref (parser);
3727 g_object_unref (part);
3728+ } else {
3729+ recieved_time = item->header.recieved_time;
3730+ actual_time = camel_header_decode_date (ctime(&recieved_time), &offset);
3731+ camel_mime_message_set_date (msg, actual_time, offset);
3732 }
3733
3734 /* Overwrite headers if we have specific properties available*/
3735@@ -411,11 +413,6 @@
3736 if (temp_str)
3737 camel_mime_message_set_subject (msg, temp_str);
3738
3739- recieved_time = item->header.recieved_time;
3740-
3741- actual_time = camel_header_decode_date (ctime(&recieved_time), &offset);
3742- /* camel_mime_message_set_date (msg, actual_time, offset); */
3743-
3744 if (item->header.from) {
3745 if ((item->header.from_type != NULL) && !g_utf8_collate (item->header.from_type, "EX")) {
3746 gchar *from_email;
3747
3748=== modified file 'src/libexchangemapi/exchange-mapi-utils.c'
3749--- src/libexchangemapi/exchange-mapi-utils.c 2010-10-19 15:03:33 +0000
3750+++ src/libexchangemapi/exchange-mapi-utils.c 2011-01-29 12:46:35 +0000
3751@@ -1136,3 +1136,37 @@
3752 g_free (bin->lpb);
3753 g_free (bin);
3754 }
3755+
3756+time_t
3757+exchange_mapi_util_filetime_to_time_t (const struct FILETIME *filetime)
3758+{
3759+ NTTIME nt;
3760+
3761+ if (!filetime)
3762+ return (time_t) -1;
3763+
3764+ nt = filetime->dwHighDateTime;
3765+ nt = nt << 32;
3766+ nt |= filetime->dwLowDateTime;
3767+
3768+ nt /= 10 * 1000 * 1000;
3769+ nt -= 11644473600LL;
3770+
3771+ return (time_t) nt;
3772+}
3773+
3774+void
3775+exchange_mapi_util_time_t_to_filetime (const time_t tt, struct FILETIME *filetime)
3776+{
3777+ NTTIME nt;
3778+
3779+ g_return_if_fail (filetime != NULL);
3780+
3781+ nt = tt;
3782+ nt += 11644473600LL;
3783+ nt *= 10 * 1000 * 1000;
3784+
3785+ filetime->dwLowDateTime = nt & 0xFFFFFFFF;
3786+ nt = nt >> 32;
3787+ filetime->dwHighDateTime = nt & 0xFFFFFFFF;
3788+}
3789
3790=== modified file 'src/libexchangemapi/exchange-mapi-utils.h'
3791--- src/libexchangemapi/exchange-mapi-utils.h 2010-10-19 15:03:33 +0000
3792+++ src/libexchangemapi/exchange-mapi-utils.h 2011-01-29 12:46:35 +0000
3793@@ -83,4 +83,7 @@
3794 struct Binary_r *exchange_mapi_util_copy_binary_r (const struct Binary_r *bin);
3795 void exchange_mapi_util_free_binary_r (struct Binary_r *bin);
3796
3797+time_t exchange_mapi_util_filetime_to_time_t (const struct FILETIME *filetime);
3798+void exchange_mapi_util_time_t_to_filetime (const time_t tt, struct FILETIME *filetime);
3799+
3800 #endif

Subscribers

People subscribed via source and target branches