예제 #1
0
    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
예제 #2
0
    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()