普通文本  |  214行  |  6.98 KB

# 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()
        if is_meeting:
            handle.wait_for_meetings_telemetry_commands()
        else:
            handle.wait_for_hangouts_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)