/* * Copyright (C) 2013-2015 Team XBMC * http://xbmc.org * * This Program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This Program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with XBMC; see the file COPYING. If not, see * . * */ #include "ContextItemAddon.h" #include "AddonManager.h" #include "ContextMenuManager.h" #include "dialogs/GUIDialogContextMenu.h" #include "GUIInfoManager.h" #include "interfaces/info/InfoBool.h" #include "utils/log.h" #include "utils/StringUtils.h" #include "video/dialogs/GUIDialogVideoInfo.h" #include using namespace std; namespace ADDON { CContextItemAddon::CContextItemAddon(const AddonProps &props) : CAddon(props) { } CContextItemAddon::~CContextItemAddon() { } CContextItemAddon::CContextItemAddon(const cp_extension_t *ext) : CAddon(ext) { ELEMENTS items; if (CAddonMgr::Get().GetExtElements(ext->configuration, "item", items)) { cp_cfg_element_t *item = items[0]; m_label = CAddonMgr::Get().GetExtValue(item, "label"); if (StringUtils::IsNaturalNumber(m_label)) { m_label = GetString(boost::lexical_cast(m_label.c_str())); ClearStrings(); } m_parent = CAddonMgr::Get().GetExtValue(item, "parent"); string visible = CAddonMgr::Get().GetExtValue(item, "visible"); if (visible.empty()) visible = "false"; m_visCondition = g_infoManager.Register(visible, 0); } } bool CContextItemAddon::OnPreInstall() { return CContextMenuManager::Get().Unregister(std::dynamic_pointer_cast(shared_from_this())); } void CContextItemAddon::OnPostInstall(bool restart, bool update) { if (restart) { // need to grab the local addon so we have the correct library path to run AddonPtr localAddon; if (CAddonMgr::Get().GetAddon(ID(), localAddon, ADDON_CONTEXT_ITEM)) { ContextItemAddonPtr contextItem = std::dynamic_pointer_cast(localAddon); if (contextItem) CContextMenuManager::Get().Register(contextItem); } } } void CContextItemAddon::OnPreUnInstall() { CContextMenuManager::Get().Unregister(std::dynamic_pointer_cast(shared_from_this())); } void CContextItemAddon::OnDisabled() { CContextMenuManager::Get().Unregister(std::dynamic_pointer_cast(shared_from_this())); } void CContextItemAddon::OnEnabled() { CContextMenuManager::Get().Register(std::dynamic_pointer_cast(shared_from_this())); } bool CContextItemAddon::IsVisible(const CFileItemPtr& item) const { return item && m_visCondition->Get(item.get()); } }