1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
from snappergui import snapper
import pkg_resources, dbus
from gi.repository import Gtk
from time import strftime, localtime
from pwd import getpwuid
class snapshotsView(Gtk.Widget):
"""docstring for snapshotsView"""
def __init__(self, config):
super(snapshotsView, self).__init__()
self.config = config
self.builder = Gtk.Builder()
self.builder.add_from_file(pkg_resources.resource_filename("snappergui",
"glade/snapshotsView.glade"))
self.builder.connect_signals(self)
self._TreeView = self.builder.get_object("snapstreeview")
self.selection = self.builder.get_object("snapshotsSelection")
self.scrolledwindow = self.builder.get_object("scrolledwindow1")
self.count = 0
self._TreeView.connect("realize", self.update_view)
def update_view(self, widget=None, user_data=None):
treestore = self.get_config_treestore()
if treestore:
self._TreeView.set_model(treestore)
def snapshot_columns(self,snapshot):
if(snapshot[3] == -1):
date = "Now"
else:
date = strftime("%a %x %R", localtime(snapshot[3]))
return [snapshot[0],
snapshot[1],
snapshot[2],
date,
getpwuid(snapshot[4])[0],
snapshot[5],
snapshot[6]]
def get_config_treestore(self):
configstree = Gtk.TreeStore(int, int, int, str, str, str, str)
# Check if the user has permission to see/edit this configuration
try:
snapshots_list = snapper.ListSnapshots(self.config)
except dbus.exceptions.DBusException:
return
parents = []
self.count = len(snapshots_list)
for snapshot in snapshots_list:
if (snapshot[1] == 1): # Pre Snapshot
parents.append(configstree.append(None , self.snapshot_columns(snapshot)))
elif (snapshot[1] == 2): # Post snappshot
parent_node = None
for parent in parents:
if (configstree.get_value(parent, 0) == snapshot[2]):
parent_node = parent
break
configstree.append(parent_node , self.snapshot_columns(snapshot))
else: # Single snapshot
configstree.append(None , self.snapshot_columns(snapshot))
return configstree
def add_snapshot_to_tree(self, snapshot, pre_snapshot=None):
treemodel = self._TreeView.get_model()
# Ignore if we are notified about snapshot we can't read details about.
try:
snapinfo = snapper.GetSnapshot(self.config, snapshot)
except dbus.exceptions.DBusException:
return
pre_number = snapinfo[2]
if (snapinfo[1] == 2): # if type is post
for aux, row in enumerate(treemodel):
if(pre_number == row[0]):
pre_snapshot = treemodel.get_iter(aux)
break
treemodel.append(pre_snapshot, self.snapshot_columns(snapinfo))
def remove_snapshot_from_tree(self, snapshot):
treemodel = self._TreeView.get_model()
for aux, row in enumerate(treemodel):
if(snapshot == row[0]):
has_child = treemodel.iter_has_child(treemodel.get_iter(aux))
if(has_child):
# FIXME meh
self.update_view()
else:
del treemodel[aux]
def on_description_edited(self, widget, treepath, text):
snapshot_row = self._TreeView.get_model()[treepath]
snapshot_num = snapshot_row[0]
snapshot_info = snapper.GetSnapshot(self.config,snapshot_num)
snapper.SetSnapshot(self.config,snapshot_info[0],text,snapshot_info[6],snapshot_info[7])
snapshot_row[5] = text
def on_cleanup_edited(self, widget, treepath, text):
snapshot_row = self._TreeView.get_model()[treepath]
snapshot_num = snapshot_row[0]
snapshot_info = snapper.GetSnapshot(self.config,snapshot_num)
snapper.SetSnapshot(self.config,snapshot_info[0],snapshot_info[5],text,snapshot_info[7])
snapshot_row[6] = text
|