OS X support for the PRS 505

This commit is contained in:
Kovid Goyal 2007-11-01 19:11:06 +00:00
parent d2eba932ca
commit edd8a2ce83

View File

@ -15,7 +15,7 @@
'''
Device driver for the SONY PRS-505
'''
import sys, os, shutil, time
import sys, os, shutil, time, subprocess, re
from itertools import cycle
from libprs500.devices.interface import Device
@ -52,6 +52,10 @@ class PRS505(Device):
MAIN_MEMORY_VOLUME_LABEL = 'Sony Reader Main Memory'
STORAGE_CARD_VOLUME_LABEL = 'Sony Reader Storage Card'
OSX_MAIN_NAME = 'Sony PRS-505/UC Media'
OSX_SD_NAME = 'Sony PRS-505/UC:SD Media'
OSX_MS_NAME = 'Sony PRS-505/UC:MS Media'
FDI_TEMPLATE = \
'''
<device>
@ -122,6 +126,31 @@ class PRS505(Device):
return False
def open_osx(self):
mount = subprocess.Popen('mount', shell=True,
stdout=subprocess.PIPE).stdout.read()
src = subprocess.Popen('ioreg -n "%s"'%(self.OSX_MAIN_NAME,),
shell=True, stdout=subprocess.PIPE).stdout.read()
try:
devname = re.search(r'BSD Name.*=\s+"(\S+)"', src).group(1)
self._main_prefix = re.search('/dev/%s(\w*)\s+on\s+([^\(]+)\s+'%(devname,), mount).group(2) + os.sep
except:
raise DeviceError('Unable to find %s. Is it connected?'%(self.__class__.__name__,))
try:
src = subprocess.Popen('ioreg -n "%s"'%(self.OSX_SD_NAME,),
shell=True, stdout=subprocess.PIPE).stdout.read()
devname = re.search(r'BSD Name.*=\s+"(\S+)"', src).group(1)
except:
try:
src = subprocess.Popen('ioreg -n "%s"'%(self.OSX_MS_NAME,),
shell=True, stdout=subprocess.PIPE).stdout.read()
devname = re.search(r'BSD Name.*=\s+"(\S+)"', src).group(1)
except:
devname = None
if devname is not None:
self._card_prefix = re.search('/dev/%s(\w*)\s+on\s+([^\(]+)\s+'%(devname,), mount).group(2) + os.sep
def open_windows(self):
import wmi
c = wmi.WMI()
@ -175,11 +204,14 @@ class PRS505(Device):
def open(self):
time.sleep(2)
self._main_prefix = self._card_prefix = None
try:
if islinux:
self.open_linux()
if iswindows:
self.open_windows()
if isosx:
self.open_osx()
except DeviceError:
time.sleep(4)
return self.open()