~comcloudway/choochoo

66a87452a20e5c7599f7ff738537db61af3bc979 — Jakob Meier 5 months ago bdf3ae6
add delete button to ticket view

shows confirm dialog
onConfirm: removes file, closes ticket view and reloads home screen
3 files changed, 36 insertions(+), 3 deletions(-)

M choochoo/deutschlandticket.py
M choochoo/ticketview.py
M choochoo/window.py
M choochoo/deutschlandticket.py => choochoo/deutschlandticket.py +11 -1
@@ 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)

M choochoo/ticketview.py => choochoo/ticketview.py +22 -1
@@ 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


M choochoo/window.py => choochoo/window.py +3 -1
@@ 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[:]