[PVR] added a unique id for each recording, valid as long as xbmc isn't reset
authorLars Op den Kamp <lars@opdenkamp.eu>
Thu, 13 Feb 2014 00:04:43 +0000 (01:04 +0100)
committermontellese <montellese@xbmc.org>
Thu, 27 Feb 2014 19:01:01 +0000 (20:01 +0100)
xbmc/pvr/recordings/PVRRecording.cpp
xbmc/pvr/recordings/PVRRecording.h
xbmc/pvr/recordings/PVRRecordings.cpp
xbmc/pvr/recordings/PVRRecordings.h

index 6f7a282..1c3fb97 100644 (file)
@@ -81,7 +81,8 @@ bool CPVRRecording::operator ==(const CPVRRecording& right) const
        m_strTitle           == right.m_strTitle &&
        m_strIconPath        == right.m_strIconPath &&
        m_strThumbnailPath   == right.m_strThumbnailPath &&
-       m_strFanartPath      == right.m_strFanartPath);
+       m_strFanartPath      == right.m_strFanartPath &&
+       m_iRecordingId       == right.m_iRecordingId);
 }
 
 bool CPVRRecording::operator !=(const CPVRRecording& right) const
@@ -103,6 +104,7 @@ void CPVRRecording::Reset(void)
   m_strThumbnailPath   = StringUtils::EmptyString;
   m_strFanartPath      = StringUtils::EmptyString;
   m_bGotMetaData       = false;
+  m_iRecordingId       = 0;
 
   m_recordingTime.Reset();
   CVideoInfoTag::Reset();
index 696c032..8238bf4 100644 (file)
@@ -55,6 +55,7 @@ namespace PVR
     CStdString    m_strIconPath;      /*!< icon path */
     CStdString    m_strThumbnailPath; /*!< thumbnail path */
     CStdString    m_strFanartPath;    /*!< fanart path */
+    unsigned      m_iRecordingId;     /*!< id that won't change while xbmc is running */
 
     CPVRRecording(void);
     CPVRRecording(const PVR_RECORDING &recording, unsigned int iClientId);
index ecf7eea..9495064 100644 (file)
@@ -39,7 +39,8 @@
 using namespace PVR;
 
 CPVRRecordings::CPVRRecordings(void) :
-    m_bIsUpdating(false)
+    m_bIsUpdating(false),
+    m_iLastId(0)
 {
 
 }
@@ -456,6 +457,19 @@ void CPVRRecordings::GetAll(CFileItemList &items)
   }
 }
 
+CFileItemPtr CPVRRecordings::GetById(unsigned int iId) const
+{
+  CFileItemPtr item;
+  CSingleLock lock(m_critSection);
+  for (std::vector<CPVRRecording *>::const_iterator it = m_recordings.begin(); !item && it != m_recordings.end(); ++it)
+  {
+    if (iId == (*it)->m_iRecordingId)
+      item = CFileItemPtr(new CFileItem(**it));
+  }
+
+  return item;
+}
+
 CFileItemPtr CPVRRecordings::GetByPath(const CStdString &path)
 {
   CURL url(path);
@@ -510,6 +524,7 @@ void CPVRRecordings::UpdateEntry(const CPVRRecording &tag)
   {
     CPVRRecording *newTag = new CPVRRecording();
     newTag->Update(tag);
+    newTag->m_iRecordingId = ++m_iLastId;
     m_recordings.push_back(newTag);
   }
 }
index 20c27cc..b52e90a 100644 (file)
@@ -35,6 +35,7 @@ namespace PVR
     CCriticalSection             m_critSection;
     bool                         m_bIsUpdating;
     std::vector<CPVRRecording *> m_recordings;
+    unsigned int                 m_iLastId;
 
     virtual void UpdateFromClients(void);
     virtual CStdString TrimSlashes(const CStdString &strOrig) const;
@@ -71,6 +72,7 @@ namespace PVR
     CFileItemPtr GetByPath(const CStdString &path);
     void SetPlayCount(const CFileItem &item, int iPlayCount);
     void GetAll(CFileItemList &items);
+    CFileItemPtr GetById(unsigned int iId) const;
 
     bool HasAllRecordingsPathExtension(const CStdString &strDirectory);
   };