def click_screenshot(self): origin = request.args.get('origin') click_x = request.args.get('clickx') click_y = request.args.get('clicky') useadb = request.args.get('adb') devicemappings = self._mapping_manager.get_all_devicemappings() filename = generate_device_screenshot_path(origin, devicemappings, self._args) with Image.open(filename) as screenshot: width, height = screenshot.size real_click_x = int(width / float(click_x)) real_click_y = int(height / float(click_y)) adb = devicemappings.get(origin, {}).get('adb', False) if useadb == 'True' and self._adb_connect.make_screenclick( adb, origin, real_click_x, real_click_y): self._logger.info('MADMin: ADB screenclick successfully ({})', str(origin)) else: self._logger.info('MADMin WS Click x:{} y:{} ({})', str(real_click_x), str(real_click_y), str(origin)) temp_comm = self._ws_server.get_origin_communicator(origin) temp_comm.click(int(real_click_x), int(real_click_y)) time.sleep(2) return self.take_screenshot(origin, useadb)
def generate_screenshot(self, origin): devicemappings = self._mapping_manager.get_all_devicemappings() screenshot_type: ScreenshotType = ScreenshotType.JPEG if devicemappings.get(origin, {}).get("screenshot_type", "jpeg") == "png": screenshot_type = ScreenshotType.PNG screenshot_quality: int = devicemappings.get(origin, {}).get("screenshot_quality", 80) temp_comm = self._ws_server.get_origin_communicator(origin) temp_comm.get_screenshot(generate_device_screenshot_path(origin, devicemappings, self._args), screenshot_quality, screenshot_type) filename = generate_device_screenshot_path(origin, devicemappings, self._args) image_resize(filename, os.path.join(mapadroid.MAD_ROOT, self._args.temp_path, "madmin"), width=250) return
def swipe_screenshot(self): origin = request.args.get('origin') origin_logger = get_origin_logger(self._logger, origin=origin) click_x = request.args.get('clickx') click_y = request.args.get('clicky') click_xe = request.args.get('clickxe') click_ye = request.args.get('clickye') useadb = request.args.get('adb') devicemappings = self._mapping_manager.get_all_devicemappings() filename = generate_device_screenshot_path(origin, devicemappings, self._args) with Image.open(filename) as screenshot: width, height = screenshot.size real_click_x = int(width / float(click_x)) real_click_y = int(height / float(click_y)) real_click_xe = int(width / float(click_xe)) real_click_ye = int(height / float(click_ye)) adb = devicemappings.get(origin, {}).get('adb', False) if useadb == 'True' and self._adb_connect.make_screenswipe(adb, origin, real_click_x, real_click_y, real_click_xe, real_click_ye): origin_logger.info('MADMin: ADB screenswipe successfully') else: origin_logger.info('MADMin WS Swipe x:{} y:{} xe:{} ye:{}', real_click_x, real_click_y, real_click_xe, real_click_ye) temp_comm = self._ws_server.get_origin_communicator(origin) temp_comm.touch_and_hold(int(real_click_x), int(real_click_y), int(real_click_xe), int(real_click_ye)) time.sleep(2) return self.take_screenshot(origin, useadb)
def take_screenshot(self, origin=None, adb=False): origin = request.args.get('origin') useadb = request.args.get('adb', False) origin_logger = get_origin_logger(self._logger, origin=origin) origin_logger.info('MADmin: Making screenshot') devicemappings = self._mapping_manager.get_all_devicemappings() adb = devicemappings.get(origin, {}).get('adb', False) filename = generate_device_screenshot_path(origin, devicemappings, self._args) if useadb == 'True' and self._adb_connect.make_screenshot(adb, origin, "jpg"): origin_logger.info('MADMin: ADB screenshot successfully') else: self.generate_screenshot(origin) creationdate = datetime.datetime.fromtimestamp( creation_date(filename)).strftime(self._datetimeformat) return creationdate
def get_phonescreens(self): if not os.path.exists( os.path.join(mapadroid.MAD_ROOT, self._args.temp_path, "madmin")): os.makedirs(os.path.join(self._args.temp_path, "madmin")) screens_phone = [] ws_connected_phones = [] if self._ws_server is not None: phones = self._ws_server.get_reg_origins() else: phones = [] devicemappings = self._mapping_manager.get_all_devicemappings() # Sort devices by name. phones = sorted(phones) for phonename in phones: ws_connected_phones.append(phonename) add_text = "" adb_option = False adb = devicemappings.get(phonename, {}).get('adb', False) if adb is not None and self._adb_connect.check_adb_status( adb) is not None: self._ws_connected_phones.append(adb) adb_option = True add_text = '<b>ADB</b>' else: self._ws_connected_phones.append(adb) filename = generate_device_screenshot_path(phonename, devicemappings, self._args) try: screenshot_ending: str = ".jpg" image_resize(filename, os.path.join(self._args.temp_path, "madmin"), width=250) screen = "screenshot/madmin/screenshot_" + str( phonename) + screenshot_ending screens_phone.append( generate_phones(phonename, add_text, adb_option, screen, filename, self._datetimeformat, dummy=False)) except IOError: screen = "static/dummy.png" screens_phone.append( generate_phones(phonename, add_text, adb_option, screen, filename, self._datetimeformat, dummy=True)) try: os.remove(filename) self._logger.info( "Screenshot {} was corrupted and has been deleted", filename) except: pass for phonename in self._adb_connect.return_adb_devices(): if phonename.serial not in self._ws_connected_phones: devicemappings = self._mapping_manager.get_all_devicemappings() for pho in devicemappings: if phonename.serial == devicemappings[pho].get( 'adb', False): adb_option = True add_text = '<b>ADB - no WS <i class="fa fa-exclamation-triangle"></i></b>' filename = generate_device_screenshot_path( pho, devicemappings, self._args) if os.path.isfile(filename): image_resize(filename, os.path.join(mapadroid.MAD_ROOT, self._args.temp_path, "madmin"), width=250) screenshot_ending: str = ".jpg" screen = "screenshot/madmin/screenshot_" + str( pho) + screenshot_ending screens_phone.append( generate_phones(pho, add_text, adb_option, screen, filename, self._datetimeformat, dummy=False)) else: screen = "static/dummy.png" screens_phone.append( generate_phones(pho, add_text, adb_option, screen, filename, self._datetimeformat, dummy=True)) return render_template('phonescreens.html', editform=screens_phone, header="Device control", title="Device control")