Well you can monkey patch the _view_calibre_books function in iactions['View'] with a wrapper, something like this:
Code:
orig_func = iactions['View']._view_calibre_books
def myviewfunc(self, ids):
orig_func(ids)
# code to update database with timestamp
iactions['View']._view_calibre_books = myviewfunc