summaryrefslogtreecommitdiffstats
path: root/xbmc/pvr/addons/PVRClientCapabilities.h
blob: edf20900a0d54b353150e14f6207fae2e91d1434 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
/*
 *  Copyright (C) 2012-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 "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/pvr.h"

#include <memory>
#include <string>
#include <utility>
#include <vector>

namespace PVR
{

class CPVRClientCapabilities
{
public:
  CPVRClientCapabilities() = default;
  virtual ~CPVRClientCapabilities() = default;

  CPVRClientCapabilities(const CPVRClientCapabilities& other);
  const CPVRClientCapabilities& operator=(const CPVRClientCapabilities& other);

  const CPVRClientCapabilities& operator=(const PVR_ADDON_CAPABILITIES& addonCapabilities);

  void clear();

  /////////////////////////////////////////////////////////////////////////////////
  //
  // Channels
  //
  /////////////////////////////////////////////////////////////////////////////////

  /*!
   * @brief Check whether this add-on supports TV channels.
   * @return True if supported, false otherwise.
   */
  bool SupportsTV() const { return m_addonCapabilities && m_addonCapabilities->bSupportsTV; }

  /*!
   * @brief Check whether this add-on supports radio channels.
   * @return True if supported, false otherwise.
   */
  bool SupportsRadio() const { return m_addonCapabilities && m_addonCapabilities->bSupportsRadio; }

  /*!
   * @brief Check whether this add-on supports providers.
   * @return True if supported, false otherwise.
   */
  bool SupportsProviders() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsProviders;
  }

  /*!
   * @brief Check whether this add-on supports channel groups.
   * @return True if supported, false otherwise.
   */
  bool SupportsChannelGroups() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsChannelGroups;
  }

  /*!
   * @brief Check whether this add-on supports scanning for new channels on the backend.
   * @return True if supported, false otherwise.
   */
  bool SupportsChannelScan() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsChannelScan;
  }

  /*!
   * @brief Check whether this add-on supports the following functions:
   * DeleteChannel, RenameChannel, DialogChannelSettings and DialogAddChannel.
   *
   * @return True if supported, false otherwise.
   */
  bool SupportsChannelSettings() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsChannelSettings;
  }

  /*!
   * @brief Check whether this add-on supports descramble information for playing channels.
   * @return True if supported, false otherwise.
   */
  bool SupportsDescrambleInfo() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsDescrambleInfo;
  }

  /////////////////////////////////////////////////////////////////////////////////
  //
  // EPG
  //
  /////////////////////////////////////////////////////////////////////////////////

  /*!
   * @brief Check whether this add-on provides EPG information.
   * @return True if supported, false otherwise.
   */
  bool SupportsEPG() const { return m_addonCapabilities && m_addonCapabilities->bSupportsEPG; }

  /*!
   * @brief Check whether this add-on supports asynchronous transfer of epg events.
   * @return True if supported, false otherwise.
   */
  bool SupportsAsyncEPGTransfer() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsAsyncEPGTransfer;
  }

  /////////////////////////////////////////////////////////////////////////////////
  //
  // Timers
  //
  /////////////////////////////////////////////////////////////////////////////////

  /*!
   * @brief Check whether this add-on supports the creation and editing of timers.
   * @return True if supported, false otherwise.
   */
  bool SupportsTimers() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsTimers;
  }

  /////////////////////////////////////////////////////////////////////////////////
  //
  // Recordings
  //
  /////////////////////////////////////////////////////////////////////////////////

  /*!
   * @brief Check whether this add-on supports recordings.
   * @return True if supported, false otherwise.
   */
  bool SupportsRecordings() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsRecordings;
  }

  /*!
   * @brief Check whether this add-on supports undelete of deleted recordings.
   * @return True if supported, false otherwise.
   */
  bool SupportsRecordingsUndelete() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsRecordings &&
           m_addonCapabilities->bSupportsRecordingsUndelete;
  }

  /*!
   * @brief Check whether this add-on supports play count for recordings.
   * @return True if supported, false otherwise.
   */
  bool SupportsRecordingsPlayCount() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsRecordings &&
           m_addonCapabilities->bSupportsRecordingPlayCount;
  }

  /*!
   * @brief Check whether this add-on supports store/retrieve of last played position for recordings..
   * @return True if supported, false otherwise.
   */
  bool SupportsRecordingsLastPlayedPosition() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsRecordings &&
           m_addonCapabilities->bSupportsLastPlayedPosition;
  }

  /*!
   * @brief Check whether this add-on supports retrieving an edit decision list for recordings.
   * @return True if supported, false otherwise.
   */
  bool SupportsRecordingsEdl() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsRecordings &&
           m_addonCapabilities->bSupportsRecordingEdl;
  }

  /*!
   * @brief Check whether this add-on supports retrieving an edit decision list for epg tags.
   * @return True if supported, false otherwise.
   */
  bool SupportsEpgTagEdl() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsEPG &&
           m_addonCapabilities->bSupportsEPGEdl;
  }

  /*!
   * @brief Check whether this add-on supports renaming recordings..
   * @return True if supported, false otherwise.
   */
  bool SupportsRecordingsRename() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsRecordings &&
           m_addonCapabilities->bSupportsRecordingsRename;
  }

  /*!
   * @brief Check whether this add-on supports changing lifetime of recording.
   * @return True if supported, false otherwise.
   */
  bool SupportsRecordingsLifetimeChange() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsRecordings &&
           m_addonCapabilities->bSupportsRecordingsLifetimeChange;
  }

  /*!
   * @brief Obtain a list with all possible values for recordings lifetime.
   * @param list out, the list with the values or an empty list, if lifetime is not supported.
   */
  void GetRecordingsLifetimeValues(std::vector<std::pair<std::string, int>>& list) const;

  /*!
   * @brief Check whether this add-on supports retrieving the size recordings..
   * @return True if supported, false otherwise.
   */
  bool SupportsRecordingsSize() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsRecordings &&
           m_addonCapabilities->bSupportsRecordingSize;
  }

  /*!
   * @brief Check whether this add-on supports deleting recordings.
   * @return True if supported, false otherwise.
   */
  bool SupportsRecordingsDelete() const
  {
    return m_addonCapabilities && m_addonCapabilities->bSupportsRecordings &&
           m_addonCapabilities->bSupportsRecordingsDelete;
  }

  /////////////////////////////////////////////////////////////////////////////////
  //
  // Streams
  //
  /////////////////////////////////////////////////////////////////////////////////

  /*!
   * @brief Check whether this add-on provides an input stream. false if Kodi handles the stream.
   * @return True if supported, false otherwise.
   */
  bool HandlesInputStream() const
  {
    return m_addonCapabilities && m_addonCapabilities->bHandlesInputStream;
  }

  /*!
   * @brief Check whether this add-on demultiplexes packets.
   * @return True if supported, false otherwise.
   */
  bool HandlesDemuxing() const
  {
    return m_addonCapabilities && m_addonCapabilities->bHandlesDemuxing;
  }

private:
  void InitRecordingsLifetimeValues();

  std::unique_ptr<PVR_ADDON_CAPABILITIES> m_addonCapabilities;
  std::vector<std::pair<std::string, int>> m_recordingsLifetimeValues;
};

} // namespace PVR