You can subscribe to this list here.
2005 |
Jan
|
Feb
|
Mar
(56) |
Apr
(109) |
May
(15) |
Jun
(3) |
Jul
(37) |
Aug
(96) |
Sep
(40) |
Oct
(4) |
Nov
(54) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(47) |
Feb
(30) |
Mar
(102) |
Apr
(120) |
May
(68) |
Jun
(54) |
Jul
(53) |
Aug
(122) |
Sep
(190) |
Oct
(71) |
Nov
(85) |
Dec
(108) |
2007 |
Jan
(72) |
Feb
(190) |
Mar
(53) |
Apr
(101) |
May
(145) |
Jun
(148) |
Jul
(167) |
Aug
(143) |
Sep
(23) |
Oct
(198) |
Nov
(223) |
Dec
(195) |
2008 |
Jan
(100) |
Feb
(129) |
Mar
(79) |
Apr
(77) |
May
(34) |
Jun
(95) |
Jul
(112) |
Aug
(160) |
Sep
(82) |
Oct
(124) |
Nov
(199) |
Dec
(355) |
2009 |
Jan
(436) |
Feb
(89) |
Mar
(298) |
Apr
(189) |
May
(33) |
Jun
(88) |
Jul
(105) |
Aug
(44) |
Sep
(181) |
Oct
(87) |
Nov
(75) |
Dec
(1) |
2010 |
Jan
(63) |
Feb
(21) |
Mar
(3) |
Apr
(1) |
May
(1) |
Jun
(3) |
Jul
(26) |
Aug
(37) |
Sep
(26) |
Oct
(15) |
Nov
(13) |
Dec
|
From: <svn...@op...> - 2005-04-09 18:27:33
|
Author: abauer Date: 2005-04-09 20:28:58 +0200 (Sat, 09 Apr 2005) New Revision: 473 Modified: branches/experimental-kdepim/src/knotes.cpp Log: Fixed problems with knotes by using dcop command line client... Modified: branches/experimental-kdepim/src/knotes.cpp =================================================================== --- branches/experimental-kdepim/src/knotes.cpp 2005-04-09 17:31:02 UTC (rev 472) +++ branches/experimental-kdepim/src/knotes.cpp 2005-04-09 18:28:58 UTC (rev 473) @@ -51,11 +51,11 @@ return FALSE; } - if (!kn_dcop->attach()) { + /*if (!kn_dcop->attach()) { osync_context_report_error(ctx, OSYNC_ERROR_INITIALIZATION, "Unable to attach dcop for knotes"); osync_trace(TRACE_EXIT_ERROR, "%s: Unable to attach dcop for knotes", __func__); return FALSE; - } + }*/ QString appId = kn_dcop->registerAs("opensync"); @@ -223,8 +223,7 @@ QString summary = QString(osxml_find_node(root, "Summary")); QString body = osxml_find_node(root, "Body"); - QString hash, uid; - // end of the ugly-format parsing + QString hash; switch (type) { case CHANGE_ADDED: printf("addding new \"%s\" and \"%s\"\n", (const char*)summary.local8Bit(), (const char*)body.local8Bit()); @@ -265,13 +264,16 @@ return false; } } else { + system("dcop knotes KNotesIface hideAllNotes"); + QString asdasd = "dcop knotes KNotesIface killNote " + uid + " true"; + system((const char*)asdasd.local8Bit()); osync_debug("knotes", 4, "Deleting note %s", (const char*)uid.local8Bit()); - kn_iface->killNote(uid, true); + /*kn_iface->killNote(uid, true); if (kn_iface->status() != DCOPStub::CallSucceeded) { osync_context_report_error(ctx, OSYNC_ERROR_GENERIC, "Unable to delete note"); osync_trace(TRACE_EXIT_ERROR, "%s: Unable to delete note", __func__); return false; - } + }*/ } osync_context_report_success(ctx); |
From: <svn...@op...> - 2005-04-09 17:29:37
|
Author: abauer Date: 2005-04-09 19:31:02 +0200 (Sat, 09 Apr 2005) New Revision: 472 Modified: branches/experimental-kdepim/configure.in Log: tagged version 0.16 Modified: branches/experimental-kdepim/configure.in =================================================================== --- branches/experimental-kdepim/configure.in 2005-04-09 17:28:50 UTC (rev 471) +++ branches/experimental-kdepim/configure.in 2005-04-09 17:31:02 UTC (rev 472) @@ -1,7 +1,7 @@ dnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.58) -AC_INIT([OpenSync Kdepim Plugin], 0.15, [], [libopensync-plugin-kdepim]) +AC_INIT([OpenSync Kdepim Plugin], 0.16, [], [libopensync-plugin-kdepim]) AM_INIT_AUTOMAKE(foreign) AC_CONFIG_SRCDIR(src/kdepim_sync.cpp) AC_CONFIG_HEADER(config.h) |
From: <svn...@op...> - 2005-04-09 17:27:23
|
Author: abauer Date: 2005-04-09 19:28:50 +0200 (Sat, 09 Apr 2005) New Revision: 471 Modified: branches/experimental-kdepim/src/kdepim_impl.cpp branches/experimental-kdepim/tests/Makefile.am Log: Made kdepim work with several initializations. (Dont blame me for this code. This was suggested by the kde devs) Modified: branches/experimental-kdepim/src/kdepim_impl.cpp =================================================================== --- branches/experimental-kdepim/src/kdepim_impl.cpp 2005-04-09 16:16:35 UTC (rev 470) +++ branches/experimental-kdepim/src/kdepim_impl.cpp 2005-04-09 17:28:50 UTC (rev 471) @@ -44,6 +44,7 @@ #include "kaddrbook.h" #include "kcal.h" #include "knotes.h" +static bool sentinal = false; class KdePluginImplementation: public KdePluginImplementationBase { @@ -57,31 +58,42 @@ KApplication *application; + public: KdePluginImplementation(OSyncMember *memb) :member(memb) { } + void initKDE() { + if (sentinal) { + return; + } + + KAboutData aboutData( + "libopensync-kdepim-plugin", // internal program name + "OpenSync-KDE-plugin", // displayable program name. + "0.1", // version string + "OpenSync KDEPIM plugin", // short porgram description + KAboutData::License_GPL, // license type + "(c) 2005, Eduardo Pereira Habkost", // copyright statement + 0, // any free form text + "http://www.opensync.org", // program home page address + "http://www.opensync.org/newticket" // bug report email address + ); + + KCmdLineArgs::init(&aboutData); + application = new KApplication(); + + sentinal = true; + } + bool init(OSyncError **error) { osync_trace(TRACE_ENTRY, "%s(%p)", __func__, error); - KAboutData aboutData( - "libopensync-kdepim-plugin", // internal program name - "OpenSync-KDE-plugin", // displayable program name. - "0.1", // version string - "OpenSync KDEPIM plugin", // short porgram description - KAboutData::License_GPL, // license type - "(c) 2005, Eduardo Pereira Habkost", // copyright statement - 0, // any free form text - "http://www.opensync.org", // program home page address - "http://www.opensync.org/newticket" // bug report email address - ); + initKDE(); - KCmdLineArgs::init(&aboutData); - application = new KApplication(); - hashtable = osync_hashtable_new(); kcal = new KCalDataSource(member, hashtable); @@ -104,10 +116,10 @@ knotes = NULL; } - if (application) { + /*if (application) { delete application; application = NULL; - } + }*/ if (hashtable) osync_hashtable_free(hashtable); Modified: branches/experimental-kdepim/tests/Makefile.am =================================================================== --- branches/experimental-kdepim/tests/Makefile.am 2005-04-09 16:16:35 UTC (rev 470) +++ branches/experimental-kdepim/tests/Makefile.am 2005-04-09 17:28:50 UTC (rev 471) @@ -2,4 +2,4 @@ EXTRA_DIST = check_contact check_event check_todo check_note -TESTS = check_contact check_event check_todo +TESTS = check_contact check_event check_todo check_note |
From: <svn...@op...> - 2005-04-09 16:15:08
|
Author: abauer Date: 2005-04-09 18:16:35 +0200 (Sat, 09 Apr 2005) New Revision: 470 Modified: plugins/evolution2/configure.in plugins/evolution2/tests/Makefile.am plugins/evolution2/tests/check_contact plugins/evolution2/tests/check_event plugins/evolution2/tests/check_todo Log: Tagged version 0.16 Made evo2 tests work correctly with make distcheck Modified: plugins/evolution2/configure.in =================================================================== --- plugins/evolution2/configure.in 2005-04-09 15:24:49 UTC (rev 469) +++ plugins/evolution2/configure.in 2005-04-09 16:16:35 UTC (rev 470) @@ -1,7 +1,7 @@ dnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.58) -AC_INIT([OpenSync Evolution 2 Plugin], 0.15, [], [libopensync-plugin-evolution2]) +AC_INIT([OpenSync Evolution 2 Plugin], 0.16, [], [libopensync-plugin-evolution2]) AM_INIT_AUTOMAKE(foreign) AC_CONFIG_SRCDIR(src/evolution2_sync.c) AC_CONFIG_HEADER(config.h) Modified: plugins/evolution2/tests/Makefile.am =================================================================== --- plugins/evolution2/tests/Makefile.am 2005-04-09 15:24:49 UTC (rev 469) +++ plugins/evolution2/tests/Makefile.am 2005-04-09 16:16:35 UTC (rev 470) @@ -1,5 +1,5 @@ ## Process this file with automake to produce Makefile.in -EXTRA_DIST = check_contact check_event check_todo +EXTRA_DIST = check_contact check_event check_todo evo2-def.conf TESTS = check_contact check_event check_todo Modified: plugins/evolution2/tests/check_contact =================================================================== --- plugins/evolution2/tests/check_contact 2005-04-09 15:24:49 UTC (rev 469) +++ plugins/evolution2/tests/check_contact 2005-04-09 16:16:35 UTC (rev 470) @@ -7,6 +7,10 @@ then exit 1 fi -osyncplugin evo2-sync --config evo2-def.conf --type contact || exit 1 -# osyncplugin evo2-sync --type contact || exit 1 \ No newline at end of file +TMPFILE=`mktemp /tmp/evo2-sync.XXXXXX` || exit 1 +echo "<config><adress_path>default</adress_path><calendar_path>default</calendar_path><tasks_path>default</tasks_path></config>" > $TMPFILE + +osyncplugin evo2-sync --config $TMPFILE --type contact --plugindir ../src/.libs || exit 1 + +rm -f $TMPFILE Modified: plugins/evolution2/tests/check_event =================================================================== --- plugins/evolution2/tests/check_event 2005-04-09 15:24:49 UTC (rev 469) +++ plugins/evolution2/tests/check_event 2005-04-09 16:16:35 UTC (rev 470) @@ -8,6 +8,10 @@ exit 1 fi -osyncplugin evo2-sync --config evo2-def.conf --type event || exit 1 +TMPFILE=`mktemp /tmp/evo2-sync.XXXXXX` || exit 1 +echo "<config><adress_path>default</adress_path><calendar_path>default</calendar_path><tasks_path>default</tasks_path></config>" > $TMPFILE -osyncplugin evo2-sync --type event || exit 1 \ No newline at end of file +osyncplugin evo2-sync --config $TMPFILE --type event --plugindir ../src/.libs || exit 1 + +rm -f $TMPFILE + Modified: plugins/evolution2/tests/check_todo =================================================================== --- plugins/evolution2/tests/check_todo 2005-04-09 15:24:49 UTC (rev 469) +++ plugins/evolution2/tests/check_todo 2005-04-09 16:16:35 UTC (rev 470) @@ -8,6 +8,10 @@ exit 1 fi -osyncplugin evo2-sync --config evo2-def.conf --type todo || exit 1 +TMPFILE=`mktemp /tmp/evo2-sync.XXXXXX` || exit 1 +echo "<config><adress_path>default</adress_path><calendar_path>default</calendar_path><tasks_path>default</tasks_path></config>" > $TMPFILE -osyncplugin evo2-sync --type todo || exit 1 \ No newline at end of file +osyncplugin evo2-sync --config $TMPFILE --type todo --plugindir ../src/.libs || exit 1 + +rm -f $TMPFILE + |
From: <svn...@op...> - 2005-04-09 15:23:27
|
Author: abauer Date: 2005-04-09 17:24:49 +0200 (Sat, 09 Apr 2005) New Revision: 469 Added: plugins/evolution2/tests/ plugins/evolution2/tests/Makefile.am plugins/evolution2/tests/check_contact plugins/evolution2/tests/check_event plugins/evolution2/tests/check_todo plugins/evolution2/tests/evo2-def.conf Modified: plugins/evolution2/ plugins/evolution2/Makefile.am plugins/evolution2/configure.in plugins/evolution2/misc/ plugins/evolution2/src/evo2-sync plugins/evolution2/src/evolution2_ebook.c plugins/evolution2/src/evolution2_ecal.c plugins/evolution2/src/evolution2_etodo.c plugins/evolution2/src/evolution2_sync.c Log: Added unit test support for the evo2 plugin Fixed some smaller bugs Added support for "default" setting that will sync the "Personal" sources of evo2. Now it is possible to not configure the evo2 plugin at all Property changes on: plugins/evolution2 ___________________________________________________________________ Name: svn:ignore - config.status stamp-h1 config.h libtool Makefile configure Makefile.in config.log autom4te.cache config.cache aclocal.m4 mkinstalldirs depcomp config.guess config.sub ltmain.sh missing install-sh libopensync-plugin-evolution2* + config.status stamp-h1 config.h libtool Makefile configure Makefile.in config.log autom4te.cache config.cache aclocal.m4 mkinstalldirs depcomp config.guess config.sub ltmain.sh missing install-sh libopensync-plugin-evolution2* .project .cdtproject Modified: plugins/evolution2/Makefile.am =================================================================== --- plugins/evolution2/Makefile.am 2005-04-09 11:18:14 UTC (rev 468) +++ plugins/evolution2/Makefile.am 2005-04-09 15:24:49 UTC (rev 469) @@ -1,6 +1,6 @@ ## Process this file with automake to produce Makefile.in -SUBDIRS = src +SUBDIRS = src tests EXTRA_DIST = \ autogen.sh \ Modified: plugins/evolution2/configure.in =================================================================== --- plugins/evolution2/configure.in 2005-04-09 11:18:14 UTC (rev 468) +++ plugins/evolution2/configure.in 2005-04-09 15:24:49 UTC (rev 469) @@ -50,4 +50,5 @@ Makefile src/Makefile misc/evolution2.spec +tests/Makefile ]) Property changes on: plugins/evolution2/misc ___________________________________________________________________ Name: svn:ignore + evolution2.spec Modified: plugins/evolution2/src/evo2-sync =================================================================== --- plugins/evolution2/src/evo2-sync 2005-04-09 11:18:14 UTC (rev 468) +++ plugins/evolution2/src/evo2-sync 2005-04-09 15:24:49 UTC (rev 469) @@ -1 +1 @@ -<config><adress_path></adress_path><calendar_path></calendar_path><tasks_path></tasks_path></config> +<config><adress_path>default</adress_path><calendar_path>default</calendar_path><tasks_path>default</tasks_path></config> Modified: plugins/evolution2/src/evolution2_ebook.c =================================================================== --- plugins/evolution2/src/evolution2_ebook.c 2005-04-09 11:18:14 UTC (rev 468) +++ plugins/evolution2/src/evolution2_ebook.c 2005-04-09 15:24:49 UTC (rev 469) @@ -33,26 +33,35 @@ return FALSE; } - if (!e_book_get_addressbooks(&sources, NULL)) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "Error getting addressbooks: %s", gerror ? gerror->message : "None"); - osync_trace(TRACE_EXIT_ERROR, "EVO2-SYNC: %s: %s", __func__, osync_error_print(error)); - g_clear_error(&gerror); - return FALSE; + if (strcmp(env->addressbook_path, "default")) { + if (!e_book_get_addressbooks(&sources, NULL)) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Error getting addressbooks: %s", gerror ? gerror->message : "None"); + osync_trace(TRACE_EXIT_ERROR, "EVO2-SYNC: %s: %s", __func__, osync_error_print(error)); + g_clear_error(&gerror); + return FALSE; + } + + if (!(source = evo2_find_source(sources, env->addressbook_path))) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Error finding source \"%s\"", env->addressbook_path); + osync_trace(TRACE_EXIT_ERROR, "EVO2-SYNC: %s: %s", __func__, osync_error_print(error)); + return FALSE; + } + + if (!(env->addressbook = e_book_new(source, &gerror))) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Failed to alloc new addressbook: %s", gerror ? gerror->message : "None"); + osync_trace(TRACE_EXIT_ERROR, "EVO2-SYNC: %s: %s", __func__, osync_error_print(error)); + g_clear_error(&gerror); + return FALSE; + } + } else { + if (!(env->addressbook = e_book_new_default_addressbook(&gerror))) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Failed to alloc new default addressbook: %s", gerror ? gerror->message : "None"); + osync_trace(TRACE_EXIT_ERROR, "EVO2-SYNC: %s: %s", __func__, osync_error_print(error)); + g_clear_error(&gerror); + return FALSE; + } } - if (!(source = evo2_find_source(sources, env->addressbook_path))) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "Error finding source \"%s\"", env->addressbook_path); - osync_trace(TRACE_EXIT_ERROR, "EVO2-SYNC: %s: %s", __func__, osync_error_print(error)); - return FALSE; - } - - if(!(env->addressbook = e_book_new(source, &gerror))) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "Failed to alloc new addressbook: %s", gerror ? gerror->message : "None"); - osync_trace(TRACE_EXIT_ERROR, "EVO2-SYNC: %s: %s", __func__, osync_error_print(error)); - g_clear_error(&gerror); - return FALSE; - } - if (!e_book_open(env->addressbook, TRUE, &gerror)) { osync_error_set(error, OSYNC_ERROR_GENERIC, "Failed to alloc new addressbook: %s", gerror ? gerror->message : "None"); g_clear_error(&gerror); Modified: plugins/evolution2/src/evolution2_ecal.c =================================================================== --- plugins/evolution2/src/evolution2_ecal.c 2005-04-09 11:18:14 UTC (rev 468) +++ plugins/evolution2/src/evolution2_ecal.c 2005-04-09 15:24:49 UTC (rev 469) @@ -27,36 +27,47 @@ ESource *source = NULL; GError *gerror = NULL; - if (!e_cal_get_sources(&sources, E_CAL_SOURCE_TYPE_EVENT, &gerror)) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to get sources for calendar: %s", gerror ? gerror->message : "None"); - osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); - g_clear_error(&gerror); - return FALSE; - } - source = evo2_find_source(sources, env->calendar_path); - if (!source) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to find source for calendar"); - osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); - return FALSE; + if (strcmp(env->calendar_path, "default")) { + if (!e_cal_get_sources(&sources, E_CAL_SOURCE_TYPE_EVENT, &gerror)) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to get sources for calendar: %s", gerror ? gerror->message : "None"); + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + g_clear_error(&gerror); + return FALSE; + } + + source = evo2_find_source(sources, env->calendar_path); + if (!source) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to find source for calendar"); + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + return FALSE; + } + + env->calendar = e_cal_new(source, E_CAL_SOURCE_TYPE_EVENT); + if(!env->calendar) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Failed to create new calendar"); + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + return FALSE; + } + + if(!e_cal_open(env->calendar, FALSE, &gerror)) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Failed to open calendar: %s", gerror ? gerror->message : "None"); + g_object_unref(env->calendar); + env->calendar = NULL; + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + g_clear_error(&gerror); + return FALSE; + } + } else { + if (!e_cal_open_default (&env->calendar, E_CAL_SOURCE_TYPE_EVENT, NULL, NULL, &gerror)) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Failed to open default calendar: %s", gerror ? gerror->message : "None"); + env->calendar = NULL; + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + g_clear_error(&gerror); + return FALSE; + } } - env->calendar = e_cal_new(source, E_CAL_SOURCE_TYPE_EVENT); - if(!env->calendar) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "Failed to create new calendar"); - osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); - return FALSE; - } - - if(!e_cal_open(env->calendar, FALSE, &gerror)) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "Failed to open calendar: %s", gerror ? gerror->message : "None"); - g_object_unref(env->calendar); - env->calendar = NULL; - osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); - g_clear_error(&gerror); - return FALSE; - } - if (!osync_anchor_compare(env->member, "event", env->calendar_path)) osync_member_set_slow_sync(env->member, "event", TRUE); Modified: plugins/evolution2/src/evolution2_etodo.c =================================================================== --- plugins/evolution2/src/evolution2_etodo.c 2005-04-09 11:18:14 UTC (rev 468) +++ plugins/evolution2/src/evolution2_etodo.c 2005-04-09 15:24:49 UTC (rev 469) @@ -27,36 +27,46 @@ ESource *source = NULL; GError *gerror = NULL; - if (!e_cal_get_sources(&sources, E_CAL_SOURCE_TYPE_TODO, &gerror)) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to get sources for tasks: %s", gerror ? gerror->message : "None"); - osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); - g_clear_error(&gerror); - return FALSE; + if (strcmp(env->tasks_path, "default")) { + if (!e_cal_get_sources(&sources, E_CAL_SOURCE_TYPE_TODO, &gerror)) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to get sources for tasks: %s", gerror ? gerror->message : "None"); + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + g_clear_error(&gerror); + return FALSE; + } + + source = evo2_find_source(sources, env->tasks_path); + if (!source) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to find source for tasks"); + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + return FALSE; + } + + env->tasks = e_cal_new(source, E_CAL_SOURCE_TYPE_TODO); + if(!env->tasks) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Failed to create new tasks"); + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + return FALSE; + } + + if(!e_cal_open(env->tasks, FALSE, &gerror)) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Failed to open tasks: %s", gerror ? gerror->message : "None"); + g_object_unref(env->tasks); + env->tasks = NULL; + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + g_clear_error(&gerror); + return FALSE; + } + } else { + if (!e_cal_open_default (&env->tasks, E_CAL_SOURCE_TYPE_TODO, NULL, NULL, &gerror)) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Failed to open default tasks: %s", gerror ? gerror->message : "None"); + env->calendar = NULL; + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + g_clear_error(&gerror); + return FALSE; + } } - source = evo2_find_source(sources, env->tasks_path); - if (!source) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to find source for tasks"); - osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); - return FALSE; - } - - env->tasks = e_cal_new(source, E_CAL_SOURCE_TYPE_TODO); - if(!env->tasks) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "Failed to create new tasks"); - osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); - return FALSE; - } - - if(!e_cal_open(env->tasks, FALSE, &gerror)) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "Failed to open tasks: %s", gerror ? gerror->message : "None"); - g_object_unref(env->tasks); - env->tasks = NULL; - osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); - g_clear_error(&gerror); - return FALSE; - } - if (!osync_anchor_compare(env->member, "todo", env->tasks_path)) osync_member_set_slow_sync(env->member, "todo", TRUE); Modified: plugins/evolution2/src/evolution2_sync.c =================================================================== --- plugins/evolution2/src/evolution2_sync.c 2005-04-09 11:18:14 UTC (rev 468) +++ plugins/evolution2/src/evolution2_sync.c 2005-04-09 15:24:49 UTC (rev 469) @@ -25,6 +25,7 @@ GList *paths = NULL; ESourceList *sources = NULL; ESource *source = NULL; + osync_bool first = FALSE; if (!e_cal_get_sources(&sources, E_CAL_SOURCE_TYPE_EVENT, NULL)) { osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to list calendars. Unable to get sources"); @@ -38,7 +39,12 @@ for (s = e_source_group_peek_sources (group); s; s = s->next) { source = E_SOURCE (s->data); evo2_location *path = g_malloc0(sizeof(evo2_location)); - path->uri = g_strdup(e_source_get_uri(source)); + if (!first) { + first = TRUE; + path->uri = g_strdup("default"); + } else { + path->uri = g_strdup(e_source_get_uri(source)); + } path->name = g_strdup(e_source_peek_name(source)); paths = g_list_append(paths, path); } @@ -51,6 +57,7 @@ GList *paths = NULL; ESourceList *sources = NULL; ESource *source = NULL; + osync_bool first = FALSE; if (!e_cal_get_sources(&sources, E_CAL_SOURCE_TYPE_TODO, NULL)) { osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to list tasks. Unable to get sources"); @@ -64,7 +71,12 @@ for (s = e_source_group_peek_sources (group); s; s = s->next) { source = E_SOURCE (s->data); evo2_location *path = g_malloc0(sizeof(evo2_location)); - path->uri = g_strdup(e_source_get_uri(source)); + if (!first) { + first = TRUE; + path->uri = g_strdup("default"); + } else { + path->uri = g_strdup(e_source_get_uri(source)); + } path->name = g_strdup(e_source_peek_name(source)); paths = g_list_append(paths, path); } @@ -77,7 +89,7 @@ GList *paths = NULL; ESourceList *sources = NULL; ESource *source = NULL; - + osync_bool first = FALSE; if (!e_book_get_addressbooks(&sources, NULL)) { osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to list addressbooks. Unable to get sources"); return NULL; @@ -90,7 +102,12 @@ for (s = e_source_group_peek_sources (group); s; s = s->next) { source = E_SOURCE (s->data); evo2_location *path = g_malloc0(sizeof(evo2_location)); - path->uri = g_strdup(e_source_get_uri(source)); + if (!first) { + first = TRUE; + path->uri = g_strdup("default"); + } else { + path->uri = g_strdup(e_source_get_uri(source)); + } path->name = g_strdup(e_source_peek_name(source)); paths = g_list_append(paths, path); } @@ -108,22 +125,19 @@ evo_environment *env = g_malloc0(sizeof(evo_environment)); - if (!osync_member_get_config(member, &configdata, &configsize, error)) + if (!osync_member_get_config_or_default(member, &configdata, &configsize, error)) goto error_free; if (!evo2_parse_settings(env, configdata, configsize)) { osync_error_set(error, OSYNC_ERROR_MISCONFIGURATION, "Unable to parse plugin configuration for evo2 plugin"); - goto error_free_data; + goto error_free; } env->member = member; OSyncGroup *group = osync_member_get_group(member); env->change_id = g_strdup(osync_group_get_name(group)); - g_free(configdata); osync_trace(TRACE_EXIT, "EVO2-SYNC %s: %p", __func__, env); return (void *)env; - error_free_data: - g_free(configdata); error_free: g_free(env); osync_trace(TRACE_EXIT_ERROR, "EVO2-SYNC %s: %s", __func__, osync_error_print(error)); @@ -289,6 +303,7 @@ info->name = "evo2-sync"; info->version = 1; info->is_threadsafe = TRUE; + info->config_type = OPTIONAL_CONFIGURATION; info->functions.initialize = evo2_initialize; info->functions.connect = evo2_connect; Property changes on: plugins/evolution2/tests ___________________________________________________________________ Name: svn:ignore + Makefile Makefile.in Added: plugins/evolution2/tests/Makefile.am =================================================================== --- plugins/evolution2/tests/Makefile.am 2005-04-09 11:18:14 UTC (rev 468) +++ plugins/evolution2/tests/Makefile.am 2005-04-09 15:24:49 UTC (rev 469) @@ -0,0 +1,5 @@ +## Process this file with automake to produce Makefile.in + +EXTRA_DIST = check_contact check_event check_todo + +TESTS = check_contact check_event check_todo Property changes on: plugins/evolution2/tests/Makefile.am ___________________________________________________________________ Name: svn:executable + * Added: plugins/evolution2/tests/check_contact =================================================================== --- plugins/evolution2/tests/check_contact 2005-04-09 11:18:14 UTC (rev 468) +++ plugins/evolution2/tests/check_contact 2005-04-09 15:24:49 UTC (rev 469) @@ -0,0 +1,12 @@ +#!/bin/bash + +echo "This unit test will empty all contacts from evolution2. Do you want to continue?" +echo "[y/N]" +read -n 1 reply +if [ "$reply" != "y" ] +then + exit 1 +fi +osyncplugin evo2-sync --config evo2-def.conf --type contact || exit 1 + +# osyncplugin evo2-sync --type contact || exit 1 \ No newline at end of file Property changes on: plugins/evolution2/tests/check_contact ___________________________________________________________________ Name: svn:executable + * Added: plugins/evolution2/tests/check_event =================================================================== --- plugins/evolution2/tests/check_event 2005-04-09 11:18:14 UTC (rev 468) +++ plugins/evolution2/tests/check_event 2005-04-09 15:24:49 UTC (rev 469) @@ -0,0 +1,13 @@ +#!/bin/bash + +echo "This unit test will empty all events from evolution2. Do you want to continue?" +echo "[y/N]" +read -n 1 reply +if [ "$reply" != "y" ] +then + exit 1 +fi + +osyncplugin evo2-sync --config evo2-def.conf --type event || exit 1 + +osyncplugin evo2-sync --type event || exit 1 \ No newline at end of file Property changes on: plugins/evolution2/tests/check_event ___________________________________________________________________ Name: svn:executable + * Added: plugins/evolution2/tests/check_todo =================================================================== --- plugins/evolution2/tests/check_todo 2005-04-09 11:18:14 UTC (rev 468) +++ plugins/evolution2/tests/check_todo 2005-04-09 15:24:49 UTC (rev 469) @@ -0,0 +1,13 @@ +#!/bin/bash + +echo "This unit test will empty all tasks from evolution2. Do you want to continue?" +echo "[y/N]" +read -n 1 reply +if [ "$reply" != "y" ] +then + exit 1 +fi + +osyncplugin evo2-sync --config evo2-def.conf --type todo || exit 1 + +osyncplugin evo2-sync --type todo || exit 1 \ No newline at end of file Property changes on: plugins/evolution2/tests/check_todo ___________________________________________________________________ Name: svn:executable + * Added: plugins/evolution2/tests/evo2-def.conf =================================================================== --- plugins/evolution2/tests/evo2-def.conf 2005-04-09 11:18:14 UTC (rev 468) +++ plugins/evolution2/tests/evo2-def.conf 2005-04-09 15:24:49 UTC (rev 469) @@ -0,0 +1 @@ +<config><adress_path>default</adress_path><calendar_path>default</calendar_path><tasks_path>default</tasks_path></config> |
From: <svn...@op...> - 2005-04-09 11:16:52
|
Author: drzeus Date: 2005-04-09 13:18:14 +0200 (Sat, 09 Apr 2005) New Revision: 468 Added: plugins/file-sync/misc/ plugins/file-sync/misc/file-sync.spec.in Modified: plugins/file-sync/Makefile.am plugins/file-sync/configure.in Log: RPM support Modified: plugins/file-sync/Makefile.am =================================================================== --- plugins/file-sync/Makefile.am 2005-04-08 23:15:49 UTC (rev 467) +++ plugins/file-sync/Makefile.am 2005-04-09 11:18:14 UTC (rev 468) @@ -3,4 +3,6 @@ SUBDIRS = src EXTRA_DIST = \ - autogen.sh + autogen.sh \ + misc/file-sync.spec \ + misc/file-sync.spec.in Modified: plugins/file-sync/configure.in =================================================================== --- plugins/file-sync/configure.in 2005-04-08 23:15:49 UTC (rev 467) +++ plugins/file-sync/configure.in 2005-04-09 11:18:14 UTC (rev 468) @@ -47,6 +47,7 @@ AC_OUTPUT([ Makefile src/Makefile +misc/file-sync.spec ]) echo "================================" Property changes on: plugins/file-sync/misc ___________________________________________________________________ Name: svn:ignore + file-sync.spec Added: plugins/file-sync/misc/file-sync.spec.in =================================================================== --- plugins/file-sync/misc/file-sync.spec.in 2005-04-08 23:15:49 UTC (rev 467) +++ plugins/file-sync/misc/file-sync.spec.in 2005-04-09 11:18:14 UTC (rev 468) @@ -0,0 +1,40 @@ +Summary: File sync. plugin for OpenSync +Name: @PACKAGE@ +Version: @VERSION@ +Release: 1 +License: GPL +Group: Development/Libraries +Source: %{name}-%{version}.tar.gz +BuildRoot: %{_tmppath}/%{name}-%{version} +Requires: glib2 libopensync gamin +BuildRequires: glib2-devel libopensync-devel gamin-devel + +%description +This plugin allows applications using OpenSync to synchronise to and from +files stored on disk. + +%prep +%setup -q + +%build +%configure +make + +%install +rm -rf %{buildroot} +make install DESTDIR=%{buildroot} +rm -f %{buildroot}%{_libdir}/opensync/plugins/*.la +rm -f %{buildroot}%{_libdir}/opensync/formats/*.la + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root) +%{_libdir}/opensync/plugins/file_sync.so +%{_libdir}/opensync/formats/file.so +%{_datadir}/opensync/defaults/file-sync + +%changelog +* Fri Apr 8 2005 Pierre Ossman <dr...@dr...> 0.15-1 +- Initial package |
From: <svn...@op...> - 2005-04-08 23:14:28
|
Author: abauer Date: 2005-04-09 01:15:49 +0200 (Sat, 09 Apr 2005) New Revision: 467 Modified: branches/experimental-kdepim/src/kdepim_impl.cpp branches/experimental-kdepim/tests/ branches/experimental-kdepim/tests/check_contact branches/experimental-kdepim/tests/check_event branches/experimental-kdepim/tests/check_todo Log: Enable KDE_DEBUG before running the test so we dont get the KDE segfault handler Modified: branches/experimental-kdepim/src/kdepim_impl.cpp =================================================================== --- branches/experimental-kdepim/src/kdepim_impl.cpp 2005-04-08 23:12:05 UTC (rev 466) +++ branches/experimental-kdepim/src/kdepim_impl.cpp 2005-04-08 23:15:49 UTC (rev 467) @@ -81,7 +81,7 @@ KCmdLineArgs::init(&aboutData); application = new KApplication(); - + hashtable = osync_hashtable_new(); kcal = new KCalDataSource(member, hashtable); Property changes on: branches/experimental-kdepim/tests ___________________________________________________________________ Name: svn:ignore + Makefile Makefile.in Modified: branches/experimental-kdepim/tests/check_contact =================================================================== --- branches/experimental-kdepim/tests/check_contact 2005-04-08 23:12:05 UTC (rev 466) +++ branches/experimental-kdepim/tests/check_contact 2005-04-08 23:15:49 UTC (rev 467) @@ -7,4 +7,5 @@ then exit 1 fi +export KDE_DEBUG=true osyncplugin kdepim --type contact || exit 1 Modified: branches/experimental-kdepim/tests/check_event =================================================================== --- branches/experimental-kdepim/tests/check_event 2005-04-08 23:12:05 UTC (rev 466) +++ branches/experimental-kdepim/tests/check_event 2005-04-08 23:15:49 UTC (rev 467) @@ -8,4 +8,5 @@ exit 1 fi +export KDE_DEBUG=true osyncplugin kdepim --type event || exit 1 Modified: branches/experimental-kdepim/tests/check_todo =================================================================== --- branches/experimental-kdepim/tests/check_todo 2005-04-08 23:12:05 UTC (rev 466) +++ branches/experimental-kdepim/tests/check_todo 2005-04-08 23:15:49 UTC (rev 467) @@ -7,4 +7,5 @@ then exit 1 fi +export KDE_DEBUG=true osyncplugin kdepim --type todo || exit 1 |
From: <svn...@op...> - 2005-04-08 23:10:40
|
Author: abauer Date: 2005-04-09 01:12:05 +0200 (Sat, 09 Apr 2005) New Revision: 466 Modified: trunk/tools/osyncplugin.c Log: Added a unit test for initializing and finalizing a plugin several times Modified: trunk/tools/osyncplugin.c =================================================================== --- trunk/tools/osyncplugin.c 2005-04-08 22:37:55 UTC (rev 465) +++ trunk/tools/osyncplugin.c 2005-04-08 23:12:05 UTC (rev 466) @@ -119,6 +119,43 @@ return; } +static void multi_init(OSyncMember *member, const char *objtype) +{ + printf("initializing multiple times\n"); + connect(member); + disconnect(member); + + osync_member_finalize(member); + + OSyncError *error = NULL; + if (!osync_member_initialize(member, &error)) { + osync_trace(TRACE_EXIT_ERROR, "unable to initialize: %s", osync_error_print(&error)); + printf("Unable to initialize\n"); + exit(1); + } + + if (objtype) { + osync_member_set_objtype_enabled(member, "data", FALSE); + osync_member_set_objtype_enabled(member, objtype, TRUE); + } + + connect(member); + disconnect(member); + + osync_member_finalize(member); + + if (!osync_member_initialize(member, &error)) { + osync_trace(TRACE_EXIT_ERROR, "unable to initialize: %s", osync_error_print(&error)); + printf("Unable to initialize\n"); + exit(1); + } + + if (objtype) { + osync_member_set_objtype_enabled(member, "data", FALSE); + osync_member_set_objtype_enabled(member, objtype, TRUE); + } +} + static void add_test1(OSyncMember *member, const char *objtype) { connect(member); @@ -300,6 +337,7 @@ register_test("add_test1", add_test1); register_test("add_test2", add_test2); register_test("modify_test1", modify_test1); + register_test("multi_init", multi_init); } |
From: <svn...@op...> - 2005-04-08 22:36:30
|
Author: abauer Date: 2005-04-09 00:37:55 +0200 (Sat, 09 Apr 2005) New Revision: 465 Modified: trunk/formats/vformats-xml/vformat.c trunk/tests/check_vcal.c Log: Fixed the problem when running the unit tests in a different timezone Modified: trunk/formats/vformats-xml/vformat.c =================================================================== --- trunk/formats/vformats-xml/vformat.c 2005-04-08 21:33:17 UTC (rev 464) +++ trunk/formats/vformats-xml/vformat.c 2005-04-08 22:37:55 UTC (rev 465) @@ -73,7 +73,7 @@ btime.tm_min = time[2] * 10 + time[3] - '0' * 11; btime.tm_sec = time[4] * 10 + time[5] - '0' * 11; } - + time_t utime = mktime(&btime); return utime; } Modified: trunk/tests/check_vcal.c =================================================================== --- trunk/tests/check_vcal.c 2005-04-08 21:33:17 UTC (rev 464) +++ trunk/tests/check_vcal.c 2005-04-08 22:37:55 UTC (rev 465) @@ -1,4 +1,5 @@ #include "support.h" +#include <time.h> static void conv_vcal(const char *filename) { @@ -353,19 +354,22 @@ START_TEST (todo_get_revision1) { - fail_unless(vcal_get_revision("data/vtodos/evolution2/todo-full1.vcf") == 1110067010, NULL); + struct tm testtm = {50, 56, 0, 6, 3 - 1, 2005 - 1900, 0, 0, 0}; + fail_unless(vcal_get_revision("data/vtodos/evolution2/todo-full1.vcf") == mktime(&testtm), NULL); } END_TEST START_TEST (todo_get_revision2) { - fail_unless(vcal_get_revision("data/vtodos/evolution2/todo-full2.vcf") == 1110067010, NULL); + struct tm testtm = {50, 56, 0, 6, 3 - 1, 2005 - 1900, 0, 0, 0}; + fail_unless(vcal_get_revision("data/vtodos/evolution2/todo-full2.vcf") == mktime(&testtm), NULL); } END_TEST START_TEST (todo_get_revision3) { - fail_unless(vcal_get_revision("data/vtodos/evolution2/todo-full3.vcf") == 1110063600, NULL); + struct tm testtm = {0, 0, 0, 6, 3 - 1, 2005 - 1900, 0, 0, 0}; + fail_unless(vcal_get_revision("data/vtodos/evolution2/todo-full3.vcf") == mktime(&testtm), NULL); } END_TEST |
From: <svn...@op...> - 2005-04-08 21:31:52
|
Author: drzeus Date: 2005-04-08 23:33:17 +0200 (Fri, 08 Apr 2005) New Revision: 464 Modified: plugins/file-sync/src/file_sync_conf.c Log: gcc4 fixes Modified: plugins/file-sync/src/file_sync_conf.c =================================================================== --- plugins/file-sync/src/file_sync_conf.c 2005-04-08 19:58:46 UTC (rev 463) +++ plugins/file-sync/src/file_sync_conf.c 2005-04-08 21:33:17 UTC (rev 464) @@ -48,7 +48,7 @@ return FALSE; } - if (xmlStrcmp(cur->name, "config")) { + if (xmlStrcmp(cur->name, (xmlChar*)"config")) { xmlFreeDoc(doc); osync_error_set(error, OSYNC_ERROR_GENERIC, "Config valid is not valid"); osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); @@ -58,7 +58,7 @@ cur = cur->xmlChildrenNode; while (cur != NULL) { - char *str = xmlNodeGetContent(cur); + char *str = (char*)xmlNodeGetContent(cur); if (str) { if (!xmlStrcmp(cur->name, (const xmlChar *)"path")) { env->path = g_strdup(str); |
From: <svn...@op...> - 2005-04-08 19:57:22
|
Author: ehabkost Date: 2005-04-08 21:58:46 +0200 (Fri, 08 Apr 2005) New Revision: 463 Modified: trunk/formats/vformats-xml/vformat.c Log: Fix on the vnote generation: add newlines and vnote version - Fix to the vcard END:VCARD line: add newline Modified: trunk/formats/vformats-xml/vformat.c =================================================================== --- trunk/formats/vformats-xml/vformat.c 2005-04-08 19:42:07 UTC (rev 462) +++ trunk/formats/vformats-xml/vformat.c 2005-04-08 19:58:46 UTC (rev 463) @@ -661,7 +661,7 @@ str = g_string_append (str, "BEGIN:VCALENDAR\r\nVERSION:2.0\r\n"); break; case VFORMAT_NOTE: - str = g_string_append (str, "BEGIN:VNOTE"); + str = g_string_append (str, "BEGIN:VNOTE\r\nVERSION:1.1\r\n"); break; } @@ -765,7 +765,7 @@ str = g_string_append (str, "END:VCARD\r\n"); break; case VFORMAT_CARD_30: - str = g_string_append (str, "END:VCARD"); + str = g_string_append (str, "END:VCARD\r\n"); break; case VFORMAT_TODO_10: case VFORMAT_EVENT_10: @@ -776,7 +776,7 @@ str = g_string_append (str, "END:VCALENDAR\r\n"); break; case VFORMAT_NOTE: - str = g_string_append (str, "END:VNOTE"); + str = g_string_append (str, "END:VNOTE\r\n"); break; } |
From: <svn...@op...> - 2005-04-08 19:40:43
|
Author: ehabkost Date: 2005-04-08 21:42:07 +0200 (Fri, 08 Apr 2005) New Revision: 462 Modified: trunk/opensync/opensync_convert.c Log: Fix on conversion code: don't fill the change field on vertices, if a conversion wasn't done and we don't have the converted data for the vertice Modified: trunk/opensync/opensync_convert.c =================================================================== --- trunk/opensync/opensync_convert.c 2005-04-08 11:52:05 UTC (rev 461) +++ trunk/opensync/opensync_convert.c 2005-04-08 19:42:07 UTC (rev 462) @@ -252,6 +252,11 @@ // If the converter type is a detector we need to know wether the input is correct if (converter->detect_func) { + if (!ve->change) { + osync_trace(TRACE_INTERNAL, + "We would call a converter to %s, but there is no change data on vertice", fmt_target->name); + continue; + } if (!converter->detect_func(env, ve->change->data, ve->change->size)) { osync_trace(TRACE_INTERNAL, "Invoked detector for converter from %s to %s: FALSE", converter->source_format->name, converter->target_format->name); continue; @@ -261,9 +266,14 @@ OSyncChange *new_change = NULL; osync_bool free_output = TRUE; - if (converter->type == CONVERTER_DECAP) + if (converter->type == CONVERTER_DECAP) { + if (!ve->change) { + osync_trace(TRACE_INTERNAL, "A desencapsulator to %s would be called, but we can't because the data on this vertice wasn't converted", fmt_target->name); + continue; + } if (!(new_change = osync_converter_invoke_decap(converter, ve->change, &free_output))) continue; + } /* From this point, we already found an edge (i.e. a converter) that may * be used @@ -285,7 +295,7 @@ neigh->free_change = TRUE; neigh->free_change_data = free_output; } else { - neigh->change = ve->change; + neigh->change = NULL; neigh->free_change = FALSE; neigh->free_change_data = FALSE; } |
From: <svn...@op...> - 2005-04-08 11:50:48
|
Author: abauer Date: 2005-04-08 13:52:05 +0200 (Fri, 08 Apr 2005) New Revision: 461 Modified: trunk/configure.in trunk/opensync/opensync_env.c Log: Fixed a problem with the format loader loading the wrong plugins Fixed the thong :) Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2005-04-07 18:22:07 UTC (rev 460) +++ trunk/configure.in 2005-04-08 11:52:05 UTC (rev 461) @@ -193,7 +193,7 @@ echo "" echo "========================================" -AC_OPENSYNC_ISENABLED([Pythong Bindings], HAVE_PYTHON, 1) +AC_OPENSYNC_ISENABLED([Python Bindings], HAVE_PYTHON, 1) AC_OPENSYNC_ISENABLED([Unit Tests], HAVE_CHECK, 1) AC_OPENSYNC_ISENABLED([Debug messages], WITH_DEBUG) AC_OPENSYNC_ISENABLED([Tracing], WITH_TRACE) Modified: trunk/opensync/opensync_env.c =================================================================== --- trunk/opensync/opensync_env.c 2005-04-07 18:22:07 UTC (rev 460) +++ trunk/opensync/opensync_env.c 2005-04-08 11:52:05 UTC (rev 461) @@ -299,7 +299,7 @@ char *filename = NULL; filename = g_strdup_printf ("%s/%s", path, de); - if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR) || g_file_test(filename, G_FILE_TEST_IS_SYMLINK) || g_pattern_match_simple("*lib.la", filename) || !g_pattern_match_simple("*.la", filename)) { + if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR) || g_file_test(filename, G_FILE_TEST_IS_SYMLINK) || g_pattern_match_simple("*lib.la", filename) || g_pattern_match_simple("*.la", filename)) { g_free(filename); continue; } |
From: <svn...@op...> - 2005-04-07 18:20:47
|
Author: ehabkost Date: 2005-04-07 20:22:07 +0200 (Thu, 07 Apr 2005) New Revision: 460 Modified: plugins/kdepim/src/knotes.cpp Log: Changed the root element on xml-note to the right name: "Note" instead of "note" Modified: plugins/kdepim/src/knotes.cpp =================================================================== --- plugins/kdepim/src/knotes.cpp 2005-04-07 16:29:53 UTC (rev 459) +++ plugins/kdepim/src/knotes.cpp 2005-04-07 18:22:07 UTC (rev 460) @@ -150,7 +150,7 @@ QString hash = NULL; // Create osxml doc containing the note xmlDoc *doc = xmlNewDoc((const xmlChar*)"1.0"); - xmlNode *root = osxml_node_add_root(doc, "note"); + xmlNode *root = osxml_node_add_root(doc, "Note"); OSyncXMLEncoding enc; enc.encoding = OSXML_8BIT; |
From: <svn...@op...> - 2005-04-07 16:28:34
|
Author: abauer Date: 2005-04-07 18:29:53 +0200 (Thu, 07 Apr 2005) New Revision: 459 Modified: plugins/kdepim/Makefile.am Log: Tries to fix the dist problem Modified: plugins/kdepim/Makefile.am =================================================================== --- plugins/kdepim/Makefile.am 2005-04-07 15:45:49 UTC (rev 458) +++ plugins/kdepim/Makefile.am 2005-04-07 16:29:53 UTC (rev 459) @@ -31,16 +31,17 @@ # ugly hack to make the c++ library work kdepim_sync_la_LIBADD = -lstdc++ -L@OPENSYNC_LIBDIR@ -kdepim_lib_la_SOURCES = \ - src/KNotesIface_stub.cpp \ +dist_kdepim_lib_la_SOURCES = \ src/kdepim_impl.cpp \ src/kcal.cpp \ + src/KNotesIface_stub.h \ src/knotes.cpp \ src/kaddrbook.cpp +nodist_kdepim_lib_la_SOURCES = src/KNotesIface_stub.h src/KNotesIface_stub.cpp kdepim_lib_la_CXXFLAGS = -DPLUGINDIR=\"$(plugindir)\" -DKDEPIM_LIBDIR=\"$(plugindir)\" -Wall -Werror kdepim_lib_la_LDFLAGS = $(KDE_LDFLAGS) -avoid-version -export-dynamic -module kdepim_lib_la_LIBADD = $(KDE_RPATH) $(LIB_KABC) $(LIB_KCAL) -L$(libdir) -L@OPENSYNC_LIBDIR@ -lopensync-xml -src/KNotesIface_stub.cpp: +src/KNotesIface_stub.h: dcopidl src/KNotesIface.h > src/KNotesIface.kidl dcopidl2cpp src/KNotesIface.kidl |
From: <svn...@op...> - 2005-04-07 15:44:27
|
Author: abauer Date: 2005-04-07 17:45:49 +0200 (Thu, 07 Apr 2005) New Revision: 458 Modified: trunk/Doxyfile trunk/configure.in Log: Tagged version 0.16 Modified: trunk/Doxyfile =================================================================== --- trunk/Doxyfile 2005-04-07 15:11:36 UTC (rev 457) +++ trunk/Doxyfile 2005-04-07 15:45:49 UTC (rev 458) @@ -23,7 +23,7 @@ # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 0.15 +PROJECT_NUMBER = 0.16 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2005-04-07 15:11:36 UTC (rev 457) +++ trunk/configure.in 2005-04-07 15:45:49 UTC (rev 458) @@ -1,7 +1,7 @@ dnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.58) -AC_INIT(OpenSync, 0.15, [], libopensync) +AC_INIT(OpenSync, 0.16, [], libopensync) AC_CONFIG_SRCDIR([opensync/opensync.h]) AM_INIT_AUTOMAKE(foreign) AC_CONFIG_HEADER(config.h) |
From: <svn...@op...> - 2005-04-07 15:10:21
|
Author: abauer Date: 2005-04-07 17:11:36 +0200 (Thu, 07 Apr 2005) New Revision: 457 Added: trunk/formats/vformats-xml/xml-vnote.h trunk/tests/data/vnotes/vnote-minimal.vnt trunk/tests/data/vnotes/vnote1-same.vnt trunk/tests/data/vnotes/vnote1-similar.vnt trunk/tests/data/vnotes/vnote1.vnt trunk/tests/data/vnotes/vnote2.vnt trunk/tests/data/vnotes/vnote3.vnt Modified: trunk/formats/note.c trunk/formats/vformats-xml/Makefile.am trunk/formats/vformats-xml/xml-vcal.c trunk/formats/vformats-xml/xml-vnote.c trunk/misc/buildtest.sh trunk/opensync/opensync_member.c trunk/osengine/osengine_mapcmds.c trunk/tests/ trunk/tests/Makefile.am trunk/tests/check_vnote.c trunk/tests/mock-plugin/Makefile.am trunk/tools/osyncplugin.c Log: svn merge -r 433:456 ../branches/experimental-branch/ Make set_objecttype_enabled work even for "data" Implemented the vnote conversion and comparison correctly Added unit tests for vnote conversion and comparison Added a test to the buildtest script to check if configure is working without running autogen.sh before Modified: trunk/formats/note.c =================================================================== --- trunk/formats/note.c 2005-04-07 15:09:03 UTC (rev 456) +++ trunk/formats/note.c 2005-04-07 15:11:36 UTC (rev 457) @@ -1,6 +1,7 @@ #include <opensync/opensync.h> #include <glib.h> #include <stdio.h> +#include <string.h> static osync_bool detect_plain_as_vnote(OSyncFormatEnv *env, const char *data, int size) { @@ -17,10 +18,20 @@ return CONV_DATA_MISMATCH; } +static void create_vnote11(OSyncChange *change) +{ + char *vnote = g_strdup_printf("BEGIN:VNOTE\r\nVERSION:1.1\r\nBODY:%s\r\nSUMMARY:%s\r\nEND:VNOTE", osync_rand_str(20), osync_rand_str(6)); + + osync_change_set_data(change, vnote, strlen(vnote) + 1, TRUE); + if (!osync_change_get_uid(change)) + osync_change_set_uid(change, osync_rand_str(8)); +} + void get_info(OSyncEnv *env) { osync_env_register_objtype(env, "note"); osync_env_register_objformat(env, "note", "vnote11"); osync_env_register_detector(env, "plain", "vnote11", detect_plain_as_vnote); + osync_env_format_set_create_func(env, "vnote11", create_vnote11); osync_env_format_set_compare_func(env, "vnote11", compare_vnote); } Modified: trunk/formats/vformats-xml/Makefile.am =================================================================== --- trunk/formats/vformats-xml/Makefile.am 2005-04-07 15:09:03 UTC (rev 456) +++ trunk/formats/vformats-xml/Makefile.am 2005-04-07 15:11:36 UTC (rev 457) @@ -9,7 +9,8 @@ vformat.h \ opensync-xml.h \ xml-vcard.h \ - xml-vcal.h + xml-vcal.h \ + xml-vnote.h opensyncheader_HEADERS = opensync-xml.h Modified: trunk/formats/vformats-xml/xml-vcal.c =================================================================== --- trunk/formats/vformats-xml/xml-vcal.c 2005-04-07 15:09:03 UTC (rev 456) +++ trunk/formats/vformats-xml/xml-vcal.c 2005-04-07 15:11:36 UTC (rev 457) @@ -1175,8 +1175,8 @@ OSyncXMLScore score[] = { - {100, "/vcal/Event/StartTime"}, - {100, "/vcal/Event/EndTime"}, + {10, "/vcal/Event/StartTime"}, + {10, "/vcal/Event/EndTime"}, {100, "/vcal/Event/Summary"}, {0, "/vcal/Event/Uid"}, {0, "/vcal/Event/Revision"}, @@ -1185,10 +1185,13 @@ {0, "/vcal/Event/DateCreated"}, {0, "/vcal/Event/LastModified"}, {0, "/vcal/Event/Sequence"}, + {0, "/vcal/Event/Class[Content = \"PUBLIC\"]"}, + {0, "/vcal/Event/Priority[Content = 3]"}, + {0, "/vcal/Event/Transparency[Content = \"OPAQUE\"]"}, {0, NULL} }; - OSyncConvCmpResult ret = osxml_compare((xmlDoc*)osync_change_get_data(leftchange), (xmlDoc*)osync_change_get_data(rightchange), score, 0, 299); + OSyncConvCmpResult ret = osxml_compare((xmlDoc*)osync_change_get_data(leftchange), (xmlDoc*)osync_change_get_data(rightchange), score, 0, 99); osync_trace(TRACE_EXIT, "%s: %i", __func__, ret); return ret; @@ -1208,6 +1211,9 @@ {0, "/vcal/Todo/DateCreated"}, {0, "/vcal/Todo/LastModified"}, {0, "/vcal/Todo/Sequence"}, + {0, "/vcal/Todo/Class[Content = \"PUBLIC\"]"}, + {0, "/vcal/Todo/Priority[Content = 3]"}, + {0, "/vcal/Todo/PercentComplete[Content = 0]"}, {0, NULL} }; Modified: trunk/formats/vformats-xml/xml-vnote.c =================================================================== --- trunk/formats/vformats-xml/xml-vnote.c 2005-04-07 15:09:03 UTC (rev 456) +++ trunk/formats/vformats-xml/xml-vnote.c 2005-04-07 15:11:36 UTC (rev 457) @@ -1,5 +1,5 @@ /* - * xml-vcard - A plugin for parsing vcard objects for the opensync framework + * xml-vnote - A plugin for parsing vnote objects for the opensync framework * Copyright (C) 2004-2005 Armin Bauer <arm...@op...> * * This library is free software; you can redistribute it and/or @@ -20,93 +20,190 @@ #include "opensync-xml.h" #include "vformat.h" +#include "xml-vnote.h" #include <glib.h> -static osync_bool conv_vnote_to_xml(void *user_data, char *input, int inpsize, char **output, int *outpsize, osync_bool *free_input, OSyncError **error) +static void handle_unknown_parameter(xmlNode *current, VFormatParam *param) { - osync_debug("VNOTE", 4, "start: %s", __func__); - printf("input is %i\n%s\n", inpsize, input); + osync_trace(TRACE_INTERNAL, "Handling unknown parameter %s", vformat_attribute_param_get_name(param)); + xmlNode *property = xmlNewChild(current, NULL, (xmlChar*)"UnknownParam", + (xmlChar*)vformat_attribute_param_get_nth_value(param, 0)); + osxml_node_add(property, "ParamName", vformat_attribute_param_get_name(param)); +} + +static xmlNode *handle_created_attribute(xmlNode *root, VFormatAttribute *attr) +{ + osync_trace(TRACE_INTERNAL, "Handling created attribute"); + xmlNode *current = xmlNewChild(root, NULL, (xmlChar*)"DateCreated", NULL); + osxml_node_add(current, "Content", vformat_attribute_get_nth_value(attr, 0)); + return current; +} + +static xmlNode *handle_last_modified_attribute(xmlNode *root, VFormatAttribute *attr) +{ + osync_trace(TRACE_INTERNAL, "Handling last_modified attribute"); + xmlNode *current = xmlNewChild(root, NULL, (xmlChar*)"LastModified", NULL); + osxml_node_add(current, "Content", vformat_attribute_get_nth_value(attr, 0)); + return current; +} + +static xmlNode *handle_summary_attribute(xmlNode *root, VFormatAttribute *attr) +{ + osync_trace(TRACE_INTERNAL, "Handling summary attribute"); + xmlNode *current = xmlNewChild(root, NULL, (xmlChar*)"Summary", NULL); + osxml_node_add(current, "Content", vformat_attribute_get_nth_value(attr, 0)); + return current; +} + +static xmlNode *handle_categories_attribute(xmlNode *root, VFormatAttribute *attr) +{ + osync_trace(TRACE_INTERNAL, "Handling Categories attribute"); + xmlNode *current = xmlNewChild(root, NULL, (xmlChar*)"Categories", NULL); - /*GList *p = NULL; - GList *a = NULL; + GList *values = vformat_attribute_get_values_decoded(attr); + for (; values; values = values->next) { + GString *retstr = (GString *)values->data; + g_assert(retstr); + osxml_node_add(current, "Category", retstr->str); + } - VFormat *vcard = vformat_new_from_string(input); - vformat_dump_structure (vcard); - GList *attributes = vformat_get_attributes(vcard); - xmlDoc *doc = xmlNewDoc("1.0"); - xmlNode *root = osxml_node_add_root(doc, "note"); + return current; +} + +static xmlNode *handle_body_attribute(xmlNode *root, VFormatAttribute *attr) +{ + osync_trace(TRACE_INTERNAL, "Handling body attribute"); + xmlNode *current = xmlNewChild(root, NULL, (xmlChar*)"Body", NULL); + osxml_node_add(current, "Content", vformat_attribute_get_nth_value(attr, 0)); + return current; +} + +static xmlNode *handle_class_attribute(xmlNode *root, VFormatAttribute *attr) +{ + osync_trace(TRACE_INTERNAL, "Handling Class attribute"); + xmlNode *current = xmlNewChild(root, NULL, (xmlChar*)"Class", NULL); + osxml_node_add(current, "Content", vformat_attribute_get_nth_value(attr, 0)); + return current; +} + +static void handle_type_parameter(xmlNode *current, VFormatParam *param) +{ + osync_trace(TRACE_INTERNAL, "Handling type parameter %s", vformat_attribute_param_get_name(param)); + xmlNewChild(current, NULL, (xmlChar*)"Type", + (xmlChar*)vformat_attribute_param_get_nth_value(param, 0)); +} + +static xmlNode *handle_unknown_attribute(xmlNode *root, VFormatAttribute *attr) +{ + osync_trace(TRACE_INTERNAL, "Handling unknown attribute %s", vformat_attribute_get_name(attr)); + xmlNode *current = xmlNewChild(root, NULL, (xmlChar*)"UnknownNode", NULL); + osxml_node_add(current, "NodeName", vformat_attribute_get_name(attr)); + GList *values = vformat_attribute_get_values_decoded(attr); + for (; values; values = values->next) { + GString *retstr = (GString *)values->data; + g_assert(retstr); + osxml_node_add(current, "Content", retstr->str); + } + return current; +} + +static void vnote_handle_parameter(GHashTable *hooks, xmlNode *current, VFormatParam *param) +{ + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, hooks, current, param); - for (a = attributes; a; a = a->next) { - VFormatAttribute *attr = a->data; - const char *name = vformat_attribute_get_name(attr); + //Find the handler for this parameter + void (* param_handler)(xmlNode *, VFormatParam *); + char *paramname = g_strdup_printf("%s=%s", vformat_attribute_param_get_name(param), vformat_attribute_param_get_nth_value(param, 0)); + param_handler = g_hash_table_lookup(hooks, paramname); + g_free(paramname); + if (!param_handler) + param_handler = g_hash_table_lookup(hooks, vformat_attribute_param_get_name(param)); + + if (param_handler == HANDLE_IGNORE) { + osync_trace(TRACE_EXIT, "%s: Ignored", __func__); + return; + } + + if (param_handler) + param_handler(current, param); + else + handle_unknown_parameter(current, param); + + osync_trace(TRACE_EXIT, "%s", __func__); +} - if (!strcmp(name, "VERSION")) - continue; - - if (!strcmp(name, "BEGIN")) { - root = osxml_node_add_root(doc, "note"); - continue; - } - - xmlNode *current = xmlNewChild(root, NULL, "", NULL); - - //Created - if (!strcmp(name, "DCREATED")) { - osxml_node_set(current, "Created", vformat_attribute_get_nth_value(attr, 0), encoding); - continue; - } +static void vnote_handle_attribute(GHashTable *hooks, xmlNode *root, VFormatAttribute *attr) +{ + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p:%s)", __func__, hooks, root, attr, attr ? vformat_attribute_get_name(attr) : "None"); + xmlNode *current = NULL; + + //Dont add empty stuff + GList *v; + for (v = vformat_attribute_get_values(attr); v; v = v->next) { + char *value = v->data; + if (strlen(value) != 0) + goto has_value; + } + osync_trace(TRACE_EXIT, "%s: No values", __func__); + return; + +has_value:; + + //We need to find the handler for this attribute + xmlNode *(* attr_handler)(xmlNode *, VFormatAttribute *) = g_hash_table_lookup(hooks, vformat_attribute_get_name(attr)); + osync_trace(TRACE_INTERNAL, "Hook is: %p", attr_handler); + if (attr_handler == HANDLE_IGNORE) { + osync_trace(TRACE_EXIT, "%s: Ignored", __func__); + return; + } + if (attr_handler) + current = attr_handler(root, attr); + else + current = handle_unknown_attribute(root, attr); - //LastModified - if (!strcmp(name, "LAST_MODIFIED")) { - osxml_node_set(current, "LastModified", vformat_attribute_get_nth_value(attr, 0), encoding); - continue; - } - - //Summary - if (!strcmp(name, "SUMMARY")) { - osxml_node_set(current, "Summary", vformat_attribute_get_nth_value(attr, 0), encoding); - continue; - } - - //Body - if (!strcmp(name, "BODY")) { - osxml_node_set(current, "Body", vformat_attribute_get_nth_value(attr, 0), encoding); - continue; - } - - //Categories - if (!strcmp(name, "CATEGORIES")) { - osxml_node_set(current, "Categories", vformat_attribute_get_nth_value(attr, 0), encoding); - continue; - } - - //Class - if (!strcmp(name, "CLASS")) { - osxml_node_set(current, "Class", vformat_attribute_get_nth_value(attr, 0), encoding); - continue; - } - - //Unknown tag. - osxml_node_mark_unknown(current); - GList *values = vformat_attribute_get_values(attr); - GString *string = g_string_new(vformat_attribute_get_nth_value(attr, 0)); - for (p = values->next; p; p = p->next) { - g_string_sprintfa(string, ";%s", (char *)p->data); - } - osxml_node_add(current, "NodeName", name); - osxml_node_set(current, "UnknownNode", string->str, encoding); - g_string_free(string, 1); - }*/ + //Handle all parameters of this attribute + GList *params = vformat_attribute_get_params(attr); + GList *p = NULL; + for (p = params; p; p = p->next) { + VFormatParam *param = p->data; + vnote_handle_parameter(hooks, current, param); + } + osync_trace(TRACE_EXIT, "%s", __func__); +} + +static osync_bool conv_vnote_to_xml(void *conv_data, char *input, int inpsize, char **output, int *outpsize, osync_bool *free_input, OSyncError **error) +{ + osync_trace(TRACE_ENTRY, "%s(%p, %p, %i, %p, %p, %p, %p)", __func__, conv_data, input, inpsize, output, outpsize, free_input, error); + GHashTable *hooks = (GHashTable *)conv_data; + + osync_trace(TRACE_INTERNAL, "Input vnote is:\n%s", input); + + //Parse the vnote + VFormat *vnote = vformat_new_from_string(input); + + osync_trace(TRACE_INTERNAL, "Creating xml doc"); + + //Create a new xml document + xmlDoc *doc = xmlNewDoc((xmlChar*)"1.0"); + xmlNode *root = osxml_node_add_root(doc, "Note"); + + osync_trace(TRACE_INTERNAL, "parsing attributes"); + + //For every attribute we have call the handling hook + GList *attributes = vformat_get_attributes(vnote); + GList *a = NULL; + for (a = attributes; a; a = a->next) { + VFormatAttribute *attr = a->data; + vnote_handle_attribute(hooks, root, attr); + } + + osync_trace(TRACE_INTERNAL, "Output XML is:\n%s", osxml_write_to_string(doc)); + *free_input = TRUE; - //*output = (char *)doc; - /*FIXME: this is not really the size of the data pointed by doc. - * But this shouldn't cause problems, anyway, because this - * size field should never be used for xml docs. Actually, - * what needs fixing is the code that uses the size - * field for changes with xml data. - */ - //*outpsize = sizeof(doc); + *output = (char *)doc; + *outpsize = sizeof(doc); + osync_trace(TRACE_EXIT, "%s: TRUE", __func__); return TRUE; } @@ -155,89 +252,200 @@ g_free(tmp); } +static void handle_xml_type_parameter(VFormatAttribute *attr, xmlNode *current) +{ + osync_trace(TRACE_INTERNAL, "Handling type xml parameter"); + char *content = (char*)xmlNodeGetContent(current); + vformat_attribute_add_param_with_value(attr, "TYPE", content); + g_free(content); +} + +static void handle_xml_category_parameter(VFormatAttribute *attr, xmlNode *current) +{ + osync_trace(TRACE_INTERNAL, "Handling category xml parameter"); + char *content = (char*)xmlNodeGetContent(current); + vformat_attribute_add_value(attr, content); + g_free(content); +} + +static void xml_handle_unknown_parameter(VFormatAttribute *attr, xmlNode *current) +{ + osync_trace(TRACE_INTERNAL, "Handling unknown xml parameter %s", current->name); + char *content = (char*)xmlNodeGetContent(current); + vformat_attribute_add_param_with_value(attr, (char*)current->name, content); + g_free(content); +} + +static VFormatAttribute *handle_xml_categories_attribute(VFormat *vnote, xmlNode *root, const char *encoding) +{ + osync_trace(TRACE_INTERNAL, "Handling categories xml attribute"); + VFormatAttribute *attr = vformat_attribute_new(NULL, "CATEGORIES"); + vformat_add_attribute(vnote, attr); + return attr; +} + +static VFormatAttribute *handle_xml_class_attribute(VFormat *vnote, xmlNode *root, const char *encoding) +{ + osync_trace(TRACE_INTERNAL, "Handling class xml attribute"); + VFormatAttribute *attr = vformat_attribute_new(NULL, "CLASS"); + add_value(attr, root, "Content", encoding); + vformat_add_attribute(vnote, attr); + return attr; +} + +static VFormatAttribute *handle_xml_summary_attribute(VFormat *vnote, xmlNode *root, const char *encoding) +{ + VFormatAttribute *attr = vformat_attribute_new(NULL, "SUMMARY"); + add_value(attr, root, "Content", encoding); + vformat_add_attribute(vnote, attr); + return attr; +} + +static VFormatAttribute *handle_xml_body_attribute(VFormat *vnote, xmlNode *root, const char *encoding) +{ + VFormatAttribute *attr = vformat_attribute_new(NULL, "BODY"); + add_value(attr, root, "Content", encoding); + vformat_add_attribute(vnote, attr); + return attr; +} + +static VFormatAttribute *handle_xml_created_attribute(VFormat *vnote, xmlNode *root, const char *encoding) +{ + VFormatAttribute *attr = vformat_attribute_new(NULL, "DCREATED"); + add_value(attr, root, "Content", encoding); + vformat_add_attribute(vnote, attr); + return attr; +} + +static VFormatAttribute *handle_xml_last_modified_attribute(VFormat *vcard, xmlNode *root, const char *encoding) +{ + VFormatAttribute *attr = vformat_attribute_new(NULL, "LAST-MODIFIED"); + add_value(attr, root, "Content", encoding); + vformat_add_attribute(vcard, attr); + return attr; +} + +static void xml_vnote_handle_parameter(OSyncHookTables *hooks, VFormatAttribute *attr, xmlNode *current) +{ + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p:%s)", __func__, hooks, attr, current, current ? (char *)current->name : "None"); + + //Find the handler for this parameter + void (* xml_param_handler)(VFormatAttribute *attr, xmlNode *); + char *content = (char*)xmlNodeGetContent(current); + char *paramname = g_strdup_printf("%s=%s", current->name, content); + g_free(content); + xml_param_handler = g_hash_table_lookup(hooks->parameters, paramname); + g_free(paramname); + if (!xml_param_handler) + xml_param_handler = g_hash_table_lookup(hooks->parameters, current->name); + + if (xml_param_handler == HANDLE_IGNORE) { + osync_trace(TRACE_EXIT, "%s: Ignored", __func__); + return; + } + + if (xml_param_handler) + xml_param_handler(attr, current); + + osync_trace(TRACE_EXIT, "%s", __func__); +} + +static VFormatAttribute *xml_handle_unknown_attribute(VFormat *vnote, xmlNode *root, const char *encoding) +{ + osync_trace(TRACE_INTERNAL, "Handling unknown xml attribute %s", root->name); + char *name = osxml_find_node(root, "Name"); + VFormatAttribute *attr = vformat_attribute_new(NULL, name); + add_value(attr, root, "Content", encoding); + vformat_add_attribute(vnote, attr); + return attr; +} + +static void xml_vnote_handle_attribute(OSyncHookTables *hooks, VFormat *vnote, xmlNode *root, const char *encoding) +{ + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p:%s)", __func__, hooks, vnote, root, root ? (char *)root->name : "None"); + VFormatAttribute *attr = NULL; + + //We need to find the handler for this attribute + VFormatAttribute *(* xml_attr_handler)(VFormat *vnote, xmlNode *root, const char *) = g_hash_table_lookup(hooks->attributes, root->name); + osync_trace(TRACE_INTERNAL, "xml hook is: %p", xml_attr_handler); + if (xml_attr_handler == HANDLE_IGNORE) { + osync_trace(TRACE_EXIT, "%s: Ignored", __func__); + return; + } + if (xml_attr_handler) + attr = xml_attr_handler(vnote, root, encoding); + else { + osync_trace(TRACE_EXIT, "%s: Ignored2", __func__); + return; + } + + //Handle all parameters of this attribute + xmlNode *child = root->xmlChildrenNode; + while (child) { + xml_vnote_handle_parameter(hooks, attr, child); + child = child->next; + } + osync_trace(TRACE_EXIT, "%s", __func__); +} + static osync_bool conv_xml_to_vnote(void *user_data, char *input, int inpsize, char **output, int *outpsize, osync_bool *free_input, OSyncError **error) { - osync_debug("VNOTE", 4, "start: %s", __func__); - xmlDocDump(stdout, (xmlDoc *)input); - VFormatAttribute *attr = NULL; - xmlNode *root = osxml_node_get_root((xmlDoc *)input, "note", error); - if (!root) + osync_trace(TRACE_ENTRY, "%s(%p, %p, %i, %p, %p, %p, %p)", __func__, user_data, input, inpsize, output, outpsize, free_input, error); + + osync_trace(TRACE_INTERNAL, "Input XML is:\n%s", osxml_write_to_string((xmlDoc *)input)); + + //Get the root node of the input document + xmlNode *root = osxml_node_get_root((xmlDoc *)input, "Note", error); + if (!root) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to get root element of xml-note"); + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); return FALSE; + } - VFormat *vcard = vformat_new(); + //Make the new vnote + VFormat *vnote = vformat_new(); - const char *std_encoding = "QUOTED-PRINTABLE"; - + osync_trace(TRACE_INTERNAL, "parsing xml attributes"); while (root) { - if (!strcmp((char*)root->name, "Created")) { - //Created - attr = vformat_attribute_new(NULL, "DCREATED"); - add_value(attr, root, "Content", std_encoding); - vformat_add_attribute(vcard, attr); - } else if (!strcmp((char*)root->name, "LastModifed")) { - //LastModifed - attr = vformat_attribute_new(NULL, "LAST-MODIFIED"); - add_value(attr, root, "Content", std_encoding); - vformat_add_attribute(vcard, attr); - } else if (!strcmp((char*)root->name, "Summary")) { - //Summary - attr = vformat_attribute_new(NULL, "SUMMARY"); - add_value(attr, root, "Content", std_encoding); - vformat_add_attribute(vcard, attr); - } else if (!strcmp((char*)root->name, "Body")) { - //Body - attr = vformat_attribute_new(NULL, "BODY"); - add_value(attr, root, "Content", std_encoding); - vformat_add_attribute(vcard, attr); - } else if (!strcmp((char*)root->name, "Categories")) { - //Categories - attr = vformat_attribute_new(NULL, "CATEGORIES"); - add_value(attr, root, "Content", std_encoding); - vformat_add_attribute(vcard, attr); - } else if (!strcmp((char*)root->name, "Class")) { - //Class - attr = vformat_attribute_new(NULL, "CLASS"); - add_value(attr, root, "Content", std_encoding); - vformat_add_attribute(vcard, attr); - } else if (!strcmp((char*)root->name, "UnknownNode")) { - //Unknown Node - attr = vformat_attribute_new(NULL, osxml_find_node(root, "NodeName")); - add_value(attr, root, "Content", std_encoding); - vformat_add_attribute(vcard, attr); - } - + xml_vnote_handle_attribute((OSyncHookTables *)user_data, vnote, root, "QUOTED-PRINTABLE"); root = root->next; } *free_input = TRUE; - *output = vformat_to_string(vcard, VFORMAT_NOTE); - *outpsize = strlen(*output); + *output = vformat_to_string(vnote, VFORMAT_NOTE); + osync_trace(TRACE_INTERNAL, "vnote output is: \n%s", *output); + *outpsize = strlen(*output) + 1; + osync_trace(TRACE_EXIT, "%s", __func__); + return TRUE; } static OSyncConvCmpResult compare_notes(OSyncChange *leftchange, OSyncChange *rightchange) { + osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, leftchange, rightchange); + OSyncXMLScore score[] = { - {50, "/note/Summary"}, - {50, "/note/Class"}, - {50, "/note/Body"}, + {100, "/Note/Summary"}, + {100, "/Note/Body"}, + {0, "/Note/*/Type"}, + {0, "/Note/Uid"}, + {0, "/Note/LastModified"}, + {0, "/Note/DateCreated"}, {0, NULL} }; - return osxml_compare((xmlDoc*)osync_change_get_data(leftchange), (xmlDoc*)osync_change_get_data(rightchange), score, 10, 50); + OSyncConvCmpResult ret = osxml_compare((xmlDoc*)osync_change_get_data(leftchange), (xmlDoc*)osync_change_get_data(rightchange), score, 0, 199); + + osync_trace(TRACE_EXIT, "%s: %i", __func__, ret); + return ret; } static char *print_note(OSyncChange *change) { - osync_debug("VNOTE", 4, "start: %s", __func__); xmlDoc *doc = (xmlDoc *)osync_change_get_data(change); - char *result; - int size; - osync_bool free; - if (!conv_xml_to_vnote(NULL, (char*)doc, 0, &result, &size, &free, NULL)) - return NULL; - return result; + + return osxml_write_to_string(doc); } static void destroy_xml(char *data, size_t size) @@ -245,15 +453,110 @@ xmlFreeDoc((xmlDoc *)data); } +static void *init_vnote_to_xml(void) +{ + osync_trace(TRACE_ENTRY, "%s", __func__); + GHashTable *table = g_hash_table_new(g_str_hash, g_str_equal); + + g_hash_table_insert(table, "X-IRMC-LUID", HANDLE_IGNORE); + g_hash_table_insert(table, "DCREATED", handle_created_attribute); + g_hash_table_insert(table, "LAST-MODIFIED", handle_last_modified_attribute); + g_hash_table_insert(table, "SUMMARY", handle_summary_attribute); + g_hash_table_insert(table, "BODY", handle_body_attribute); + g_hash_table_insert(table, "CLASS", handle_class_attribute); + g_hash_table_insert(table, "CATEGORIES", handle_categories_attribute); + + g_hash_table_insert(table, "VERSION", HANDLE_IGNORE); + g_hash_table_insert(table, "BEGIN", HANDLE_IGNORE); + g_hash_table_insert(table, "END", HANDLE_IGNORE); + + g_hash_table_insert(table, "ENCODING", HANDLE_IGNORE); + g_hash_table_insert(table, "CHARSET", HANDLE_IGNORE); + + g_hash_table_insert(table, "TYPE", handle_type_parameter); + + osync_trace(TRACE_EXIT, "%s: %p", __func__, table); + return (void *)table; +} + +static void fin_vnote_to_xml(void *data) +{ + g_hash_table_destroy((GHashTable *)data); +} + +static void *init_xml_to_vnote(void) +{ + osync_trace(TRACE_ENTRY, "%s", __func__); + + OSyncHookTables *hooks = g_malloc0(sizeof(OSyncHookTables)); + + hooks->attributes = g_hash_table_new(g_str_hash, g_str_equal); + hooks->parameters = g_hash_table_new(g_str_hash, g_str_equal); + + g_hash_table_insert(hooks->attributes, "Summary", handle_xml_summary_attribute); + g_hash_table_insert(hooks->attributes, "Body", handle_xml_body_attribute); + g_hash_table_insert(hooks->attributes, "Class", handle_xml_class_attribute); + g_hash_table_insert(hooks->attributes, "Categories", handle_xml_categories_attribute); + g_hash_table_insert(hooks->attributes, "UnknownNode", xml_handle_unknown_attribute); + g_hash_table_insert(hooks->attributes, "DateCreated", handle_xml_created_attribute); + g_hash_table_insert(hooks->attributes, "LastModified", handle_xml_last_modified_attribute); + + g_hash_table_insert(hooks->parameters, "Type", handle_xml_type_parameter); + g_hash_table_insert(hooks->parameters, "Category", handle_xml_category_parameter); + + g_hash_table_insert(hooks->parameters, "UnknownParameter", xml_handle_unknown_parameter); + + osync_trace(TRACE_EXIT, "%s: %p", __func__, hooks); + return (void *)hooks; +} + +static void fin_xml_to_vnote(void *data) +{ + OSyncHookTables *hooks = (OSyncHookTables *)hooks; + g_hash_table_destroy(hooks->attributes); + g_hash_table_destroy(hooks->parameters); + g_free(hooks); +} + +static time_t get_revision(OSyncChange *change, OSyncError **error) +{ + osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, change, error); + + xmlDoc *doc = (xmlDoc *)osync_change_get_data(change); + + xmlXPathObject *xobj = osxml_get_nodeset(doc, "/Note/LastModified"); + + xmlNodeSet *nodes = xobj->nodesetval; + + int size = (nodes) ? nodes->nodeNr : 0; + if (size != 1) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to find the revision"); + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + return -1; + } + + char *revision = (char*)osxml_find_node(nodes->nodeTab[0], "Content"); + + osync_trace(TRACE_INTERNAL, "About to convert string %s", revision); + time_t time = vformat_time_to_unix(revision); + g_free(revision); + xmlXPathFreeObject(xobj); + osync_trace(TRACE_EXIT, "%s: %i", __func__, time); + return time; +} + void get_info(OSyncEnv *env) { osync_env_register_objtype(env, "note"); osync_env_register_objformat(env, "note", "xml-note"); - osync_env_format_set_compare_func(env, "xml-note", compare_notes); osync_env_format_set_destroy_func(env, "xml-note", destroy_xml); osync_env_format_set_print_func(env, "xml-note", print_note); + osync_env_format_set_copy_func(env, "xml-note", osxml_copy); + osync_env_format_set_revision_func(env, "xml-note", get_revision); osync_env_register_converter(env, CONVERTER_CONV, "vnote11", "xml-note", conv_vnote_to_xml); + osync_env_converter_set_init(env, "vnote11", "xml-note", init_vnote_to_xml, fin_vnote_to_xml); osync_env_register_converter(env, CONVERTER_CONV, "xml-note", "vnote11", conv_xml_to_vnote); + osync_env_converter_set_init(env, "xml-note", "vnote11", init_xml_to_vnote, fin_xml_to_vnote); } Copied: trunk/formats/vformats-xml/xml-vnote.h (from rev 456, branches/experimental-branch/formats/vformats-xml/xml-vnote.h) Modified: trunk/misc/buildtest.sh =================================================================== --- trunk/misc/buildtest.sh 2005-04-07 15:09:03 UTC (rev 456) +++ trunk/misc/buildtest.sh 2005-04-07 15:11:36 UTC (rev 457) @@ -29,6 +29,9 @@ cd libopensync-0.?? +echo -n "Checking if configure is working" +./configure --enable-tests=no > /dev/null || exit 1 +./configure --enable-tests=yes > /dev/null || exit 1 echo -n "Making OpenSync" ./autogen.sh --prefix=$TOP_SRCDIR/_inst > /dev/null || exit 1 echo -n "." Modified: trunk/opensync/opensync_member.c =================================================================== --- trunk/opensync/opensync_member.c 2005-04-07 15:09:03 UTC (rev 456) +++ trunk/opensync/opensync_member.c 2005-04-07 15:11:36 UTC (rev 457) @@ -825,14 +825,25 @@ */ void osync_member_set_objtype_enabled(OSyncMember *member, const char *objtypestr, osync_bool enabled) { - if (osync_conv_objtype_is_any(objtypestr)) - g_assert_not_reached(); - + osync_trace(TRACE_ENTRY, "%s(%p, %s, %i)", __func__, member, objtypestr, enabled); + OSyncObjTypeSink *sink = NULL; g_assert(member); - OSyncObjTypeSink *sink = osync_member_find_objtype_sink(member, objtypestr); - g_assert(sink); - sink->enabled = enabled; + if (osync_conv_objtype_is_any(objtypestr)) { + GList *o = NULL; + for (o = member->objtype_sinks; o; o = o->next) { + OSyncObjTypeSink *sink = o->data; + sink->enabled = enabled; + } + } else { + sink = osync_member_find_objtype_sink(member, objtypestr); + if (!sink) { + osync_trace(TRACE_EXIT_ERROR, "Unable to find sink with name \"%s\"", objtypestr); + return; + } + sink->enabled = enabled; + } + osync_trace(TRACE_EXIT, "%s", __func__); } /*@}*/ Modified: trunk/osengine/osengine_mapcmds.c =================================================================== --- trunk/osengine/osengine_mapcmds.c 2005-04-07 15:09:03 UTC (rev 456) +++ trunk/osengine/osengine_mapcmds.c 2005-04-07 15:11:36 UTC (rev 457) @@ -447,7 +447,7 @@ */ osync_bool osengine_mapping_solve_latest(OSyncEngine *engine, OSyncMapping *mapping, OSyncError **error) { - osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, engine, mapping, error); + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, engine, mapping, error); time_t time = 0; time_t latesttime = 0; @@ -488,6 +488,55 @@ return TRUE; } +/** @brief Checks if the mapping could be solved with solve_latest + * + * This functions checks all changes to see if they contain valid + * timestamp information and if they could be used to solve but does + * not actually solve the mapping + * + * @param engine The engine + * @param mapping The conflicting mapping + * @param error A pointer to an error + * @returns TRUE if the mapping could be solved, FALSE otherwise + * + */ +osync_bool osengine_mapping_check_timestamps(OSyncEngine *engine, OSyncMapping *mapping, OSyncError **error) +{ + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, engine, mapping, error); + + time_t time = 0; + time_t latesttime = 0; + osync_bool preveq = FALSE; + + GList *e = NULL; + for (e = mapping->entries; e; e = e->next) { + OSyncMappingEntry *entry = e->data; + + if (osync_change_get_changetype(entry->change) != CHANGE_UNKNOWN) { + time = osync_change_get_revision(entry->change, error); + if (time == -1) { + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + return FALSE; + } + + if (time > latesttime) { + latesttime = time; + preveq = FALSE; + } else if (time == latesttime) + preveq = TRUE; + } + } + + if (preveq == TRUE) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "Could not decide for one entry. Timestamps where equal"); + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + return FALSE; + } + + osync_trace(TRACE_EXIT, "%s", __func__); + return TRUE; +} + /** @brief Solves a mapping by setting an updated change * * Solves the mapping by setting an updated change. The change should have been edited by the user. Property changes on: trunk/tests ___________________________________________________________________ Name: svn:ignore - Makefile.in env member Makefile user .deps .libs conv sync error filter multisync errorcodes locks vcard vcal *.da *.bb *.bbg + Makefile.in env member Makefile user .deps .libs conv sync error filter multisync errorcodes locks vcard vcal *.da *.bb *.bbg vnote plugin Modified: trunk/tests/Makefile.am =================================================================== --- trunk/tests/Makefile.am 2005-04-07 15:09:03 UTC (rev 456) +++ trunk/tests/Makefile.am 2005-04-07 15:11:36 UTC (rev 457) @@ -15,8 +15,8 @@ endif if ENABLE_TESTS -TESTS = error user member plugin locks env conv sync filter multisync vcard vcal errorcodes $(PROFTEST) -noinst_PROGRAMS = error user member plugin locks env conv sync filter multisync vcard vcal errorcodes +TESTS = error user member plugin locks env conv sync filter multisync vcard vcal vnote errorcodes $(PROFTEST) +noinst_PROGRAMS = error user member plugin locks env conv sync filter multisync vcard vcal vnote errorcodes else TESTS = noinst_PROGRAMS = @@ -83,6 +83,11 @@ vcal_LIBS = @CHECK_LIBS@ vcal_LDFLAGS = @PACKAGE_LIBS@ $(top_builddir)/opensync/libopensync.la $(top_builddir)/osengine/libosengine.la -lcheck -R $(libdir) @GCOV_LDFLAGS@ +vnote_INCLUDES = @CHECK_CFLAGS@ +vnote_SOURCES = check_vnote.c support.c +vnote_LIBS = @CHECK_LIBS@ +vnote_LDFLAGS = @PACKAGE_LIBS@ $(top_builddir)/opensync/libopensync.la $(top_builddir)/osengine/libosengine.la -lcheck -R $(libdir) @GCOV_LDFLAGS@ + errorcodes_INCLUDES = @CHECK_CFLAGS@ errorcodes_SOURCES = check_codes.c support.c errorcodes_LIBS = @CHECK_LIBS@ Modified: trunk/tests/check_vnote.c =================================================================== --- trunk/tests/check_vnote.c 2005-04-07 15:09:03 UTC (rev 456) +++ trunk/tests/check_vnote.c 2005-04-07 15:11:36 UTC (rev 457) @@ -1,6 +1,6 @@ #include "support.h" -static void conv_vcal(const char *filename) +static void conv_vnote(const char *filename) { char *command = g_strdup_printf("cp %s/%s .", g_get_current_dir(), filename); char *testbed = setup_testbed(NULL); @@ -32,13 +32,7 @@ osync_change_set_objformat(change, sourceformat); osync_change_set_objtype(change, osync_objformat_get_objtype(sourceformat)); - OSyncObjFormat *targetformat = NULL; - if (!strcmp(osync_objformat_get_name(sourceformat), "vtodo10")) - targetformat = osync_conv_find_objformat(conv_env, "vtodo20"); - - if (!strcmp(osync_objformat_get_name(sourceformat), "vtodo20")) - targetformat = osync_conv_find_objformat(conv_env, "vtodo10"); - + OSyncObjFormat *targetformat = osync_conv_find_objformat(conv_env, "xml-note"); fail_unless(targetformat != NULL, NULL); OSyncChange *newchange = osync_change_copy(change, &error); @@ -63,8 +57,60 @@ destroy_testbed(testbed); } +static void compare_vnote(const char *lfilename, const char *rfilename, OSyncConvCmpResult result) +{ + char *command1 = g_strdup_printf("cp %s/%s lfile", g_get_current_dir(), lfilename); + char *command2 = g_strdup_printf("cp %s/%s rfile", g_get_current_dir(), rfilename); + char *testbed = setup_testbed(NULL); + system(command1); + g_free(command1); + system(command2); + g_free(command2); + + OSyncError *error = NULL; + OSyncEnv *env = init_env(); + + OSyncFormatEnv *conv_env = osync_conv_env_new(env); + fail_unless(conv_env != NULL, NULL); -static time_t vcal_get_revision(const char *filename) + char *buffer; + int size; + + fail_unless(osync_file_read("lfile", &buffer, &size, &error), NULL); + + OSyncChange *lchange = osync_change_new(); + osync_change_set_uid(lchange, "lfile"); + osync_change_set_data(lchange, buffer, size + 1, TRUE); + osync_change_set_conv_env(lchange, conv_env); + osync_change_set_objformat_string(lchange, "plain"); + + OSyncObjFormat *sourceformat = osync_change_detect_objformat(conv_env, lchange, &error); + fail_unless(sourceformat != NULL, NULL); + osync_change_set_objformat(lchange, sourceformat); + osync_change_set_objtype(lchange, osync_objformat_get_objtype(sourceformat)); + + fail_unless(osync_file_read("rfile", &buffer, &size, &error), NULL); + + OSyncChange *rchange = osync_change_new(); + osync_change_set_uid(rchange, "rfile"); + osync_change_set_data(rchange, buffer, size + 1, TRUE); + osync_change_set_conv_env(rchange, conv_env); + osync_change_set_objformat_string(rchange, "plain"); + + sourceformat = osync_change_detect_objformat(conv_env, rchange, &error); + fail_unless(sourceformat != NULL, NULL); + osync_change_set_objformat(rchange, sourceformat); + osync_change_set_objtype(rchange, osync_objformat_get_objtype(sourceformat)); + + fail_unless(osync_change_compare(lchange, rchange) == result, NULL); + + osync_conv_env_free(conv_env); + osync_env_finalize(env, NULL); + osync_env_free(env); + destroy_testbed(testbed); +} + +static time_t vnote_get_revision(const char *filename) { char *command = g_strdup_printf("cp %s/%s .", g_get_current_dir(), filename); char *testbed = setup_testbed(NULL); @@ -96,10 +142,10 @@ fail_unless(sourceformat != NULL, NULL); osync_change_set_objformat(change, sourceformat); - OSyncObjFormat *targetformat = osync_conv_find_objformat(conv_env, "xml-todo"); + OSyncObjFormat *targetformat = osync_conv_find_objformat(conv_env, "xml-note"); fail_unless(targetformat != NULL, NULL); - fail_unless(osync_change_convert_extension(conv_env, change, targetformat, "evolution", &error), NULL); + fail_unless(osync_change_convert(conv_env, change, targetformat, &error), NULL); time_t time = osync_change_get_revision(change, &error); @@ -111,48 +157,105 @@ return time; } -START_TEST (conv_vcal_evolution2_full1) +START_TEST (conv_vnote1) { - conv_vcal("data/vtodos/evolution2/todo-full1.vcf"); + conv_vnote("data/vnotes/vnote1.vnt"); } END_TEST -START_TEST (todo_get_revision1) +START_TEST (conv_vnote2) { - fail_unless(vcal_get_revision("data/vtodos/evolution2/todo-full1.vcf") == 1110067010, NULL); + conv_vnote("data/vnotes/vnote2.vnt"); } END_TEST -START_TEST (todo_get_revision2) +START_TEST (conv_vnote3) { - fail_unless(vcal_get_revision("data/vtodos/evolution2/todo-full2.vcf") == 1110067010, NULL); + conv_vnote("data/vnotes/vnote3.vnt"); } END_TEST -START_TEST (todo_get_revision3) +START_TEST (conv_vnote_minimal) { - fail_unless(vcal_get_revision("data/vtodos/evolution2/todo-full3.vcf") == 1110063600, NULL); + conv_vnote("data/vnotes/vnote-minimal.vnt"); } END_TEST -START_TEST (todo_no_revision) +START_TEST (get_revision1) { - fail_unless(vcal_get_revision("data/vtodos/kdepim/todo-full1.vcs") == -1, NULL); + fail_unless(vnote_get_revision("data/vnotes/vnote1.vnt") == 1112742000, NULL); } END_TEST -Suite *vcal_suite(void) +START_TEST (get_revision2) { - Suite *s = suite_create("VCal"); - //Suite *s2 = suite_create("VCal"); + fail_unless(vnote_get_revision("data/vnotes/vnote2.vnt") == 1112745661, NULL); +} +END_TEST + +START_TEST (get_revision3) +{ + fail_unless(vnote_get_revision("data/vnotes/vnote3.vnt") == 1112742000, NULL); +} +END_TEST + +START_TEST (get_revision4) +{ + fail_unless(vnote_get_revision("data/vnotes/vnote-minimal.vnt") == -1, NULL); +} +END_TEST + +START_TEST (compare_vnote_same1) +{ + compare_vnote("data/vnotes/vnote1.vnt", "data/vnotes/vnote1.vnt", CONV_DATA_SAME); +} +END_TEST + +START_TEST (compare_vnote_same2) +{ + compare_vnote("data/vnotes/vnote1.vnt", "data/vnotes/vnote1-same.vnt", CONV_DATA_SAME); +} +END_TEST + +START_TEST (compare_vnote_similar1) +{ + compare_vnote("data/vnotes/vnote1.vnt", "data/vnotes/vnote1-similar.vnt", CONV_DATA_SIMILAR); +} +END_TEST + +START_TEST (compare_vnote_mismatch1) +{ + compare_vnote("data/vnotes/vnote1.vnt", "data/vnotes/vnote2.vnt", CONV_DATA_MISMATCH); +} +END_TEST + +START_TEST (compare_vnote_mismatch2) +{ + compare_vnote("data/vnotes/vnote1.vnt", "data/vnotes/vnote-minimal.vnt", CONV_DATA_MISMATCH); +} +END_TEST + +Suite *vnote_suite(void) +{ + Suite *s = suite_create("VNote"); + //Suite *s2 = suite_create("VNote"); - create_case(s, "conv_vcal_evolution2_full1", conv_vcal_evolution2_full1); + create_case(s, "conv_vnote1", conv_vnote1); + create_case(s, "conv_vnote2", conv_vnote2); + create_case(s, "conv_vnote3", conv_vnote3); + create_case(s, "conv_vnote_minimal", conv_vnote_minimal); - create_case(s, "todo_get_revision1", todo_get_revision1); - create_case(s, "todo_get_revision2", todo_get_revision2); - create_case(s, "todo_get_revision3", todo_get_revision3); - create_case(s, "todo_no_revision", todo_no_revision); + create_case(s, "get_revision1", get_revision1); + create_case(s, "get_revision2", get_revision2); + create_case(s, "get_revision3", get_revision3); + create_case(s, "get_revision4", get_revision4); + create_case(s, "compare_vnote_same1", compare_vnote_same1); + create_case(s, "compare_vnote_same2", compare_vnote_same2); + create_case(s, "compare_vnote_similar1", compare_vnote_similar1); + create_case(s, "compare_vnote_mismatch1", compare_vnote_mismatch1); + create_case(s, "compare_vnote_mismatch2", compare_vnote_mismatch2); + return s; } @@ -160,7 +263,7 @@ { int nf; - Suite *s = vcal_suite(); + Suite *s = vnote_suite(); SRunner *sr; sr = srunner_create(s); Copied: trunk/tests/data/vnotes/vnote-minimal.vnt (from rev 456, branches/experimental-branch/tests/data/vnotes/vnote-minimal.vnt) Copied: trunk/tests/data/vnotes/vnote1-same.vnt (from rev 456, branches/experimental-branch/tests/data/vnotes/vnote1-same.vnt) Copied: trunk/tests/data/vnotes/vnote1-similar.vnt (from rev 456, branches/experimental-branch/tests/data/vnotes/vnote1-similar.vnt) Copied: trunk/tests/data/vnotes/vnote1.vnt (from rev 456, branches/experimental-branch/tests/data/vnotes/vnote1.vnt) Copied: trunk/tests/data/vnotes/vnote2.vnt (from rev 456, branches/experimental-branch/tests/data/vnotes/vnote2.vnt) Copied: trunk/tests/data/vnotes/vnote3.vnt (from rev 456, branches/experimental-branch/tests/data/vnotes/vnote3.vnt) Modified: trunk/tests/mock-plugin/Makefile.am =================================================================== --- trunk/tests/mock-plugin/Makefile.am 2005-04-07 15:09:03 UTC (rev 456) +++ trunk/tests/mock-plugin/Makefile.am 2005-04-07 15:11:36 UTC (rev 457) @@ -3,7 +3,7 @@ AM_CFLAGS = -Wall -Werror @XML_CFLAGS@ AM_LDFLAGS = -rpath @libdir@ -EXTRA_DIST = mock_sync.h +EXTRA_DIST = mock_sync.h Makefile.in if ENABLE_TESTS noinst_LTLIBRARIES = mock_sync.la mockformat.la Modified: trunk/tools/osyncplugin.c =================================================================== --- trunk/tools/osyncplugin.c 2005-04-07 15:09:03 UTC (rev 456) +++ trunk/tools/osyncplugin.c 2005-04-07 15:11:36 UTC (rev 457) @@ -9,6 +9,13 @@ GMutex *working; GMutex *working2; GList *changes; +GList *tests; +osync_bool alwaysempty; + +typedef struct OSyncPluginTest { + char *name; + void (*test)(OSyncMember *, const char *); +} OSyncPluginTest; static void usage (char *name, int ecode) { @@ -236,40 +243,77 @@ connect(member); GList *chg = get_changes(member); GList *i = NULL; + int num_del = 0; for (i = chg; i; i = i->next) { OSyncChange *change = i->data; delete_data(member, change); + num_del++; } disconnect(member); - connect(member); - get_changes(member); - disconnect(member); + if (!alwaysempty) { + connect(member); + chg = get_changes(member); + g_assert(g_list_length(chg) == num_del); + disconnect(member); + + connect(member); + chg = get_changes(member); + g_assert(g_list_length(chg) == 0); + disconnect(member); + } } -static void run_tests(OSyncMember *member, const char *objtype) +static void run_all_tests(OSyncMember *member, const char *objtype) { - printf("Emptying...\n"); empty_all(member); - - printf("\nStarting tests...\n"); - printf("Add test 1...\n"); - add_test1(member, objtype); - printf("\nAdd test 2...\n"); - add_test2(member, objtype); - printf("\nModify test 1...\n"); - modify_test1(member, objtype); - - printf("\nDone testing!\n"); + GList *t; + for (t = tests; t; t = t->next) { + OSyncPluginTest *test = t->data; + test->test(member, objtype); + } } +static void run_test(const char *name, OSyncMember *member, const char *objtype) +{ + empty_all(member); + GList *t; + for (t = tests; t; t = t->next) { + OSyncPluginTest *test = t->data; + if (!strcmp(name, test->name)) + test->test(member, objtype); + } +} + +static void register_test(const char *name, void test(OSyncMember *, const char *)) +{ + OSyncPluginTest *newtest = g_malloc0(sizeof(OSyncPluginTest)); + newtest->name = g_strdup(name); + newtest->test = test; + tests = g_list_append(tests, newtest); +} + +static void register_tests(void) +{ + tests = NULL; + register_test("add_test1", add_test1); + register_test("add_test1", add_test1); + register_test("add_test2", add_test2); + register_test("modify_test1", modify_test1); +} + + + int main (int argc, char *argv[]) { int i; char *pluginname = NULL; char *configfile = NULL; char *objtype = NULL; + char *testname = NULL; OSyncError *error = NULL; + alwaysempty = FALSE; + if (argc < 2) usage (argv[0], 1); @@ -288,12 +332,12 @@ usage (argv[0], 1); } else if (!strcmp (arg, "--help")) { usage (argv[0], 0); - } else if (!strcmp (arg, "--")) { - break; - } else if (arg[0] == '-') { - usage (argv[0], 1); + } else if (!strcmp (arg, "--alwaysempty")) { + alwaysempty = TRUE; } else { - usage (argv[0], 1); + if (testname) + usage (argv[0], 1); + testname = argv[i + 1]; } } @@ -312,16 +356,20 @@ char *config; int size; - if (!osync_file_read(configfile, &config, &size, &error)) { - fprintf(stderr, "Unable to read config: %s\n", osync_error_print(&error)); - osync_error_free(&error); - return 1; + if (configfile) { + if (!osync_file_read(configfile, &config, &size, &error)) { + fprintf(stderr, "Unable to read config: %s\n", osync_error_print(&error)); + osync_error_free(&error); + return 1; + } } char *testdir = g_strdup_printf("%s/plgtest.XXXXXX", g_get_tmp_dir()); mkdtemp(testdir); - osync_member_set_config(member, config, size); + if (configfile) + osync_member_set_config(member, config, size); + osync_member_set_pluginname(member, pluginname); osync_member_set_configdir(member, testdir); OSyncMemberFunctions *functions = osync_member_get_memberfunctions(member); @@ -332,12 +380,22 @@ return 1; } + if (objtype) { + osync_member_set_objtype_enabled(member, "data", FALSE); + osync_member_set_objtype_enabled(member, objtype, TRUE); + } + if (!g_thread_supported ()) g_thread_init (NULL); working = g_mutex_new(); working2 = g_mutex_new(); - run_tests(member, objtype); + register_tests(); + if (testname) + run_test(testname, member, objtype); + else + run_all_tests(member, objtype); + osync_member_finalize(member); return 0; |
From: <svn...@op...> - 2005-04-07 15:07:41
|
Author: abauer Date: 2005-04-07 17:09:03 +0200 (Thu, 07 Apr 2005) New Revision: 456 Modified: branches/experimental-branch/formats/vformats-xml/xml-vcal.c branches/experimental-branch/opensync/opensync_member.c branches/experimental-branch/tools/osyncplugin.c Log: Make set_objecttype_enabled work even for "data" The osyncplugin tool now support running individual tests Updated the comparison of events and todos Modified: branches/experimental-branch/formats/vformats-xml/xml-vcal.c =================================================================== --- branches/experimental-branch/formats/vformats-xml/xml-vcal.c 2005-04-07 14:59:41 UTC (rev 455) +++ branches/experimental-branch/formats/vformats-xml/xml-vcal.c 2005-04-07 15:09:03 UTC (rev 456) @@ -1175,8 +1175,8 @@ OSyncXMLScore score[] = { - {100, "/vcal/Event/StartTime"}, - {100, "/vcal/Event/EndTime"}, + {10, "/vcal/Event/StartTime"}, + {10, "/vcal/Event/EndTime"}, {100, "/vcal/Event/Summary"}, {0, "/vcal/Event/Uid"}, {0, "/vcal/Event/Revision"}, @@ -1185,10 +1185,13 @@ {0, "/vcal/Event/DateCreated"}, {0, "/vcal/Event/LastModified"}, {0, "/vcal/Event/Sequence"}, + {0, "/vcal/Event/Class[Content = \"PUBLIC\"]"}, + {0, "/vcal/Event/Priority[Content = 3]"}, + {0, "/vcal/Event/Transparency[Content = \"OPAQUE\"]"}, {0, NULL} }; - OSyncConvCmpResult ret = osxml_compare((xmlDoc*)osync_change_get_data(leftchange), (xmlDoc*)osync_change_get_data(rightchange), score, 0, 299); + OSyncConvCmpResult ret = osxml_compare((xmlDoc*)osync_change_get_data(leftchange), (xmlDoc*)osync_change_get_data(rightchange), score, 0, 99); osync_trace(TRACE_EXIT, "%s: %i", __func__, ret); return ret; @@ -1208,6 +1211,9 @@ {0, "/vcal/Todo/DateCreated"}, {0, "/vcal/Todo/LastModified"}, {0, "/vcal/Todo/Sequence"}, + {0, "/vcal/Todo/Class[Content = \"PUBLIC\"]"}, + {0, "/vcal/Todo/Priority[Content = 3]"}, + {0, "/vcal/Todo/PercentComplete[Content = 0]"}, {0, NULL} }; Modified: branches/experimental-branch/opensync/opensync_member.c =================================================================== --- branches/experimental-branch/opensync/opensync_member.c 2005-04-07 14:59:41 UTC (rev 455) +++ branches/experimental-branch/opensync/opensync_member.c 2005-04-07 15:09:03 UTC (rev 456) @@ -825,14 +825,25 @@ */ void osync_member_set_objtype_enabled(OSyncMember *member, const char *objtypestr, osync_bool enabled) { - if (osync_conv_objtype_is_any(objtypestr)) - g_assert_not_reached(); - + osync_trace(TRACE_ENTRY, "%s(%p, %s, %i)", __func__, member, objtypestr, enabled); + OSyncObjTypeSink *sink = NULL; g_assert(member); - OSyncObjTypeSink *sink = osync_member_find_objtype_sink(member, objtypestr); - g_assert(sink); - sink->enabled = enabled; + if (osync_conv_objtype_is_any(objtypestr)) { + GList *o = NULL; + for (o = member->objtype_sinks; o; o = o->next) { + OSyncObjTypeSink *sink = o->data; + sink->enabled = enabled; + } + } else { + sink = osync_member_find_objtype_sink(member, objtypestr); + if (!sink) { + osync_trace(TRACE_EXIT_ERROR, "Unable to find sink with name \"%s\"", objtypestr); + return; + } + sink->enabled = enabled; + } + osync_trace(TRACE_EXIT, "%s", __func__); } /*@}*/ Modified: branches/experimental-branch/tools/osyncplugin.c =================================================================== --- branches/experimental-branch/tools/osyncplugin.c 2005-04-07 14:59:41 UTC (rev 455) +++ branches/experimental-branch/tools/osyncplugin.c 2005-04-07 15:09:03 UTC (rev 456) @@ -9,6 +9,13 @@ GMutex *working; GMutex *working2; GList *changes; +GList *tests; +osync_bool alwaysempty; + +typedef struct OSyncPluginTest { + char *name; + void (*test)(OSyncMember *, const char *); +} OSyncPluginTest; static void usage (char *name, int ecode) { @@ -236,40 +243,77 @@ connect(member); GList *chg = get_changes(member); GList *i = NULL; + int num_del = 0; for (i = chg; i; i = i->next) { OSyncChange *change = i->data; delete_data(member, change); + num_del++; } disconnect(member); - connect(member); - get_changes(member); - disconnect(member); + if (!alwaysempty) { + connect(member); + chg = get_changes(member); + g_assert(g_list_length(chg) == num_del); + disconnect(member); + + connect(member); + chg = get_changes(member); + g_assert(g_list_length(chg) == 0); + disconnect(member); + } } -static void run_tests(OSyncMember *member, const char *objtype) +static void run_all_tests(OSyncMember *member, const char *objtype) { - printf("Emptying...\n"); empty_all(member); - - printf("\nStarting tests...\n"); - printf("Add test 1...\n"); - add_test1(member, objtype); - printf("\nAdd test 2...\n"); - add_test2(member, objtype); - printf("\nModify test 1...\n"); - modify_test1(member, objtype); - - printf("\nDone testing!\n"); + GList *t; + for (t = tests; t; t = t->next) { + OSyncPluginTest *test = t->data; + test->test(member, objtype); + } } +static void run_test(const char *name, OSyncMember *member, const char *objtype) +{ + empty_all(member); + GList *t; + for (t = tests; t; t = t->next) { + OSyncPluginTest *test = t->data; + if (!strcmp(name, test->name)) + test->test(member, objtype); + } +} + +static void register_test(const char *name, void test(OSyncMember *, const char *)) +{ + OSyncPluginTest *newtest = g_malloc0(sizeof(OSyncPluginTest)); + newtest->name = g_strdup(name); + newtest->test = test; + tests = g_list_append(tests, newtest); +} + +static void register_tests(void) +{ + tests = NULL; + register_test("add_test1", add_test1); + register_test("add_test1", add_test1); + register_test("add_test2", add_test2); + register_test("modify_test1", modify_test1); +} + + + int main (int argc, char *argv[]) { int i; char *pluginname = NULL; char *configfile = NULL; char *objtype = NULL; + char *testname = NULL; OSyncError *error = NULL; + alwaysempty = FALSE; + if (argc < 2) usage (argv[0], 1); @@ -288,12 +332,12 @@ usage (argv[0], 1); } else if (!strcmp (arg, "--help")) { usage (argv[0], 0); - } else if (!strcmp (arg, "--")) { - break; - } else if (arg[0] == '-') { - usage (argv[0], 1); + } else if (!strcmp (arg, "--alwaysempty")) { + alwaysempty = TRUE; } else { - usage (argv[0], 1); + if (testname) + usage (argv[0], 1); + testname = argv[i + 1]; } } @@ -325,6 +369,7 @@ if (configfile) osync_member_set_config(member, config, size); + osync_member_set_pluginname(member, pluginname); osync_member_set_configdir(member, testdir); OSyncMemberFunctions *functions = osync_member_get_memberfunctions(member); @@ -335,12 +380,22 @@ return 1; } + if (objtype) { + osync_member_set_objtype_enabled(member, "data", FALSE); + osync_member_set_objtype_enabled(member, objtype, TRUE); + } + if (!g_thread_supported ()) g_thread_init (NULL); working = g_mutex_new(); working2 = g_mutex_new(); - run_tests(member, objtype); + register_tests(); + if (testname) + run_test(testname, member, objtype); + else + run_all_tests(member, objtype); + osync_member_finalize(member); return 0; |
From: <svn...@op...> - 2005-04-07 14:58:21
|
Author: abauer Date: 2005-04-07 16:59:41 +0200 (Thu, 07 Apr 2005) New Revision: 455 Added: plugins/kdepim/src/KNotesIface.h plugins/kdepim/src/kaddrbook.cpp plugins/kdepim/tests/ plugins/kdepim/tests/Makefile.am plugins/kdepim/tests/check_contact plugins/kdepim/tests/check_event plugins/kdepim/tests/check_note plugins/kdepim/tests/check_todo Removed: plugins/kdepim/tests/Makefile.am plugins/kdepim/tests/check_contact plugins/kdepim/tests/check_event plugins/kdepim/tests/check_note plugins/kdepim/tests/check_todo Modified: plugins/kdepim/ plugins/kdepim/Makefile.am plugins/kdepim/configure.in plugins/kdepim/src/ plugins/kdepim/src/kaddrbook.h plugins/kdepim/src/kcal.cpp plugins/kdepim/src/kcal.h plugins/kdepim/src/kdepim_impl.cpp plugins/kdepim/src/kdepim_sync.cpp plugins/kdepim/src/knotes.cpp plugins/kdepim/src/knotes.h plugins/kdepim/src/osyncbase.h Log: svn merge -r 434:454 ../../branches/experimental-kdepim/ . Merge the experimental branch of the kdepim plugin which contains fixes to notes support and unit test support Property changes on: plugins/kdepim ___________________________________________________________________ Name: svn:ignore - .libs .deps configure Makefile.in config.log config.status stamp-h1 config.h autom4te.cache libtool aclocal.m4 Makefile kdepim_sync.loT mkinstalldirs depcomp config.guess config.sub ltmain.sh missing install-sh configure.files subdirs stamp-h.in config.cache kdepim_impl_la-kcal.loT config.h.in libopensync-plugin-kdepim* + .libs .deps configure Makefile.in config.log config.status stamp-h1 config.h autom4te.cache libtool aclocal.m4 Makefile kdepim_sync.loT mkinstalldirs depcomp config.guess config.sub ltmain.sh missing install-sh configure.files subdirs stamp-h.in config.cache kdepim_impl_la-kcal.loT config.h.in libopensync-plugin-kdepim* .project .cdtproject Modified: plugins/kdepim/Makefile.am =================================================================== --- plugins/kdepim/Makefile.am 2005-04-07 14:56:42 UTC (rev 454) +++ plugins/kdepim/Makefile.am 2005-04-07 14:59:41 UTC (rev 455) @@ -1,31 +1,29 @@ -#FIXME kdepimlibdir=@OPENSYNC_LIBDIR@/kdepim + +SUBDIRS = tests + plugindir=@OPENSYNC_PLUGINDIR@ -#configdir=@OPENSYNC_CONFIGDIR@ -#FIXME: set EXTRA_DIST - INCLUDES = $(OSYNC_CFLAGS) $(XML_CFLAGS) $(GLIB_CFLAGS) $(KDE_INCLUDES) $(QT_INCLUDES) AM_CXXFLAGS = -Wall -Werror -# Temporary hack to fix difference between <opensync/opensync.h> and <opensync.h> -INCLUDES += -I@OPENSYNC_INCLUDEDIR@/opensync-1.0/opensync - #FIXME: Is there a KDE macro to set this? LIB_KCAL = -lkcal plugin_LTLIBRARIES = kdepim_sync.la kdepim_lib.la -# format_LTLIBRARIES = kcal_format.la EXTRA_DIST = \ src/kaddrbook.h \ src/kcal.h \ src/osyncbase.h \ - src/knotes.h + src/knotes.h \ + src/KNotesIface.h + +CLEANFILES = \ + src/KNotesIface_stub.h \ + src/KNotesIface_skel.cpp \ + src/KNotesIface_stub.cpp \ + src/KNotesIface.kidl -# kcal_format_la_SOURCES = src/kcal_format.cpp -# kcal_format_la_LDFLAGS = -avoid-version -export-dynamic -module -# kcal_format_la_LIBADD = $(KDE_RPATH) $(LIB_KABC) - kdepim_sync_la_SOURCES = src/kdepim_sync.cpp kdepim_sync_la_CXXFLAGS = -DPLUGINDIR=\"$(plugindir)\" -DKDEPIM_LIBDIR=\"$(plugindir)\" -Wall -Werror kdepim_sync_la_LDFLAGS = -avoid-version -export-dynamic -module @@ -33,11 +31,16 @@ # ugly hack to make the c++ library work kdepim_sync_la_LIBADD = -lstdc++ -L@OPENSYNC_LIBDIR@ -kdepim_lib_la_SOURCES = src/kdepim_impl.cpp \ - src/kcal.cpp \ - src/knotes.cpp +kdepim_lib_la_SOURCES = \ + src/KNotesIface_stub.cpp \ + src/kdepim_impl.cpp \ + src/kcal.cpp \ + src/knotes.cpp \ + src/kaddrbook.cpp kdepim_lib_la_CXXFLAGS = -DPLUGINDIR=\"$(plugindir)\" -DKDEPIM_LIBDIR=\"$(plugindir)\" -Wall -Werror kdepim_lib_la_LDFLAGS = $(KDE_LDFLAGS) -avoid-version -export-dynamic -module kdepim_lib_la_LIBADD = $(KDE_RPATH) $(LIB_KABC) $(LIB_KCAL) -L$(libdir) -L@OPENSYNC_LIBDIR@ -lopensync-xml - +src/KNotesIface_stub.cpp: + dcopidl src/KNotesIface.h > src/KNotesIface.kidl + dcopidl2cpp src/KNotesIface.kidl Modified: plugins/kdepim/configure.in =================================================================== --- plugins/kdepim/configure.in 2005-04-07 14:56:42 UTC (rev 454) +++ plugins/kdepim/configure.in 2005-04-07 14:59:41 UTC (rev 455) @@ -46,7 +46,7 @@ AC_C_BIGENDIAN AC_CHECK_KDEMAXPATHLEN -AC_CONFIG_FILES([ Makefile ]) +AC_CONFIG_FILES([ Makefile tests/Makefile]) AC_OUTPUT if test "$all_tests" = "bad"; then Property changes on: plugins/kdepim/src ___________________________________________________________________ Name: svn:ignore - .libs Makefile.in *.loT .deps Makefile + .libs Makefile.in *.loT .deps Makefile KNotesIface_stub.cpp KNotesIface_skel.cpp KNotesIface.kidl KNotesIface_stub.h Copied: plugins/kdepim/src/KNotesIface.h (from rev 454, branches/experimental-kdepim/src/KNotesIface.h) Copied: plugins/kdepim/src/kaddrbook.cpp (from rev 454, branches/experimental-kdepim/src/kaddrbook.cpp) Modified: plugins/kdepim/src/kaddrbook.h =================================================================== --- plugins/kdepim/src/kaddrbook.h 2005-04-07 14:56:42 UTC (rev 454) +++ plugins/kdepim/src/kaddrbook.h 2005-04-07 14:59:41 UTC (rev 455) @@ -23,7 +23,28 @@ #ifndef KADDRBOOK_H #define KADDRBOOK_H +#include <kabc/stdaddressbook.h> +#include <kabc/vcardconverter.h> +#include <kabc/resource.h> + #include "osyncbase.h" +class KContactDataSource { + private: + KABC::AddressBook* addressbookptr; + + OSyncHashTable *hashtable; + OSyncMember *member; + public: + KContactDataSource(OSyncMember *member, OSyncHashTable *hashtable); + + QString calc_hash(KABC::Addressee &e); + bool connect(OSyncContext *ctx); + bool disconnect(OSyncContext *ctx); + bool contact_get_changeinfo(OSyncContext *ctx); + bool vcard_access(OSyncContext *ctx, OSyncChange *chg); + bool connected; +}; + #endif Modified: plugins/kdepim/src/kcal.cpp =================================================================== --- plugins/kdepim/src/kcal.cpp 2005-04-07 14:56:42 UTC (rev 454) +++ plugins/kdepim/src/kcal.cpp 2005-04-07 14:59:41 UTC (rev 455) @@ -23,17 +23,12 @@ * @autor Eduardo Pereira Habkost <eha...@co...> */ -#include <libkcal/calendarresources.h> -#include <libkcal/icalformat.h> -#include <libkcal/calendarlocal.h> -#include <kdeversion.h> - -#include "osyncbase.h" #include "kcal.h" KCalDataSource::KCalDataSource(OSyncMember *member, OSyncHashTable *hashtable) : hashtable(hashtable), member(member) { + connected = false; } bool KCalDataSource::connect(OSyncContext *ctx) @@ -51,7 +46,9 @@ calendar->load(); #endif osync_debug("kcal", 3, "Calendar: %d events", calendar->events().size()); - return true; + + connected = true; + return true; } bool KCalDataSource::disconnect(OSyncContext *) @@ -62,6 +59,7 @@ delete calendar; calendar = NULL; + connected = false; return true; } @@ -189,11 +187,14 @@ case CHANGE_ADDED: case CHANGE_MODIFIED: { + printf("Adding\n"); KCal::ICalFormat format; /* First, parse to a temporary calendar, because * we should set the uid on the events */ + + printf("Adding1\n"); KCal::CalendarLocal cal; QString data = QString::fromUtf8(osync_change_get_data(chg), osync_change_get_datasize(chg)); if (!format.fromString(&cal, data)) { @@ -201,6 +202,7 @@ return false; } + printf("Adding2 %p\n", calendar); /*FIXME: The event/to-do will be overwritten. But I can't differentiate * between a field being removed and a missing field because * the other device don't support them, because OpenSync currently @@ -216,6 +218,7 @@ * * We iterate over the list, but it should have only one event. */ + printf("Adding3\n"); KCal::Incidence::List evts = cal.incidences(); for (KCal::Incidence::List::ConstIterator i = evts.begin(); i != evts.end(); i++) { KCal::Incidence *e = (*i)->clone(); Modified: plugins/kdepim/src/kcal.h =================================================================== --- plugins/kdepim/src/kcal.h 2005-04-07 14:56:42 UTC (rev 454) +++ plugins/kdepim/src/kcal.h 2005-04-07 14:59:41 UTC (rev 455) @@ -25,6 +25,9 @@ #include <libkcal/calendarresources.h> #include <libkcal/incidence.h> +#include <libkcal/icalformat.h> +#include <libkcal/calendarlocal.h> +#include <kdeversion.h> #include "osyncbase.h" @@ -108,4 +111,5 @@ * On error, returns false, after calling osync_context_report_error() */ bool todo_commit_change(OSyncContext *ctx, OSyncChange *chg); + bool connected; }; Modified: plugins/kdepim/src/kdepim_impl.cpp =================================================================== --- plugins/kdepim/src/kdepim_impl.cpp 2005-04-07 14:56:42 UTC (rev 454) +++ plugins/kdepim/src/kdepim_impl.cpp 2005-04-07 14:59:41 UTC (rev 455) @@ -24,14 +24,9 @@ * @autor Eduardo Pereira Habkost <eha...@co...> */ -extern "C" -{ -#include <opensync/opensync.h> -} -#include <kabc/stdaddressbook.h> -#include <kabc/vcardconverter.h> -#include <kabc/resource.h> + + #include <libkcal/resourcecalendar.h> #include <kinstance.h> #include <klocale.h> @@ -50,41 +45,15 @@ #include "kcal.h" #include "knotes.h" - -/*TODO: check why/if the function below is necessary */ -static -void unfold_vcard(char *vcard, size_t *size) -{ - char* in = vcard; - char* out = vcard; - char *end = vcard + *size; - while ( in < end) - { - /* remove any occurrences of "=[CR][LF]" */ - /* these denote folded line markers in VCARD format. */ - /* Dont know why, but Evolution uses the leading "=" */ - /* character to (presumably) denote a control sequence. */ - /* This is not quite how I interpret the VCARD RFC2426 */ - /* spec (section 2.6 line delimiting and folding). */ - /* This seems to work though, so thats the main thing! */ - if (in[0]=='=' && in[1]==13 && in[2]==10) - in+=3; - else - *out++ = *in++; - } - *size = out - vcard; -} - class KdePluginImplementation: public KdePluginImplementationBase { private: - KABC::AddressBook* addressbookptr; - KCalDataSource *kcal; KNotesDataSource *knotes; - - OSyncMember *member; + KContactDataSource *kaddrbook; + OSyncHashTable *hashtable; + OSyncMember *member; KApplication *application; @@ -94,15 +63,15 @@ { } - bool init(OSyncError **) + bool init(OSyncError **error) { - //osync_debug("kde", 3, "%s(%s)", __FUNCTION__); + osync_trace(TRACE_ENTRY, "%s(%p)", __func__, error); KAboutData aboutData( - "opensync-kdepim-plugin", // internal program name - I18N_NOOP( "OpenSync-KDE-plugin"), // displayable program name. + "libopensync-kdepim-plugin", // internal program name + "OpenSync-KDE-plugin", // displayable program name. "0.1", // version string - I18N_NOOP( "OpenSync KDEPIM plugin" ), // short porgram description + "OpenSync KDEPIM plugin", // short porgram description KAboutData::License_GPL, // license type "(c) 2005, Eduardo Pereira Habkost", // copyright statement 0, // any free form text @@ -113,14 +82,13 @@ KCmdLineArgs::init(&aboutData); application = new KApplication(); - //get a handle to the standard KDE addressbook - addressbookptr = KABC::StdAddressBook::self(); - - hashtable = osync_hashtable_new(); - + hashtable = osync_hashtable_new(); + kcal = new KCalDataSource(member, hashtable); knotes = new KNotesDataSource(member, hashtable); + kaddrbook = new KContactDataSource(member, hashtable); + osync_trace(TRACE_EXIT, "%s", __func__); return true; } @@ -130,296 +98,114 @@ delete kcal; kcal = NULL; } + if (knotes) { delete knotes; knotes = NULL; } + if (application) { delete application; application = NULL; } + if (hashtable) osync_hashtable_free(hashtable); } - /** Calculate the hash value for an Addressee. - * Should be called before returning/writing the - * data, because the revision of the Addressee - * can be changed. - */ - QString calc_hash(KABC::Addressee &e) - { - //Get the revision date of the KDE addressbook entry. - //Regard entries with invalid revision dates as having just been changed. - QDateTime revdate = e.revision(); - osync_debug("kde", 3, "Getting hash: %s", revdate.toString().data()); - if (!revdate.isValid()) - { - revdate = QDateTime::currentDateTime(); - e.setRevision(revdate); - } - - return revdate.toString(); - } - virtual void connect(OSyncContext *ctx) { - //Lock the addressbook - //addressbookticket = addressbookptr->requestSaveTicket(); - - OSyncError *error = NULL; - if (!osync_hashtable_load(hashtable, member, &error)) - { + osync_trace(TRACE_ENTRY, "%s(%p)", __func__, ctx); + + OSyncError *error = NULL; + if (!osync_hashtable_load(hashtable, member, &error)) { osync_context_report_osyncerror(ctx, &error); + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(&error)); + osync_error_free(&error); return; } - - //Detection mechanismn if this is the first sync - if (!osync_anchor_compare(member, "synced", "true")) { - osync_member_set_slow_sync(member, "contact", TRUE); - osync_anchor_update(member, "synced", "true"); + + + if (kcal && \ + (osync_member_objtype_enabled(member, "todo") || \ + osync_member_objtype_enabled(member, "event")) && \ + !kcal->connect(ctx)) { + osync_trace(TRACE_EXIT_ERROR, "%s: Unable to open calendar", __func__); + return; } - - /*if (!addressbookticket) - { - osync_context_report_error(ctx, OSYNC_ERROR_GENERIC, "Couldn't lock KDE addressbook"); - return; - }*/ - osync_debug("kde", 3, "KDE addressbook locked OK."); - - if (kcal && !kcal->connect(ctx)) - return; - if (knotes && !knotes->connect(ctx)) - return; - osync_context_report_success(ctx); + + if (knotes && \ + osync_member_objtype_enabled(member, "note") && \ + !knotes->connect(ctx)) { + osync_trace(TRACE_EXIT_ERROR, "%s: Unable to open notes", __func__); + return; + } + + if (kaddrbook && \ + osync_member_objtype_enabled(member, "contact") && \ + !kaddrbook->connect(ctx)) { + osync_trace(TRACE_EXIT_ERROR, "%s: Unable to open addressbook", __func__); + return; + } + + osync_context_report_success(ctx); + osync_trace(TRACE_EXIT, "%s", __func__); } - + virtual void disconnect(OSyncContext *ctx) { - //Unlock the addressbook - //addressbookptr->save(addressbookticket); - //addressbookticket = NULL; + osync_hashtable_close(hashtable); - KABC::Ticket *ticket = addressbookptr->requestSaveTicket(); - if ( !ticket ) { - osync_context_report_error(ctx, OSYNC_ERROR_NOT_SUPPORTED, "Unable to get save ticket"); - return; - } - - if ( !addressbookptr->save( ticket ) ) { - osync_context_report_error(ctx, OSYNC_ERROR_NOT_SUPPORTED, "Unable to get save using ticket"); - return; - } - - osync_hashtable_close(hashtable); - - if (kcal && !kcal->disconnect(ctx)) - return; - if (knotes && !knotes->disconnect(ctx)) - return; - osync_context_report_success(ctx); + if (kcal && kcal->connected && !kcal->disconnect(ctx)) + return; + if (knotes && knotes->connected && !knotes->disconnect(ctx)) + return; + if (kaddrbook && kaddrbook->connected && !kaddrbook->disconnect(ctx)) + return; + + osync_context_report_success(ctx); } - - /*FIXME: move kaddrbook implementation to kaddrbook.cpp */ - bool addrbook_get_changeinfo(OSyncContext *ctx) - { - //osync_debug("kde", 3, "kaddrbook::%s(newdbs=%d)", __FUNCTION__, newdbs); - - if (osync_member_get_slow_sync(member, "contact")) - osync_hashtable_set_slow_sync(hashtable, "contact"); - - // We must reload the KDE addressbook in order to retrieve the latest changes. - if (!addressbookptr->load()) { - osync_context_report_error(ctx, OSYNC_ERROR_GENERIC, "Couldn't reload KDE addressbook"); - return false; - } - osync_debug("kde", 3, "KDE addressbook reloaded OK."); - - KABC::VCardConverter converter; - - for (KABC::AddressBook::Iterator it=addressbookptr->begin(); it!=addressbookptr->end(); it++ ) { - QString uid = it->uid(); - - OSyncChange *chg = osync_change_new(); - - osync_change_set_member(chg, member); - osync_change_set_uid(chg, uid.local8Bit()); - - QString hash = calc_hash(*it); - - // Convert the VCARD data into a string - const char *data = converter.createVCard(*it).utf8(); - osync_change_set_data(chg, strdup(data), strlen(data) + 1, TRUE); - - // object type and format - osync_change_set_objtype_string(chg, "contact"); - osync_change_set_objformat_string(chg, "vcard21"); - - // Use the hash table to check if the object - // needs to be reported - osync_change_set_hash(chg, hash.data()); - if (osync_hashtable_detect_change(hashtable, chg)) { - osync_context_report_change(ctx, chg); - osync_hashtable_update_hash(hashtable, chg); - } - } - - // Use the hashtable to report deletions - osync_hashtable_report_deleted(hashtable, ctx, "contact"); - - return true; - } - - virtual void get_changeinfo(OSyncContext *ctx) - { - if (!addrbook_get_changeinfo(ctx)) - return; - if (kcal && !kcal->get_changeinfo_events(ctx)) - return; - - if (kcal && !kcal->get_changeinfo_todos(ctx)) - return; - - if (knotes && !knotes->get_changeinfo(ctx)) - return; - - osync_context_report_success(ctx); - } - - void kabc_get_data(OSyncContext *ctx, OSyncChange *chg) - { - QString uid = osync_change_get_uid(chg); - KABC::Addressee a = addressbookptr->findByUid(uid); - KABC::VCardConverter converter; - QCString card = converter.createVCard(a).utf8(); - const char *data = card; - //FIXME: deallocate data somewhere - osync_change_set_data(chg, strdup(data), strlen(data), 1); - osync_context_report_success(ctx); - } - - - virtual void get_data(OSyncContext *ctx, OSyncChange *) - { - /* - switch (osync_change_get_objtype(chg)) { - case contact: - kabc_get_data(ctx, chg); - break; - case calendar: - kcal->get_data(ctx, chg); - break; - default: - osync_context_report_error(ctx, OSYNC_ERROR_FILE_NOT_FOUND, "Invalid UID"); - return; - } - osync_context_report_success(ctx); - */ - osync_context_report_error(ctx, OSYNC_ERROR_NOT_SUPPORTED, "Not implemented yet"); - } - - - - /** Access an object, without returning success - * - * returns 0 on success, < 0 on error. - * If an error occurss, the error will be already reported - * using osync_context_report_error() - */ - int __vcard_access(OSyncContext *ctx, OSyncChange *chg) - { - KABC::VCardConverter converter; - - // convert VCARD string from obj->comp into an Addresse object. - char *data = osync_change_get_data(chg); - size_t data_size = osync_change_get_datasize(chg); - QString uid = osync_change_get_uid(chg); + virtual void get_changeinfo(OSyncContext *ctx) + { + if (kaddrbook && kaddrbook->connected && !kaddrbook->contact_get_changeinfo(ctx)) + return; - OSyncChangeType chtype = osync_change_get_changetype(chg); - switch(chtype) - { - case CHANGE_MODIFIED: - { - unfold_vcard(data, &data_size); - KABC::Addressee addressee = converter.parseVCard(QString::fromUtf8(data, data_size)); + if (kcal && kcal->connected && !kcal->get_changeinfo_events(ctx)) + return; + + if (kcal && kcal->connected && !kcal->get_changeinfo_todos(ctx)) + return; + + if (knotes && knotes->connected && !knotes->get_changeinfo(ctx)) + return; + + osync_context_report_success(ctx); + } - // ensure it has the correct UID and revision - addressee.setUid(uid); - addressee.setRevision(QDateTime::currentDateTime()); - - // replace the current addressbook entry (if any) with the new one - - addressbookptr->insertAddressee(addressee); - - QString hash = calc_hash(addressee); - osync_change_set_hash(chg, hash); - osync_debug("kde", 3, "KDE ADDRESSBOOK ENTRY UPDATED (UID=%s)", (const char *)uid.local8Bit()); - break; - } - - case CHANGE_ADDED: - { - unfold_vcard(data, &data_size); - KABC::Addressee addressee = converter.parseVCard(QString::fromUtf8(data, data_size)); - - // ensure it has the correct revision - addressee.setRevision(QDateTime::currentDateTime()); - - // add the new address to the addressbook - addressbookptr->insertAddressee(addressee); - - osync_change_set_uid(chg, addressee.uid().local8Bit()); - - QString hash = calc_hash(addressee); - osync_change_set_hash(chg, hash); - osync_debug("kde", 3, "KDE ADDRESSBOOK ENTRY ADDED (UID=%s)", (const char *)addressee.uid().local8Bit()); - - break; - } - - case CHANGE_DELETED: - { - if (uid.isEmpty()) - { - osync_context_report_error(ctx, OSYNC_ERROR_FILE_NOT_FOUND, "Trying to delete entry with empty UID"); - return -1; - } - - //find addressbook entry with matching UID and delete it - KABC::Addressee addressee = addressbookptr->findByUid(uid); - if(!addressee.isEmpty()) - addressbookptr->removeAddressee(addressee); - - osync_debug("kde", 3, "KDE ADDRESSBOOK ENTRY DELETED (UID=%s)", (const char*)uid.local8Bit()); - - break; - } - default: - osync_context_report_error(ctx, OSYNC_ERROR_NOT_SUPPORTED, "Operation not supported"); - return -1; - } - - return 0; - } - virtual bool vcard_access(OSyncContext *ctx, OSyncChange *chg) { - if (__vcard_access(ctx, chg) < 0) - return false; - osync_context_report_success(ctx); - /*FIXME: What should be returned? */ - return true; + if (kaddrbook) + return kaddrbook->vcard_access(ctx, chg); + else { + osync_context_report_error(ctx, OSYNC_ERROR_NOT_SUPPORTED, "No addressbook loaded"); + return false; + } + return true; } virtual bool vcard_commit_change(OSyncContext *ctx, OSyncChange *chg) { - if ( __vcard_access(ctx, chg) < 0) - return false; - osync_hashtable_update_hash(hashtable, chg); - osync_context_report_success(ctx); - /*FIXME: What should be returned? */ - return true; + if (kaddrbook) + if (kaddrbook->vcard_access(ctx, chg)) + osync_hashtable_update_hash(hashtable, chg); + else + return FALSE; + else { + osync_context_report_error(ctx, OSYNC_ERROR_NOT_SUPPORTED, "No addressbook loaded"); + return false; + } + return true; } virtual bool event_access(OSyncContext *ctx, OSyncChange *chg) Modified: plugins/kdepim/src/kdepim_sync.cpp =================================================================== --- plugins/kdepim/src/kdepim_sync.cpp 2005-04-07 14:56:42 UTC (rev 454) +++ plugins/kdepim/src/kdepim_sync.cpp 2005-04-07 14:59:41 UTC (rev 455) @@ -102,14 +102,6 @@ impl_object->get_changeinfo(ctx); } -static void kde_get_data(OSyncContext *ctx, OSyncChange *chg) -{ - KdePluginImplementationBase *impl_object = impl_object_for_context(ctx); - osync_debug("kde", 3, "%s",__FUNCTION__); - - impl_object->get_data(ctx, chg); -} - static osync_bool kde_vcard_commit_change(OSyncContext *ctx, OSyncChange *change) { KdePluginImplementationBase *impl_object = impl_object_for_context(ctx); @@ -196,12 +188,14 @@ info->functions.disconnect = kde_disconnect; info->functions.finalize = kde_finalize; info->functions.get_changeinfo = kde_get_changeinfo; - info->functions.get_data = kde_get_data; osync_plugin_accept_objtype(info, "contact"); osync_plugin_accept_objformat(info, "contact", "vcard30", "kde"); osync_plugin_set_commit_objformat(info, "contact", "vcard30", kde_vcard_commit_change); osync_plugin_set_access_objformat(info, "contact", "vcard30", kde_vcard_access); + osync_plugin_accept_objformat(info, "contact", "vcard21", "kde"); + osync_plugin_set_commit_objformat(info, "contact", "vcard21", kde_vcard_commit_change); + osync_plugin_set_access_objformat(info, "contact", "vcard21", kde_vcard_access); osync_plugin_accept_objtype(info, "event"); osync_plugin_accept_objformat(info, "event", "vevent20", "kde"); Modified: plugins/kdepim/src/knotes.cpp =================================================================== --- plugins/kdepim/src/knotes.cpp 2005-04-07 14:56:42 UTC (rev 454) +++ plugins/kdepim/src/knotes.cpp 2005-04-07 14:59:41 UTC (rev 455) @@ -26,158 +26,128 @@ * This module implements the access to the KDE 3.2 Notes, that are * stored on KGlobal::dirs()->saveLocation( "data" , "knotes/" ) + "notes.ics" * - * TODO: Check how notes are stored on KDE 3.3/3.4, and use the right interface. - * (http://www.opensync.org/ticket/34) */ -#include <libkcal/calendarlocal.h> -#include <libkcal/icalformat.h> -#include <kglobal.h> -#include <kstandarddirs.h> -#include <kio/netaccess.h> -#include <klocale.h> -#include <errno.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> - #include "knotes.h" -extern "C" -{ -#include <opensync/opensync-xml.h> -} KNotesDataSource::KNotesDataSource(OSyncMember *m, OSyncHashTable *h) :member(m), hashtable(h) { + connected = false; } bool KNotesDataSource::connect(OSyncContext *ctx) { - // Terminate knotes because we will change its data - // Yes, it is _very_ ugly - //FIXME: use dcop programming interface, not the commandline utility - if (!system("dcop knotes MainApplication-Interface quit")) - /* Restart knotes later */ - knotesWasRunning = true; - else + osync_trace(TRACE_ENTRY, "%s(%p)", __func__, ctx); + + //connect to dcop + kn_dcop = KApplication::kApplication()->dcopClient(); + if (!kn_dcop) { + osync_context_report_error(ctx, OSYNC_ERROR_INITIALIZATION, "Unable to make new dcop for knotes"); + osync_trace(TRACE_EXIT_ERROR, "%s: Unable to make new dcop for knotes", __func__); + return FALSE; + } + + if (!kn_dcop->attach()) { + osync_context_report_error(ctx, OSYNC_ERROR_INITIALIZATION, "Unable to attach dcop for knotes"); + osync_trace(TRACE_EXIT_ERROR, "%s: Unable to attach dcop for knotes", __func__); + return FALSE; + } + + QString appId = kn_dcop->registerAs("opensync"); + + //check knotes running + QCStringList apps = kn_dcop->registeredApplications(); + if (!apps.contains("knotes")) { + //start knotes if not running knotesWasRunning = false; + system("knotes"); + system("dcop knotes KNotesIface hideAllNotes"); + } else + knotesWasRunning = true; - calendar = new KCal::CalendarLocal; - if (!calendar) { - osync_context_report_error(ctx, OSYNC_ERROR_INITIALIZATION, "Couldn't allocate calendar object"); - return false; - } - if (!calendar->load(KGlobal::dirs()->saveLocation( "data" , "knotes/" ) + "notes.ics")) { - osync_context_report_error(ctx, OSYNC_ERROR_FILE_NOT_FOUND, "Couldn't load notes"); - return false; - } + kn_iface = new KNotesIface_stub("knotes", "KNotesIface"); - return true; + connected = true; + osync_trace(TRACE_EXIT, "%s", __func__); + return true; } -/** Quick hack to avoid using KIO::NetAccess (that needs a KApplication instance */ -static bool copy_file(const char *from, const char *to) -{ - int f1 = open(from, O_RDONLY); - if (f1 < 0) - return false; - int f2 = open(to, O_WRONLY); - if (f2 < 0) { - close(f1); - return false; - } - - char buf[1024]; - int ret; - bool result = true; - for (;;) { - ret = read(f1, buf, 1024); - if (ret == 0) - break; - if (ret < 0) { - if (errno == EINTR) - continue; - result = false; - break; - } - int wret = write(f2, buf, ret); - if (wret < ret) { - result = false; - break; - } - } - close(f1); - close(f2); - return result; -} - -bool KNotesDataSource::saveNotes(OSyncContext *ctx) -{ - // shamelessly copied from KNotes source code - QString file = KGlobal::dirs()->saveLocation( "data" , "knotes/" ) + "notes.ics"; - QString backup = file + "~"; - - // if the backup fails don't even try to save the current notes - // (might just destroy the file that's already there) - - if ( !copy_file(file, backup) ) - { - osync_context_report_error(ctx, OSYNC_ERROR_IO_ERROR, - i18n("Unable to save the notes backup to " - "%1! Check that there is sufficient " - "disk space!").arg( backup ) ); - return false; - } - else if ( !calendar->save( file, new KCal::ICalFormat() ) ) - { - osync_context_report_error(ctx, OSYNC_ERROR_IO_ERROR, - i18n("Unable to save the notes to %1! " - "Check that there is sufficient disk space." - "There should be a backup in %2 " - "though.").arg( file ).arg( backup ) ); - return false; - } - return true; -} - bool KNotesDataSource::disconnect(OSyncContext *ctx) { - if (!saveNotes(ctx)) - return false; - - delete calendar; - calendar = NULL; - - // FIXME: ugly, but necessary - if (knotesWasRunning) - system("knotes"); - return true; + osync_trace(TRACE_ENTRY, "%s(%p)", __func__, ctx); + + // FIXME: ugly, but necessary + if (!knotesWasRunning) { + system("dcop knotes MainApplication-Interface quit"); + } + + //detach dcop + /*if (!kn_dcop->detach()) { + osync_context_report_error(ctx, OSYNC_ERROR_INITIALIZATION, "Unable to detach dcop for knotes"); + osync_trace(TRACE_EXIT_ERROR, "%s: Unable to detach dcop for knotes", __func__); + return FALSE; + }*/ + //destroy dcop + delete kn_iface; + kn_iface = NULL; + //delete kn_dcop; + //kn_dcop = NULL; + + connected = false; + osync_trace(TRACE_EXIT, "%s", __func__); + return true; } -static QString calc_hash(const KCal::Journal *note) +static QString strip_html(QString input) { - QDateTime d = note->lastModified(); - if (!d.isValid()) - d = QDateTime::currentDateTime(); - /*FIXME: not i18ned string */ - return d.toString(); + printf("input is %s\n", (const char*)input.local8Bit()); + QString output = NULL; + unsigned int i = 0; + int inbraces = 0; + for (i = 0; i < input.length(); i++) { + QCharRef cur = input[i]; + if (cur == '<') + inbraces = 1; + if (cur == '>') { + inbraces = 0; + continue; + } + if (!inbraces) + output += input[i]; + } + printf("output is %s\n", (const char*)output.stripWhiteSpace().local8Bit()); + return output.stripWhiteSpace(); } bool KNotesDataSource::get_changeinfo(OSyncContext *ctx) { - KCal::Journal::List notes = calendar->journals(); - - for (KCal::Journal::List::ConstIterator i = notes.begin(); i != notes.end(); i++) { - osync_debug("knotes", 4, "Note summary: %s", (const char*)(*i)->summary().local8Bit()); - osync_debug("knotes", 4, "Note contents:\n%s\n====", (const char*)(*i)->description().local8Bit()); - - QString uid = (*i)->uid(); - QString hash = calc_hash(*i); - + osync_trace(TRACE_ENTRY, "%s(%p)", __func__, ctx); + QMap <KNoteID_t,QString> fNotes; + + fNotes = kn_iface->notes(); + if (kn_iface->status() != DCOPStub::CallSucceeded) { + osync_context_report_error(ctx, OSYNC_ERROR_GENERIC, "Unable to get changed notes"); + osync_trace(TRACE_EXIT_ERROR, "%s: Unable to get changed notes", __func__); + return FALSE; + } + + if (osync_member_get_slow_sync(member, "note")) { + osync_debug("kcal", 3, "Setting slow-sync for notes"); + osync_hashtable_set_slow_sync(hashtable, "note"); + } + + QMap<KNoteID_t,QString>::ConstIterator i; + for (i = fNotes.begin(); i != fNotes.end(); i++) { + osync_debug("knotes", 4, "Note key: %s", (const char*)i.key().local8Bit()); + osync_debug("knotes", 4, "Note summary: %s", (const char*)i.data().local8Bit()); + printf("reporting notes %s\n", (const char*)i.key().local8Bit()); + + QString uid = i.key(); + QString hash = NULL; // Create osxml doc containing the note xmlDoc *doc = xmlNewDoc((const xmlChar*)"1.0"); xmlNode *root = osxml_node_add_root(doc, "note"); @@ -188,13 +158,15 @@ // Set the right attributes xmlNode *sum = xmlNewChild(root, NULL, (const xmlChar*)"", NULL); - QCString utf8str = (*i)->summary().utf8(); + QCString utf8str = i.data().utf8(); + hash = utf8str; osxml_node_set(sum, "Summary", utf8str, enc); xmlNode *body = xmlNewChild(root, NULL, (const xmlChar*)"", NULL); - utf8str = (*i)->description().utf8(); + utf8str = strip_html(kn_iface->text(i.key())).utf8(); + hash += utf8str; osxml_node_set(body, "Body", utf8str, enc); - + // initialize the change object OSyncChange *chg = osync_change_new(); osync_change_set_uid(chg, uid.local8Bit()); @@ -205,16 +177,8 @@ osync_change_set_objformat_string(chg, "xml-note"); osync_change_set_data(chg, (char*)doc, sizeof(doc), 1); + osync_debug("knotes", 4, "Reporting note:\%s", osync_change_get_printable(chg)); - //XXX: workaround to a bug on osync_change_multiply_master: - // convert it to vnote - OSyncFormatEnv *env = osync_member_get_format_env(member); - OSyncError *e = NULL; - if (!osync_change_convert_fmtname(env, chg, "vnote11", &e)) { - osync_context_report_error(ctx, OSYNC_ERROR_CONVERT, "Error converting data to vnote: %s", osync_error_print(&e)); - return false; - } - // Use the hash table to check if the object // needs to be reported osync_change_set_hash(chg, hash.data()); @@ -224,16 +188,15 @@ } } + osync_hashtable_report_deleted(hashtable, ctx, "note"); + + osync_trace(TRACE_EXIT, "%s", __func__); return true; } -void KNotesDataSource::get_data(OSyncContext *ctx, OSyncChange *) +bool KNotesDataSource::access(OSyncContext *ctx, OSyncChange *chg) { - osync_context_report_error(ctx, OSYNC_ERROR_NOT_SUPPORTED, "Not implemented yet"); -} - -bool KNotesDataSource::__access(OSyncContext *ctx, OSyncChange *chg) -{ + osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, ctx, chg); OSyncChangeType type = osync_change_get_changetype(chg); QString uid = osync_change_get_uid(chg); @@ -242,69 +205,88 @@ // Get osxml data xmlDoc *doc = (xmlDoc*)osync_change_get_data(chg); - xmlNode *root = osxml_node_get_root(doc, "note", NULL); - if (!root) { - osync_context_report_error(ctx, OSYNC_ERROR_CONVERT, "Invalid data"); - return false; + + xmlNode *root = xmlDocGetRootElement(doc); + if (!root) { + osync_context_report_error(ctx, OSYNC_ERROR_GENERIC, "Unable to get xml root element"); + osync_trace(TRACE_EXIT_ERROR, "%s: Invalid data", __func__); + return false; } - QString summary = osxml_find_node(root, "Summary"); + + if (xmlStrcmp((root)->name, (const xmlChar *) "Note")) { + osync_context_report_error(ctx, OSYNC_ERROR_GENERIC, "Wrong root element"); + osync_trace(TRACE_EXIT_ERROR, "%s: Invalid data2", __func__); + return false; + } + + printf("Getting note %s and %s\n", osync_change_get_printable(chg), osxml_find_node(root, "Summary")); + QString summary = QString(osxml_find_node(root, "Summary")); QString body = osxml_find_node(root, "Body"); - - KCal::Journal *j = calendar->journal(uid); - - if (type == CHANGE_MODIFIED && !j) - type = CHANGE_ADDED; - QString hash, uid; // end of the ugly-format parsing switch (type) { case CHANGE_ADDED: - j = new KCal::Journal; - j->setUid(uid); - j->setSummary(summary); - j->setDescription(body); - hash = calc_hash(j); - calendar->addJournal(j); - uid = j->uid(); + printf("addding new \"%s\" and \"%s\"\n", (const char*)summary.local8Bit(), (const char*)body.local8Bit()); + uid = kn_iface->newNote(summary, body); + if (kn_iface->status() != DCOPStub::CallSucceeded) { + osync_context_report_error(ctx, OSYNC_ERROR_GENERIC, "Unable to add new note"); + osync_trace(TRACE_EXIT_ERROR, "%s: Unable to add new note", __func__); + return false; + } + + kn_iface->hideNote(uid); + if (kn_iface->status() != DCOPStub::CallSucceeded) + osync_trace(TRACE_INTERNAL, "ERROR: Unable to hide note"); + osync_change_set_uid(chg, uid); osync_change_set_hash(chg, hash); - - break; + break; case CHANGE_MODIFIED: - j->setSummary(summary); - j->setDescription(body); - hash = calc_hash(j); + kn_iface->setName(uid, summary); + if (kn_iface->status() != DCOPStub::CallSucceeded) { + osync_context_report_error(ctx, OSYNC_ERROR_GENERIC, "Unable to set name"); + osync_trace(TRACE_EXIT_ERROR, "%s: Unable to set name", __func__); + return false; + } + + kn_iface->setText(uid, body); + if (kn_iface->status() != DCOPStub::CallSucceeded) { + osync_context_report_error(ctx, OSYNC_ERROR_GENERIC, "Unable to set text"); + osync_trace(TRACE_EXIT_ERROR, "%s: Unable to set text", __func__); + return false; + } + hash = summary + body; osync_change_set_hash(chg, hash); - break; + break; default: osync_context_report_error(ctx, OSYNC_ERROR_NOT_SUPPORTED, "Invalid change type"); - return false; + osync_trace(TRACE_EXIT_ERROR, "%s: Invalid change type", __func__); + return false; } } else { - KCal::Journal *j = calendar->journal(uid); - if (j) { - calendar->deleteJournal(j); - } + osync_debug("knotes", 4, "Deleting note %s", (const char*)uid.local8Bit()); + kn_iface->killNote(uid, true); + if (kn_iface->status() != DCOPStub::CallSucceeded) { + osync_context_report_error(ctx, OSYNC_ERROR_GENERIC, "Unable to delete note"); + osync_trace(TRACE_EXIT_ERROR, "%s: Unable to delete note", __func__); + return false; + } } - return true; -} - -bool KNotesDataSource::access(OSyncContext *ctx, OSyncChange *chg) -{ - if (!__access(ctx, chg)) - return false; - osync_context_report_success(ctx); + osync_trace(TRACE_EXIT, "%s", __func__); return true; } bool KNotesDataSource::commit_change(OSyncContext *ctx, OSyncChange *chg) { - if (!__access(ctx, chg)) - return false; + osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, ctx, chg); + if (!access(ctx, chg)) { + osync_trace(TRACE_EXIT_ERROR, "%s: Unable to delete note", __func__); + return false; + } osync_hashtable_update_hash(hashtable, chg); - osync_context_report_success(ctx); + osync_trace(TRACE_EXIT, "%s", __func__); return true; } Modified: plugins/kdepim/src/knotes.h =================================================================== --- plugins/kdepim/src/knotes.h 2005-04-07 14:56:42 UTC (rev 454) +++ plugins/kdepim/src/knotes.h 2005-04-07 14:59:41 UTC (rev 455) @@ -1,6 +1,7 @@ /*********************************************************************** KNotes OSyncDataSource class Copyright (C) 2004 Conectiva S. A. +Copyright (C) 2005 Armin Bauer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as @@ -21,17 +22,36 @@ *************************************************************************/ /** * @autor Eduardo Pereira Habkost <eha...@co...> + * @autor Armin Bauer <arm...@op...> */ -extern "C" { +#include <kglobal.h> +#include <kstandarddirs.h> +#include <kio/netaccess.h> +#include <klocale.h> +#include <kapplication.h> +#include <qmap.h> +#include "KNotesIface.h" +#include "KNotesIface_stub.h" +#include <stdio.h> +#include <qtimer.h> +#include <dcopclient.h> +#include <qstring.h> +#include <qstringlist.h> + +#include <errno.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> + +typedef QString KNoteID_t; + +extern "C" +{ #include <opensync/opensync.h> +#include <opensync/opensync-xml.h> } -// Forward declaration -namespace KCal { - class CalendarLocal; -} - /** KNotes access implementation interface */ class KNotesDataSource @@ -39,8 +59,10 @@ private: OSyncMember *member; OSyncHashTable *hashtable; - KCal::CalendarLocal *calendar; - + + DCOPClient *kn_dcop; + KNotesIface_stub *kn_iface; + /** Ugly hack to restart KNotes if it * was running */ @@ -92,6 +114,6 @@ * On success, returns true, after calling osync_context_report_success() * On error, returns false, after calling osync_context_report_error() */ - bool commit_change(OSyncContext *ctx, OSyncChange *chg); - + bool commit_change(OSyncContext *ctx, OSyncChange *chg); + bool connected; }; Modified: plugins/kdepim/src/osyncbase.h =================================================================== --- plugins/kdepim/src/osyncbase.h 2005-04-07 14:56:42 UTC (rev 454) +++ plugins/kdepim/src/osyncbase.h 2005-04-07 14:59:41 UTC (rev 455) @@ -16,7 +16,6 @@ virtual void disconnect(OSyncContext *ctx) = 0; virtual void get_changeinfo(OSyncContext *ctx) = 0; - virtual void get_data(OSyncContext *ctx, OSyncChange *chg) = 0; virtual bool vcard_access(OSyncContext *ctx, OSyncChange *chg) = 0; virtual bool vcard_commit_change(OSyncContext *ctx, OSyncChange *chg) = 0; @@ -38,25 +37,4 @@ typedef KdePluginImplementationBase *(*KdeImplInitFunc)(OSyncMember *m, OSyncError **e); -/*TODO: provide base classes like below, - * for hiding the implementation details of a plugin - */ -#if 0 -/** Base class to a OpenSync plugin */ -class OSyncPluginBase { - public: - virtual void connect(OSyncContext *ctx) = 0; - void disconnect(OSyncContext *ctx) = 0; - - virtual void get_changes(OSyncContext *ctx) = 0; -}; - -/** Base class to OpenSync objtype data sink */ -class OSyncDataSinkBase { - public: - virtual void access(OSyncContext *ctx, OSyncChange *chg) = 0; - virtual void commit_change(OSyncContext *ctx, OSyncChange *chg) = 0; -}; -#endif - #endif // KDEPIM_OSYNC_BASE_H Copied: plugins/kdepim/tests (from rev 454, branches/experimental-kdepim/tests) Deleted: plugins/kdepim/tests/Makefile.am Copied: plugins/kdepim/tests/Makefile.am (from rev 454, branches/experimental-kdepim/tests/Makefile.am) Property changes on: plugins/kdepim/tests/Makefile.am ___________________________________________________________________ Name: svn:executable + * Deleted: plugins/kdepim/tests/check_contact Copied: plugins/kdepim/tests/check_contact (from rev 454, branches/experimental-kdepim/tests/check_contact) Property changes on: plugins/kdepim/tests/check_contact ___________________________________________________________________ Name: svn:executable + * Deleted: plugins/kdepim/tests/check_event Copied: plugins/kdepim/tests/check_event (from rev 454, branches/experimental-kdepim/tests/check_event) Property changes on: plugins/kdepim/tests/check_event ___________________________________________________________________ Name: svn:executable + * Deleted: plugins/kdepim/tests/check_note Copied: plugins/kdepim/tests/check_note (from rev 454, branches/experimental-kdepim/tests/check_note) Property changes on: plugins/kdepim/tests/check_note ___________________________________________________________________ Name: svn:executable + * Deleted: plugins/kdepim/tests/check_todo Copied: plugins/kdepim/tests/check_todo (from rev 454, branches/experimental-kdepim/tests/check_todo) Property changes on: plugins/kdepim/tests/check_todo ___________________________________________________________________ Name: svn:executable + * |
From: <svn...@op...> - 2005-04-07 14:55:18
|
Author: abauer Date: 2005-04-07 16:56:42 +0200 (Thu, 07 Apr 2005) New Revision: 454 Modified: branches/experimental-kdepim/src/knotes.cpp branches/experimental-kdepim/tests/check_note Log: Start knotes before the test Modified: branches/experimental-kdepim/src/knotes.cpp =================================================================== --- branches/experimental-kdepim/src/knotes.cpp 2005-04-07 14:43:22 UTC (rev 453) +++ branches/experimental-kdepim/src/knotes.cpp 2005-04-07 14:56:42 UTC (rev 454) @@ -81,19 +81,16 @@ osync_trace(TRACE_ENTRY, "%s(%p)", __func__, ctx); // FIXME: ugly, but necessary - system("dcop knotes MainApplication-Interface quit"); - if (knotesWasRunning) { - //start knotes - system("knotes"); - system("dcop knotes KNotesIface hideAllNotes"); + if (!knotesWasRunning) { + system("dcop knotes MainApplication-Interface quit"); } //detach dcop - if (!kn_dcop->detach()) { + /*if (!kn_dcop->detach()) { osync_context_report_error(ctx, OSYNC_ERROR_INITIALIZATION, "Unable to detach dcop for knotes"); osync_trace(TRACE_EXIT_ERROR, "%s: Unable to detach dcop for knotes", __func__); return FALSE; - } + }*/ //destroy dcop delete kn_iface; kn_iface = NULL; Modified: branches/experimental-kdepim/tests/check_note =================================================================== --- branches/experimental-kdepim/tests/check_note 2005-04-07 14:43:22 UTC (rev 453) +++ branches/experimental-kdepim/tests/check_note 2005-04-07 14:56:42 UTC (rev 454) @@ -7,4 +7,8 @@ then exit 1 fi +export KDE_DEBUG=true +dcop knotes MainApplication-Interface quit +knotes osyncplugin kdepim --type note || exit 1 +dcop knotes MainApplication-Interface quit |
From: <svn...@op...> - 2005-04-07 14:41:58
|
Author: abauer Date: 2005-04-07 16:43:22 +0200 (Thu, 07 Apr 2005) New Revision: 453 Removed: branches/experimental-kdepim/tests/Makefile branches/experimental-kdepim/tests/Makefile.in Modified: branches/experimental-kdepim/tests/Makefile.am branches/experimental-kdepim/tests/check_contact branches/experimental-kdepim/tests/check_event branches/experimental-kdepim/tests/check_note branches/experimental-kdepim/tests/check_todo Log: Removed the check for notes Added safety check before each test Deleted: branches/experimental-kdepim/tests/Makefile Modified: branches/experimental-kdepim/tests/Makefile.am =================================================================== --- branches/experimental-kdepim/tests/Makefile.am 2005-04-07 14:31:33 UTC (rev 452) +++ branches/experimental-kdepim/tests/Makefile.am 2005-04-07 14:43:22 UTC (rev 453) @@ -2,4 +2,4 @@ EXTRA_DIST = check_contact check_event check_todo check_note -TESTS = check_contact check_event check_todo check_note +TESTS = check_contact check_event check_todo Deleted: branches/experimental-kdepim/tests/Makefile.in Modified: branches/experimental-kdepim/tests/check_contact =================================================================== --- branches/experimental-kdepim/tests/check_contact 2005-04-07 14:31:33 UTC (rev 452) +++ branches/experimental-kdepim/tests/check_contact 2005-04-07 14:43:22 UTC (rev 453) @@ -1,3 +1,10 @@ #!/bin/bash +echo "This unit test will empty all contacts from Kde. Do you want to continue?" +echo "[y/N]" +read -n 1 reply +if [ "$reply" != "y" ] +then + exit 1 +fi osyncplugin kdepim --type contact || exit 1 Modified: branches/experimental-kdepim/tests/check_event =================================================================== --- branches/experimental-kdepim/tests/check_event 2005-04-07 14:31:33 UTC (rev 452) +++ branches/experimental-kdepim/tests/check_event 2005-04-07 14:43:22 UTC (rev 453) @@ -1,3 +1,11 @@ #!/bin/bash +echo "This unit test will empty all events from Kde. Do you want to continue?" +echo "[y/N]" +read -n 1 reply +if [ "$reply" != "y" ] +then + exit 1 +fi + osyncplugin kdepim --type event || exit 1 Modified: branches/experimental-kdepim/tests/check_note =================================================================== --- branches/experimental-kdepim/tests/check_note 2005-04-07 14:31:33 UTC (rev 452) +++ branches/experimental-kdepim/tests/check_note 2005-04-07 14:43:22 UTC (rev 453) @@ -1,3 +1,10 @@ #!/bin/bash +echo "This unit test will empty all notes from Kde. Do you want to continue?" +echo "[y/N]" +read -n 1 reply +if [ "$reply" != "y" ] +then + exit 1 +fi osyncplugin kdepim --type note || exit 1 Modified: branches/experimental-kdepim/tests/check_todo =================================================================== --- branches/experimental-kdepim/tests/check_todo 2005-04-07 14:31:33 UTC (rev 452) +++ branches/experimental-kdepim/tests/check_todo 2005-04-07 14:43:22 UTC (rev 453) @@ -1,3 +1,10 @@ #!/bin/bash +echo "This unit test will empty all tasks from Kde. Do you want to continue?" +echo "[y/N]" +read -n 1 reply +if [ "$reply" != "y" ] +then + exit 1 +fi osyncplugin kdepim --type todo || exit 1 |
From: <svn...@op...> - 2005-04-07 14:30:16
|
Author: abauer Date: 2005-04-07 16:31:33 +0200 (Thu, 07 Apr 2005) New Revision: 452 Added: branches/experimental-kdepim/tests/ branches/experimental-kdepim/tests/Makefile branches/experimental-kdepim/tests/Makefile.am branches/experimental-kdepim/tests/Makefile.in branches/experimental-kdepim/tests/check_contact branches/experimental-kdepim/tests/check_event branches/experimental-kdepim/tests/check_note branches/experimental-kdepim/tests/check_todo Modified: branches/experimental-kdepim/Makefile.am branches/experimental-kdepim/configure.in branches/experimental-kdepim/src/kaddrbook.cpp branches/experimental-kdepim/src/kaddrbook.h branches/experimental-kdepim/src/kcal.cpp branches/experimental-kdepim/src/kcal.h branches/experimental-kdepim/src/kdepim_impl.cpp branches/experimental-kdepim/src/kdepim_sync.cpp branches/experimental-kdepim/src/knotes.cpp branches/experimental-kdepim/src/knotes.h Log: Fixed the kdepim plugin Added unit tests Modified: branches/experimental-kdepim/Makefile.am =================================================================== --- branches/experimental-kdepim/Makefile.am 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/Makefile.am 2005-04-07 14:31:33 UTC (rev 452) @@ -1,3 +1,6 @@ + +SUBDIRS = tests + plugindir=@OPENSYNC_PLUGINDIR@ INCLUDES = $(OSYNC_CFLAGS) $(XML_CFLAGS) $(GLIB_CFLAGS) $(KDE_INCLUDES) $(QT_INCLUDES) @@ -40,4 +43,4 @@ src/KNotesIface_stub.cpp: dcopidl src/KNotesIface.h > src/KNotesIface.kidl - dcopidl2cpp src/KNotesIface.kidl \ No newline at end of file + dcopidl2cpp src/KNotesIface.kidl Modified: branches/experimental-kdepim/configure.in =================================================================== --- branches/experimental-kdepim/configure.in 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/configure.in 2005-04-07 14:31:33 UTC (rev 452) @@ -46,7 +46,7 @@ AC_C_BIGENDIAN AC_CHECK_KDEMAXPATHLEN -AC_CONFIG_FILES([ Makefile ]) +AC_CONFIG_FILES([ Makefile tests/Makefile]) AC_OUTPUT if test "$all_tests" = "bad"; then Modified: branches/experimental-kdepim/src/kaddrbook.cpp =================================================================== --- branches/experimental-kdepim/src/kaddrbook.cpp 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/src/kaddrbook.cpp 2005-04-07 14:31:33 UTC (rev 452) @@ -26,10 +26,12 @@ */ #include "kaddrbook.h" +#include <qdeepcopy.h> KContactDataSource::KContactDataSource(OSyncMember *member, OSyncHashTable *hashtable) : hashtable(hashtable), member(member) { + connected = false; } /** Calculate the hash value for an Addressee. @@ -66,6 +68,7 @@ osync_anchor_update(member, "synced", "true"); } + connected = true; osync_trace(TRACE_EXIT, "%s", __func__); return TRUE; } @@ -87,6 +90,7 @@ return FALSE; } + connected = false; osync_trace(TRACE_EXIT, "%s", __func__); return TRUE; } @@ -109,7 +113,6 @@ } KABC::VCardConverter converter; - for (KABC::AddressBook::Iterator it=addressbookptr->begin(); it!=addressbookptr->end(); it++ ) { QString uid = it->uid(); @@ -121,9 +124,11 @@ QString hash = calc_hash(*it); // Convert the VCARD data into a string - const char *data = converter.createVCard(*it).utf8(); - osync_change_set_data(chg, strdup(data), strlen(data) + 1, TRUE); + QString tmp = converter.createVCard(*it); + char *data = strdup((const char *)tmp.utf8()); + osync_change_set_data(chg, data, strlen(data) + 1, TRUE); + // object type and format osync_change_set_objtype_string(chg, "contact"); osync_change_set_objformat_string(chg, "vcard21"); Modified: branches/experimental-kdepim/src/kaddrbook.h =================================================================== --- branches/experimental-kdepim/src/kaddrbook.h 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/src/kaddrbook.h 2005-04-07 14:31:33 UTC (rev 452) @@ -35,7 +35,6 @@ OSyncHashTable *hashtable; OSyncMember *member; - public: KContactDataSource(OSyncMember *member, OSyncHashTable *hashtable); @@ -44,6 +43,7 @@ bool disconnect(OSyncContext *ctx); bool contact_get_changeinfo(OSyncContext *ctx); bool vcard_access(OSyncContext *ctx, OSyncChange *chg); + bool connected; }; #endif Modified: branches/experimental-kdepim/src/kcal.cpp =================================================================== --- branches/experimental-kdepim/src/kcal.cpp 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/src/kcal.cpp 2005-04-07 14:31:33 UTC (rev 452) @@ -28,6 +28,7 @@ KCalDataSource::KCalDataSource(OSyncMember *member, OSyncHashTable *hashtable) : hashtable(hashtable), member(member) { + connected = false; } bool KCalDataSource::connect(OSyncContext *ctx) @@ -45,7 +46,9 @@ calendar->load(); #endif osync_debug("kcal", 3, "Calendar: %d events", calendar->events().size()); - return true; + + connected = true; + return true; } bool KCalDataSource::disconnect(OSyncContext *) @@ -56,6 +59,7 @@ delete calendar; calendar = NULL; + connected = false; return true; } @@ -183,11 +187,14 @@ case CHANGE_ADDED: case CHANGE_MODIFIED: { + printf("Adding\n"); KCal::ICalFormat format; /* First, parse to a temporary calendar, because * we should set the uid on the events */ + + printf("Adding1\n"); KCal::CalendarLocal cal; QString data = QString::fromUtf8(osync_change_get_data(chg), osync_change_get_datasize(chg)); if (!format.fromString(&cal, data)) { @@ -195,6 +202,7 @@ return false; } + printf("Adding2 %p\n", calendar); /*FIXME: The event/to-do will be overwritten. But I can't differentiate * between a field being removed and a missing field because * the other device don't support them, because OpenSync currently @@ -210,6 +218,7 @@ * * We iterate over the list, but it should have only one event. */ + printf("Adding3\n"); KCal::Incidence::List evts = cal.incidences(); for (KCal::Incidence::List::ConstIterator i = evts.begin(); i != evts.end(); i++) { KCal::Incidence *e = (*i)->clone(); Modified: branches/experimental-kdepim/src/kcal.h =================================================================== --- branches/experimental-kdepim/src/kcal.h 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/src/kcal.h 2005-04-07 14:31:33 UTC (rev 452) @@ -111,4 +111,5 @@ * On error, returns false, after calling osync_context_report_error() */ bool todo_commit_change(OSyncContext *ctx, OSyncChange *chg); + bool connected; }; Modified: branches/experimental-kdepim/src/kdepim_impl.cpp =================================================================== --- branches/experimental-kdepim/src/kdepim_impl.cpp 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/src/kdepim_impl.cpp 2005-04-07 14:31:33 UTC (rev 452) @@ -83,10 +83,6 @@ application = new KApplication(); hashtable = osync_hashtable_new(); - if (!osync_hashtable_load(hashtable, member, error)) { - osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); - return false; - } kcal = new KCalDataSource(member, hashtable); knotes = new KNotesDataSource(member, hashtable); @@ -119,27 +115,52 @@ virtual void connect(OSyncContext *ctx) { - if (kcal && !kcal->connect(ctx)) + osync_trace(TRACE_ENTRY, "%s(%p)", __func__, ctx); + + OSyncError *error = NULL; + if (!osync_hashtable_load(hashtable, member, &error)) { + osync_context_report_osyncerror(ctx, &error); + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(&error)); + osync_error_free(&error); return; + } - if (knotes && !knotes->connect(ctx)) + + if (kcal && \ + (osync_member_objtype_enabled(member, "todo") || \ + osync_member_objtype_enabled(member, "event")) && \ + !kcal->connect(ctx)) { + osync_trace(TRACE_EXIT_ERROR, "%s: Unable to open calendar", __func__); return; + } - if (kaddrbook && !kaddrbook->connect(ctx)) + if (knotes && \ + osync_member_objtype_enabled(member, "note") && \ + !knotes->connect(ctx)) { + osync_trace(TRACE_EXIT_ERROR, "%s: Unable to open notes", __func__); return; + } + if (kaddrbook && \ + osync_member_objtype_enabled(member, "contact") && \ + !kaddrbook->connect(ctx)) { + osync_trace(TRACE_EXIT_ERROR, "%s: Unable to open addressbook", __func__); + return; + } + osync_context_report_success(ctx); + osync_trace(TRACE_EXIT, "%s", __func__); } virtual void disconnect(OSyncContext *ctx) { osync_hashtable_close(hashtable); - if (kcal && !kcal->disconnect(ctx)) + if (kcal && kcal->connected && !kcal->disconnect(ctx)) return; - if (knotes && !knotes->disconnect(ctx)) + if (knotes && knotes->connected && !knotes->disconnect(ctx)) return; - if (kaddrbook && !kaddrbook->disconnect(ctx)) + if (kaddrbook && kaddrbook->connected && !kaddrbook->disconnect(ctx)) return; osync_context_report_success(ctx); @@ -147,16 +168,16 @@ virtual void get_changeinfo(OSyncContext *ctx) { - if (!kaddrbook && !kaddrbook->contact_get_changeinfo(ctx)) + if (kaddrbook && kaddrbook->connected && !kaddrbook->contact_get_changeinfo(ctx)) return; - if (kcal && !kcal->get_changeinfo_events(ctx)) + if (kcal && kcal->connected && !kcal->get_changeinfo_events(ctx)) return; - if (kcal && !kcal->get_changeinfo_todos(ctx)) + if (kcal && kcal->connected && !kcal->get_changeinfo_todos(ctx)) return; - if (knotes && !knotes->get_changeinfo(ctx)) + if (knotes && knotes->connected && !knotes->get_changeinfo(ctx)) return; osync_context_report_success(ctx); Modified: branches/experimental-kdepim/src/kdepim_sync.cpp =================================================================== --- branches/experimental-kdepim/src/kdepim_sync.cpp 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/src/kdepim_sync.cpp 2005-04-07 14:31:33 UTC (rev 452) @@ -193,6 +193,9 @@ osync_plugin_accept_objformat(info, "contact", "vcard30", "kde"); osync_plugin_set_commit_objformat(info, "contact", "vcard30", kde_vcard_commit_change); osync_plugin_set_access_objformat(info, "contact", "vcard30", kde_vcard_access); + osync_plugin_accept_objformat(info, "contact", "vcard21", "kde"); + osync_plugin_set_commit_objformat(info, "contact", "vcard21", kde_vcard_commit_change); + osync_plugin_set_access_objformat(info, "contact", "vcard21", kde_vcard_access); osync_plugin_accept_objtype(info, "event"); osync_plugin_accept_objformat(info, "event", "vevent20", "kde"); Modified: branches/experimental-kdepim/src/knotes.cpp =================================================================== --- branches/experimental-kdepim/src/knotes.cpp 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/src/knotes.cpp 2005-04-07 14:31:33 UTC (rev 452) @@ -26,8 +26,6 @@ * This module implements the access to the KDE 3.2 Notes, that are * stored on KGlobal::dirs()->saveLocation( "data" , "knotes/" ) + "notes.ics" * - * TODO: Check how notes are stored on KDE 3.3/3.4, and use the right interface. - * (http://www.opensync.org/ticket/34) */ @@ -38,6 +36,7 @@ KNotesDataSource::KNotesDataSource(OSyncMember *m, OSyncHashTable *h) :member(m), hashtable(h) { + connected = false; } bool KNotesDataSource::connect(OSyncContext *ctx) @@ -58,16 +57,21 @@ return FALSE; } + QString appId = kn_dcop->registerAs("opensync"); + //check knotes running QCStringList apps = kn_dcop->registeredApplications(); if (!apps.contains("knotes")) { //start knotes if not running knotesWasRunning = false; + system("knotes"); + system("dcop knotes KNotesIface hideAllNotes"); } else knotesWasRunning = true; kn_iface = new KNotesIface_stub("knotes", "KNotesIface"); + connected = true; osync_trace(TRACE_EXIT, "%s", __func__); return true; } @@ -77,8 +81,11 @@ osync_trace(TRACE_ENTRY, "%s(%p)", __func__, ctx); // FIXME: ugly, but necessary - if (!knotesWasRunning) { - //Terminate knotes + system("dcop knotes MainApplication-Interface quit"); + if (knotesWasRunning) { + //start knotes + system("knotes"); + system("dcop knotes KNotesIface hideAllNotes"); } //detach dcop @@ -93,6 +100,7 @@ //delete kn_dcop; //kn_dcop = NULL; + connected = false; osync_trace(TRACE_EXIT, "%s", __func__); return true; } @@ -107,13 +115,15 @@ QCharRef cur = input[i]; if (cur == '<') inbraces = 1; - if (cur == '>') + if (cur == '>') { inbraces = 0; + continue; + } if (!inbraces) output += input[i]; } - printf("output is %s\n", (const char*)output.local8Bit()); - return output; + printf("output is %s\n", (const char*)output.stripWhiteSpace().local8Bit()); + return output.stripWhiteSpace(); } bool KNotesDataSource::get_changeinfo(OSyncContext *ctx) @@ -259,7 +269,7 @@ } } else { osync_debug("knotes", 4, "Deleting note %s", (const char*)uid.local8Bit()); - kn_iface->killNote(uid); + kn_iface->killNote(uid, true); if (kn_iface->status() != DCOPStub::CallSucceeded) { osync_context_report_error(ctx, OSYNC_ERROR_GENERIC, "Unable to delete note"); osync_trace(TRACE_EXIT_ERROR, "%s: Unable to delete note", __func__); Modified: branches/experimental-kdepim/src/knotes.h =================================================================== --- branches/experimental-kdepim/src/knotes.h 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/src/knotes.h 2005-04-07 14:31:33 UTC (rev 452) @@ -114,6 +114,6 @@ * On success, returns true, after calling osync_context_report_success() * On error, returns false, after calling osync_context_report_error() */ - bool commit_change(OSyncContext *ctx, OSyncChange *chg); - + bool commit_change(OSyncContext *ctx, OSyncChange *chg); + bool connected; }; Added: branches/experimental-kdepim/tests/Makefile =================================================================== --- branches/experimental-kdepim/tests/Makefile 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/tests/Makefile 2005-04-07 14:31:33 UTC (rev 452) @@ -0,0 +1,498 @@ +# Makefile.in generated by automake 1.7.9 from Makefile.am. +# tests/Makefile. Generated from Makefile.in by configure. + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +srcdir = . +top_srcdir = .. + +pkgdatadir = $(datadir)/libopensync-plugin-kdepim +pkglibdir = $(libdir)/libopensync-plugin-kdepim +pkgincludedir = $(includedir)/libopensync-plugin-kdepim +top_builddir = .. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = /usr/bin/install -c -p +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = i686-pc-linux-gnu +ACLOCAL = ${SHELL} /home/azrael/opensync/plugins/kdepim/missing --run aclocal-1.7 +AMDEP_FALSE = # +AMDEP_TRUE = +AMTAR = ${SHELL} /home/azrael/opensync/plugins/kdepim/missing --run tar +AR = ar +ARTSCCONFIG = /usr/bin/artsc-config +AUTOCONF = ${SHELL} /home/azrael/opensync/plugins/kdepim/missing --run autoconf +AUTODIRS = +AUTOHEADER = ${SHELL} /home/azrael/opensync/plugins/kdepim/missing --run autoheader +AUTOMAKE = ${SHELL} /home/azrael/opensync/plugins/kdepim/missing --run automake-1.7 +AWK = gawk +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -O2 +CPP = gcc -E +CPPFLAGS = -DQT_THREAD_SUPPORT -D_REENTRANT +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -Wnon-virtual-dtor -Wno-long-long -Wundef -Wall -W -Wpointer-arith -Wwrite-strings -O2 -fno-exceptions -fno-check-new -fno-common +CYGPATH_W = echo +DCOPIDL = /usr/bin/dcopidl +DCOPIDL2CPP = /usr/bin/dcopidl2cpp +DCOPIDLNG = +DCOP_DEPENDENCIES = $(DCOPIDL) +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +ECHO = echo +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = grep -E +ENABLE_PERMISSIVE_FLAG = -fpermissive +EXEEXT = +F77 = +FFLAGS = +FRAMEWORK_COREAUDIO = +GLIB_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include +GLIB_LIBS = -lglib-2.0 +GMSGFMT = /usr/bin/msgfmt +HAVE_GCC_VISIBILITY = 0 +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} $(INSTALL_STRIP_FLAG) +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s +KCFG_DEPENDENCIES = +KCONFIG_COMPILER = +KDE_EXTRA_RPATH = +KDE_INCLUDES = -I/usr/include/kde +KDE_LDFLAGS = -L/usr/lib +KDE_MT_LDFLAGS = +KDE_MT_LIBS = -lpthread +KDE_NO_UNDEFINED = +KDE_RPATH = -R $(kde_libraries) -R $(qt_libraries) -R $(x_libraries) +KDE_USE_CLOSURE_FALSE = +KDE_USE_CLOSURE_TRUE = # +KDE_USE_FINAL_FALSE = +KDE_USE_FINAL_TRUE = # +KDE_USE_NMCHECK_FALSE = +KDE_USE_NMCHECK_TRUE = # +KDE_XSL_STYLESHEET = /usr/share/apps/ksgmltools2/customization/kde-chunk.xsl +LDFLAGS = +LDFLAGS_AS_NEEDED = -Wl,--as-needed +LDFLAGS_NEW_DTAGS = -Wl,--enable-new-dtags +LIBCOMPAT = +LIBCRYPT = -lcrypt +LIBDL = -ldl +LIBJPEG = -ljpeg +LIBOBJS = +LIBPNG = -lpng -lz -lm +LIBPTHREAD = -lpthread +LIBRESOLV = -lresolv +LIBS = +LIBSM = -lSM -lICE +LIBSOCKET = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIBUCB = +LIBUTIL = -lutil +LIBZ = -lz +LIB_KAB = -lkab +LIB_KABC = -lkabc +LIB_KDECORE = -lkdecore +LIB_KDEPIM = -lkdepim +LIB_KDEPRINT = -lkdeprint +LIB_KDEUI = -lkdeui +LIB_KDNSSD = -lkdnssd +LIB_KFILE = -lkio +LIB_KFM = +LIB_KHTML = -lkhtml +LIB_KIMPROXY = -lkimproxy +LIB_KIO = -lkio +LIB_KJS = -lkjs +LIB_KNEWSTUFF = -lknewstuff +LIB_KPARTS = -lkparts +LIB_KSPELL = -lkspell +LIB_KSYCOCA = -lkio +LIB_KUTILS = -lkutils +LIB_POLL = +LIB_QPE = +LIB_QT = -lqt-mt $(LIBZ) $(LIBPNG) -lXext $(LIB_X11) $(LIBSM) -lpthread +LIB_SMB = -lsmb +LIB_X11 = -lX11 $(LIBSOCKET) +LIB_XEXT = -lXext +LIB_XRENDER = +LN_S = ln -s +LTLIBOBJS = +MAKEINFO = ${SHELL} /home/azrael/opensync/plugins/kdepim/missing --run makeinfo +MAKEKDEWIDGETS = +MCOPIDL = /usr/bin/mcopidl +MEINPROC = /usr/bin/meinproc +MOC = /usr/share/qt3/bin/moc +MSGFMT = /usr/bin/msgfmt +NOOPT_CFLAGS = -O0 +NOOPT_CXXFLAGS = -O0 +OBJEXT = o +OPENSYNC_CONFIGDIR = /home/azrael/testdir/share/opensync/defaults +OPENSYNC_FORMATSDIR = /home/azrael/testdir/lib/opensync/formats +OPENSYNC_HEADERDIR = /home/azrael/testdir/include/opensync-1.0/opensync +OPENSYNC_INCLUDEDIR = /home/azrael/testdir/include +OPENSYNC_LIBDIR = /home/azrael/testdir/lib +OPENSYNC_PLUGINDIR = /home/azrael/testdir/lib/opensync/plugins +OSYNC_CFLAGS = -I/home/azrael/testdir/include/opensync-1.0 +OSYNC_LIBS = -L/home/azrael/testdir/lib -lopensync +PACKAGE = libopensync-plugin-kdepim +PACKAGE_BUGREPORT = +PACKAGE_NAME = OpenSync Kdepim Plugin +PACKAGE_STRING = OpenSync Kdepim Plugin 0.15 +PACKAGE_TARNAME = libopensync-plugin-kdepim +PACKAGE_VERSION = 0.15 +PATH_SEPARATOR = : +PERL = /usr/bin/perl +PKG_CONFIG = /usr/bin/pkg-config +QTE_NORTTI = +QT_INCLUDES = -I/usr/share/qt3/include +QT_LDFLAGS = -L/usr/share/qt3/lib +RANLIB = ranlib +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +UIC = /usr/share/qt3/bin/uic -L $(kde_widgetdir) -nounload +UIC_TR = tr2i18n +USER_INCLUDES = +USER_LDFLAGS = +USE_EXCEPTIONS = -fexceptions +USE_RTTI = +USE_THREADS = +VERSION = 0.15 +WOVERLOADED_VIRTUAL = +XGETTEXT = /usr/bin/xgettext +XMLLINT = /usr/bin/xmllint +XML_CFLAGS = -I/usr/include/libxml2 +XML_LIBS = -lxml2 -lpthread -lz -lm +X_EXTRA_LIBS = +X_INCLUDES = -I/usr/X11R6/include +X_LDFLAGS = -L/usr/X11R6/lib +X_PRE_LIBS = +X_RPATH = -R $(x_libraries) +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_F77 = +ac_ct_RANLIB = ranlib +ac_ct_STRIP = strip +all_includes = -I/usr/include/kde -I/usr/share/qt3/include -I/usr/X11R6/include +all_libraries = -L/usr/lib -L/usr/share/qt3/lib -L/usr/X11R6/lib -Wl,--as-needed -Wl,--enable-new-dtags +am__fastdepCC_FALSE = # +am__fastdepCC_TRUE = +am__fastdepCXX_FALSE = # +am__fastdepCXX_TRUE = +am__include = include +am__leading_dot = . +am__quote = +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +datadir = ${prefix}/share +exec_prefix = ${prefix} +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +include_ARTS_FALSE = # +include_ARTS_TRUE = +include_x11_FALSE = # +include_x11_TRUE = +includedir = ${prefix}/include +infodir = ${prefix}/info +install_sh = /home/azrael/opensync/plugins/kdepim/install-sh +kde_appsdir = ${datadir}/applnk +kde_bindir = ${exec_prefix}/bin +kde_confdir = ${datadir}/config +kde_datadir = ${datadir}/apps +kde_htmldir = ${datadir}/doc/HTML +kde_icondir = ${datadir}/icons +kde_includes = /usr/include/kde +kde_kcfgdir = ${datadir}/config.kcfg +kde_libraries = /usr/lib +kde_locale = ${datadir}/locale +kde_mimedir = ${datadir}/mimelnk +kde_moduledir = ${libdir}/kde3 +kde_qtver = 3 +kde_servicesdir = ${datadir}/services +kde_servicetypesdir = ${datadir}/servicetypes +kde_sounddir = ${datadir}/sounds +kde_styledir = ${libdir}/kde3/plugins/styles +kde_templatesdir = ${datadir}/templates +kde_wallpaperdir = ${datadir}/wallpapers +kde_widgetdir = /usr/lib/kde3/plugins/designer +kdeinitdir = $(kde_moduledir) +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localstatedir = ${prefix}/var +mandir = ${prefix}/man +oldincludedir = /usr/include +prefix = /home/azrael/testdir +program_transform_name = s,x,x, +qt_includes = /usr/share/qt3/include +qt_libraries = /usr/share/qt3/lib +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +sysconfdir = ${prefix}/etc +target_alias = +unsermake_enable_pch_FALSE = +unsermake_enable_pch_TRUE = # +x_includes = /usr/X11R6/include +x_libraries = /usr/X11R6/lib +xdg_appsdir = ${datadir}/applications/kde +xdg_directorydir = ${datadir}/desktop-directories +xdg_menudir = ${sysconfdir}/xdg/menus + +EXTRA_DIST = check_contact check_event check_todo check_note + +TESTS = check_contact check_event check_todo check_note +subdir = tests +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign tests/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list='$(TESTS)'; \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *" $$tst "*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + echo "XPASS: $$tst"; \ + ;; \ + *) \ + echo "PASS: $$tst"; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *" $$tst "*) \ + xfail=`expr $$xfail + 1`; \ + echo "XFAIL: $$tst"; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + echo "SKIP: $$tst"; \ + fi; \ + done; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="All $$all tests passed"; \ + else \ + banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all tests failed"; \ + else \ + banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + skipped="($$skip tests were not run)"; \ + test `echo "$$skipped" | wc -c` -gt `echo "$$banner" | wc -c` && \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -gt `echo "$$banner" | wc -c` && \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + test -n "$$skipped" && echo "$$skipped"; \ + test -n "$$report" && echo "$$report"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0; \ + else :; fi +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = .. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile + +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am info info-am install install-am install-data \ + install-data-am install-exec install-exec-am install-info \ + install-info-am install-man install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: Added: branches/experimental-kdepim/tests/Makefile.am =================================================================== --- branches/experimental-kdepim/tests/Makefile.am 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/tests/Makefile.am 2005-04-07 14:31:33 UTC (rev 452) @@ -0,0 +1,5 @@ +## Process this file with automake to produce Makefile.in + +EXTRA_DIST = check_contact check_event check_todo check_note + +TESTS = check_contact check_event check_todo check_note Property changes on: branches/experimental-kdepim/tests/Makefile.am ___________________________________________________________________ Name: svn:executable + * Added: branches/experimental-kdepim/tests/Makefile.in =================================================================== --- branches/experimental-kdepim/tests/Makefile.in 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/tests/Makefile.in 2005-04-07 14:31:33 UTC (rev 452) @@ -0,0 +1,498 @@ +# Makefile.in generated by automake 1.7.9 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +ARTSCCONFIG = @ARTSCCONFIG@ +AUTOCONF = @AUTOCONF@ +AUTODIRS = @AUTODIRS@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DCOPIDL = @DCOPIDL@ +DCOPIDL2CPP = @DCOPIDL2CPP@ +DCOPIDLNG = @DCOPIDLNG@ +DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_PERMISSIVE_FLAG = @ENABLE_PERMISSIVE_FLAG@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FRAMEWORK_COREAUDIO = @FRAMEWORK_COREAUDIO@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +HAVE_GCC_VISIBILITY = @HAVE_GCC_VISIBILITY@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@ +KCONFIG_COMPILER = @KCONFIG_COMPILER@ +KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@ +KDE_INCLUDES = @KDE_INCLUDES@ +KDE_LDFLAGS = @KDE_LDFLAGS@ +KDE_MT_LDFLAGS = @KDE_MT_LDFLAGS@ +KDE_MT_LIBS = @KDE_MT_LIBS@ +KDE_NO_UNDEFINED = @KDE_NO_UNDEFINED@ +KDE_RPATH = @KDE_RPATH@ +KDE_USE_CLOSURE_FALSE = @KDE_USE_CLOSURE_FALSE@ +KDE_USE_CLOSURE_TRUE = @KDE_USE_CLOSURE_TRUE@ +KDE_USE_FINAL_FALSE = @KDE_USE_FINAL_FALSE@ +KDE_USE_FINAL_TRUE = @KDE_USE_FINAL_TRUE@ +KDE_USE_NMCHECK_FALSE = @KDE_USE_NMCHECK_FALSE@ +KDE_USE_NMCHECK_TRUE = @KDE_USE_NMCHECK_TRUE@ +KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@ +LDFLAGS = @LDFLAGS@ +LDFLAGS_AS_NEEDED = @LDFLAGS_AS_NEEDED@ +LDFLAGS_NEW_DTAGS = @LDFLAGS_NEW_DTAGS@ +LIBCOMPAT = @LIBCOMPAT@ +LIBCRYPT = @LIBCRYPT@ +LIBDL = @LIBDL@ +LIBJPEG = @LIBJPEG@ +LIBOBJS = @LIBOBJS@ +LIBPNG = @LIBPNG@ +LIBPTHREAD = @LIBPTHREAD@ +LIBRESOLV = @LIBRESOLV@ +LIBS = @LIBS@ +LIBSM = @LIBSM@ +LIBSOCKET = @LIBSOCKET@ +LIBTOOL = @LIBTOOL@ +LIBUCB = @LIBUCB@ +LIBUTIL = @LIBUTIL@ +LIBZ = @LIBZ@ +LIB_KAB = @LIB_KAB@ +LIB_KABC = @LIB_KABC@ +LIB_KDECORE = @LIB_KDECORE@ +LIB_KDEPIM = @LIB_KDEPIM@ +LIB_KDEPRINT = @LIB_KDEPRINT@ +LIB_KDEUI = @LIB_KDEUI@ +LIB_KDNSSD = @LIB_KDNSSD@ +LIB_KFILE = @LIB_KFILE@ +LIB_KFM = @LIB_KFM@ +LIB_KHTML = @LIB_KHTML@ +LIB_KIMPROXY = @LIB_KIMPROXY@ +LIB_KIO = @LIB_KIO@ +LIB_KJS = @LIB_KJS@ +LIB_KNEWSTUFF = @LIB_KNEWSTUFF@ +LIB_KPARTS = @LIB_KPARTS@ +LIB_KSPELL = @LIB_KSPELL@ +LIB_KSYCOCA = @LIB_KSYCOCA@ +LIB_KUTILS = @LIB_KUTILS@ +LIB_POLL = @LIB_POLL@ +LIB_QPE = @LIB_QPE@ +LIB_QT = @LIB_QT@ +LIB_SMB = @LIB_SMB@ +LIB_X11 = @LIB_X11@ +LIB_XEXT = @LIB_XEXT@ +LIB_XRENDER = @LIB_XRENDER@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MAKEKDEWIDGETS = @MAKEKDEWIDGETS@ +MCOPIDL = @MCOPIDL@ +MEINPROC = @MEINPROC@ +MOC = @MOC@ +MSGFMT = @MSGFMT@ +NOOPT_CFLAGS = @NOOPT_CFLAGS@ +NOOPT_CXXFLAGS = @NOOPT_CXXFLAGS@ +OBJEXT = @OBJEXT@ +OPENSYNC_CONFIGDIR = @OPENSYNC_CONFIGDIR@ +OPENSYNC_FORMATSDIR = @OPENSYNC_FORMATSDIR@ +OPENSYNC_HEADERDIR = @OPENSYNC_HEADERDIR@ +OPENSYNC_INCLUDEDIR = @OPENSYNC_INCLUDEDIR@ +OPENSYNC_LIBDIR = @OPENSYNC_LIBDIR@ +OPENSYNC_PLUGINDIR = @OPENSYNC_PLUGINDIR@ +OSYNC_CFLAGS = @OSYNC_CFLAGS@ +OSYNC_LIBS = @OSYNC_LIBS@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +QTE_NORTTI = @QTE_NORTTI@ +QT_INCLUDES = @QT_INCLUDES@ +QT_LDFLAGS = @QT_LDFLAGS@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +UIC = @UIC@ +UIC_TR = @UIC_TR@ +USER_INCLUDES = @USER_INCLUDES@ +USER_LDFLAGS = @USER_LDFLAGS@ +USE_EXCEPTIONS = @USE_EXCEPTIONS@ +USE_RTTI = @USE_RTTI@ +USE_THREADS = @USE_THREADS@ +VERSION = @VERSION@ +WOVERLOADED_VIRTUAL = @WOVERLOADED_VIRTUAL@ +XGETTEXT = @XGETTEXT@ +XMLLINT = @XMLLINT@ +XML_CFLAGS = @XML_CFLAGS@ +XML_LIBS = @XML_LIBS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_INCLUDES = @X_INCLUDES@ +X_LDFLAGS = @X_LDFLAGS@ +X_PRE_LIBS = @X_PRE_LIBS@ +X_RPATH = @X_RPATH@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +all_includes = @all_includes@ +all_libraries = @all_libraries@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +include_ARTS_FALSE = @include_ARTS_FALSE@ +include_ARTS_TRUE = @include_ARTS_TRUE@ +include_x11_FALSE = @include_x11_FALSE@ +include_x11_TRUE = @include_x11_TRUE@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +kde_appsdir = @kde_appsdir@ +kde_bindir = @kde_bindir@ +kde_confdir = @kde_confdir@ +kde_datadir = @kde_datadir@ +kde_htmldir = @kde_htmldir@ +kde_icondir = @kde_icondir@ +kde_includes = @kde_includes@ +kde_kcfgdir = @kde_kcfgdir@ +kde_libraries = @kde_libraries@ +kde_locale = @kde_locale@ +kde_mimedir = @kde_mimedir@ +kde_moduledir = @kde_moduledir@ +kde_qtver = @kde_qtver@ +kde_servicesdir = @kde_servicesdir@ +kde_servicetypesdir = @kde_servicetypesdir@ +kde_sounddir = @kde_sounddir@ +kde_styledir = @kde_styledir@ +kde_templatesdir = @kde_templatesdir@ +kde_wallpaperdir = @kde_wallpaperdir@ +kde_widgetdir = @kde_widgetdir@ +kdeinitdir = @kdeinitdir@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +qt_includes = @qt_includes@ +qt_libraries = @qt_libraries@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +unsermake_enable_pch_FALSE = @unsermake_enable_pch_FALSE@ +unsermake_enable_pch_TRUE = @unsermake_enable_pch_TRUE@ +x_includes = @x_includes@ +x_libraries = @x_libraries@ +xdg_appsdir = @xdg_appsdir@ +xdg_directorydir = @xdg_directorydir@ +xdg_menudir = @xdg_menudir@ + +EXTRA_DIST = check_contact check_event check_todo check_note + +TESTS = check_contact check_event check_todo check_note +subdir = tests +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +DIST_SOURCES = +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign tests/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list='$(TESTS)'; \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *" $$tst "*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + echo "XPASS: $$tst"; \ + ;; \ + *) \ + echo "PASS: $$tst"; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *" $$tst "*) \ + xfail=`expr $$xfail + 1`; \ + echo "XFAIL: $$tst"; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + echo "SKIP: $$tst"; \ + fi; \ + done; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="All $$all tests passed"; \ + else \ + banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all tests failed"; \ + else \ + banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + skipped="($$skip tests were not run)"; \ + test `echo "$$skipped" | wc -c` -gt `echo "$$banner" | wc -c` && \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -gt `echo "$$banner" | wc -c` && \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + test -n "$$skipped" && echo "$$skipped"; \ + test -n "$$report" && echo "$$report"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0; \ + else :; fi +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = .. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile + +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am info info-am install install-am install-data \ + install-data-am install-exec install-exec-am install-info \ + install-info-am install-man install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: Added: branches/experimental-kdepim/tests/check_contact =================================================================== --- branches/experimental-kdepim/tests/check_contact 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/tests/check_contact 2005-04-07 14:31:33 UTC (rev 452) @@ -0,0 +1,3 @@ +#!/bin/bash + +osyncplugin kdepim --type contact || exit 1 Property changes on: branches/experimental-kdepim/tests/check_contact ___________________________________________________________________ Name: svn:executable + * Added: branches/experimental-kdepim/tests/check_event =================================================================== --- branches/experimental-kdepim/tests/check_event 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/tests/check_event 2005-04-07 14:31:33 UTC (rev 452) @@ -0,0 +1,3 @@ +#!/bin/bash + +osyncplugin kdepim --type event || exit 1 Property changes on: branches/experimental-kdepim/tests/check_event ___________________________________________________________________ Name: svn:executable + * Added: branches/experimental-kdepim/tests/check_note =================================================================== --- branches/experimental-kdepim/tests/check_note 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/tests/check_note 2005-04-07 14:31:33 UTC (rev 452) @@ -0,0 +1,3 @@ +#!/bin/bash + +osyncplugin kdepim --type note || exit 1 Property changes on: branches/experimental-kdepim/tests/check_note ___________________________________________________________________ Name: svn:executable + * Added: branches/experimental-kdepim/tests/check_todo =================================================================== --- branches/experimental-kdepim/tests/check_todo 2005-04-06 22:28:08 UTC (rev 451) +++ branches/experimental-kdepim/tests/check_todo 2005-04-07 14:31:33 UTC (rev 452) @@ -0,0 +1,3 @@ +#!/bin/bash + +osyncplugin kdepim --type todo || exit 1 Property changes on: branches/experimental-kdepim/tests/check_todo ___________________________________________________________________ Name: svn:executable + * |
From: <svn...@op...> - 2005-04-06 22:26:47
|
Author: abauer Date: 2005-04-07 00:28:08 +0200 (Thu, 07 Apr 2005) New Revision: 451 Modified: branches/experimental-kdepim/src/kaddrbook.cpp branches/experimental-kdepim/src/kdepim_impl.cpp branches/experimental-kdepim/src/knotes.cpp Log: Fixed some minor bugs in the kdepim plugin Modified: branches/experimental-kdepim/src/kaddrbook.cpp =================================================================== --- branches/experimental-kdepim/src/kaddrbook.cpp 2005-04-06 22:04:43 UTC (rev 450) +++ branches/experimental-kdepim/src/kaddrbook.cpp 2005-04-06 22:28:08 UTC (rev 451) @@ -59,14 +59,6 @@ //get a handle to the standard KDE addressbook addressbookptr = KABC::StdAddressBook::self(); - OSyncError *error = NULL; - - if (!osync_hashtable_load(hashtable, member, &error)) { - osync_context_report_osyncerror(ctx, &error); - osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(&error)); - return FALSE; - } - //Detection mechanismn if this is the first sync if (!osync_anchor_compare(member, "synced", "true")) { osync_trace(TRACE_INTERNAL, "Setting slow-sync"); Modified: branches/experimental-kdepim/src/kdepim_impl.cpp =================================================================== --- branches/experimental-kdepim/src/kdepim_impl.cpp 2005-04-06 22:04:43 UTC (rev 450) +++ branches/experimental-kdepim/src/kdepim_impl.cpp 2005-04-06 22:28:08 UTC (rev 451) @@ -63,9 +63,9 @@ { } - bool init(OSyncError **) + bool init(OSyncError **error) { - //osync_debug("kde", 3, "%s(%s)", __FUNCTION__); + osync_trace(TRACE_ENTRY, "%s(%p)", __func__, error); KAboutData aboutData( "libopensync-kdepim-plugin", // internal program name @@ -83,11 +83,16 @@ application = new KApplication(); hashtable = osync_hashtable_new(); - + if (!osync_hashtable_load(hashtable, member, error)) { + osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); + return false; + } + kcal = new KCalDataSource(member, hashtable); knotes = new KNotesDataSource(member, hashtable); kaddrbook = new KContactDataSource(member, hashtable); + osync_trace(TRACE_EXIT, "%s", __func__); return true; } Modified: branches/experimental-kdepim/src/knotes.cpp =================================================================== --- branches/experimental-kdepim/src/knotes.cpp 2005-04-06 22:04:43 UTC (rev 450) +++ branches/experimental-kdepim/src/knotes.cpp 2005-04-06 22:28:08 UTC (rev 451) @@ -128,10 +128,16 @@ return FALSE; } + if (osync_member_get_slow_sync(member, "note")) { + osync_debug("kcal", 3, "Setting slow-sync for notes"); + osync_hashtable_set_slow_sync(hashtable, "note"); + } + QMap<KNoteID_t,QString>::ConstIterator i; for (i = fNotes.begin(); i != fNotes.end(); i++) { osync_debug("knotes", 4, "Note key: %s", (const char*)i.key().local8Bit()); osync_debug("knotes", 4, "Note summary: %s", (const char*)i.data().local8Bit()); + printf("reporting notes %s\n", (const char*)i.key().local8Bit()); QString uid = i.key(); QString hash = NULL; @@ -175,6 +181,8 @@ } } + osync_hashtable_report_deleted(hashtable, ctx, "note"); + osync_trace(TRACE_EXIT, "%s", __func__); return true; } @@ -250,7 +258,8 @@ return false; } } else { - kn_iface->killNote(uid, true); + osync_debug("knotes", 4, "Deleting note %s", (const char*)uid.local8Bit()); + kn_iface->killNote(uid); if (kn_iface->status() != DCOPStub::CallSucceeded) { osync_context_report_error(ctx, OSYNC_ERROR_GENERIC, "Unable to delete note"); osync_trace(TRACE_EXIT_ERROR, "%s: Unable to delete note", __func__); |
From: <svn...@op...> - 2005-04-06 22:03:23
|
Author: drzeus Date: 2005-04-07 00:04:43 +0200 (Thu, 07 Apr 2005) New Revision: 450 Modified: trunk/misc/opensync.spec.in Log: Enable debug in the RPM while in beta. Modified: trunk/misc/opensync.spec.in =================================================================== --- trunk/misc/opensync.spec.in 2005-04-06 21:32:05 UTC (rev 449) +++ trunk/misc/opensync.spec.in 2005-04-06 22:04:43 UTC (rev 450) @@ -36,7 +36,7 @@ %setup -q %build -%configure --enable-engine --disable-debug --disable-tracing --disable-profiling --enable-tools --disable-unit-tests --disable-python +%configure --enable-engine --enable-debug --disable-tracing --disable-profiling --enable-tools --disable-unit-tests --disable-python make %install |
From: <svn...@op...> - 2005-04-06 21:30:44
|
Author: drzeus Date: 2005-04-06 23:32:05 +0200 (Wed, 06 Apr 2005) New Revision: 449 Modified: plugins/evolution2/misc/evolution2.spec.in Log: RPM lacked an explicit make Modified: plugins/evolution2/misc/evolution2.spec.in =================================================================== --- plugins/evolution2/misc/evolution2.spec.in 2005-04-06 21:31:32 UTC (rev 448) +++ plugins/evolution2/misc/evolution2.spec.in 2005-04-06 21:32:05 UTC (rev 449) @@ -28,6 +28,7 @@ %build %configure +make %install rm -rf %{buildroot} |