Jump to content
brunoc

DEVONthink Browser & File Action

Recommended Posts

https://github.com/brunocbr/dtp-browser-workflow

 

This is a workflow for quickly searching and accessing group records in DEVONthink databases. It also implements a "Move to DEVONthink" file action, copying a link to the clipboard.

 

Use the SHIFT modifier to browse inside groups, and CMD to create a new subgroup.

 

The workflow may be configured according to your needs and the structure of your databases (please take a look at the configuration by clicking the "Configure workflow and variables" icon at the top right of the workspace). Out of the box, it will search top-level groups in all databases.

 

 

 

 

Screenshot.png

Edited by brunoc
New version with many features.

Share this post


Link to post

Hello, @Philip Venema!

 

We can adapt the script to reiterate over groups, but I think it can get rather slow. In my case, I don't find it very useful, as most of my sub-groups get similar names (by using DTP templates for conferences, projects, classes etc.).

 

Anyway, if you really want to try it, see the script below. I filtered Tags and Trash groups in order to make it a little faster.

 

Also notice you can create multiple triggers in your Alfred workflow with the same "dtp" keyword. This is how I manage working with multiple "Active Projects" databases. I don't think you should do it for all your databases (including Archives for instance) as this could get really slow!

 

 

property pstrDatabaseName : "Projetos Ativos" -- set the name of your database here
set lstGroups to {}
tell application id "com.devon-technologies.thinkpro2" to set tagsGroupUUID to the uuid of tags group of database pstrDatabaseName
tell application id "com.devon-technologies.thinkpro2" to set trashGroupUUID to the uuid of trash group of database pstrDatabaseName

on reiterateOnGroup(theRec)
	tell application id "com.devon-technologies.thinkpro2"
		repeat with r in every child of theRec
			if (type of r is group) and uuid of r is not in {my tagsGroupUUID, my trashGroupUUID} then
				set the end of my lstGroups to {name of r, "x-devonthink-item://" & the uuid of r}
				my reiterateOnGroup(r)
			end if
		end repeat
	end tell
end reiterateOnGroup

tell application id "com.devon-technologies.thinkpro2"
	set rootRec to root of database pstrDatabaseName
	my reiterateOnGroup(rootRec)
end tell

set jsonOutput to "{\"items\": ["
repeat with i from 1 to length of lstGroups
	set {strGroupName, strId} to item i of lstGroups
	if i > 1 then
		set jsonOutput to jsonOutput & ", "
	end if
	set jsonOutput to jsonOutput & "{\"uid\":\"" & strId & "\", \"title\":\"" & strGroupName & "\", \"arg\":\"" & strId & "\"}"
end repeat
set jsonOutput to jsonOutput & "]}"

 

Edited by brunoc

Share this post


Link to post

Thnks Brunoc for your workflow!

Do you think it would be possible to 'imitate' the "move to..."  Alfred action to directly file finder files in specific group in DT? 

Such as: file selected in the finder --> keyword --> where in DT by typing the group name --> move to group?

 

brigadinho!:wacko:

Share this post


Link to post

Olá, @nestorito !

 

This is a nice idea. I changed the workflow so now we have a "Move to Active Projects" file action. As an extra, an x-devonthink-item URL for the imported file is copied to the clipboard – which you may use to paste a link on a task manager or whatever.

 

The setup has changed: you must now set the name of your database by clicking the "Configure workflow and variables" icon (located on the top right of the workspace area). If you want to use it with multiple databases, simply duplicate the workflow and change the variable accordingly.

 

Have fun!

 

 

 

Edited by brunoc

Share this post


Link to post

Two updates: I changed the method for moving the file (it's now actually "moved" into DTP, not imported and deleted), and made to allow for multiple databases without the need to duplicate the workflow,

Share this post


Link to post

Great changes @brunoc, I was wondering if it's possible to "replicate"  the group structure for the database, even if I guess it could turn very slow..now I see the top level group for each database, it would be great if we could select deeper group (as in the "move to.." file action)

anyway thanks a lot for this great workflow

Share this post


Link to post

@nestorito thank you for your excellent insights! 

 

I've made a big redesign of the workflow. I've learned a lot in the process about Alfred's tricks – and also became acquainted with a few of its bugs ?.

 

Good news: not only we've got a "Move To" file action, with the ability you suggested to browse inside groups (by holding SHIFT), but also a handy capability of creating new groups in the way (with the CMD modifier). Last but not least, there's now great flexibility for configuring (multiple) databases.

 

I think the workflow is now much less idiosyncratic and can do far more than just accessing "Active Projects". That's why a decided to change the name of the project to "DEVONthink Browser".

 

 

 

Share this post


Link to post

Hello @ghostblog ! I've updated the workflow with a "search_tags" parameter. If set to "true", it will search inside DTP's Tags groups. See if that works as you would expect.

Share this post


Link to post

Somehow, searching files inside groups stopped working for me. When I type the any characters the search bar stays blank. Searching groups works fine etc works fine though. As I have no idea would could be the problem here, is there a way how I could debug this?

Share this post


Link to post

Hello, @jonkaz . Try clicking the "toggle debug mode" on the top right of the workflow page (inside Alfred Preferences). It should give some information on the error when you trigger the workflow.

Edited by brunoc

Share this post


Link to post

Thank you for your response and the hint on how to find the Alfred debug mode. I see that it its quite prominent (the bug icon) but I always ignored... I'm sorry for that. Anyhow, if activate the debug mode, I only get debug output only related to other workflows e.g. those that search for groups. When I search for file there's not messages at all with debug mode enabled. I checked this with other published workflows that search DEVONthink databases and it seems that searching files is not working with these as well. Interestingly, using a workflow that defines the DTP database prior to searching files still works fine (this one with the keyword `dknd`). So I know now that this problem is not related to your workflow but do you have any clue what's the problem? I just don't have a clue. Anyways, thanks for sharing this most advanced dt workflow, this is greatly appreciated. 

Share this post


Link to post

 

Please note that the particular workflow I shared, differently from the one you mentioned (DEVONthink Search), was intended to look only for DEVONthink Groups (not the files inside them). It was actually designed to complement it (I use it a lot too!). One further and important remark, though: any of these workflows will need a DEVONthink "PRO" license to fully operate because AppleScript is required. This is the case with the dknd trigger in the DEVONthink Search workflow (but not with dnk, which simply uses Alfred's internal file search mechanism with Spotlight indexed files). Finally, make sure you have your databases indexed if you want to use this latter workflow (Database properties -> Create Spotlight index).

 

 

Edited by brunoc

Share this post


Link to post
19 hours ago, lutefish said:

Just moved from years of being a devout Evernote user to DevonThink, and this workflow made that decision much easier. Cheers!

Thanks for your feedback!

Share this post


Link to post

A nice update: results are now cached, making the workflow run much faster! The cache expires in 10 minutes by default (you can change it in the configuration variables).

Share this post


Link to post

It's better to periodically update the cache without interaction. I've included a Keyboard Maestro macro for that end and changed default cache expiration to 24 hours.

Share this post


Link to post
51 minutes ago, brunoc said:

It's better to periodically update the cache without interaction. I've included a Keyboard Maestro macro for that end and changed default cache expiration to 24 hours.

 

Can you not use the cached data and update them in the background while the workflow is running?

 

In this case, you get (mostly) the best of both worlds: immediate results replaced by up-to-date results the second the update completes.

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...