/* * Copyright (C) 2013-2018 Team Kodi * This file is part of Kodi - https://kodi.tv * * SPDX-License-Identifier: GPL-2.0-or-later * See LICENSES/README.md for more information. */ #pragma once #include "IListProvider.h" #include "threads/CriticalSection.h" #include #include typedef std::unique_ptr IListProviderPtr; /*! \ingroup listproviders \brief A listprovider that handles multiple individual providers. */ class CMultiProvider : public IListProvider { public: CMultiProvider(const TiXmlNode *first, int parentID); explicit CMultiProvider(const CMultiProvider& other); // Implementation of IListProvider std::unique_ptr Clone() override; bool Update(bool forceRefresh) override; void Fetch(std::vector &items) override; bool IsUpdating() const override; void Reset() override; bool OnClick(const CGUIListItemPtr &item) override; bool OnInfo(const CGUIListItemPtr &item) override; bool OnContextMenu(const CGUIListItemPtr &item) override; protected: typedef size_t item_key_type; static item_key_type GetItemKey(CGUIListItemPtr const &item); std::vector m_providers; std::map m_itemMap; CCriticalSection m_section; // protects m_itemMap };