From 24950627dcefff1188eaedbc254b1aec035e004d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 7 Apr 2016 13:31:20 +0200 Subject: [PATCH] Removable drives with any name are now accepted by OSX I have no idea why the old plugin only accepted drives with the name "MASS STORAGE DEVICE", but it now simply lists all removable drives CURA-1365 --- .../OSXRemovableDrivePlugin.py | 31 +++++++------------ 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/plugins/RemovableDriveOutputDevice/OSXRemovableDrivePlugin.py b/plugins/RemovableDriveOutputDevice/OSXRemovableDrivePlugin.py index 9de78a36d1..7ac5fc0838 100644 --- a/plugins/RemovableDriveOutputDevice/OSXRemovableDrivePlugin.py +++ b/plugins/RemovableDriveOutputDevice/OSXRemovableDrivePlugin.py @@ -16,16 +16,19 @@ import plistlib class OSXRemovableDrivePlugin(RemovableDrivePlugin.RemovableDrivePlugin): def checkRemovableDrives(self): drives = {} - p = subprocess.Popen(["system_profiler", "SPUSBDataType", "-xml"], stdout=subprocess.PIPE) + p = subprocess.Popen(["system_profiler", "SPUSBDataType", "-xml"], stdout = subprocess.PIPE) plist = plistlib.loads(p.communicate()[0]) p.wait() - for dev in self._findInTree(plist, "Mass Storage Device"): - if "removable_media" in dev and dev["removable_media"] == "yes" and "volumes" in dev and len(dev["volumes"]) > 0: - for vol in dev["volumes"]: - if "mount_point" in vol: - volume = vol["mount_point"] - drives[volume] = os.path.basename(volume) + for entry in plist: + if "_items" in entry: + for item in entry["_items"]: + for dev in item["_items"]: + if "removable_media" in dev and dev["removable_media"] == "yes" and "volumes" in dev and len(dev["volumes"]) > 0: + for vol in dev["volumes"]: + if "mount_point" in vol: + volume = vol["mount_point"] + drives[volume] = os.path.basename(volume) p = subprocess.Popen(["system_profiler", "SPCardReaderDataType", "-xml"], stdout=subprocess.PIPE) plist = plistlib.loads(p.communicate()[0]) @@ -51,16 +54,4 @@ class OSXRemovableDrivePlugin(RemovableDrivePlugin.RemovableDrivePlugin): if return_code != 0: return False else: - return True - - def _findInTree(self, t, n): - ret = [] - if type(t) is dict: - if "_name" in t and t["_name"] == n: - ret.append(t) - for k, v in t.items(): - ret += self._findInTree(v, n) - if type(t) is list: - for v in t: - ret += self._findInTree(v, n) - return ret + return True \ No newline at end of file