call timeout

This commit is contained in:
ingvar1995 2017-06-16 18:47:00 +03:00
parent 9031a4a3e3
commit 361f1f0e29

View File

@ -6,7 +6,7 @@ from toxav_enums import *
import cv2 import cv2
import itertools import itertools
import numpy as np import numpy as np
# TODO: play sound until outgoing call will be started or cancelled and add timeout # TODO: play sound until outgoing call will be started or cancelled
class Call: class Call:
@ -16,6 +16,19 @@ class Call:
self._in_video = in_video self._in_video = in_video
self._out_audio = out_audio self._out_audio = out_audio
self._out_video = out_video self._out_video = out_video
self._is_active = False
def get_is_active(self):
return self._is_active
def set_is_active(self, value):
self._is_active = value
is_active = property(get_is_active, set_is_active)
# -----------------------------------------------------------------------------------------------------------------
# Audio
# -----------------------------------------------------------------------------------------------------------------
def get_in_audio(self): def get_in_audio(self):
return self._in_audio return self._in_audio
@ -33,6 +46,10 @@ class Call:
out_audio = property(get_out_audio, set_out_audio) out_audio = property(get_out_audio, set_out_audio)
# -----------------------------------------------------------------------------------------------------------------
# Video
# -----------------------------------------------------------------------------------------------------------------
def get_in_video(self): def get_in_video(self):
return self._in_video return self._in_video
@ -92,6 +109,7 @@ class AV:
"""Call friend with specified number""" """Call friend with specified number"""
self._toxav.call(friend_number, 32 if audio else 0, 5000 if video else 0) self._toxav.call(friend_number, 32 if audio else 0, 5000 if video else 0)
self._calls[friend_number] = Call(audio, video) self._calls[friend_number] = Call(audio, video)
threading.Timer(30.0, lambda: self.finish_not_started_call(friend_number)).start()
def accept_call(self, friend_number, audio_enabled, video_enabled): def accept_call(self, friend_number, audio_enabled, video_enabled):
if self._running: if self._running:
@ -103,7 +121,6 @@ class AV:
self.start_video_thread() self.start_video_thread()
def finish_call(self, friend_number, by_friend=False): def finish_call(self, friend_number, by_friend=False):
if not by_friend: if not by_friend:
self._toxav.call_control(friend_number, TOXAV_CALL_CONTROL['CANCEL']) self._toxav.call_control(friend_number, TOXAV_CALL_CONTROL['CANCEL'])
if friend_number in self._calls: if friend_number in self._calls:
@ -113,11 +130,18 @@ class AV:
if not len(list(filter(lambda c: c.out_video, self._calls))): if not len(list(filter(lambda c: c.out_video, self._calls))):
self.stop_video_thread() self.stop_video_thread()
def finish_not_started_call(self, friend_number):
if friend_number in self:
call = self._calls[friend_number]
if not call.is_active:
self.finish_call(friend_number)
def toxav_call_state_cb(self, friend_number, state): def toxav_call_state_cb(self, friend_number, state):
""" """
New call state New call state
""" """
call = self._calls[friend_number] call = self._calls[friend_number]
call.is_active = True
call.in_audio = state | TOXAV_FRIEND_CALL_STATE['SENDING_A'] call.in_audio = state | TOXAV_FRIEND_CALL_STATE['SENDING_A']
call.in_video = state | TOXAV_FRIEND_CALL_STATE['SENDING_V'] call.in_video = state | TOXAV_FRIEND_CALL_STATE['SENDING_V']