Hello everybody,

while I am currently in the process of rewriting Genesis along the lines
of my previous e-mail, some questions about how to properly integrate
with the D-Bus server and other clients came up. I guess it now shows
that I’m not a computer scientist, so I need some assistance from
somebody with more profound knowledge.

1. Getting sync reports from third party sessions.

        One of my attempts for the re-write is to better integrate
        Genesis with other clients, like sync-ui. So I want to show that
        a sync is in progress (animated icon) and a result report
        (notification bubble) for syncs triggered by other clients.
        
        I can easily listen to the `StatusChanged` signal of a newly
        created session and show that a sync is in progress by waiting
        for the 'done' status. But when I want to get the result of that
        sync by calling `session.GetReports(0, 1)`, it fails with a
        D-Bus error. I guess that this is because sync-ui already called
        `session.Detach()`.
        
        So what would be the best way to get a sync report from a
        session that I did not create by myself? Is there a way to
        "attach" to a third-party session in order to prevent it from
        being destroyed?

2. Getting information about the purpose of a session

        When I want to sync, I create a session. Because I have to wait
        for the session to become ready, I connect to the
        `SessionChanged` signal. But of course, I get a `SessionChanged`
        for all sessions, not just the one I just requested for syncing.
        So how do I know that the session I am getting notified about is
        the one I requested for the sync?
        
        Currently, I am storing the purpose of a session, along the
        lines of
        
                session_path = syncevo_server.StartSession(server)
                sessions[session_path] = 'sync'
        
        Then, when I get the `SessionChanged` signal, I can ask for the
        purpose:
        
                if sessions[session_path] == 'sync':
                    session.Sync('', {})
        
        But there is a race condition between storing the sync info and
        getting the `SessionChanged` signal. So I used a sleep:
        
                while not session_path in sessions:
                    time.sleep(0.1)
        
        But this is a) ugly, and b) only works assuming all sessions are
        created by myself, because a session created by a third-party
        client will never show up in `sessions`.
        
        So to make a long story short: How would I properly know if a
        session I get the `SessionChanged` signal for is requested by me
        in order to perform a sync?
        (I tried to understand what sync-ui does, but miserably failed
        reading the source code. That is way too deep for me.)

Thanks in advance,
kind regards,
Frederik

_______________________________________________
SyncEvolution mailing list
SyncEvolution@syncevolution.org
http://lists.syncevolution.org/listinfo/syncevolution

Reply via email to