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(self._args.temp_path, "madmin"), width=250) return
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 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') filename = generate_device_screenshot_path(origin, self._device_mapping, self._args) img = cv2.imread(filename, 0) height, width = img.shape[:2] real_click_x = int(width / float(click_x)) real_click_y = int(height / float(click_y)) adb = self._device_mapping[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 take_screenshot(self, origin=None, adb=False): origin = request.args.get('origin') useadb = request.args.get('adb', False) self._logger.info('MADmin: Making screenshot ({})', str(origin)) devicemappings = self._mapping_manager.get_all_devicemappings() adb = devicemappings.get(origin, {}).get('adb', False) if useadb == 'True' and self._adb_connect.make_screenshot( adb, origin, "jpg"): self._logger.info('MADMin: ADB screenshot successfully ({})', str(origin)) else: 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(self._args.temp_path, "madmin"), width=250) creationdate = datetime.datetime.fromtimestamp( creation_date(filename)).strftime(self._datetimeformat) return creationdate
def take_screenshot(self, origin=None, adb=False): origin = request.args.get('origin') useadb = request.args.get('adb', False) self._logger.info('MADmin: Making screenshot ({})', str(origin)) 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"): self._logger.info('MADMin: ADB screenshot successfully ({})', str(origin)) else: self.generate_screenshot(origin) creationdate = datetime.datetime.fromtimestamp( creation_date(filename)).strftime(self._datetimeformat) return creationdate
def swipe_screenshot(self): origin = request.args.get('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) img = cv2.imread(filename, 0) height, width = img.shape[:2] 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): self._logger.info('MADMin: ADB screenswipe successfully ({})', str(origin)) else: self._logger.info('MADMin WS Swipe x:{} y:{} xe:{} ye:{} ({})', str(real_click_x), str(real_click_y), str(real_click_xe), str(real_click_ye), str(origin)) temp_comm = self._ws_server.get_origin_communicator(origin) temp_comm.touchandhold(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 get_phonescreens(self): if not os.path.exists(os.path.join(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().copy() 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<img src="/static/warning.png" width="20px" ' \ 'alt="NO websocket connection!"></b>' filename = generate_device_screenshot_path( pho, devicemappings, self._args) if os.path.isfile(filename): image_resize(filename, os.path.join(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")
def get_phonescreens(self): if not os.path.exists(os.path.join(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().copy() else: phones = [] for phonename in phones: ws_connected_phones.append(phonename) add_text = "" adb_option = False adb = self._device_mapping[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, self._device_mapping, self._args) if os.path.isfile(filename): 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)) else: screen = "static/dummy.png" screens_phone.append( generate_phones(phonename, add_text, adb_option, screen, filename, self._datetimeformat, dummy=True)) for phonename in self._adb_connect.return_adb_devices(): if phonename.serial not in self._ws_connected_phones: for pho in self._device_mapping: if phonename.serial == self._device_mapping[pho].get( 'adb', False): adb_option = True add_text = '<b>ADB - no WS<img src="/static/warning.png" width="20px" ' \ 'alt="NO websocket connection!"></b>' filename = generate_device_screenshot_path( pho, self._device_mapping, self._args) if os.path.isfile(filename): image_resize(filename, os.path.join(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="Phonecontrol", title="Phonecontrol", running_ocr=(self._args.only_ocr))