#@+leo-ver=5-thin
#@+node:ekr.20130808211520.15893: * @file timestamp.py
'''If this plugin is enabled, the following node attributes will be managed:
- str_ctime: creation time
- str_mtime: time node was last modified
- str_atime: time node contents were last viewed
'''
# By Kent Tenney
import time
import leo.core.leoGlobals as g
#@@language python
#@@tabwidth -4
#@+others
#@+node:ekr.20130808211520.15895: ** init
[docs]def init ():
'''Return True if the plugin has loaded successfully.'''
g.registerHandler('new', new_hook)
g.registerHandler('create-node', create_node_hook)
g.registerHandler('select1', select1_hook)
g.plugin_signon(__name__)
return True
#@+node:ekr.20130808211520.15896: ** get_timestamp_now
[docs]def get_timestamp_now():
'''Use standard Unix timestamps
'''
# local time as a time struct
now = time.localtime()
# convert time struct to seconds since epoch (timestamp)
local = time.mktime(now)
return str(local)
#@+node:ekr.20130808211520.15897: ** new_hook
[docs]def new_hook(tag, keywords):
'''Hooked to <new> event, fired when a Leo file is created,
which the create_node_hook doesn't handle.
'''
c = keywords['c']
root = c.rootPosition()
d = root.v.u
timestamp = get_timestamp_now()
d['str_ctime'] = d['str_mtime'] = d['str_atime'] = timestamp
#@+node:ekr.20130808211520.15898: ** create_node_hook
[docs]def create_node_hook(tag, keywords):
'''Hooked to <create-node> = set all 3 timestamps to now
'''
timestamp = get_timestamp_now()
d = keywords['p'].v.u
d['str_ctime'] = d['str_mtime'] = d['str_atime'] = timestamp
#@+node:ekr.20130808211520.15899: ** select1_hook
[docs]def select1_hook(tag, keywords):
'''Hooked to select1, which fires when focus changes
Always sets str_atime to now, sets str_mtime if node body has changed
'''
prev = keywords['old_p'].v
current = keywords['new_p'].v
now = get_timestamp_now()
current.u['str_atime'] = now
if prev is None:
return
if prev.isDirty():
#g.es('prev is dirty', color='green')
if hasattr(prev, 'prev_body'):
if prev.b != prev.prev_body:
prev.u['str_mtime'] = now
prev.prev_body = prev.b
#g.es('previous content changed this session')
else:
prev.u['str_mtime'] = now
prev.prev_body = prev.b
#g.es('first change this session')
#@-others
#@-leo