Re: FYI: Desktop search of OOo Document content on Windows Vista

Stephan Schaefer <[email protected]> Fri, 08 Dec 2006 18:25:55 +0100
Newsgroups gmane.comp.openoffice.devel.porting
Organization StarOffice / Sun Microsystems, Inc.
Message-ID <[email protected]>
Hi Lars,

According to http://msdn2.microsoft.com/en-gb/library/aa965717.aspx you 
have to implement IPersistStream instead of IPersistFile (which is not 
suported on Vista anymore). As this is supported on XP as well I would 
start changing the implementation from IPersistFile to IPersistStream 
and make it work on XP. Once this is done I would look at Vista again.

The idea behind using IPersistStream is that Vista (or XP) opens the 
file for you and you have to read from the stream and need not to care 
about file system issues.

The core of the OOoFilter implementation is the CContentReader which 
eventually uses a ZipFile object to actually retrieve content from the 
file. All operation of that reader, however, are using a filename for 
initialization (the one passed by IPersistFile). So the first thing 
would be to add methods to the ZipFile class that can deal with a stream 
instead of a filename. Have a look at shell/inc/internal/zipfile.hxx and 
shell/source/all/zipfile.cxx to see which methods are affected (those 
with a string parameter).

Stephan


Lars Langhans wrote:
> Hi,
> some words to Windows Vista Search. Within Vista it should be possible 
> to search documents by it's content. So, if there exist a word like 
> 'supercallifragilisti' ;-) in a document A, you are able to search for 
> 'supercalli' and in the result list you will get the document A.
> 
> First, open:
> Control Panel (Classic View)->Indexing Options->(Button)Advanced->(Tab 
> page)File types
> on this page, mark 'Index Properties and File Contents'
> leave the dialog by 'ok' press Advanced again and do a 'Rebuild' and 
> press ok, take a good coffee ;-)
> 
> This doesn't work as expected. Within Windows XP it works well.
> 
> 
> With OOo there exist some shell extensions in project shell. The DLL 
> ooofiltproxy.dll and ooofilt.dll. The first DLL loads ooofilt.dll via 
> LoadLibraryEx. This is a need because we need some more libraries out of 
> the program directory.
> 
> In the ooofilt.dll is the code for desktop search implemented. At the 
> moment OOo only supports the IPersistFile Interface.
> After some debug sessions and extra code implementation I found out:
> A QueryInterface is called from shell32.dll (Microsoft) and try to use 
> the IPersistStream interface, if it is implemented, it queries to 
> ICallFactory interface, if it is implemented, it calls IFilter::Init() 
> from IFilter interface, but with wrong parameters. Only a catch of 
> exception tripple dot can hold us. I try also to fix the wrong 
> parameters by simple good ones but this also doesn't help.
> Therefore the IFilter implementation (desktop search) doesn't work at 
> the moment.
> 
> IPersistFile is not used within Windows Vista at the moment.
> 
> This tests has done with Vista RC1 && RC2 && Final.
> 
> BugID is i71112
> 
> JM2C
> 
> Regards
> Lars
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>