Merge pull request #4371 from jmarshallnz/runaddon_fix
authorjmarshallnz <jcmarsha@gmail.com>
Tue, 11 Mar 2014 04:03:01 +0000 (17:03 +1300)
committerJonathan Marshall <jmarshall@xbmc.org>
Tue, 11 Mar 2014 04:14:26 +0000 (17:14 +1300)
Runaddon fix - allows secondary extension points to be run

xbmc/interfaces/Builtins.cpp

index b61ddc3..d1bd975 100644 (file)
@@ -552,50 +552,49 @@ int CBuiltins::Execute(const CStdString& execString)
     if (params.size())
     {
       AddonPtr addon;
-      if (CAddonMgr::Get().GetAddon(params[0],addon) && addon)
+      CStdString cmd;
+      if (CAddonMgr::Get().GetAddon(params[0],addon,ADDON_PLUGIN))
       {
         PluginPtr plugin = boost::dynamic_pointer_cast<CPluginSource>(addon);
-        CStdString cmd;
-        if (plugin && addon->Type() == ADDON_PLUGIN)
+        CStdString addonid = params[0];
+        CStdString urlParameters;
+        CStdStringArray parameters;
+        if (params.size() == 2 &&
+           (StringUtils::StartsWith(params[1], "/") || StringUtils::StartsWith(params[1], "?")))
+          urlParameters = params[1];
+        else if (params.size() > 1)
         {
-          CStdString addonid = params[0];
-          CStdString urlParameters;
-          CStdStringArray parameters;
-          if (params.size() == 2 &&
-             (StringUtils::StartsWith(params[1], "/") || StringUtils::StartsWith(params[1], "?")))
-            urlParameters = params[1];
-          else if (params.size() > 1)
-          {
-            parameters.insert(parameters.begin(), params.begin() + 1, params.end());
-            urlParameters = "?" + StringUtils::JoinString(parameters, "&");
-          }
-          else
-          {
-            // Add '/' if addon is run without params (will be removed later so it's safe)
-            // Otherwise there are 2 entries for the same plugin in ViewModesX.db
-            urlParameters = "/";
-          }
-
-          if (plugin->Provides(CPluginSource::VIDEO))
-            cmd = StringUtils::Format("ActivateWindow(Videos,plugin://%s%s,return)", addonid.c_str(), urlParameters.c_str());
-          else if (plugin->Provides(CPluginSource::AUDIO))
-            cmd = StringUtils::Format("ActivateWindow(Music,plugin://%s%s,return)", addonid.c_str(), urlParameters.c_str());
-          else if (plugin->Provides(CPluginSource::EXECUTABLE))
-            cmd = StringUtils::Format("ActivateWindow(Programs,plugin://%s%s,return)", addonid.c_str(), urlParameters.c_str());
-          else if (plugin->Provides(CPluginSource::IMAGE))
-            cmd = StringUtils::Format("ActivateWindow(Pictures,plugin://%s%s,return)", addonid.c_str(), urlParameters.c_str());
-          else
-            // Pass the script name (params[0]) and all the parameters
-            // (params[1] ... params[x]) separated by a comma to RunPlugin
-            cmd = StringUtils::Format("RunPlugin(%s)", StringUtils::JoinString(params, ",").c_str());
+          parameters.insert(parameters.begin(), params.begin() + 1, params.end());
+          urlParameters = "?" + StringUtils::JoinString(parameters, "&");
+        }
+        else
+        {
+          // Add '/' if addon is run without params (will be removed later so it's safe)
+          // Otherwise there are 2 entries for the same plugin in ViewModesX.db
+          urlParameters = "/";
         }
-        else if (addon->Type() >= ADDON_SCRIPT && addon->Type() <= ADDON_SCRIPT_LYRICS)
-          // Pass the script name (params[0]) and all the parameters
-          // (params[1] ... params[x]) separated by a comma to RunScript
-          cmd = StringUtils::Format("RunScript(%s)", StringUtils::JoinString(params, ",").c_str());
 
-        return Execute(cmd);
+        if (plugin->Provides(CPluginSource::VIDEO))
+          cmd = StringUtils::Format("ActivateWindow(Videos,plugin://%s%s,return)", addonid.c_str(), urlParameters.c_str());
+        else if (plugin->Provides(CPluginSource::AUDIO))
+          cmd = StringUtils::Format("ActivateWindow(Music,plugin://%s%s,return)", addonid.c_str(), urlParameters.c_str());
+        else if (plugin->Provides(CPluginSource::EXECUTABLE))
+          cmd = StringUtils::Format("ActivateWindow(Programs,plugin://%s%s,return)", addonid.c_str(), urlParameters.c_str());
+        else if (plugin->Provides(CPluginSource::IMAGE))
+          cmd = StringUtils::Format("ActivateWindow(Pictures,plugin://%s%s,return)", addonid.c_str(), urlParameters.c_str());
+        else
+          // Pass the script name (params[0]) and all the parameters
+          // (params[1] ... params[x]) separated by a comma to RunPlugin
+          cmd = StringUtils::Format("RunPlugin(%s)", StringUtils::JoinString(params, ",").c_str());
       }
+      else if (CAddonMgr::Get().GetAddon(params[0], addon, ADDON_SCRIPT) ||
+               CAddonMgr::Get().GetAddon(params[0], addon, ADDON_SCRIPT_WEATHER) ||
+               CAddonMgr::Get().GetAddon(params[0], addon, ADDON_SCRIPT_LYRICS))
+        // Pass the script name (params[0]) and all the parameters
+        // (params[1] ... params[x]) separated by a comma to RunScript
+        cmd = StringUtils::Format("RunScript(%s)", StringUtils::JoinString(params, ",").c_str());
+
+      return Execute(cmd);
     }
     else
     {