Exemple #1
0
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()