build dependency list on construction of addons so it's always available, rather...
authorJonathan Marshall <jmarshall@never.you.mind>
Wed, 9 Mar 2011 03:58:11 +0000 (16:58 +1300)
committerJonathan Marshall <jmarshall@never.you.mind>
Wed, 9 Mar 2011 03:58:11 +0000 (16:58 +1300)
xbmc/addons/Addon.cpp
xbmc/addons/Addon.h
xbmc/addons/AddonManager.cpp
xbmc/addons/AddonManager.h
xbmc/addons/IAddon.h

index 1afd4b4..ad8b29b 100644 (file)
@@ -270,6 +270,18 @@ AddonProps::AddonProps(const cp_extension_t *ext)
     EMPTY_IF("noicon",icon)
     EMPTY_IF("nochangelog",changelog)
   }
+  BuildDependencies(ext->plugin);
+}
+
+void AddonProps::BuildDependencies(const cp_plugin_info_t *plugin)
+{
+  if (!plugin)
+    return;
+  // TODO: no need for a pair of versions here here - could use the optional flag instead?
+  for (unsigned int i = 0; i < plugin->num_imports; ++i)
+    dependencies.insert(make_pair(CStdString(plugin->imports[i].plugin_id),
+                        make_pair(AddonVersion(plugin->imports[i].version),
+                                  AddonVersion(plugin->imports[i].version))));
 }
 
 /**
@@ -605,11 +617,6 @@ const CStdString CAddon::LibPath() const
   return URIUtils::AddFileToFolder(m_props.path, m_strLibName);
 }
 
-ADDONDEPS CAddon::GetDeps()
-{
-  return CAddonMgr::Get().GetDeps(ID());
-}
-
 /**
  * CAddonLibrary
  *
index b85be25..1ef89c3 100644 (file)
@@ -99,6 +99,8 @@ public:
   CStdString broken;
   InfoMap    extrainfo;
   int        stars;
+private:
+  void BuildDependencies(const cp_plugin_info_t *plugin);
 };
 
 typedef std::vector<class AddonProps> VECADDONPROPS;
@@ -168,7 +170,7 @@ public:
   int Stars() const { return m_props.stars; }
   const CStdString Disclaimer() const { return m_props.disclaimer; }
   const InfoMap &ExtraInfo() const { return m_props.extrainfo; }
-  ADDONDEPS GetDeps();
+  const ADDONDEPS &GetDeps() const { return m_props.dependencies; }
 
 protected:
   CAddon(const CAddon&); // protected as all copying is handled by Clone()
index 7090ce3..ccfb8fe 100644 (file)
@@ -603,24 +603,6 @@ const cp_extension_t *CAddonMgr::GetExtension(const cp_plugin_info_t *props, con
   return NULL;
 }
 
-ADDONDEPS CAddonMgr::GetDeps(const CStdString &id)
-{
-  ADDONDEPS result;
-  cp_status_t status;
-
-  cp_plugin_info_t *info = m_cpluff->get_plugin_info(m_cp_context,id.c_str(),&status);
-  if (info)
-  {
-    for (unsigned int i=0;i<info->num_imports;++i)
-      result.insert(make_pair(CStdString(info->imports[i].plugin_id),
-                              make_pair(AddonVersion(info->version),
-                                        AddonVersion(info->version))));
-    m_cpluff->release_info(m_cp_context, info);
-  }
-
-  return result;
-}
-
 CStdString CAddonMgr::GetExtValue(cp_cfg_element_t *base, const char *path)
 {
   const char *value = NULL;
index b4c4ded..46697e5 100644 (file)
@@ -153,7 +153,6 @@ namespace ADDON
      \return true if the repository XML file is parsed, false otherwise.
      */
     bool AddonsFromRepoXML(const TiXmlElement *root, VECADDONS &addons);
-    ADDONDEPS GetDeps(const CStdString& id);
 
     /*! \brief Start all services addons.
         \return True is all addons are started, false otherwise
index e48c14a..0530b4b 100644 (file)
@@ -105,7 +105,7 @@ namespace ADDON
     virtual CStdString GetSetting(const CStdString& key) =0;
     virtual TiXmlElement* GetSettingsXML() =0;
     virtual CStdString GetString(uint32_t id) =0;
-    virtual ADDONDEPS GetDeps() =0;
+    virtual const ADDONDEPS &GetDeps() const =0;
 
   protected:
     virtual const AddonPtr Parent() const =0;