From 4a3416b9acdfdd533ee2d69633f1383476db5e71 Mon Sep 17 00:00:00 2001 From: James Cameron Date: Tue, 27 Jul 2010 01:26:56 +0000 Subject: restore sugar-launch by bundle id substring, fixes #897 sugar-launch uses GetBundlePath which calls bundleregistry.get_bundle(). In this patch, the get_bundle() method is changed to retain as much of the original API as possible, yet in the situation where it might return None it will now return a bundle if there is only one bundle that matches the search string. http://bugs.sugarlabs.org/ticket/897 http://dev.laptop.org/ticket/9189 Patch tested on Sugar 0.84.10 on OLPC XO-1.5 build os108. Test case: import jarabe.model.bundleregistry registry = jarabe.model.bundleregistry.BundleRegistry() tests = ['org.laptop.Terminal', 'Terminal', 'terminal', 'e', 'asdqweas'] for x in tests: y = registry.get_bundle(x) if y is None: z = 'None' else: z = y.get_bundle_id() print x, z Output before patch: org.laptop.Terminal org.laptop.Terminal Terminal None terminal None e None asdqweas None Output after patch: org.laptop.Terminal org.laptop.Terminal Terminal org.laptop.Terminal terminal org.laptop.Terminal e None asdqweas None --- diff --git a/src/jarabe/model/bundleregistry.py b/src/jarabe/model/bundleregistry.py index 86a2738..858655f 100644 --- a/src/jarabe/model/bundleregistry.py +++ b/src/jarabe/model/bundleregistry.py @@ -159,12 +159,22 @@ class BundleRegistry(gobject.GObject): self._write_favorites_file() def get_bundle(self, bundle_id): - """Returns an bundle given his service name""" + """Returns a bundle given service name or substring, + returns None if there is either no match, or more than one + match by substring.""" + result = [] + key = bundle_id.lower() + for bundle in self._bundles: - if bundle.get_bundle_id() == bundle_id: + name = bundle.get_bundle_id() + if name == bundle_id: return bundle + if key in name.lower(): + result.append(bundle) + if len(result) == 1: + return result[0] return None - + def __iter__(self): return self._bundles.__iter__() -- cgit v0.9.1