added: set referer string when fetching addons. Credit spiff.
authortheuni <theuni@svn>
Tue, 26 Oct 2010 22:46:15 +0000 (22:46 +0000)
committertheuni <theuni-nospam-@xbmc.org>
Sat, 22 Jan 2011 18:09:48 +0000 (13:09 -0500)
If addon was pulled as a dep, use the parent as referer.
If addon is an update, use the old version as referer.
if addon is installed manually, referer is blank.

git-svn-id: https://xbmc.svn.sourceforge.net/svnroot/xbmc/trunk@35026 568bbfeb-2a22-0410-94d2-cc84cf5bfa90
(cherry picked from commit 7b7e11d14aca1a1e32e5481dec66246cc7bd11d9)

xbmc/GUIDialogAddonInfo.cpp
xbmc/GUIWindowAddonBrowser.cpp
xbmc/GUIWindowAddonBrowser.h
xbmc/addons/Repository.cpp

index 57aaa4e..746d9fd 100644 (file)
@@ -142,7 +142,9 @@ void CGUIDialogAddonInfo::UpdateControls()
 
 void CGUIDialogAddonInfo::OnUpdate()
 {
-  CGUIWindowAddonBrowser::InstallAddon(m_addon->ID(), true); // force install
+  CStdString referer;
+  referer.Format("Referer=%s-%s.zip",m_localAddon->ID().c_str(),m_localAddon->Version().str.c_str());
+  CGUIWindowAddonBrowser::InstallAddon(m_addon->ID(), true, referer); // force install
   Close();
 }
 
index ff0c974..f8e0f6d 100644 (file)
@@ -350,13 +350,15 @@ void CGUIWindowAddonBrowser::OnJobComplete(unsigned int jobID,
             CAddonMgr::Get().FindAddons();
             CAddonMgr::Get().GetAddon(addon->ID(),addon);
             ADDONDEPS deps = addon->GetDeps();
+            CStdString referer;
+            referer.Format("Referer=%s-%s.zip",addon->ID().c_str(),addon->Version().str.c_str());
             for (ADDONDEPS::iterator it  = deps.begin();
                                      it != deps.end();++it)
             {
               if (it->first.Equals("xbmc.metadata"))
                 continue;
               if (!CAddonMgr::Get().GetAddon(it->first,addon2))
-                InstallAddon(it->first);
+                InstallAddon(it->first,false,referer);
             }
             if (addon->Type() >= ADDON_VIZ_LIBRARY)
               continue;
@@ -645,7 +647,7 @@ int CGUIWindowAddonBrowser::SelectAddonID(TYPE type, CStdString &addonID, bool s
   return 0;
 }
 
-void CGUIWindowAddonBrowser::InstallAddon(const CStdString &addonID, bool force /*= false*/)
+void CGUIWindowAddonBrowser::InstallAddon(const CStdString &addonID, bool force /*= false*/, const CStdString &referer)
 {
   // check whether we already have the addon installed
   AddonPtr addon;
@@ -668,7 +670,14 @@ void CGUIWindowAddonBrowser::InstallAddon(const CStdString &addonID, bool force
     CGUIWindowAddonBrowser* window = (CGUIWindowAddonBrowser*)g_windowManager.GetWindow(WINDOW_ADDON_BROWSER);
     if (!window)
       return;
-    unsigned int jobID = window->AddJob(addon->Path());
+    CStdString path(addon->Path());
+    if (!referer.IsEmpty() && CUtil::IsInternetStream(path))
+    {
+      CURL url(path);
+      url.SetProtocolOptions(referer);
+      path = url.Get();
+    }
+    unsigned int jobID = window->AddJob(path);
     window->RegisterJob(addon->ID(), jobID, hash);
   }
 }
index fc7562a..88a084f 100644 (file)
@@ -71,8 +71,9 @@ public:
   /*! \brief Install an addon if it is available in a repository
    \param addonID the addon ID of the item to install
    \param force whether to force the install even if the addon is already installed (eg for updating). Defaults to false.
+   \param referer string to use for referer for http fetch. Set to previous version when updating, parent when fetching a dependency
    */
-  static void InstallAddon(const CStdString &addonID, bool force = false);
+  static void InstallAddon(const CStdString &addonID, bool force = false, const CStdString &referer="");
 
   /*! \brief Install a set of addons from the official repository (if needed)
    \param addonIDs a set of addon IDs to install
index f12c2d0..4788ee7 100644 (file)
@@ -195,10 +195,20 @@ bool CRepositoryUpdateJob::DoWork()
     {
       if (g_settings.m_bAddonAutoUpdate || addon->Type() >= ADDON_VIZ_LIBRARY)
       {
+        CStdString path(addons[i]->Path());
+        if (CUtil::IsInternetStream(addons[i]->Path()))
+        {
+          CURL url(path);
+          CStdString referer;
+          referer.Format("Referer=%s-%s.zip",addon->ID().c_str(),addon->Version().str.c_str());
+          url.SetProtocolOptions(referer);
+          path = url.Get();
+        }
+
         CGUIWindowAddonBrowser* window = (CGUIWindowAddonBrowser*)g_windowManager.GetWindow(WINDOW_ADDON_BROWSER);
         if (!window)
           return false;
-        window->AddJob(addons[i]->Path());
+        window->AddJob(path);
       }
       else if (g_settings.m_bAddonNotifications)
       {