Skip to content

Instantly share code, notes, and snippets.

@fintanmm
Created July 19, 2023 13:19
Show Gist options
  • Save fintanmm/3c318d1549485e7c3cca1e9171006d82 to your computer and use it in GitHub Desktop.
Save fintanmm/3c318d1549485e7c3cca1e9171006d82 to your computer and use it in GitHub Desktop.
import PyQt5.QtWidgets as QtWidgets
import dbus
import getpass
import subprocess
class SnapperGUI(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.configs = []
self.current_config = None
self.snapshots_list = QtWidgets.QListWidget()
self.snapshots_list.itemDoubleClicked.connect(self.on_snapshot_double_clicked)
self.config_combo = QtWidgets.QComboBox()
self.config_combo.addItems(self.configs)
self.config_combo.currentTextChanged.connect(self.on_config_changed)
self.button_create_snapshot = QtWidgets.QPushButton("Create Snapshot")
self.button_create_snapshot.clicked.connect(self.on_create_snapshot_clicked)
self.button_rollback = QtWidgets.QPushButton("Rollback")
self.button_rollback.setEnabled(False)
self.button_rollback.clicked.connect(self.on_rollback_clicked)
layout = QtWidgets.QVBoxLayout()
layout.addWidget(self.snapshots_list)
layout.addWidget(self.config_combo)
layout.addWidget(self.button_create_snapshot)
layout.addWidget(self.button_rollback)
self.setLayout(layout)
self.bus = dbus.Bus()
self.object = self.bus.get_object("org.opensuse.Snapper", "/org/snapper/snapperd")
self.interface = dbus.Interface(self.object, "org.opensuse.Snapper")
self.sudo_password = None
def on_snapshot_double_clicked(self, item):
self.current_snapshot = item.text()
self.button_rollback.setEnabled(True)
def on_config_changed(self, config):
self.current_config = config
self.snapshots_list.clear()
snapshots = self.interface.ListSnapshots(config)
for snapshot in snapshots:
self.snapshots_list.addItem(snapshot)
def on_create_snapshot_clicked(self):
answer = QtWidgets.QMessageBox.question(self, "Are you sure?", "Do you want to create a snapshot?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
if answer == QtWidgets.QMessageBox.Yes:
subprocess.check_output(["sudo", "-S", "python3", "snapper_gui.py", "create_snapshot", self.current_config])
def on_rollback_clicked(self):
if not self.current_snapshot:
return
answer = QtWidgets.QMessageBox.question(self, "Are you sure?", "Do you want to rollback to snapshot '{}'?".format(self.current_snapshot), QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
if answer == QtWidgets.QMessageBox.Yes:
subprocess.check_output(["sudo", "-S", "python3", "snapper_gui.py", "rollback", self.current_config])
if __name__ == "__main__":
app = QtWidgets.QApplication([])
window = SnapperGUI()
window.show()
app.exec_()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment