<div class="gmail_quote">2011/4/12 George Goldberg <span dir="ltr">&lt;<a href="mailto:grundleborg@googlemail.com">grundleborg@googlemail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
2011/4/12 Dario Freddi &lt;<a href="mailto:drf54321@gmail.com">drf54321@gmail.com</a>&gt;:<br>
<div><div></div><div class="h5">&gt; Hi guys,<br>
&gt;<br>
&gt; long mail ahead, so don&#39;t complain, you have been warned.<br>
&gt;<br>
&gt; This problem has proven to be anything but simple, and to have no<br>
&gt; straightforward solution. So I am going to explain what we are facing first,<br>
&gt; and how we can solve it later.<br>
&gt;<br>
&gt; 1. Defining the problem:<br>
&gt;<br>
&gt; We don&#39;t know when to disconnect our accounts. There has been an argument over<br>
&gt; disconnecting them after the contact list has been closed, but this would mean<br>
&gt; that any other application wishing to use Telepathy would need to reconnect<br>
&gt; all the accounts.<br>
&gt;<br>
&gt; So, leaving this mechanism inside the presence applet was proposed. Of course,<br>
&gt; this would lead to forcing the user to use OUR presence applet, and that all<br>
&gt; of our infrastructure would hard-depend on it; this is simply not acceptable.<br>
&gt;<br>
&gt; The dataengine seemed a perfect place to aim for an hybrid solution, but<br>
&gt; unfortunately there is no way to detect if any applets are connected to it,<br>
&gt; making it impossible to define when you do not want to be online or offline.<br>
&gt;<br>
&gt; 2. Why should I care about presence?<br>
&gt;<br>
&gt; Now try and imagine you are an average developer of a KDE component wishing to<br>
&gt; use Telepathy. Do you care about presence? Yes, but in a read-only fashion.<br>
&gt; Let&#39;s try and have a look at a possible workflow the application should have,<br>
&gt; keeping in mind that developers and users should be presented with as most<br>
&gt; simplicity as possible.<br>
&gt;<br>
&gt; Find a schema here (ok, not that great, I used what I found available):<br>
&gt; <a href="http://imgur.com/DrIIF" target="_blank">http://imgur.com/DrIIF</a><br>
&gt;<br>
&gt; Now, as you see, the contact list is the top of the iceberg: anyone might want<br>
&gt; to know about presence. This brings us to 2 categories of applications:<br>
&gt;<br>
&gt;  - Presence handlers<br>
&gt;  - Presence users<br>
&gt;<br>
&gt; Do not need to explain that I suppose. The presence applet would be a presence<br>
&gt; handler. But, we saw that an application should be able to change the presence<br>
&gt; on demand. So, what to do in this case?<br>
&gt;<br>
&gt; 3. Centralizing presence handling<br>
&gt;<br>
&gt; In a bright future where we will have a KTelepathy library, one would do<br>
&gt; KTelepathy::init(), which would take care of doing everything which is in the<br>
&gt; box. So an external library would contain all the logic for getting an<br>
&gt; application up and running, which makes complete sense to me.<br>
&gt;<br>
&gt; This is an idea for presence users, but what about handlers? And what about<br>
&gt; handling the disconnection when an user closes?<br>
&gt;<br>
&gt; We need to have a setting somewhere in System Settings which would define<br>
&gt; &quot;Connect always&quot; &quot;Connect on Demand&quot;. Now, the second case is indeed easy to<br>
&gt; handle. What about the rest?<br>
&gt;<br>
&gt; We could use a similar approach to what I did in PowerDevil, aka using a lock<br>
&gt; system. We would provide a DBus interface, which would expose a lock() and<br>
&gt; unlock() method. Lock() will return an int &quot;id&quot;, which should be passed to<br>
&gt; unlock() when closing the app. When no more locks are present and if the<br>
&gt; global presence setting is &quot;On Demand&quot;, the accounts would be disconnected.<br>
&gt;<br>
&gt; Of course, in this case it makes no difference if an application is a presence<br>
&gt; handler or user: both would require acquiring a lock.<br>
&gt;<br>
&gt; Again, this would be handled under the hood by a KTelepathy library<br>
&gt;<br>
&gt; 4. Ok, where do I put the DBus interface?<br>
&gt;<br>
&gt; Ah, that&#39;s the problem (I mean, the real one). The DBus interface can be<br>
&gt; service-activatable, and we would need a separate daemon for that.<br>
<br>
</div></div>Thanks for the excellent and thorough writeup.<br>
<div class="im"><br>
&gt;<br>
&gt; So, schematizing my solution:<br>
&gt;<br>
&gt; 1. Create a small daemon which would handle TP-enabled KDE applications locks.<br>
<br>
</div>I can&#39;t help wondering - is this really KDE specific? If not, then<br>
perhaps a solution needs to be discussed with upstream. Perhaps this<br>
belongs in the Account Manager (Mission Control)?<br></blockquote><div><br></div><div>To be completely honest, I had the very same feeling. Maybe we should discuss that with the rest of Telepathers?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<br>
--<br>
<font color="#888888">George<br>
</font></blockquote></div><br>