#include "utils/FileOperationJob.h"
#include "utils/StringUtils.h"
#include "utils/URIUtils.h"
+#include "utils/log.h"
#include "addons/AddonInstaller.h"
#include "pvr/PVRManager.h"
+#include "Util.h"
#define CONTROL_BTN_INSTALL 6
#define CONTROL_BTN_ENABLE 7
if (!m_localAddon.get())
return;
+ if (!g_passwordManager.CheckMenuLock(WINDOW_ADDON_BROWSER))
+ return;
+
// ensure the addon is not a dependency of other installed addons
if (PromptIfDependency(24037, 24047))
return;
// prompt user to be sure
- if (CGUIDialogYesNo::ShowAndGetInput(24037, 750, 0, 0))
+ if (!CGUIDialogYesNo::ShowAndGetInput(24037, 750, 0, 0))
return;
// ensure the addon isn't disabled in our database
if (!m_localAddon.get())
return;
+ if (!g_passwordManager.CheckMenuLock(WINDOW_ADDON_BROWSER))
+ return;
+
if (!enable && PromptIfDependency(24075, 24091))
return;
void CGUIDialogAddonInfo::OnRollback()
{
+ if (!g_passwordManager.CheckMenuLock(WINDOW_ADDON_BROWSER))
+ return;
+
CGUIDialogContextMenu* dlg = (CGUIDialogContextMenu*)g_windowManager.GetWindow(WINDOW_DIALOG_CONTEXT_MENU);
CAddonDatabase database;
database.Open();
CFileItemList items;
XFILE::CDirectory::GetDirectory("special://home/addons/packages/",items,".zip",DIR_FLAG_NO_FILE_DIRS);
items.Sort(SortByLabel, SortOrderAscending);
+ CAddonDatabase db;
+ db.Open();
for (int i=0;i<items.Size();++i)
{
if (items[i]->m_bIsFolder)
CStdString ID, version;
AddonVersion::SplitFileName(ID,version,items[i]->GetLabel());
if (ID.Equals(m_localAddon->ID()))
- m_rollbackVersions.push_back(version);
+ {
+ CStdString hash, path(items[i]->GetPath());
+ if (db.GetPackageHash(m_localAddon->ID(), path, hash))
+ {
+ CStdString md5 = CUtil::GetFileMD5(path);
+ if (md5 == hash)
+ m_rollbackVersions.push_back(version);
+ else /* The package has been corrupted */
+ {
+ CLog::Log(LOGWARNING, "%s: Removing corrupt addon package %s.", __FUNCTION__, path.c_str());
+ CFile::Delete(path);
+ db.RemovePackage(path);
+ }
+ }
+ }
}
}