def on_handler_event(resp): """ events triggered from the icabbi handler thread are caught here """ # CHANGED HOST if resp.event == handler.EVENT_HOST_UPDATE: Logger.info("Host is now {host}".format(host=resp.host)) # CHANGED DRIVER ID elif resp.event == handler.EVENT_DRIVER_UPDATE: if hasattr(resp, "driver_id"): Logger.info("New driver ID #{_id}".format(_id=resp.driver_id)) # NEW BID elif resp.event == handler.EVENT_BID_UPDATE: sv = Globals.mainscrn.ids.get("sv_namevalue") sv.add("Bid: ", "{} ({})".format(resp.bid["title"], resp.bid["distance"])) # NOW ON JOB elif resp.event == handler.EVENT_NEW_JOB: sv = Globals.mainscrn.ids.get("sv_namevalue") sv.clear() for name, value in tuple(format_booking(resp.booking).items()): sv.add(name + ": ", value) if name == "Phone" or name == "Address" or name == "direct_connect": sv.add("", "") sv.add( "", '''[ref={"action":"arrived","booking_id":"%s"}][color=#FFD919]Notify Customer[/color][/ref]''' % resp.booking["id"]) sv.add( "", '''[ref={"action":"madecontact", "booking_id": "%s"}][color=#E67300]Picked up Customer[/color][/ref]''' % resp.booking["id"]) # JOB HAS BEEN OFFERED elif resp.event == handler.EVENT_JOB_OFFER: if hasattr(resp, "accepted"): if Globals.settings["audio"]: Globals.android_play_system_sound("notification") Globals.android_text2speak.speak( "Job offer has been accepted.") show_toast("Job offer has been accepted...") # LOGGED OUT elif resp.event == handler.EVENT_LOGGED_OUT: sv = Globals.mainscrn.ids["sv_namevalue"] sv.clear() sv.add("Driver Status: ", "Logged out") # ALL ZONES CHANGED elif resp.event == handler.EVENT_ZONES: # if status screen then show zone update if Globals.app.root.current == "status": # get the listctrl window listctrl = Globals.app.root.current_screen.ids.get("headerview_id") listctrl.column_rv.populate(resp.zones) # ZONE HAS CHANGED elif resp.event == handler.EVENT_ZONE_UPDATE: zone = resp.zone sv = Globals.mainscrn.ids.get("sv_namevalue") sv.clear() sv.add("Zone: ", zone.get("title")) sv.add("Id: ", zone.get("id")) sv.add("Position: ", zone.get("position")) sv.add("Drivers: ", zone.get("total")) sv.add("Jobs: ", zone.get("job_count")) # QUITING elif resp.event == handler.EVENT_QUIT: Logger.info("iCabbi thread has now closed.") # BOOKING UPDATED elif resp.event == handler.EVENT_BOOKING_UPDATE: #Globals.mainscrn.status_text = "Customer has been notified" if resp.status == "arrived" else "Picked up Customer" pass # ERROR elif resp.event == handler.EVENT_NETWORK_ERROR: if Globals.loading_dialog.is_open(): Globals.loading_dialog.dismiss() sv = Globals.mainscrn.ids["sv_namevalue"] sv.clear() sv.add("[color=#FF0000]ERROR[/color]: ", resp.message) # PREBOOKINGS elif resp.event == handler.EVENT_PREBOOKINGS_UPDATE: pass # BOOKING ARCHIVE REQUEST elif resp.event == handler.EVENT_BOOKING_ARCHIVE: if Globals.earnings_dialog: Globals.earnings_dialog.display_earnings(resp.takings) elif Globals.app.root.current == "history": # history screen is open history_screen = Globals.app.root.get_screen("history") history_screen.load_bookings(resp.bookings, resp.takings) # KICKED DRIVER elif resp.event == handler.EVENT_KICK_DRIVERS: sv = Globals.mainscrn.ids.get("sv_namevalue") sv.add("[color=#ffff00]Kicking[/color]: ", resp.message) # MESSAGE ARCHIVE REQUEST elif resp.event == handler.EVENT_MESSAGE_ARCHIVE: for message in resp.messages: date_created = str(time.ctime(message["created"])) text = "{} - {}".format(date_created, str(message["message"])) Globals.message_list_view.data.append({ "id": str(message["id"]), "text": text }) # EXTENDED MESSAGE REQUEST elif resp.event == handler.EVENT_MESSAGE: if Globals.message_dialog: print(resp.message) Globals.message_dialog.message_label.text = resp.message["message"] # SENT MESSAGE elif resp.event == handler.EVENT_MESSAGE_DISPATCH: if resp.message == "{}": show_toast("Message Sent") else: show_toast(resp.message) # BIDDING HAS CHANGED elif resp.event == handler.EVENT_CHANGE_BIDDING: sv = Globals.mainscrn.ids.get("sv_namevalue") sv.add("[color=#ffff00]Setting[/color]: ", f"Auto Bidding is set to {resp.enable}") # THREAD EXCEPTION elif resp.event == handler.EVENT_THREAD_EXCEPTION: if Globals.loading_dialog.is_open: Globals.loading_dialog.dismiss() dlg = MessageDialog() dlg.message_label.text = resp.error dlg.open()