diff --git a/src/calibre/devices/scanner.py b/src/calibre/devices/scanner.py index 380dcb7440..ab06db1af0 100644 --- a/src/calibre/devices/scanner.py +++ b/src/calibre/devices/scanner.py @@ -30,6 +30,12 @@ class Drive(str): typ.order = order return typ +def drivecmp(a, b): + ans = cmp(getattr(a, 'order', 0), getattr(b, 'order', 0)) + if ans == 0: + ans = cmp(a, b) + return ans + class WinPNPScanner(object): diff --git a/src/calibre/devices/usbms/device.py b/src/calibre/devices/usbms/device.py index 2c095d6f7b..4711a8eec4 100644 --- a/src/calibre/devices/usbms/device.py +++ b/src/calibre/devices/usbms/device.py @@ -11,7 +11,7 @@ intended to be subclassed with the relevant parts implemented for a particular device. This class handles device detection. ''' -import os, subprocess, time, re, sys, glob, operator +import os, subprocess, time, re, sys, glob from itertools import repeat from calibre.devices.interface import DevicePlugin @@ -225,7 +225,7 @@ class Device(DeviceConfig, DevicePlugin): return False def open_windows(self): - from calibre.devices.scanner import win_pnp_drives + from calibre.devices.scanner import win_pnp_drives, drivecmp time.sleep(5) drives = {} @@ -263,7 +263,7 @@ class Device(DeviceConfig, DevicePlugin): if self.WINDOWS_MAIN_MEM in (self.WINDOWS_CARD_A_MEM, self.WINDOWS_CARD_B_MEM) or \ self.WINDOWS_CARD_A_MEM == self.WINDOWS_CARD_B_MEM: - letters = sorted(drives.values(), key=operator.attrgetter('order')) + letters = sorted(drives.values(), cmp=drivecmp) drives = {} for which, letter in zip(['main', 'carda', 'cardb'], letters): drives[which] = letter