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();
}
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;
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;
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);
}
}
/*! \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
{
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)
{