Callback with all visible columns passed at once

Some time ago I've made a script which adds SVN tag (and SVN externals) columns to Opus. To communicate with svn.exe I use tbone's functions he kindly provided then (thanks man!). This works great, but because temp files are used to read the results of svn.exe, it would be much faster if visible columns could be updated in one go instead of one by one. Having the ability to define a callback which gets vector/list of all columns that need to be refreshed would be great!

These are quotes from that old topic;

This would also enable us to create more efficient plugins to provide general SVN columns in case Tortoise stops supporting them in the future (because Explorer no longer supports these custom columns).

The old topic is out of date. Scripts can populate multiple columns at once now.

See ScriptColumnData.columns.

Thanks leo! I guess I wasn't paying attention to release notes :blush: :smiley:

It seems that while multiple columns can be updated at once, it is still not possible to update multiple files/folders of a same column at once? i.e., OnScriptColumn method is always called per each file/folder and there is no possibility to get the list of visible items in that column at once?

No, that's not possible.

I've managed to workaround this limitation by detecting the first file and then running svn.exe on the entire folder, storing results into map and simply read the results from the map for subsequent column items. However it is completely unreliable on slower devices such as USB sticks because it seems Opus calls my column callbacks asynchronously, so sometimes svn.exe doesn't have time to read all the files but column callback for that file (item) is already called. This manifests by custom svn property sometimes being listed and sometimes not between refreshes.

I'm not sure if that's really the case, but if Opus calls the column's per-item callbacks asynchronously, can there be implemented an option that they get called synchronously (perhaps after a callback returns)?

Or perhaps the problem is somewhere else?

Just to give a closure to this: problem solved, there were several bugs in my code that conspired to create a total confusion on my part :slight_smile: