xbmc
PVRRecording.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 "XBDateTime.h"
12 #include "addons/kodi-dev-kit/include/kodi/c-api/addon-instance/pvr/pvr_providers.h"
13 #include "pvr/PVRCachedImage.h"
14 #include "threads/CriticalSection.h"
15 #include "threads/SystemClock.h"
16 #include "video/Bookmark.h"
17 #include "video/VideoInfoTag.h"
18 
19 #include <memory>
20 #include <string>
21 #include <vector>
22 
23 class CVideoDatabase;
24 
25 struct PVR_EDL_ENTRY;
26 struct PVR_RECORDING;
27 
28 namespace PVR
29 {
30 class CPVRChannel;
31 class CPVRClient;
32 class CPVRProvider;
33 class CPVRTimerInfoTag;
34 
38 class CPVRRecordingUid final
39 {
40 public:
42  std::string m_strRecordingId;
44  CPVRRecordingUid(int iClientId, const std::string& strRecordingId);
45 
46  bool operator>(const CPVRRecordingUid& right) const;
47  bool operator<(const CPVRRecordingUid& right) const;
48  bool operator==(const CPVRRecordingUid& right) const;
49  bool operator!=(const CPVRRecordingUid& right) const;
50 };
51 
52 class CPVRRecording final : public CVideoInfoTag
53 {
54 public:
55  static const std::string IMAGE_OWNER_PATTERN;
56 
57  CPVRRecording();
58  CPVRRecording(const PVR_RECORDING& recording, unsigned int iClientId);
59 
60  bool operator==(const CPVRRecording& right) const;
61  bool operator!=(const CPVRRecording& right) const;
62 
67  void FillAddonData(PVR_RECORDING& recording) const;
68 
69  void Serialize(CVariant& value) const override;
70 
71  // ISortable implementation
72  void ToSortable(SortItem& sortable, Field field) const override;
73 
77  void Reset();
78 
83  bool Delete();
84 
89  bool Undelete();
90 
96  bool Rename(const std::string& strNewName);
97 
103  bool SetPlayCount(int count) override;
104 
109  bool IncrementPlayCount() override;
110 
116  bool SetLocalPlayCount(int count) { return CVideoInfoTag::SetPlayCount(count); }
117 
123 
129  bool SetResumePoint(const CBookmark& resumePoint) override;
130 
138  bool SetResumePoint(double timeInSeconds,
139  double totalTimeInSeconds,
140  const std::string& playerState = "") override;
141 
146  CBookmark GetResumePoint() const override;
147 
152  bool UpdateRecordingSize();
153 
159 
164  std::vector<PVR_EDL_ENTRY> GetEdl() const;
165 
172  void UpdateMetadata(CVideoDatabase& db, const CPVRClient& client);
173 
179  void Update(const CPVRRecording& tag, const CPVRClient& client);
180 
185  const CDateTime& RecordingTimeAsUTC() const { return m_recordingTime; }
186 
191  const CDateTime& RecordingTimeAsLocalTime() const;
192 
197  CDateTime EndTimeAsUTC() const;
198 
203  CDateTime EndTimeAsLocalTime() const;
204 
209  bool HasExpirationTime() const { return m_iLifetime > 0; }
210 
215  CDateTime ExpirationTimeAsLocalTime() const;
216 
222  bool WillBeExpiredWithNewLifetime(int iLifetime) const;
223 
229  static std::string GetTitleFromURL(const std::string& url);
230 
234  bool IsDeleted() const { return m_bIsDeleted; }
235 
240  bool IsRadio() const { return m_bRadio; }
241 
245  unsigned int BroadcastUid() const { return m_iEpgEventId; }
246 
251  std::shared_ptr<CPVRChannel> Channel() const;
252 
257  int ChannelUid() const;
258 
263  int ClientID() const;
264 
269  std::string ClientRecordingID() const { return m_strRecordingId; }
270 
275  unsigned int RecordingID() const { return m_iRecordingId; }
276 
281  void SetRecordingID(unsigned int recordingId) { m_iRecordingId = recordingId; }
282 
287  std::string Directory() const { return m_strDirectory; }
288 
293  int Priority() const { return m_iPriority; }
294 
299  int LifeTime() const { return m_iLifetime; }
300 
305  void SetLifeTime(int lifeTime) { m_iLifetime = lifeTime; }
306 
311  std::string ChannelName() const { return m_strChannelName; }
312 
317  const std::string& ClientIconPath() const { return m_iconPath.GetClientImage(); }
318 
323  const std::string& ClientThumbnailPath() const { return m_thumbnailPath.GetClientImage(); }
324 
329  const std::string& ClientFanartPath() const { return m_fanartPath.GetClientImage(); }
330 
335  const std::string& IconPath() const { return m_iconPath.GetLocalImage(); }
336 
341  const std::string& ThumbnailPath() const { return m_thumbnailPath.GetLocalImage(); }
342 
347  const std::string& FanartPath() const { return m_fanartPath.GetLocalImage(); }
348 
353  std::string EpisodeName() const { return m_strShowTitle; }
354 
359  bool IsInProgress() const;
360 
365  std::shared_ptr<CPVRTimerInfoTag> GetRecordingTimer() const;
366 
373  void SetGenre(int iGenreType, int iGenreSubType, const std::string& strGenre);
374 
379  int GenreType() const { return m_iGenreType; }
380 
385  int GenreSubType() const { return m_iGenreSubType; }
386 
391  const std::vector<std::string> Genre() const { return m_genre; }
392 
397  const std::string GetGenresLabel() const;
398 
403  CDateTime FirstAired() const;
404 
409  int GetYear() const override;
410 
415  void SetYear(int year) override;
416 
421  bool HasYear() const override;
422 
427  bool IsNew() const;
428 
433  bool IsPremiere() const;
434 
439  bool IsFinale() const;
440 
445  bool IsLive() const;
446 
451  unsigned int Flags() const { return m_iFlags; }
452 
457  int64_t GetSizeInBytes() const;
458 
463  void SetDirty(bool bDirty) { m_bDirty = bDirty; }
464 
469  bool IsDirty() const { return m_bDirty; }
470 
475  int ClientProviderUniqueId() const;
476 
481  std::string ProviderName() const;
482 
488  std::shared_ptr<CPVRProvider> GetDefaultProvider() const;
489 
494  bool HasClientProvider() const;
495 
502  std::shared_ptr<CPVRProvider> GetProvider() const;
503 
504 private:
505  CPVRRecording(const CPVRRecording& tag) = delete;
506  CPVRRecording& operator=(const CPVRRecording& other) = delete;
507 
508  void UpdatePath();
509 
510  int m_iClientId;
511  std::string m_strRecordingId;
512  std::string m_strChannelName;
513  int m_iPriority;
514  int m_iLifetime;
515  std::string m_strDirectory;
516  unsigned int m_iRecordingId;
518  CPVRCachedImage m_iconPath;
519  CPVRCachedImage m_thumbnailPath;
520  CPVRCachedImage m_fanartPath;
521  CDateTime m_recordingTime;
522  bool m_bGotMetaData;
523  bool m_bIsDeleted;
524  mutable bool m_bInProgress;
525  unsigned int m_iEpgEventId;
526  int m_iChannelUid;
527  bool m_bRadio;
528  int m_iGenreType = 0;
529  int m_iGenreSubType = 0;
530  mutable XbmcThreads::EndTime<> m_resumePointRefetchTimeout;
531  unsigned int m_iFlags = 0;
532  mutable XbmcThreads::EndTime<> m_recordingSizeRefetchTimeout;
533  int64_t m_sizeInBytes = 0;
534  bool m_bDirty = false;
535  std::string m_strProviderName;
536  int m_iClientProviderUniqueId =
537  PVR_PROVIDER_INVALID_UID;
539  mutable CCriticalSection m_critSection;
540 };
541 } // namespace PVR
unsigned int RecordingID() const
Get the recording ID as upplied by the client.
Definition: PVRRecording.h:275
std::string EpisodeName() const
Retrieve the recording Episode Name.
Definition: PVRRecording.h:353
bool IsDirty() const
Return whether the recording is marked dirty.
Definition: PVRRecording.h:469
const std::string & ClientFanartPath() const
Return the fanart path as given by the client.
Definition: PVRRecording.h:329
virtual int GetPlayCount() const
Get this videos&#39;s play count.
Definition: VideoInfoTag.cpp:1740
"C" Edit definition list entry.
Definition: pvr_edl.h:54
int GetLocalPlayCount() const
Get this recording&#39;s local play count. The value will not be obtained from the backend, even if it supports server-side play counts.
Definition: PVRRecording.h:122
std::string m_strRecordingId
Definition: PVRRecording.h:42
Definition: PVRCachedImage.h:16
bool SetLocalPlayCount(int count)
Set this recording&#39;s play count without transferring the value to the backend, even if it supports se...
Definition: PVRRecording.h:116
const std::string & IconPath() const
Return the icon path used by Kodi.
Definition: PVRRecording.h:335
"C" PVR add-on recording.
Definition: pvr_recordings.h:109
const std::vector< std::string > Genre() const
Get the genre as human readable string.
Definition: PVRRecording.h:391
Definition: ContextMenuManager.h:24
void SetRecordingID(unsigned int recordingId)
Set the recording ID.
Definition: PVRRecording.h:281
const std::string & FanartPath() const
Return the fanart path used by Kodi.
Definition: PVRRecording.h:347
Definition: SystemClock.h:31
bool HasExpirationTime() const
Check whether this recording has an expiration time.
Definition: PVRRecording.h:209
void SetDirty(bool bDirty)
Mark a recording as dirty/clean.
Definition: PVRRecording.h:463
int LifeTime() const
Get the lifetime for this recording.
Definition: PVRRecording.h:299
int GenreType() const
Get the genre type ID of this recording.
Definition: PVRRecording.h:379
Definition: VideoDatabase.h:393
Definition: Bookmark.h:14
void SetLifeTime(int lifeTime)
Set the lifetime for this recording.
Definition: PVRRecording.h:305
CBookmark GetLocalResumePoint() const
Get this recording&#39;s local resume point. The value will not be obtained from the backend even if it s...
Definition: PVRRecording.h:158
Definition: Variant.h:29
std::string Directory() const
Get the directory for this recording.
Definition: PVRRecording.h:287
const CDateTime & RecordingTimeAsUTC() const
Retrieve the recording start as UTC time.
Definition: PVRRecording.h:185
virtual CBookmark GetResumePoint() const
Get this videos&#39;s resume point.
Definition: VideoInfoTag.cpp:1770
const std::string & ClientThumbnailPath() const
Return the thumbnail path as given by the client.
Definition: PVRRecording.h:323
std::string ClientRecordingID() const
Get the recording ID as upplied by the client.
Definition: PVRRecording.h:269
DateTime class, which uses FileTime as it&#39;s base.
Definition: XBDateTime.h:63
int Priority() const
Get the priority for this recording.
Definition: PVRRecording.h:293
Definition: PVRRecording.h:52
const std::string & ClientIconPath() const
Return the icon path as given by the client.
Definition: PVRRecording.h:317
std::string ChannelName() const
Get the channel name for this recording.
Definition: PVRRecording.h:311
unsigned int Flags() const
Return the flags (PVR_RECORDING_FLAG_*) of this recording as a bitfield.
Definition: PVRRecording.h:451
const std::string & ThumbnailPath() const
Return the thumnail path used by Kodi.
Definition: PVRRecording.h:341
unsigned int BroadcastUid() const
Definition: PVRRecording.h:245
int m_iClientId
Definition: PVRRecording.h:41
int GenreSubType() const
Get the genre subtype ID of this recording.
Definition: PVRRecording.h:385
Representation of a CPVRRecording unique ID.
Definition: PVRRecording.h:38
virtual bool SetPlayCount(int count)
Set this videos&#39;s play count.
Definition: VideoInfoTag.cpp:1745
bool IsRadio() const
Check whether this is a tv or radio recording.
Definition: PVRRecording.h:240
Definition: VideoInfoTag.h:51
Definition: PVRClient.h:51
bool IsDeleted() const
If deleted but can be undeleted it is true.
Definition: PVRRecording.h:234