#! /usr/bin/env python
import gio
import gtk
import sqlite3
class Monitor(object):
def __init__(self, file):
# Setup Database
self.db = sqlite3.connect(':memory:')
# self.db = sqlite3.connect('test.db')
self.create_table()
# Delete Everything that is in the database
self.delete_all()
if self.is_directory(file):
self.add_directory(file)
def add_directory(self, file):
# Add the Change Listener
mon = file.monitor_directory()
mon.connect("changed", self.changed_event)
file.enumerate_children_async("*", self.enumerate_children_callback)
def enumerate_children_callback(self, file, result):
print file
file_infos = file.enumerate_children_finish(result)
print file_infos
for file_info in file_infos:
new_file = file.resolve_relative_path(file_info.get_name())
if file_info.get_file_type() == gio.FILE_TYPE_DIRECTORY:
self.add_directory(new_file)
else:
self.insert(new_file.get_basename(), new_file.get_path())
def insert(self, name, path):
cursor = self.db.cursor()
# print "Name " + name
# print "Path " + path
cursor.execute('INSERT INTO files (name, path) VALUES ("%s", "%s")' % (name, path))
self.db.commit()
def delete(self, path):
cursor = self.db.cursor()
# print "Path " + path
cursor.execute('DELETE FROM files WHERE path = "%s"' % (path))
self.db.commit()
def create_table(self):
cursor = self.db.cursor()
cursor.execute("CREATE TABLE files (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(255), path VARCHAR(255))")
self.db.commit()
def delete_all(self):
cursor = self.db.cursor()
cursor.execute("DELETE FROM files")
self.db.commit()
def is_directory(self, file):
if file.query_exists():
info = file.query_info("standard::type")
# Check to make sure that the root file is a directory
if info.get_file_type() == gio.FILE_TYPE_DIRECTORY:
return True
else:
return False
def changed_event(self, monitor, file, unknown, event):
info = None
if file.query_exists():
info = file.query_info("standard::type")
if info.get_file_type() == gio.FILE_TYPE_DIRECTORY:
mon = file.monitor_directory()
mon.connect("changed", self.changed_event)
name = file.get_basename()
if name.find('.gedit-save') < 0 and name.find('~') < 0:
# print file.get_uri()
# print event
if gio.FILE_MONITOR_EVENT_CREATED == event:
self.insert(name, file.get_uri())
elif gio.FILE_MONITOR_EVENT_DELETED == event:
self.delete(file.get_uri())
if __name__ == '__main__':
mon = Monitor(gio.File('file_folder'))
gtk.main()