From 77ec9ac23fcc10d160f9b15d506a5f2b1a4e74a6 Mon Sep 17 00:00:00 2001
From: James Cameron <quozl@laptop.org>
Date: Tue, 27 Jul 2010 12:51:17 +1000
Subject: [PATCH] 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.16 on OLPC XO-1.5 build os206.
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
---
src/jarabe/model/bundleregistry.py | 16 +++++++++++++---
1 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/src/jarabe/model/bundleregistry.py b/src/jarabe/model/bundleregistry.py
index 1b6570e..af410a8 100644
a
|
b
|
class BundleRegistry(gobject.GObject): |
156 | 156 | self._write_favorites_file() |
157 | 157 | |
158 | 158 | def get_bundle(self, bundle_id): |
159 | | """Returns an bundle given his service name""" |
| 159 | """Returns a bundle given service name or substring, |
| 160 | returns None if there is either no match, or more than one |
| 161 | match by substring.""" |
| 162 | result = [] |
| 163 | key = bundle_id.lower() |
| 164 | |
160 | 165 | for bundle in self._bundles: |
161 | | if bundle.get_bundle_id() == bundle_id: |
| 166 | name = bundle.get_bundle_id() |
| 167 | if name == bundle_id: |
162 | 168 | return bundle |
| 169 | if key in name.lower(): |
| 170 | result.append(bundle) |
| 171 | if len(result) == 1: |
| 172 | return result[0] |
163 | 173 | return None |
164 | | |
| 174 | |
165 | 175 | def __iter__(self): |
166 | 176 | return self._bundles.__iter__() |
167 | 177 | |