| # Copyright 2017 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Meeting related operations""" |
| |
| from __future__ import print_function |
| |
| import logging |
| import random |
| |
| MIN_VOL = 1 |
| MAX_VOL = 100 |
| |
| def restart_chrome(handle, is_meeting, recovery): |
| """ |
| Restart chrome and wait for telemetry commands to be ready. |
| @param handle: CfM telemetry remote facade, |
| @param is_meeting: True, None if CfM running MEET mode, |
| False if CfM running hangout mode |
| @returns: True, None if success, |
| False otherwise. |
| """ |
| try: |
| if recovery: |
| logging.info('+++Restart chrome') |
| handle.restart_chrome_for_cfm() |
| handle.wait_for_telemetry_commands() |
| except Exception as e: |
| errmsg = 'Fail to run telemetry api restart_chrome_for_cfm.' |
| logging.exception(errmsg) |
| return False, errmsg |
| return True, None |
| |
| def join_meeting(handle, is_meeting, meet_code): |
| """ |
| Join meeting. |
| @param handle: CfM telemetry remote facade, |
| @param is_meeting: True, None if CfM running MEET mode, |
| False if CfM running hangout mode |
| @param meeting_code: meeting code |
| @returns: True, None if CfM joins meeting successfully, |
| False otherwise. |
| """ |
| try: |
| if is_meeting: |
| logging.info('+++Start meet meeting') |
| if meet_code: |
| handle.join_meeting_session(meet_code) |
| else: |
| handle.start_meeting_session() |
| else: |
| logging.info('+++start hangout meeting') |
| if meet_code: |
| handle.start_new_hangout_session(meet_code) |
| else: |
| errmsg = 'Meeting code is required for hangout meet.' |
| logging.exception(errmsg) |
| return False, errmsg |
| logging.info('+++Meeting %s joined.', meet_code) |
| return True, None |
| except Exception as e: |
| errmsg = 'Fail to run telemetry api to join meeting.' |
| logging.exception(errmsg) |
| return False, errmsg |
| |
| def leave_meeting(handle, is_meeting): |
| """ |
| Leave meeting. |
| @param handle: CfM telemetry remote facade, |
| @param is_meeting: True, None if CfM running MEET mode, |
| False if CfM running hangout mode |
| @returns: True, None if CfM leaves meeting successfully, |
| False otherwise. |
| |
| """ |
| try: |
| if is_meeting: |
| handle.end_meeting_session() |
| else: |
| handle.end_hangout_session() |
| except Exception as e: |
| errmsg = 'Fail to run telemetry api to leave meeting.' |
| logging.exception(errmsg) |
| return False, errmsg |
| logging.info('+++meet ended') |
| return True, None |
| |
| |
| def mute_unmute_camera(handle, is_muted): |
| """ |
| @param handle: CfM telemetry remote facade, |
| @param is_muted: True, None if camera is muted, |
| False otherwise. |
| @returns: True, None if camera is muted/unmuted successfully, |
| False otherwise. |
| """ |
| try: |
| if is_muted: |
| logging.info('+++unmute camera') |
| handle.unmute_camera() |
| else: |
| logging.info('+++mute camera') |
| handle.mute_camera() |
| except Exception as e: |
| errmsg = 'Fail to run telemetry api to mute/unmute camera.' |
| logging.exception(errmsg) |
| return False, errmsg |
| return True, None |
| |
| |
| def mute_unmute_mic(handle, is_muted): |
| """ |
| @param handle: CfM telemetry remote facade, |
| @param is_muted: True, None if mic is muted, |
| False otherwise. |
| @returns: True, None if camera is muted/unmuted successfully, |
| False otherwise. |
| """ |
| try: |
| if is_muted: |
| logging.info('+++unmute mic') |
| handle.unmute_mic() |
| else: |
| logging.info('+++mute mic') |
| handle.mute_mic() |
| except Exception as e: |
| errmsg = 'Fail to run telemetry api to mute/unmute mic.' |
| logging.exception(errmsg) |
| return False, errmsg |
| return True, None |
| |
| |
| def set_speaker_volume(handle, volume): |
| """ |
| Change speaker's volume. |
| @param handle: CfM telemetry remote facade |
| @param volume: volume for speaker |
| """ |
| try: |
| handle.set_speaker_volume(volume) |
| except Exception as e: |
| errmsg = 'Fail to run telemetry api to set speaker volume.' |
| logging.exception(errmsg) |
| return False, errmsg |
| return True, str(volume) |
| |
| |
| def speaker_volume_test(handle, step, mode, randommode): |
| """ |
| Change speaker's volume. |
| @param handle: CfM telemetry remote facade, |
| @param step: volume to be increased or decreased in one call |
| @param mode: if it equal to 1, update volume directly to |
| targeted value, |
| else, update volume in multiple calls. |
| @param randommode: if True, None, the value of volume to be change in |
| each call is randomly set, |
| else, the value is fixed defined by step. |
| """ |
| test_volume = random.randrange(MIN_VOL, MAX_VOL) |
| if mode == 1: |
| return set_speaker_volume(handle, test_volume) |
| step = max(2, step) |
| try: |
| current = int(handle.get_speaker_volume()) |
| except Exception as e: |
| errmsg = 'Fail to run telemetry api to set speaker volume.' |
| logging.exception(errmsg) |
| return False, errmsg |
| |
| if test_volume > current: |
| while test_volume > current: |
| if randommode: |
| transit_volume = current + random.randrange(1, step) |
| else: |
| transit_volume = current + step |
| |
| if transit_volume > test_volume: |
| transit_volume = test_volume |
| |
| handle.set_speaker_volume(transit_volume) |
| try: |
| current = int(handle.get_speaker_volume()) |
| except Exception as e: |
| errmsg = 'Fail to run telemetry api to set speaker volume.' |
| logging.exception(errmsg) |
| return False, errmsg |
| |
| logging.info('+++set vol %d, current %d, target %d', |
| transit_volume, current, test_volume) |
| else: |
| while test_volume < current: |
| if randommode: |
| transit_volume = current - random.randrange(1, step) |
| else: |
| transit_volume = current - step |
| if transit_volume < test_volume: |
| transit_volume = test_volume |
| handle.set_speaker_volume(transit_volume) |
| try: |
| current = int(handle.get_speaker_volume()) |
| except Exception as e: |
| errmsg = 'Fail to run telemetry api to set speaker volume.' |
| logging.exception(errmsg) |
| return False, errmsg |
| |
| logging.info('+++set vol %d, current %d, target %d', |
| transit_volume, current, test_volume) |
| return True, str(current) |