Ticket #897: 0.84-0001-restore-sugar-launch-by-bundle-id-substring-fixes-89.patch

File 0.84-0001-restore-sugar-launch-by-bundle-id-substring-fixes-89.patch, 2.3 KB (added by quozl, 14 years ago)
  • src/jarabe/model/bundleregistry.py

    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): 
    156156        self._write_favorites_file()
    157157
    158158    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
    160165        for bundle in self._bundles:
    161             if bundle.get_bundle_id() == bundle_id:
     166            name = bundle.get_bundle_id()
     167            if name == bundle_id:
    162168                return bundle
     169            if key in name.lower():
     170                result.append(bundle)
     171        if len(result) == 1:
     172            return result[0]
    163173        return None
    164    
     174
    165175    def __iter__(self):
    166176        return self._bundles.__iter__()
    167177