Bug 65998 - kde, calendar task not synchronized
Summary: kde, calendar task not synchronized
Status: RESOLVED FIXED
Alias: None
Product: SyncEvolution
Classification: Unclassified
Component: KDE (show other bugs)
Version: 1.3.99.3
Hardware: x86 (IA32) Linux (All)
: medium normal
Assignee: SyncEvolution Community
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-06-21 07:42 UTC by promeneur
Modified: 2013-10-02 08:16 UTC (History)
1 user (show)

See Also:
i915 platform:
i915 features:


Attachments
here is the sole task i recorded (105.82 KB, image/png)
2013-06-21 16:02 UTC, promeneur
Details
here is the sole task i recorded (another try) (105.82 KB, image/png)
2013-06-21 16:04 UTC, promeneur
Details
payload of the task (115.02 KB, image/png)
2013-06-21 16:12 UTC, promeneur
Details
raw payload of the task (140.14 KB, image/png)
2013-06-21 16:12 UTC, promeneur
Details

Description promeneur 2013-06-21 07:42:21 UTC
PC
Mandriva 2010.2 i586
kde 4.8.4
akonadi 1.7.2
syncevolution-kde 1.3.99.3-2
funambol 10.0.3

Samsung SII Plus
android 4.1.2
funv10 

configuration
***************************************************************************
[@localhost ~]$ syncevolution --version
SyncEvolution 1.3.99.3 (pre-release)
using libedataserver-1.2.so.13
using libebook-1.2.so.9
using libebook-1.2.so.9
using libecal-1.2.so.7
using libecal-1.2.so.7
using libbluetooth.so.3
Loading backend library /usr/lib/syncevolution/backends/platformgnome.so
Loading backend library /usr/lib/syncevolution/backends/platformkde.so
Loading backend library /usr/lib/syncevolution/backends/syncaddressbook.so
Loading backend library /usr/lib/syncevolution/backends/syncakonadi.so
Loading backend library /usr/lib/syncevolution/backends/syncdav.so
Loading backend library /usr/lib/syncevolution/backends/syncebook.so
Loading backend library /usr/lib/syncevolution/backends/syncecal.so
Loading backend library /usr/lib/syncevolution/backends/syncfile.so
Loading backend library /usr/lib/syncevolution/backends/synckcalextended.so
Loading backend library /usr/lib/syncevolution/backends/syncmaemocal.so
Loading backend library /usr/lib/syncevolution/backends/syncpbap.so
Loading backend library /usr/lib/syncevolution/backends/syncqtcontacts.so
Loading backend library /usr/lib/syncevolution/backends/syncsqlite.so
Loading backend library /usr/lib/syncevolution/backends/syncxmlrpc.so
[@localhost ~]$ 

*******************************************************************************
[@localhost ~]$ syncevolution --print-databases
CalDAV:
   select database via absolute URL, set username/password to scan, set syncURL to base URL if server does not support auto-discovery (<path>)

CalDAVTodo:
   select database via absolute URL, set username/password to scan, set syncURL to base URL if server does not support auto-discovery (<path>)

CalDAVJournal:
   select database via absolute URL, set username/password to scan, set syncURL to base URL if server does not support auto-discovery (<path>)

CardDAV:
   select database via absolute URL, set username/password to scan, set syncURL to base URL if server does not support auto-discovery (<path>)

Evolution Address Book = Evolution Contacts = evolution-contacts:
   <<system>> (file:///home/roubach/.evolution/addressbook/local/system) <default>

Evolution Calendar = evolution-calendar:
   <<system>> (file:///home/roubach/.evolution/calendar/local/system)

Evolution Task List = Evolution Tasks = evolution-tasks:
   <<system>> (file:///home/roubach/.evolution/tasks/local/system)

Evolution Memos = evolution-memos:

KDE Address Book = KDE Contacts = kde-contacts:
   Contacts personnels (akonadi:?collection=2) <default>

KDE Calendar = kde-calendar:
   Agenda personnel (akonadi:?collection=262) <default>
   Dates de naissance et anniversaires (akonadi:?collection=267)

KDE Task List = KDE Tasks = kde-tasks:
   Agenda personnel (akonadi:?collection=262) <default>

KDE Memos = kde-memos:
   Notes (akonadi:?collection=3) <default>

[@localhost ~]$ 

**************************************************************************
command used to configure

syncevolution --configure                 keyring=KDE                 addressbook/backend=kde-contacts                 addressbook/database=akonadi:?collection=2                 calendar/backend=kde-calendar                 calendar/database=akonadi:?collection=262                 todo/backend=kde-tasks                 todo/database=akonadi:?collection=262                 @default addressbook calendar todo

***************************************************************************
in the todo source .ini

backend = KDE Task List
database = akonadi:?collection=262
***************************************************************************

akonadi addressbook and calendar are well synchronized

local calendar is a folder of vcs/ics files

if i use
syncevolution --print-items @default calendar
then
[@localhost ~]$ syncevolution --print-items @default calendar
100
101
102
...
108
13713
13714
...
17058
17131
98
99
[@localhost ~]$

but
[roubach@localhost ~]$ syncevolution --print-items @default todo
[roubach@localhost ~]$
Comment 1 Patrick Ohly 2013-06-21 13:36:28 UTC
Thanks for the detailed setup log. That answers a lot of questions already. It all looks good.

(In reply to comment #0)
> [roubach@localhost ~]$ syncevolution --print-items @default todo
> [roubach@localhost ~]$

Are you absolutely sure that akonadi:?collection=262 contains items?

Do you know how to use gdb or how to recompile SyncEvolution?

I have the suspicion that the items are found, but their mime type isn't what is expected. In a recent commit, the "sub mime type" was changed from "text/calendar" to the more specific "application/x-vnd.akonadi.calendar.todo", because that is the type used by Akonadi to describe what kinds of items the collection contains. See

commit 05fb1aebc3242c0cf734f18f0582df8cb05e0999
Author: Diane Trout <diane@ghic.org>
Date:   Thu Apr 25 10:07:25 2013 +0200

    KDE: fix Akonadi backend for tasks
    
    Because of a too generic mime type in SyncEvolution, task collections
    were not found.

diff --git a/src/backends/akonadi/akonadisyncsource.h b/src/backends/akonadi/akonadisyncsource.h
index 5c11ff9..6e88188 100644
--- a/src/backends/akonadi/akonadisyncsource.h
+++ b/src/backends/akonadi/akonadisyncsource.h
@@ -128,7 +128,7 @@ class AkonadiTaskSource : public AkonadiSyncSource
 {
 public:
     AkonadiTaskSource(const SyncSourceParams &params)
-        : AkonadiSyncSource("text/calendar", params)
+        : AkonadiSyncSource("application/x-vnd.akonadi.calendar.todo", params)
     {
     }



Perhaps it uses that type for the collection and "text/calendar" for the items?
In that case, the following code will not find the tasks:

void AkonadiSyncSource::listAllItems(SyncSourceRevisions::RevisionMap_t &revisions)
{
    // copy all local IDs and the corresponding revision
    std::auto_ptr<ItemFetchJob> fetchJob(DisableAutoDelete(new ItemFetchJob(m_collection)));

    if (!fetchJob->exec()) {
        throwError("listing items");
    }
    BOOST_FOREACH (const Item &item, fetchJob->items()) {
        // Filter out items which don't have the right type (for example, VTODO when
        // syncing events)
        if (item.mimeType() == m_subMime.c_str()) {
            revisions[QByteArray::number(item.id()).constData()] =
                      QByteArray::number(item.revision()).constData();
        }
    }
}

You can check this theory by single-stepping through that function. Bonus points for the output of "print item.mimeType()". Not sure whether gdb will be able to call the function. In that case, recompile and add
         LOG_INFO(NULL, "item mime type: %s", item.mimeType());
Comment 2 promeneur 2013-06-21 14:02:00 UTC
>> Are you absolutely sure that akonadi:?collection=262 contains items?

how to know this ? is there any tool to explore the akonadi db ?

kde calendar and kde tasks have the same "262" collection number as you can see above (see syncevolution --print-databases result) 

>> Do you know how to use gdb or how to recompile SyncEvolution?

- gdb : i hardly know it.

- compile

i only know to type ./configure , make , su -c "make install"
if there is a pb i am lost

>> the "sub mime type" was changed from "text/calendar" to the more specific
>> "application/x-vnd.akonadi.calendar.todo"

yes in the list of the file types associated to apps there is "application/x-vnd.akonadi.calendar.todo"

perhaps to avoid futur pb it would be easier not to hardcode the mime/type and to have the ability to assign a value by the way of syncevolution cli tool.
Comment 3 Patrick Ohly 2013-06-21 15:34:02 UTC
(In reply to comment #2)
> >> Are you absolutely sure that akonadi:?collection=262 contains items?
> 
> how to know this ? is there any tool to explore the akonadi db ?

There is a tool called akonadiconsole. Typically is packaged separately because only developers need it. I don't remember whether it shows individual items.

There may be another check:

syncevolution --export - @default calendar | grep -e BEGIN:VEVENT -e BEGIN:VTODO

If you see BEGIN:VTODO, then the tasks in the collection are impossible to tell apart from events by their mime type, and therefore the SyncEvolution code needs to be changed.

> kde calendar and kde tasks have the same "262" collection number as you can
> see above (see syncevolution --print-databases result) 

Yes, that's why it is important that only VTODO items are used when acting as task source - the engine can only one or the other, but not both mixed in the same data source.

> >> Do you know how to use gdb or how to recompile SyncEvolution?
> 
> - gdb : i hardly know it.
> 
> - compile
> 
> i only know to type ./configure , make , su -c "make install"
> if there is a pb i am lost

Let's try the check above first.
Comment 4 promeneur 2013-06-21 15:49:28 UTC
$ syncevolution --export - @default calendar | grep -e BEGIN:VEVENT -e BEGIN:VTODO
BEGIN:VEVENT
BEGIN:VEVENT
BEGIN:VEVENT
...
BEGIN:VEVENT
BEGIN:VEVENT
BEGIN:VEVENT
$

no BEGIN:VTODO
Comment 5 promeneur 2013-06-21 16:02:11 UTC
Created attachment 81173 [details]
here is the sole task i recorded
Comment 6 promeneur 2013-06-21 16:04:08 UTC
Created attachment 81174 [details]
here is the sole task i recorded (another try)
Comment 7 promeneur 2013-06-21 16:12:28 UTC
Created attachment 81176 [details]
payload of the task
Comment 8 promeneur 2013-06-21 16:12:57 UTC
Created attachment 81177 [details]
raw payload of the task
Comment 9 Patrick Ohly 2013-06-21 18:59:07 UTC
I just realized that the version you are using, 1.3.99.3, does not yet contain the patch that I mentioned.

Change akonadisyncsource.h as shown in comment #1 and recompile. In other words, it should look like:


     AkonadiTaskSource(const SyncSourceParams &params)
        : AkonadiSyncSource("application/x-vnd.akonadi.calendar.todo", params)

Because of the incorrect type, the search for items of the right type never succeeds, leading to the empty list. I was thrown off track because I thought the incorrect type also (and only) prevented listing the task collections (that was the original error report), and that worked for you.
Comment 10 Patrick Ohly 2013-09-30 11:24:00 UTC
I believe this problem was fixed in 1.3.99.4. Please reopen if it persists.
Comment 11 promeneur 2013-10-02 08:16:45 UTC
i use the free version of funv10 10.1.3

i think this version does not take care of any task

anyway it is only to make test;

i don't use task feature


thanks


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.