Read side-car metadata during index

Is it possible to change the way that indexing is performed for a folder?

I have a folder that contains a Calibre library. The Calibre library indexes fine but each item (book) also has a side-car type file with useful meta data. The meta data are in XML format. What I would like to do is create something to read the XML data from the indexed file and populate the tags of the book in DT3.

When I index a book a whole directory is indexed.

 Bookname 
    cover           [image file]
    metadata        [XML file]
    bookname        [PDF file]

Is it possible to hook a script such that every time the directory gets indexed, a script is run (that I will write) to write tags to bookname?

This Smart Rule script should do it. Set the search predicates to kind = pdf (and tags ≠ * if you only want to set them once).

Don’t think there’s a trigger “during index”

-- Use calibre keywords as tags

property tagStart : "<dc:subject>"
property tagEnd : "</dc:subject>"
property tagStart_length : length of tagStart

on performSmartRule(theRecords)
	tell application id "DNtp"
		try
			repeat with thisRecord in theRecords
				set theText to plain text of (get record at (location of thisRecord) & "metadata.opf")
				set theLines to paragraphs of theText
				set theKeywords to {}
				repeat with thisLine in theLines
					set thisLine to thisLine as string
					if thisLine contains tagStart then
						set end of theKeywords to characters ((offset of tagStart in thisLine) + tagStart_length) thru ((offset of tagEnd in thisLine) - 1) in thisLine as string
					end if
				end repeat
				set tags of thisRecord to (tags of thisRecord) & theKeywords
			end repeat
			
		on error error_message number error_number
			if the error_number is not -128 then display alert "DEVONthink" message error_message as warning
		end try
	end tell
end performSmartRule
2 Likes

Wow, thank you! This looks really promising. Maybe it would not need to run during index, I am sure on demand or on a schedule would work well. :smile: