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 Device driver for the SONY PRS-505
''' '''
import sys, os, shutil, time import sys, os, shutil, time, subprocess, re
from itertools import cycle from itertools import cycle
from libprs500.devices.interface import Device from libprs500.devices.interface import Device
@ -50,7 +50,11 @@ class PRS505(Device):
CACHE_XML = 'Sony Reader/database/cache.xml' CACHE_XML = 'Sony Reader/database/cache.xml'
MAIN_MEMORY_VOLUME_LABEL = 'Sony Reader Main Memory' MAIN_MEMORY_VOLUME_LABEL = 'Sony Reader Main Memory'
STORAGE_CARD_VOLUME_LABEL = 'Sony Reader Storage Card' 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 = \ FDI_TEMPLATE = \
''' '''
@ -122,6 +126,31 @@ class PRS505(Device):
return False 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): def open_windows(self):
import wmi import wmi
c = wmi.WMI() c = wmi.WMI()
@ -175,11 +204,14 @@ class PRS505(Device):
def open(self): def open(self):
time.sleep(2) time.sleep(2)
self._main_prefix = self._card_prefix = None
try: try:
if islinux: if islinux:
self.open_linux() self.open_linux()
if iswindows: if iswindows:
self.open_windows() self.open_windows()
if isosx:
self.open_osx()
except DeviceError: except DeviceError:
time.sleep(4) time.sleep(4)
return self.open() return self.open()