11from datetime import timedelta
22
3- from ovos_bus_client .message import Message
3+ from ovos_bus_client .session import SessionManager , Session
4+ from ovos_bus_client .message import Message , dig_for_message
45from ovos_utils import classproperty
56from ovos_utils .process_utils import RuntimeRequirements
67from ovos_utils .time import now_local
1011
1112class AudioRecordingSkill (OVOSSkill ):
1213 def initialize (self ):
13- self .recording = False
14+ self .recording_sessions = {}
1415 self .add_event ("recognizer_loop:record_stop" , self .handle_recording_stop )
1516
1617 @classproperty
@@ -34,35 +35,44 @@ def max_recording_time(self):
3435 @intent_handler ("start_recording.intent" )
3536 def handle_start_recording (self , message ):
3637 recording_name = message .data .get ("name" , str (now_local ()))
37- self .recording = True
38+ sess = SessionManager .get (message )
39+ self .recording_sessions [sess .session_id ] = dict (
40+ file_name = recording_name ,
41+ recording = True
42+ )
43+
3844 self .bus .emit (message .forward ("recognizer_loop:state.set" ,
3945 {"state" : "recording" ,
4046 "recording_name" : recording_name }))
4147
4248 def maybe_stop (message ):
43- if self .recording :
49+ sess = SessionManager .get (message )
50+ if self .recording_sessions .get (sess .session_id , {}).get ("recording" ):
4451 self .bus .emit (message .forward ("recognizer_loop:record_stop" ))
45- self .recording = False
52+ self .recording_sessions [ sess . session_id ][ " recording" ] = False
4653
4754 # force a way out of recording mode after timeout
4855 self .schedule_event (maybe_stop , now_local () + timedelta (seconds = self .max_recording_time ))
4956
50- @intent_handler ("start_recording.intent" )
51- def handle_captains_log (self , message ):
52- message .data ["name" ] = message .data .get ("name" , "captains_log_" + str (now_local ()))
53- self .handle_start_recording (message )
54-
5557 def handle_recording_stop (self , message ):
56- self .recording = False
58+ # keep track of any external (non skill initiated) stops
59+ sess_id = SessionManager .get (message ).session_id
60+ if self .recording_sessions .get (sess_id , {}).get ("recording" ):
61+ self .recording_sessions [sess_id ]["recording" ] = False
5762
58- def stop (self ):
59- """Optional action to take when "stop" is requested by the user.
60- This method should return True if it stopped something or
61- False (or None) otherwise.
62- If not relevant to your skill, feel free to remove.
63- """
64- if self .recording :
65- self .recording = False
66- self .bus .emit (Message ("recognizer_loop:record_stop" ))
63+ def stop_session (self , session : Session ) -> bool :
64+ if session .session_id in self .recording_sessions and \
65+ self .recording_sessions [session .session_id ]["recording" ]:
66+ self .recording_sessions [session .session_id ]["recording" ] = False
67+ message = dig_for_message ()
68+ self .bus .emit (message .forward ("recognizer_loop:record_stop" ))
6769 return True
6870 return False
71+
72+ def can_stop (self , message : Message ) -> bool :
73+ sess_id = SessionManager .get (message ).session_id
74+ return self .recording_sessions .get (sess_id , {}).get ("recording" )
75+
76+ def stop (self ):
77+ """global stop called"""
78+ self .bus .emit (Message ("recognizer_loop:record_stop" ))
0 commit comments