def do_connect(self, dev_no): """Connect Polar device. Run 'list' to see available devices. Usage: connect <device_no> """ try: dev_no = int(dev_no) except ValueError: print '[!] You need to specify the device number. Run \'list\' to see available devices.' print return try: devs = Device.list() dev = devs[dev_no] serial = Device.get_info(dev)['serial_number'] self.prompt = LoopholeCli.__PROMPT.format(serial) self.device = Device(dev) self.device.open() print '[+] Device connected.' print except IndexError: print '[!] Device not found or failed to open it. Run \'list\' to see available devices.' print
def _syncDevice(self, serial): print('connecting device %s (%s)' % (self.devices[serial]['name'], serial)) device = Device(self.devices[serial]['device']) device.open() syncing = True GLib.idle_add(self._changeIcon, True) devMap = device.walk(device.SEP) print('syncing device %s (%s)' % (self.devices[serial]['name'], serial)) for directory in devMap.keys(): osDirectory = directory.replace(device.SEP, os.sep) d = devMap[directory] files = [e for e in d.entries if not e.name.endswith(os.sep)] for file in files: parserFailed = False if '.BPB' in file.name: data = device.read_file('%s%s' % (directory, file.name)) dataFileName = '%s%s%s' % ( serial, directory.replace(os.sep, '-').lower(), os.path.splitext(file.name)[0].lower()) if file.name in self.FILE_MAPPINGS.keys(): parser = self.FILE_MAPPINGS[file.name]() if file.name == 'SAMPLES.GZB': data = zlib.decompress(data) f = '%s/.local/polartray/%s.json' % ( os.environ['HOME'], dataFileName) try: parser.ParseFromString(bytes(bytearray(data))) with open(f, 'w') as fh: fh.write(MessageToJson(parser)) except Exception as err: parserFailed = True print('failed to decode %s' % (dataFileName)) print(err) if file.name not in self.FILE_MAPPINGS.keys( ) or parserFailed == True: f = '%s/.local/polartray/%s%s' % ( os.environ['HOME'], dataFileName, os.path.splitext(file.name)[1].lower()) with open(f, 'wb') as fh: fh.write(bytearray(data)) GLib.idle_add(self._changeIcon, False) print('disconnecting device %s (%s)' % (self.devices[serial]['name'], serial)) device.close()