Hello, I'm trying to code a plugin for elisa, and I'm trying to understand
how the youtube plugin works, but I'm having some trouble understanding how
the HierarchyController works.

class YoutubeController(HierarchyController):

   start_uri = MediaUri('http://gdata.youtube.com/feeds/')

   def initialize(self, videos=None, uri=start_uri):
       deferred = super(YoutubeController, self).initialize()
       self.uri = uri

       ## add_feeds is a callback right? why the (self)? this is a callback
function, not a class method
       def add_feeds(self):
           # search
           self.actions.append(SearchAction(self))

           feeds_root = 'http://gdata.youtube.com/feeds/api/standardfeeds/'
           feeds = [(_('Top rated'), 'top_rated'),
                    (_('Top favorites'), 'top_favorites'),
                    (_('Most viewed'), 'most_viewed'),
                    (_('Most popular'), 'most_popular'),
                    (_('Most recent'), 'most_recent')]
           feed_models = []
           for feed in feeds:
               feed_model = YoutubeVideoFeedModel()
               feed_model.title = feed[0]
               feed_model.uri = MediaUri(feeds_root + feed[1])
               feed_models.append(feed_model)
           self.model.extend(feed_models)

           ## and where does this return goes to? And what exactly is it
returning?
           return self

       ## no (self) on this one?
       def resource_loaded(resource):
           if isinstance(resource, YoutubeVideoListModel):
               self.model.extend(resource.videos)
           return self

       def load_resource(self):
           resource, get_deferred =
application.resource_manager.get(self.uri)
           return get_deferred

       def extend_model(self, videos):
           self.model.extend(videos)
           return self

       # A list of videos
       if videos is not None:
           deferred.addCallback(extend_model, videos)
       elif uri == self.start_uri:
           # List of the feeds
           deferred.addCallback(add_feeds)
       else:
           # One particular feed
           deferred.addCallback(load_resource)
           ## shouldn't resource_loaded have 1 argument? (resource)
           deferred.addCallback(resource_loaded)

       return deferred

Reply via email to