2006/11/28, Jamie McCracken &lt;<a href="mailto:jamiemcc@blueyonder.co.uk">jamiemcc@blueyonder.co.uk</a>&gt;:<br><div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>As for live queries, I dont like dynamic interfaces and in tracker we<br>will simply take a live_query_id as a param and use dbus signal<br>filtering to listen for changes to that specific ID</blockquote><div><br><br>
You mean that the client app will have to do dbus match rules, no? I see that this would work, but it also feels counter intuitive, and all experience tells me that this should be avoided in an api.<br><br>Why not use temporary dbus objects instead? That will also wrap easier in a toolkit client object. Then you have the search engine live interface:
<br><br>&nbsp; method org.freedesktop.search.live.PrepareQuery(args) : returns a dbus path to the query object<br><br>The query object has the interface org.freedesktop.search.Query something like:<br><br>&nbsp; method org.freedesktop.search.Query.Execute
 (args)<br>&nbsp; method org.freedesktop.search.Query.HitCount (args)<br>&nbsp; method org.freedesktop.search.Query.Close (args)<br><br>&nbsp; signal org.freedesktop.search.Query.HitAdd (args)<br>&nbsp; signal org.freedesktop.search.Query.HitRemove
 (args)<br>&nbsp; signal org.freedesktop.search.Query.HitModify (args)<br><br>This is a really rough draft, but I hope the point is clear enough...<br><br>Cheers,<br>Mikkel<br><br><br><br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I would suggest having a PrepareQuery method which returns a unique<br>integer for the query then you can use that to :<br><br>1) Execute the query<br>2) Get the hit count<br>3) listen (using dbus match rules) for specific changes (hit added/removed)
<br><br>Its simple and avoids bad practices like dynamically chanigning<br>interfaces (and is no less efficient)<br><br>Heres my suggested spec for Wasabi:<br><br>ServiceTypes is an array of service names like &quot;Files&quot;, &quot;Emails&quot; etc
<br>need to define full list)<br><br><br>method PrepareQuery (ServiceTypes as, query s) return ID i<br><br>method ExecuteQuery (int ID, offset i, limit i) return as (array of uri's)<br><br>method QueryHitCount (int ID) return i
<br><br><br>signal QueryHitAdd (ID i, uri s)<br>signal QueryHitRemove (ID i, uri s)<br><br>The above is easy to implement and should cover the simple ground<br><br>For nautilus also needed is extra methods for searching files by mime
<br>types and/or location - these can be separate methods as tracker<br>implements them (mime and location dont have a meaning with non-file<br>entities)<br><br><br>--<br>Mr Jamie McCracken<br><a href="http://jamiemcc.livejournal.com/">
http://jamiemcc.livejournal.com/</a><br><br>_______________________________________________<br>xdg mailing list<br><a href="mailto:xdg@lists.freedesktop.org">xdg@lists.freedesktop.org</a><br><a href="http://lists.freedesktop.org/mailman/listinfo/xdg">
http://lists.freedesktop.org/mailman/listinfo/xdg</a><br></blockquote></div><br>