Jos: CC'ing xdg, hope it's ok. I only follow up on the lib vs daemon part for now...<br><br><div><span class="gmail_quote">2006/11/19, Jos van den Oever &lt;<a href="mailto:jvdoever@gmail.com">jvdoever@gmail.com</a>&gt;:</span>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">2006/11/19, Mikkel Kamstrup Erlandsen &lt;<a href="mailto:mikkel.kamstrup@gmail.com">mikkel.kamstrup@gmail.com
</a>&gt;:<br>&gt;&nbsp;&nbsp;Great work. I like your dbus api docs!<br>Thanks!<br><br>&gt; I must admit that I'm very keen on getting a daemonless spec. There's<br>&gt; already atleast one daemon running for search purposes, and having another
<br>&gt; on top of that seems overkill.<br>I did take pains to write a daemon in C. This means it's very light.<br><br>&gt; I'd rather create library for finding search engines. This will require some<br>&gt; runtime negotiation but I don't think it will be a significant impact. I
<br>&gt; have some rough ideas about a dbus api for this, I'll try and put it<br>&gt; together...<br>In a library, how do you know which search daemons are running? You'd<br>have to know where they are. With the searchmanager, there is always
<br>an up-to-date list because the managers register there. Even a new<br>manager adhering to the interface would register and so it would be<br>known.</blockquote><div><br>In a stateless lib you don't have to do any bookkeeping, the list of providers would be created when the app asks for it. Here's a short sketch of how I figure the workflow:
<br><br>App: calls lib.getSearchProvider (interface_name)<br>lib: emit a SearchProvidersSpeakUp(iface_name) signal over dbus<br>SearchProvider: return its object path to the lib<br>lib: select a provider from the candidates if there's more than one
<br>lib: return candidates object_path<br>App: dbus connect to iface, object_path<br></div><br>Does this make sense? What I really wanna do is push as much book keeping to dbus itself, since it already does a great deal of what we actually need...
<br><br>Cheers,<br>Mikkel<br><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">About org.freedesktop.search.simple:<br>&gt;<br>&gt; org.freedesktop.search.simple.startConfiguration
 ():<br>&gt;&nbsp;&nbsp;I would rather name it showConfiguration, but that is in the nit-picking<br>&gt; end of the debate. for a simple search interface I guess it is ok to have<br>&gt; coarse controls like this. A mote advanced interface could provide means to
<br>&gt; set and get specific parameters on the search engine.<br>Exactly. new definition:<br>org.freedesktop.search.simple.showConfiguration ()<br><br>&gt; org.freedesktop.search.simple.countHits ( in s query , out<br>&gt; i count ):
<br>&gt;&nbsp;&nbsp;Why is this necesary. Is it to accomodate use cases such as suggestion<br>&gt; popups like below[1], and reduce the dbus wire traffic for multiple calls?<br>Not just that, it is also required for paging ( page 1, page 2, etc)
<br>and lines like 'Found X hits.'<br><br>&gt; Type text in entry: net<br>&gt; Get a popup with:<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; net&nbsp;&nbsp; (7801)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; network (6578)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; netto (17)<br>No, this is another case. Here you see numbers for each keyword, but
<br>where do you get the keywords from? For something like that you'd need<br>a call like:<br>expandWord(in s word, out a(si) wordlist)<br><br>&gt; org.freedesktop.search.simple.query ( in s query, in i<br>&gt; offset, in i limit , out as hits ):
<br>&gt;&nbsp;&nbsp;What is the general consumer of this method? I don't see many. Only stuff<br>&gt; like deskbar-applet or a general search tool would use it. Maybe adding a<br>&gt; parameter to specify a list of groups the hits should match (or maybe
<br>&gt; specifying mimetypes). This argument could be &quot;*&quot; or something to get all<br>&gt; kinds of results. I suggest changing the signature to:<br>&gt; query ( in s query, in as groups, in i offset, in i limit , out as hits )
<br>Interesting suggestion. It does make things quite a bit more<br>complicated. Because you'd need to define the groups. We've not talked<br>about the query language yet ( we need to, but i'm assuming we're<br>going to use something similar to what Beagle and Strigi already use,
<br>which is almost the same), but you also just expand the query like<br>this: &quot;holiday&quot; -&gt; &quot;holiday mimetype:video/*&quot; before sending it to the<br>search-engine. That seems much better defined than a list of vaguely
<br>termed groups. I do not object to having such names for the user to<br>see though.<br><br>&gt; How about live queries? Maybe that should be supported in another interface<br>&gt; than the simple one.<br>Yes it should. Maybe we should try to get this running first. Live
<br>queries are rather tricky.<br><br>&gt; org.freedesktop.search.simple.getProperties ( in as<br>&gt; files,in a(sa(sas)) properties ):<br>&gt;&nbsp;&nbsp;This seems good. It is a bit toward a metadata interface, but I think it is
<br>&gt; good here to so apps don't need tons interfaces to work with. At some point<br>&gt; it there should be a specification on how to name and format these<br>&gt; properties/metadata.<br>Small correction, it should be:
<br> org.freedesktop.search.simple.getProperties ( in as files,in a(sa{sas}) )<br>where one can argue about whether or not to send back the filename<br>again. It's not needed, but also does not take much bandwidth.<br><br>
Cheers,<br>Jos<br></blockquote></div><br>