[PATCH hiprompt-gtk-py] Implement new prompter protocol
Export this patch
---
hiprompt_gtk/proto.py | 13 +++++++++++--
hiprompt_gtk/window.py | 14 ++++++++++++--
2 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/hiprompt_gtk/proto.py b/hiprompt_gtk/proto.py
index b30b686..5f4749f 100644
--- a/hiprompt_gtk/proto.py
+++ b/hiprompt_gtk/proto.py
@@ -14,7 +14,9 @@ class Session:
self.unlock = False
self.status = 127
self.mode = None
+ self.parse()
+ def parse(self):
for line in sys.stdin:
parts = line.strip().partition(" ")
cmd = parts[0]
@@ -35,6 +37,8 @@ class Session:
def _unlock(self, args):
self.unlock = True
+ if len(self.keys) == 0:
+ return False
def _prompt(self, args):
self.mode = PromptMode(args)
@@ -50,7 +54,12 @@ class Session:
sys.stdout.flush()
# TODO: Don't block
line = sys.stdin.readline()
- if line == "incorrect-password\n":
+ if line == "password incorrect\n":
return False
- else:
+ elif line == "password correct\n":
+ self.unlock = False
+ self.parse()
return True
+ else:
+ sys.stderr.write(f"Unexpected command '{line}'\n")
+ exit(127)
diff --git a/hiprompt_gtk/window.py b/hiprompt_gtk/window.py
index db00d95..c2c29b6 100644
--- a/hiprompt_gtk/window.py
+++ b/hiprompt_gtk/window.py
@@ -25,10 +25,15 @@ class Window:
self.entry = None
+ self.make_ui()
+
+ def make_ui(self):
if self.session.mode == PromptMode.disclose:
self.make_disclose_ui()
elif self.session.mode == PromptMode.delete:
self.make_delete_ui()
+ elif self.session.mode == None:
+ assert(self.session.unlock)
else:
raise ValueError("Unexpected mode")
@@ -36,6 +41,7 @@ class Window:
self.make_unlock_ui()
self.header.show_all()
+ self.box.show_all()
def on_close(self, *args):
Gtk.main_quit()
@@ -47,9 +53,13 @@ class Window:
def on_unlock_grant(self, *args):
password = self.entry.get_text()
self.entry.set_sensitive(False)
+ confirmed = len(self.session.keys) > 0
if self.session.password(password):
- self.session.status = 0
- Gtk.main_quit()
+ if not self.session.mode or confirmed:
+ self.session.status = 0
+ Gtk.main_quit()
+ else:
+ self.make_ui()
else:
self.entry.set_text("")
self.entry.set_sensitive(True)
--
2.36.1
Thanks!
To git@git.sr.ht:~sircmpwn/hiprompt-gtk-py
52ac6fc..dd5ed36 master -> master