[MacRuby-devel] Trying to use spotlight programmatically

Franco Rondini rondinif at yahoo.it
Mon Feb 28 15:12:53 PST 2011


Hello , 
The code posted by Kaelin works great for me, 
After counting the number of search results now I would like to know the path of files found but to do this I have big difficulty
   
 I'm trying to figure out how to make it works the MDQueryGetAttributeValueOfResultAtIndex or MDItemCopyAttribute to read out the KMDItemPath or KMDItemFSName but I was a bit confused by the "Pointer" returned and even I get a # Illegal instruction as you can see in the following code:

framework "CoreServices"
#=> true
query = MDQueryCreate(KCFAllocatorDefault, "kMDItemDisplayName = '*.pdf'", [KMDItemFSName,KMDItemPath] , nil)
#=> #<__NSCFType:0x2005d63a0>
MDQueryExecute(query, KMDQuerySynchronous)
#=> true
# item = MDQueryGetResultAtIndex(query, 1);
#=> #<Pointer:0x20052dc80>
count = MDQueryGetResultCount(query)
p "found #{count} documents" #=> 981
a = MDQueryGetAttributeValueOfResultAtIndex(query, KMDItemFSName, 2)
p a #<Pointer:0x20059aee0>   ..not a NSString
p a[0] #0 
p a[1] #4

item_ref = MDQueryGetResultAtIndex(query, 1)
p item_ref  #<Pointer:0x200582460>
p item_ref.class #Pointer ..not a MDItemRef
path = MDItemCopyAttribute( item_ref, KMDItemPath) #Illegal instruction
p path

I've found an older post of 2009 titled: "[MacRuby-devel] spotlight - MDItemRef" where Laurent said: "I'm afraid the MD* APIs haven't been covered by BridgeSupport yet.."
but because of i can see the MDQueryGetResultCount working I hope that there is a way to enumerate the results of the query to get the attributes ( path especially )
I would be very happy if anyone has any idea, 
Thanks
Franco 





> Kaelin Colclausure
> 
Kaelin Colclasure kaelin at apple.com 
Tue Feb 8 11:49:39 PST 2011

Previous message: [MacRuby-devel] Trying to use spotlight programmatically
Next message: [MacRuby-devel] BridgeSupport Requirement
Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Martin,
	
The FinderFilesOnly stuff is not really relevant to other applications using Spotlight. You should not need to do anything special to find email results. Try, for example, using the mdfind command from Terminal:

$ mdfind -literal 'kMDItemAuthorEmailAddresses == *'

If your query is not returning any results, there is probably something else going on. Here is a quick example using macirb:
---8<---
[kaelin at melete trunk]$ macirb
irb(main):001:0> framework 'CoreServices'
=> true
irb(main):002:0> query = MDQueryCreate(KCFAllocatorDefault, "kMDItemAuthorEmailAddresses == *", nil, nil)
=> #<__NSCFType:0x4001149e0>
irb(main):003:0> MDQueryExecute(query, KMDQuerySynchronous)
=> true
irb(main):004:0> MDQueryGetResultCount(query)
=> 66883
irb(main):005:0> 
--->8---

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-devel/attachments/20110301/7e87e545/attachment.html>


More information about the MacRuby-devel mailing list