Skip to content

Commit

Permalink
Implemented stop track command
Browse files Browse the repository at this point in the history
  • Loading branch information
cdhiraj40 committed Aug 24, 2022
1 parent 58adce2 commit c94dc9e
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 56 deletions.
27 changes: 14 additions & 13 deletions actions/action_followup.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,18 +32,20 @@ def name(**kwargs) -> Text:
@staticmethod
def run(dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any], **kwargs):

# get all slots
recording_start_query = tracker.get_slot("recording_start_query")
location_permission = tracker.get_slot("location_permission")
is_dashboard_fragment = tracker.get_slot("is_dashboard_fragment")
gps = tracker.get_slot("gps")
car = tracker.get_slot("car")
bluetooth_permission = tracker.get_slot("bluetooth_permission")
bluetooth = tracker.get_slot("bluetooth")
obd_adapter = tracker.get_slot("bluetooth")

print("slots:", recording_start_query, is_dashboard_fragment,
location_permission, gps, car, bluetooth, obd_adapter)
# get all slotss
slots = tracker.slots

print("slotss:", slots)

recording_start_query = slots["recording_start_query"]
recording_stop_query = slots["recording_stop_query"]
location_permission = slots["location_permission"]
is_dashboard_fragment = slots["is_dashboard_fragment"]
gps = slots["gps"]
car = slots["car"]
bluetooth_permission = slots["bluetooth_permission"]
bluetooth = slots["bluetooth"]
obd_adapter = slots["obd_adapter"]

# check if recording query is true
if recording_start_query:
Expand All @@ -61,7 +63,6 @@ def run(dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, A
turn_on_bluetooth(dispatcher)
else:
select_obd_adapter(dispatcher)

return [AllSlotsReset()]


Expand Down
34 changes: 17 additions & 17 deletions actions/start_recording_actions/action_start_recording.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,13 @@ def run(dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, A
text="GPS is not on! Do you want to turn it on?")
return [SlotSet("location_permission", True), SlotSet("is_dashboard_fragment", True),
SlotSet("gps", False),
SlotSet("recording_query", True)]
SlotSet("recording_start_query", True)]

if car == Car.Not_Selected.value:
dispatcher.utter_message(
text="Car is not selected! Do you want to select one?")
return [SlotSet("location_permission", True), SlotSet("is_dashboard_fragment", True),
SlotSet("car", False), SlotSet("recording_query", True)]
SlotSet("car", False), SlotSet("recording_start_query", True)]

# GPS MODE
if recording_mode == RecordingMode.GPS.value:
Expand All @@ -76,7 +76,7 @@ def run(dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, A
SlotSet("is_dashboard_fragment", True),
SlotSet("gps", True),
SlotSet("car", True),
SlotSet("recording_query", False)
SlotSet("recording_start_query", False)
]
else:
if metadata["recordingMetadata"]["has_bluetooth_permission"]:
Expand All @@ -91,7 +91,7 @@ def run(dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, A
SlotSet("bluetooth_permission", True),
SlotSet("bluetooth", True),
SlotSet("obd_adapter", True),
SlotSet("recording_query", False)
SlotSet("recording_start_query", False)
]
else:
dispatcher.utter_message(
Expand All @@ -104,7 +104,7 @@ def run(dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, A
SlotSet("bluetooth_permission", True),
SlotSet("bluetooth", True),
SlotSet("obd_adapter", False),
SlotSet("recording_query", True)
SlotSet("recording_start_query", True)
]
else:
dispatcher.utter_message(
Expand All @@ -116,7 +116,7 @@ def run(dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, A
SlotSet("car", True),
SlotSet("bluetooth_permission", True),
SlotSet("bluetooth", False),
SlotSet("recording_query", True)
SlotSet("recording_start_query", True)
]
else:
dispatcher.utter_message(
Expand All @@ -128,44 +128,44 @@ def run(dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, A
SlotSet("car", True),
SlotSet("bluetooth_permission", False),
SlotSet("bluetooth", False),
SlotSet("recording_query", True)
SlotSet("recording_start_query", True)
]
else:
dispatcher.utter_message(
text="Location permission is not granted! Do you want to grant it?")
return [
SlotSet("is_dashboard_fragment", True),
SlotSet("location_permission", False),
SlotSet("recording_query", True)
SlotSet("recording_start_query", True)
]
elif metadata["recordingMetadata"]["recording_status"] == RecordingState.RECORDING_RUNNING.value:
dispatcher.utter_message(
text="Recording is already started!")
return [SlotSet("recording_query", False)]
return [SlotSet("recording_start_query", False)]
elif metadata["recordingMetadata"]["recording_status"] == RecordingState.RECORDING_INIT.value:
dispatcher.utter_message(
text="Recording is starting, Please wait!")
return [SlotSet("recording_query", False)]
return [SlotSet("recording_start_query", False)]
else:
dispatcher.utter_message(
text="Wrong Recording state, Something went wrong!")
return [SlotSet("recording_query", False)]
return [SlotSet("recording_start_query", False)]

# dispatcher.utter_message(
# text="Recording is already started! Navigating to recording screen(if not already there)")
# return [SlotSet("recording_query", True)]
# return [SlotSet("recording_start_query", True)]

# dispatcher.utter_message(
# text="Recording is already started! Do you want to stop it?")
# return [SlotSet("recording_query", True)]
# return [SlotSet("recording_start_query", True)]
else:
dispatcher.utter_message(
text="You are not on dashboard fragment! Do you want to go to dashboard fragment?")
return [SlotSet("is_dashboard_fragment", False), SlotSet("recording_query", True)]
text="You are not on dashboard fragment! Please go to dashboard fragment to start recording.")
return [SlotSet("is_dashboard_fragment", False), SlotSet("recording_start_query", True)]
else:
dispatcher.utter_message(
text="Something went wrong! Please try again!")
return [SlotSet("recording_query", False)]
return [SlotSet("recording_start_query", False)]


def start_recording(dispatcher: CollectingDispatcher, message: str, intent: str, entities: json) -> None:
Expand All @@ -175,7 +175,7 @@ def start_recording(dispatcher: CollectingDispatcher, message: str, intent: str,
action=ActionModel(
activity_class_name="org.envirocar.app.recording.RecordingService",
custom_event=Recording.START.value,
next_action=NextAction.RECOGNITION.value
next_action=NextAction.STANDBY.value
),
data={
"intent": intent,
Expand Down
91 changes: 66 additions & 25 deletions actions/stop_recording_actions/action_stop_recording.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
import json
from typing import Any, Text, Dict, List

from rasa_sdk import Action, Tracker
from rasa_sdk.events import SlotSet
from rasa_sdk.executor import CollectingDispatcher

from enums.recording.RecordingState import RecordingState
from enums.recording.metadata_type import MetadataType
from enums.recording.recording import Recording
from model.action_model import ActionModel
from model.next_action import NextAction
from model.response_model import ResponseModel


Expand All @@ -15,32 +21,67 @@ def name(**kwargs) -> Text:
return "action_stop_recording"

@staticmethod
def run(dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any], **kwargs) -> List[Dict[Text, Any]]:
def run(dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any], **kwargs) -> List[
Dict[Text, Any]
]:
message = tracker.latest_message.get("text")
intent = tracker.latest_message['intent'].get('name')
entities = tracker.latest_message['entities']

response = ResponseModel(
query=message,
reply="sure stop I will.",
action=ActionModel(
activity_class_name="org.envirocar.app.recording.RecordingService",
),
data={
"intent": intent,
"entity": entities[0]['entity']
}
)

dispatcher.utter_message(
response="utter_custom_response",
query=response.query,
reply=response.reply,
action={
"activity_class_name": response.action.activity_class_name,
"activity_extras": response.action.activity_extras
},
data=response.data,
)

return []
# get metadata from the latest message
metadata = tracker.latest_message.get("metadata")

print("metadata", metadata)

# if the metadata type is recording and user is on dashboard fragment,
if metadata["type"] == MetadataType.RECORDING.value:
if metadata["recordingMetadata"]["isDashboardFragment"]:
# if the user is on dashboard fragment, then check if recording is currently going on
if metadata["recordingMetadata"]["recording_status"] == RecordingState.RECORDING_RUNNING.value:
# if recording is currently going on, then stop the recording
stop_recording(dispatcher, message, intent, entities)
return [SlotSet("is_dashboard_fragment", True)]

elif metadata["recordingMetadata"]["recording_status"] == RecordingState.RECORDING_STOPPED.value:
dispatcher.utter_message(
text="There is currently no Recording going on")
return [SlotSet("recording_stop_query", False)]
elif metadata["recordingMetadata"]["recording_status"] == RecordingState.RECORDING_INIT.value:
dispatcher.utter_message(
text="There is currently no Recording going on")
return [SlotSet("recording_stop_query", False)]
else:
dispatcher.utter_message(
text="Wrong Recording state, Something went wrong!")
return [SlotSet("recording_stop_query", False)]
else:
dispatcher.utter_message(
text="You are not on dashboard fragment! Please go to dashboard fragment to start recording.")
return [SlotSet("is_dashboard_fragment", False), SlotSet("recording_stop_query", True)]
else:
dispatcher.utter_message(
text="Something went wrong! Please try again!")
return [SlotSet("recording_stop_query", False)]


def stop_recording(dispatcher: CollectingDispatcher, message: str, intent: str, entities: json) -> None:
response = ResponseModel(
query=message,
reply="Sure, I will stop recording",
action=ActionModel(
activity_class_name="org.envirocar.app.recording.RecordingService",
custom_event=Recording.STOP.value,
next_action=NextAction.STANDBY.value
),
data={
"intent": intent,
"entity": entities[0]['entity']
}
)

dispatcher.utter_message(json_message={
"query": response.query,
"reply": response.reply,
"action": response.action.as_dict(),
"data": response.data
})
2 changes: 1 addition & 1 deletion data/rules.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ rules:
- rule: Run a followup start action anytime the user affirms
steps:
- intent: affirm
- action: action_followup_start
- action: action_followup

- rule: Start recording
steps:
Expand Down

0 comments on commit c94dc9e

Please sign in to comment.