Ejemplo n.º 1
0
class MainWindow(Gtk.Window):
    def __init__(self):
        self.fstab = Fstab(FSTAB_PATH)
        builder = Gtk.Builder()
        builder.add_from_file("/usr/lib/snowlinux/snowMount/snowMount.ui")
        window = builder.get_object("main_window")
        self.disk_treeview = builder.get_object("disk_treeview")
        self.disk_label = builder.get_object("disk_label")
        self.disk_label2 = builder.get_object("disk_label2")

        self.part_treeview = builder.get_object("part_treeview")
        self.part_store = Gtk.ListStore(str, str, str, str)
        self.part_treeview.set_model(self.part_store)
        renderer_text = Gtk.CellRendererText()
        renderer_filesystem_text = Gtk.CellRendererText()
        renderer_filesystem_text.set_property("editable", True)
        renderer_filesystem_text.connect("edited", self.onFileSystemEdited)
        renderer_mountpoint_text = Gtk.CellRendererText()
        renderer_mountpoint_text.set_property("editable", True)
        renderer_mountpoint_text.connect("edited", self.onMountpointEdited)
        renderer_mountoptions_text = Gtk.CellRendererText()
        renderer_mountoptions_text.set_property("editable", True)
        renderer_mountoptions_text.connect("edited", self.onMountoptionsEdited)
        column = Gtk.TreeViewColumn("Partition", renderer_text, text=0)
        self.part_treeview.append_column(column)
        column = Gtk.TreeViewColumn("Filesystem", renderer_filesystem_text, text=1)
        self.part_treeview.append_column(column)
        column = Gtk.TreeViewColumn("Mountpoint", renderer_mountpoint_text, text=2)
        self.part_treeview.append_column(column)
        column = Gtk.TreeViewColumn("Options", renderer_mountoptions_text, text=3)
        self.part_treeview.append_column(column)

        self.part_filesystem = builder.get_object("part_filesystem")
        self.part_size = builder.get_object("part_size")
        self.part_label = builder.get_object("part_label")

        self.disk_store = Gtk.ListStore(str)
        self.disk_treeview.set_model(self.disk_store)
        renderer = Gtk.CellRendererText()
        column = Gtk.TreeViewColumn("Disks", renderer, text=0)
        self.disk_treeview.append_column(column)
        self.createDiskStore()

        self.aboutdialog = builder.get_object("aboutdialog")
        self.aboutdialog.set_version(VERSION)
        self.aboutdialog.set_license(LICENSE)
        self.aboutdialog.set_copyright(COPYRIGHT)
        self.aboutdialog.set_comments("A tool to manage mountpoints and options of devices.")

        handlers = {
            "onDeleteWindow": Gtk.main_quit,
            "onButtonRefreshClicked": self.onButtonRefreshClicked,
            "onButtonSaveClicked": self.onButtonSaveClicked,
            "onButtonAboutClicked": self.onButtonAboutClicked,
            "onDiskCursorChanged": self.onDiskCursorChanged,
            "onPartCursorChanged": self.onPartCursorChanged,
        }

        builder.connect_signals(handlers)
        window.show_all()

    def createDiskStore(self):
        disks = drivereader.get_disks()
        for disk in disks:
            self.disk_store.append(["{} ({})".format(disks[disk].getModel(), disk)])

    def onFileSystemEdited(self, widget, path, text):
        self.part_store[path][1] = text

    def onMountpointEdited(self, widget, path, text):
        self.part_store[path][2] = text

    def onMountoptionsEdited(self, widget, path, text):
        self.part_store[path][3] = text

    def updateFstab(self, path):
        device_path = path[0]
        filesystem = path[1]
        mountpoint = path[2]
        mountoptions = path[3]
        self.fstab.updateFstab(device_path, mountpoint, mountoptions, filesystem)

    def onButtonSaveClicked(self, button):
        model, path = self.current_part[0], self.current_part[1]
        self.updateFstab(model[path])
        self.fstab.writeFstab()

    def onButtonRefreshClicked(self, button):
        self.disk_store.clear()
        self.part_store.clear()
        self.part_filesystem.set_text("")
        self.part_size.set_text("")
        self.part_label.set_text("")
        self.createDiskStore()

    def onButtonAboutClicked(self, button):
        self.aboutdialog.run()
        self.aboutdialog.hide()

    def onDiskCursorChanged(self, selection):
        self.part_store.clear()
        self.part_filesystem.set_text("")
        self.part_size.set_text("")
        self.part_label.set_text("")
        model, treeiter = selection.get_selected()
        if treeiter is not None:
            device_path = model[treeiter][0].split()[-1][1:-1]
            disk = drivereader.get_disk(device_path)
            self.disk_label.set_text("{} ({})".format(disk.getModel(), disk.getSize()))
            self.disk_label2.set_text(device_path)
            for part in disk.getPartitions():
                self.part_store.append(
                    [
                        part,
                        self.fstab.getFilesystem(part),
                        self.fstab.getMountpoint(part),
                        self.fstab.getMountoptions(part),
                    ]
                )

    def onPartCursorChanged(self, selection):
        model, treeiter = selection.get_selected()
        if treeiter is not None:
            device_path = model[treeiter][0]
            part = drivereader.get_partition(device_path)
            self.part_filesystem.set_text(part.getFilesystem())
            self.part_size.set_text(part.getSize())
            self.part_label.set_text(part.getLabel())
            self.current_part = (model, treeiter)