aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Stenvall <Jalle19@users.noreply.github.com>2015-01-03 12:46:46 +0200
committerSam Stenvall <Jalle19@users.noreply.github.com>2015-01-03 12:46:46 +0200
commitc02645275ac17392032a5f7b89007cbabe2f240d (patch)
tree813ae20f4d218c239dfccfe7074d456e597da069
parent9bb938c1339c4f073101f7edd91dc7638c4e2350 (diff)
parent0e143ce8e911969a91576587ca4f2164699704a3 (diff)
Merge pull request #6085 from popcornmix/pvr_recordings
[PVR] Fix for slow metadata updates of recordings
-rw-r--r--xbmc/pvr/recordings/PVRRecording.cpp20
-rw-r--r--xbmc/pvr/recordings/PVRRecording.h4
-rw-r--r--xbmc/pvr/recordings/PVRRecordings.cpp27
-rw-r--r--xbmc/pvr/recordings/PVRRecordings.h4
4 files changed, 30 insertions, 25 deletions
diff --git a/xbmc/pvr/recordings/PVRRecording.cpp b/xbmc/pvr/recordings/PVRRecording.cpp
index 708618de2f..d418f0f010 100644
--- a/xbmc/pvr/recordings/PVRRecording.cpp
+++ b/xbmc/pvr/recordings/PVRRecording.cpp
@@ -221,7 +221,7 @@ bool CPVRRecording::SetPlayCount(int count)
return true;
}
-void CPVRRecording::UpdateMetadata(void)
+void CPVRRecording::UpdateMetadata(CVideoDatabase &db)
{
if (m_bGotMetaData)
return;
@@ -231,20 +231,14 @@ void CPVRRecording::UpdateMetadata(void)
if (!supportsPlayCount || !supportsLastPlayed)
{
- CVideoDatabase db;
- if (db.Open())
+ if (!supportsPlayCount)
{
- if (!supportsPlayCount)
- {
- CFileItem pFileItem(*this);
- m_playCount = db.GetPlayCount(pFileItem);
- }
-
- if (!supportsLastPlayed)
- db.GetResumeBookMark(m_strFileNameAndPath, m_resumePoint);
-
- db.Close();
+ CFileItem pFileItem(*this);
+ m_playCount = db.GetPlayCount(pFileItem);
}
+
+ if (!supportsLastPlayed)
+ db.GetResumeBookMark(m_strFileNameAndPath, m_resumePoint);
}
m_bGotMetaData = true;
diff --git a/xbmc/pvr/recordings/PVRRecording.h b/xbmc/pvr/recordings/PVRRecording.h
index 91af28afd8..c9d9359651 100644
--- a/xbmc/pvr/recordings/PVRRecording.h
+++ b/xbmc/pvr/recordings/PVRRecording.h
@@ -39,6 +39,8 @@
#include "video/VideoInfoTag.h"
#include "XBDateTime.h"
+class CVideoDatabase;
+
namespace PVR
{
class CPVRRecording;
@@ -149,7 +151,7 @@ namespace PVR
* @brief Get the resume point and play count from the database if the
* client doesn't handle it itself.
*/
- void UpdateMetadata(void);
+ void UpdateMetadata(CVideoDatabase &db);
/*!
* @brief Update this tag with the contents of the given tag.
diff --git a/xbmc/pvr/recordings/PVRRecordings.cpp b/xbmc/pvr/recordings/PVRRecordings.cpp
index 7902d4608d..c42f5d3c80 100644
--- a/xbmc/pvr/recordings/PVRRecordings.cpp
+++ b/xbmc/pvr/recordings/PVRRecordings.cpp
@@ -43,7 +43,14 @@ CPVRRecordings::CPVRRecordings(void) :
m_iLastId(0),
m_bGroupItems(true)
{
+ m_database.Open();
+}
+CPVRRecordings::~CPVRRecordings()
+{
+ Clear();
+ if (m_database.IsOpen())
+ m_database.Close();
}
void CPVRRecordings::UpdateFromClients(void)
@@ -119,8 +126,9 @@ void CPVRRecordings::GetSubDirectories(const std::string &strBase, CFileItemList
strFilePath = StringUtils::Format("pvr://recordings/%s/%s/", strUseBase.c_str(), strCurrent.c_str());
CFileItemPtr pFileItem;
- current->UpdateMetadata();
-
+ if (m_database.IsOpen())
+ current->UpdateMetadata(m_database);
+
if (!results->Contains(strFilePath))
{
pFileItem.reset(new CFileItem(strCurrent, true));
@@ -248,8 +256,7 @@ bool CPVRRecordings::SetRecordingsPlayCount(const CFileItemPtr &item, int count)
{
bool bResult = false;
- CVideoDatabase database;
- if (database.Open())
+ if (m_database.IsOpen())
{
bResult = true;
@@ -289,15 +296,13 @@ bool CPVRRecordings::SetRecordingsPlayCount(const CFileItemPtr &item, int count)
// Clear resume bookmark
if (count > 0)
{
- database.ClearBookMarksOfFile(pItem->GetPath(), CBookmark::RESUME);
+ m_database.ClearBookMarksOfFile(pItem->GetPath(), CBookmark::RESUME);
recording->SetLastPlayedPosition(0);
}
- database.SetPlayCount(*pItem, count);
+ m_database.SetPlayCount(*pItem, count);
}
}
-
- database.Close();
}
return bResult;
@@ -328,7 +333,8 @@ bool CPVRRecordings::GetDirectory(const std::string& strPath, CFileItemList &ite
if (!IsDirectoryMember(strDirectoryPath, current->m_strDirectory))
continue;
- current->UpdateMetadata();
+ if (m_database.IsOpen())
+ current->UpdateMetadata(m_database);
CFileItemPtr pFileItem(new CFileItem(*current));
pFileItem->SetLabel2(current->RecordingTimeAsLocalTime().GetAsLocalizedDateTime(true, false));
pFileItem->m_dateTime = current->RecordingTimeAsLocalTime();
@@ -367,7 +373,8 @@ void CPVRRecordings::GetAll(CFileItemList &items)
for (PVR_RECORDINGMAP_CITR it = m_recordings.begin(); it != m_recordings.end(); it++)
{
CPVRRecordingPtr current = it->second;
- current->UpdateMetadata();
+ if (m_database.IsOpen())
+ current->UpdateMetadata(m_database);
CFileItemPtr pFileItem(new CFileItem(*current));
pFileItem->SetLabel2(current->RecordingTimeAsLocalTime().GetAsLocalizedDateTime(true, false));
diff --git a/xbmc/pvr/recordings/PVRRecordings.h b/xbmc/pvr/recordings/PVRRecordings.h
index 6b8cb147a0..2bcc83409c 100644
--- a/xbmc/pvr/recordings/PVRRecordings.h
+++ b/xbmc/pvr/recordings/PVRRecordings.h
@@ -24,6 +24,7 @@
#include "threads/Thread.h"
#include "utils/Observer.h"
#include "video/VideoThumbLoader.h"
+#include "video/VideoDatabase.h"
#define PVR_ALL_RECORDINGS_PATH_EXTENSION "-1"
@@ -40,6 +41,7 @@ namespace PVR
PVR_RECORDINGMAP m_recordings;
unsigned int m_iLastId;
bool m_bGroupItems;
+ CVideoDatabase m_database;
virtual void UpdateFromClients(void);
virtual std::string TrimSlashes(const std::string &strOrig) const;
@@ -58,7 +60,7 @@ namespace PVR
public:
CPVRRecordings(void);
- virtual ~CPVRRecordings(void) { Clear(); };
+ virtual ~CPVRRecordings(void);
int Load();
void Unload();