From 66a87452a20e5c7599f7ff738537db61af3bc979 Mon Sep 17 00:00:00 2001 From: Jakob Meier Date: Thu, 28 Mar 2024 18:54:14 +0100 Subject: [PATCH] add delete button to ticket view shows confirm dialog onConfirm: removes file, closes ticket view and reloads home screen --- choochoo/deutschlandticket.py | 12 +++++++++++- choochoo/ticketview.py | 23 ++++++++++++++++++++++- choochoo/window.py | 4 +++- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/choochoo/deutschlandticket.py b/choochoo/deutschlandticket.py index 24e8145..ff2f926 100644 --- a/choochoo/deutschlandticket.py +++ b/choochoo/deutschlandticket.py @@ -83,13 +83,23 @@ class Ticket(): date = self.valid_from return f"DTicket_{date.year}-{date.month:02}_{self.first_name}-{self.last_name}" - def save(self): + def get_file_path(self): tid = self.get_id() name = f"{tid}.json" fpath = os.path.join(get_data_dir(), name) + return fpath + + def save(self): + fpath = self.get_file_path() handle = open(fpath, "w", encoding="utf-8") text = json.dumps(self.raw) try: handle.write(text) finally: handle.close() + + def delete(self): + fpath = self.get_file_path() + # only attempt to remove the file if it exists + if os.path.exists(fpath): + os.remove(fpath) diff --git a/choochoo/ticketview.py b/choochoo/ticketview.py index 5bab980..7811e1d 100644 --- a/choochoo/ticketview.py +++ b/choochoo/ticketview.py @@ -28,14 +28,35 @@ class TicketScreen(Adw.NavigationPage): # shows confirm dialog # removes the file & closes the window self.delete_button = IconButton("", "user-trash-symbolic", tooltip=_("Delete Ticket")) - self.delete_button.connect("clicked", lambda _: self.fetch()) + self.delete_button.connect("clicked", lambda _: self.ask_delete()) self.header_bar.pack_end(self.reload_button) + self.header_bar.pack_end(self.delete_button) self.view.add_top_bar(self.header_bar) self.overlay = Adw.ToastOverlay() self.set_child(self.view) self.view.set_content(self.overlay) self.update() + def ask_delete(self): + diag = Adw.AlertDialog() + # set dialog cta + diag.set_heading(_("Delete Ticket")) + diag.set_body(_("Do you really want to delete this ticket? (You can add it again later)")) + # setup dialog actions + diag.add_response("cancel", _("Cancel")) + diag.add_response("remove", _("Remove")) + diag.set_close_response("cancel") + diag.set_default_response("cancel") + diag.set_response_appearance("cancel", Adw.ResponseAppearance.DESTRUCTIVE) + diag.set_response_appearance("remove", Adw.ResponseAppearance.SUGGESTED) + # show dialog + diag.choose(self, None, self.confirm_delete) + def confirm_delete(self, diag, ready): + action = diag.choose_finish(ready) + if action == "remove": + self.ticket.delete() + self.activate_action("win.home", None) + def generate_code(self): barcode = self.ticket.barcode diff --git a/choochoo/window.py b/choochoo/window.py index bfadfcc..88d70b3 100644 --- a/choochoo/window.py +++ b/choochoo/window.py @@ -30,8 +30,10 @@ class MainWindow(Adw.ApplicationWindow): # navigate back to the home screen def go_home(self,action,prefs): + print("HI") self.view.pop_to_page(self.home) - self.home.go_home() + # reload tickets + self.home.update() def view_ticket(self, action, prefs): fid = prefs[:] -- 2.38.5