xbmc
PVRProviders.h
1 /*
2  * Copyright (C) 2012-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "threads/CriticalSection.h"
12 
13 #include <memory>
14 #include <vector>
15 
16 namespace PVR
17 {
18 class CPVRClient;
19 class CPVRProvider;
20 
21 enum class ProviderUpdateMode;
22 
24 {
25 public:
31  bool UpdateFromClient(const std::shared_ptr<CPVRProvider>& provider);
32 
39  std::shared_ptr<CPVRProvider> GetByClient(int iClientId, int iUniqueId) const;
40 
45  std::vector<std::shared_ptr<CPVRProvider>> GetProvidersList() const;
46 
51  std::size_t GetNumProviders() const;
52 
53 protected:
54  void InsertEntry(const std::shared_ptr<CPVRProvider>& newProvider, ProviderUpdateMode updateMode);
55 
56  mutable CCriticalSection m_critSection;
57  int m_iLastId = 0;
58  std::vector<std::shared_ptr<CPVRProvider>> m_providers;
59 };
60 
62 {
63 public:
64  CPVRProviders() = default;
65  ~CPVRProviders() = default;
66 
72  bool Update(const std::vector<std::shared_ptr<CPVRClient>>& clients);
73 
77  void Unload();
78 
84  bool UpdateFromClients(const std::vector<std::shared_ptr<CPVRClient>>& clients);
85 
91  bool LoadFromDatabase(const std::vector<std::shared_ptr<CPVRClient>>& clients);
92 
99  std::shared_ptr<CPVRProvider> CheckAndAddEntry(const std::shared_ptr<CPVRProvider>& newProvider,
100  ProviderUpdateMode updateMode);
101 
109  std::shared_ptr<CPVRProvider> CheckAndPersistEntry(
110  const std::shared_ptr<CPVRProvider>& newProvider, ProviderUpdateMode updateMode);
111 
115  bool PersistUserChanges(const std::vector<std::shared_ptr<CPVRProvider>>& providers);
116 
122  std::shared_ptr<CPVRProvider> GetById(int iProviderId) const;
123 
128  int CleanupCachedImages();
129 
130 private:
131  void RemoveEntry(const std::shared_ptr<CPVRProvider>& provider);
132  bool UpdateDefaultEntries(const CPVRProvidersContainer& newProviders);
133  bool UpdateClientEntries(const CPVRProvidersContainer& newProviders,
134  const std::vector<int>& failedClients,
135  const std::vector<int>& disabledClients);
136 
137  bool m_bIsUpdating = false;
138 };
139 } // namespace PVR
std::shared_ptr< CPVRProvider > GetByClient(int iClientId, int iUniqueId) const
Get the provider denoted by given client id and unique client provider id.
Definition: PVRProviders.cpp:48
Definition: ContextMenuManager.h:24
std::vector< std::shared_ptr< CPVRProvider > > GetProvidersList() const
Definition: PVRProviders.cpp:79
bool UpdateFromClient(const std::shared_ptr< CPVRProvider > &provider)
Add a provider to this container or update the provider if already present in this container...
Definition: PVRProviders.cpp:30
std::size_t GetNumProviders() const
Definition: PVRProviders.cpp:85
Definition: PVRProviders.h:61
Definition: PVRProviders.h:23