def __init__(self, log=log): self.log = log self._zclient = ZeitgeistClient() self._zdclient = ZeitgeistDBusInterface() self._database = DesktopDatabase(DATABASE_NAME, create=True) self._user = os.environ.get('USERNAME') self._machine = os.uname()
def on_db_change(self, callback=None, dbname=DATABASE_NAME, every=2): ''' Set some function to be called when db entry content changed Call this function with callback=False to remove change watch The callback will be called with same keyworkd that in _changes Consult _changes for more info http://wiki.apache.org/couchdb/HTTP_database_API#Continuous_.28Nohangeshangesn-Polling.29_Feed Examples: Insert or Update case >>> callback(**{ >>> "seq":331, >>> "id":"<_id of document entry>", >>> "changes":[{"rev":"<_rev of document entry>"}] >>> }) Delete case >>> callback(**{ >>> "seq":334, >>> "id":"<_id of document entry>", >>> "changes":[{"rev":"<_rev of document entry>"}], >>> "deleted":True >>> }) callback: callable, called with changes dbname: name of database do watch every: time in seconds, how many seconds to wait and rescan for changes ''' db = self._databases.get(dbname) if db: gobject.source_remove(db['onchangeeventid']) else: self._databases[dbname] = db = { 'dbinstance': self._database if dbname is DATABASE_NAME\ else DesktopDatabase(dbname) } def watch_changes(): db['dbinstance'].report_changes(callback) db['onchangeeventid'] = \ gobject.timeout_add_seconds(every, watch_changes) if callback: watch_changes()