aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjenkins4kodi <jenkins4kodi@users.noreply.github.com>2015-02-07 02:56:40 +0100
committerjenkins4kodi <jenkins4kodi@users.noreply.github.com>2015-02-07 02:56:40 +0100
commitef4b16f40de0bdd5df5911fa84c9a7319a7b6b1b (patch)
treee67e15169262f649b5a538ba023f240f2bb433fc
parente09b74ea4a7488185e8f97d1563d31cca6c44522 (diff)
parentf7c0719c67a94b7726963f9ebb2ec3d2d3b7a5a2 (diff)
Merge pull request #6207 from ksooo/pvrrecording-optimizations
-rw-r--r--xbmc/FileItem.cpp55
-rw-r--r--xbmc/FileItem.h11
-rw-r--r--xbmc/addons/AddonCallbacksPVR.cpp2
-rw-r--r--xbmc/epg/EpgSearchFilter.cpp3
-rw-r--r--xbmc/filesystem/PVRFile.cpp2
-rw-r--r--xbmc/interfaces/json-rpc/FileItemHandler.cpp2
-rw-r--r--xbmc/pvr/PVRGUIInfo.cpp11
-rw-r--r--xbmc/pvr/PVRManager.cpp2
-rw-r--r--xbmc/pvr/PVRManager.h4
-rw-r--r--xbmc/pvr/addons/PVRClient.cpp14
-rw-r--r--xbmc/pvr/addons/PVRClient.h12
-rw-r--r--xbmc/pvr/addons/PVRClients.cpp16
-rw-r--r--xbmc/pvr/addons/PVRClients.h7
-rw-r--r--xbmc/pvr/dialogs/GUIDialogPVRGuideInfo.cpp2
-rw-r--r--xbmc/pvr/recordings/PVRRecording.cpp5
-rw-r--r--xbmc/pvr/recordings/PVRRecording.h6
-rw-r--r--xbmc/pvr/recordings/PVRRecordings.cpp30
-rw-r--r--xbmc/pvr/recordings/PVRRecordings.h3
-rw-r--r--xbmc/pvr/windows/GUIWindowPVRBase.cpp2
-rw-r--r--xbmc/pvr/windows/GUIWindowPVRRecordings.cpp17
-rw-r--r--xbmc/utils/SaveFileStateJob.cpp2
-rw-r--r--xbmc/video/VideoDatabase.cpp17
-rw-r--r--xbmc/video/VideoDatabase.h14
23 files changed, 122 insertions, 117 deletions
diff --git a/xbmc/FileItem.cpp b/xbmc/FileItem.cpp
index f8ffd44984..400624e3a1 100644
--- a/xbmc/FileItem.cpp
+++ b/xbmc/FileItem.cpp
@@ -62,6 +62,8 @@
#include "cores/paplayer/ASAPCodec.h"
#endif
+#include <assert.h>
+
using namespace std;
using namespace XFILE;
using namespace PLAYLIST;
@@ -173,16 +175,17 @@ CFileItem::CFileItem(const CPVRChannel& channel)
FillInMimeType(false);
}
-CFileItem::CFileItem(const CPVRRecording& record)
+CFileItem::CFileItem(const CPVRRecordingPtr& record)
{
+ assert(record.get());
+
Initialize();
- m_strPath = record.m_strFileNameAndPath;
m_bIsFolder = false;
- *GetPVRRecordingInfoTag() = record;
- SetLabel(record.m_strTitle);
- m_strLabel2 = record.m_strPlot;
-
+ m_pvrRecordingInfoTag = record;
+ m_strPath = record->m_strFileNameAndPath;
+ SetLabel(record->m_strTitle);
+ m_strLabel2 = record->m_strPlot;
FillInMimeType(false);
}
@@ -230,7 +233,6 @@ CFileItem::CFileItem(const CFileItem& item): CGUIListItem()
m_musicInfoTag = NULL;
m_videoInfoTag = NULL;
m_pvrChannelInfoTag = NULL;
- m_pvrRecordingInfoTag = NULL;
m_pvrTimerInfoTag = NULL;
m_pictureInfoTag = NULL;
*this = item;
@@ -315,14 +317,12 @@ CFileItem::~CFileItem(void)
delete m_musicInfoTag;
delete m_videoInfoTag;
delete m_pvrChannelInfoTag;
- delete m_pvrRecordingInfoTag;
delete m_pvrTimerInfoTag;
delete m_pictureInfoTag;
m_musicInfoTag = NULL;
m_videoInfoTag = NULL;
m_pvrChannelInfoTag = NULL;
- m_pvrRecordingInfoTag = NULL;
m_pvrTimerInfoTag = NULL;
m_pictureInfoTag = NULL;
}
@@ -382,19 +382,10 @@ const CFileItem& CFileItem::operator=(const CFileItem& item)
m_pvrChannelInfoTag = NULL;
}
- if (item.HasPVRRecordingInfoTag())
- {
- m_pvrRecordingInfoTag = GetPVRRecordingInfoTag();
- if (m_pvrRecordingInfoTag)
- *m_pvrRecordingInfoTag = *item.m_pvrRecordingInfoTag;
- }
+ if (item.m_pvrRecordingInfoTag)
+ m_pvrRecordingInfoTag = item.m_pvrRecordingInfoTag;
else
- {
- if (m_pvrRecordingInfoTag)
- delete m_pvrRecordingInfoTag;
-
- m_pvrRecordingInfoTag = NULL;
- }
+ m_pvrRecordingInfoTag.reset();
if (item.HasPVRTimerInfoTag())
{
@@ -446,7 +437,6 @@ void CFileItem::Initialize()
m_musicInfoTag = NULL;
m_videoInfoTag = NULL;
m_pvrChannelInfoTag = NULL;
- m_pvrRecordingInfoTag = NULL;
m_pvrTimerInfoTag = NULL;
m_pictureInfoTag = NULL;
m_bLabelPreformated=false;
@@ -490,8 +480,7 @@ void CFileItem::Reset()
m_epgInfoTag.reset();
delete m_pvrChannelInfoTag;
m_pvrChannelInfoTag=NULL;
- delete m_pvrRecordingInfoTag;
- m_pvrRecordingInfoTag=NULL;
+ m_pvrRecordingInfoTag.reset();
delete m_pvrTimerInfoTag;
m_pvrTimerInfoTag=NULL;
delete m_pictureInfoTag;
@@ -1399,8 +1388,8 @@ void CFileItem::UpdateInfo(const CFileItem &item, bool replaceLabels /*=true*/)
{ // copy info across (TODO: premiered info is normally stored in m_dateTime by the db)
*GetVideoInfoTag() = *item.GetVideoInfoTag();
// preferably use some information from PVR info tag if available
- if (HasPVRRecordingInfoTag())
- GetPVRRecordingInfoTag()->CopyClientInfo(GetVideoInfoTag());
+ if (m_pvrRecordingInfoTag)
+ m_pvrRecordingInfoTag->CopyClientInfo(GetVideoInfoTag());
SetOverlayImage(ICON_OVERLAY_UNWATCHED, GetVideoInfoTag()->m_playCount > 0);
SetInvalid();
}
@@ -3119,14 +3108,6 @@ CPVRChannel* CFileItem::GetPVRChannelInfoTag()
return m_pvrChannelInfoTag;
}
-CPVRRecording* CFileItem::GetPVRRecordingInfoTag()
-{
- if (!m_pvrRecordingInfoTag)
- m_pvrRecordingInfoTag = new CPVRRecording;
-
- return m_pvrRecordingInfoTag;
-}
-
CPVRTimerInfoTag* CFileItem::GetPVRTimerInfoTag()
{
if (!m_pvrTimerInfoTag)
@@ -3260,15 +3241,15 @@ int CFileItem::GetVideoContentType() const
bool CFileItem::IsResumePointSet() const
{
return (HasVideoInfoTag() && GetVideoInfoTag()->m_resumePoint.IsSet()) ||
- (HasPVRRecordingInfoTag() && GetPVRRecordingInfoTag()->GetLastPlayedPosition() > 0);
+ (m_pvrRecordingInfoTag && m_pvrRecordingInfoTag->GetLastPlayedPosition() > 0);
}
double CFileItem::GetCurrentResumeTime() const
{
- if (HasPVRRecordingInfoTag())
+ if (m_pvrRecordingInfoTag)
{
// This will retrieve 'fresh' resume information from the PVR server
- int rc = GetPVRRecordingInfoTag()->GetLastPlayedPosition();
+ int rc = m_pvrRecordingInfoTag->GetLastPlayedPosition();
if (rc > 0)
return rc;
// Fall through to default value
diff --git a/xbmc/FileItem.h b/xbmc/FileItem.h
index 239a8895f3..4f49b13868 100644
--- a/xbmc/FileItem.h
+++ b/xbmc/FileItem.h
@@ -51,6 +51,7 @@ namespace PVR
class CPVRChannel;
class CPVRRecording;
class CPVRTimerInfoTag;
+ typedef boost::shared_ptr<PVR::CPVRRecording> CPVRRecordingPtr;
}
class CPictureInfoTag;
@@ -103,7 +104,7 @@ public:
CFileItem(const CVideoInfoTag& movie);
CFileItem(const EPG::CEpgInfoTagPtr& tag);
CFileItem(const PVR::CPVRChannel& channel);
- CFileItem(const PVR::CPVRRecording& record);
+ CFileItem(const PVR::CPVRRecordingPtr& record);
CFileItem(const PVR::CPVRTimerInfoTag& timer);
CFileItem(const CMediaSource& share);
virtual ~CFileItem(void);
@@ -287,12 +288,10 @@ public:
inline bool HasPVRRecordingInfoTag() const
{
- return m_pvrRecordingInfoTag != NULL;
+ return m_pvrRecordingInfoTag.get() != NULL;
}
- PVR::CPVRRecording* GetPVRRecordingInfoTag();
-
- inline const PVR::CPVRRecording* GetPVRRecordingInfoTag() const
+ inline const PVR::CPVRRecordingPtr GetPVRRecordingInfoTag() const
{
return m_pvrRecordingInfoTag;
}
@@ -486,7 +485,7 @@ private:
CVideoInfoTag* m_videoInfoTag;
EPG::CEpgInfoTagPtr m_epgInfoTag;
PVR::CPVRChannel* m_pvrChannelInfoTag;
- PVR::CPVRRecording* m_pvrRecordingInfoTag;
+ PVR::CPVRRecordingPtr m_pvrRecordingInfoTag;
PVR::CPVRTimerInfoTag * m_pvrTimerInfoTag;
CPictureInfoTag* m_pictureInfoTag;
bool m_bIsAlbum;
diff --git a/xbmc/addons/AddonCallbacksPVR.cpp b/xbmc/addons/AddonCallbacksPVR.cpp
index 8056f8cdd6..108d3ca274 100644
--- a/xbmc/addons/AddonCallbacksPVR.cpp
+++ b/xbmc/addons/AddonCallbacksPVR.cpp
@@ -191,7 +191,7 @@ void CAddonCallbacksPVR::PVRTransferRecordingEntry(void *addonData, const ADDON_
}
/* transfer this entry to the recordings container */
- CPVRRecording transferRecording(*recording, client->GetID());
+ CPVRRecordingPtr transferRecording(new CPVRRecording(*recording, client->GetID()));
xbmcRecordings->UpdateFromClient(transferRecording);
}
diff --git a/xbmc/epg/EpgSearchFilter.cpp b/xbmc/epg/EpgSearchFilter.cpp
index 39e328d0a2..003f9a1647 100644
--- a/xbmc/epg/EpgSearchFilter.cpp
+++ b/xbmc/epg/EpgSearchFilter.cpp
@@ -205,9 +205,10 @@ int EpgSearchFilter::FilterRecordings(CFileItemList &results)
g_PVRRecordings->GetAll(recordings);
// TODO inefficient!
+ CPVRRecordingPtr recording;
for (int iRecordingPtr = 0; iRecordingPtr < recordings.Size(); iRecordingPtr++)
{
- CPVRRecording *recording = recordings.Get(iRecordingPtr)->GetPVRRecordingInfoTag();
+ recording = recordings.Get(iRecordingPtr)->GetPVRRecordingInfoTag();
if (!recording)
continue;
diff --git a/xbmc/filesystem/PVRFile.cpp b/xbmc/filesystem/PVRFile.cpp
index 4e9abf934a..0563dd7e9a 100644
--- a/xbmc/filesystem/PVRFile.cpp
+++ b/xbmc/filesystem/PVRFile.cpp
@@ -75,7 +75,7 @@ bool CPVRFile::Open(const CURL& url)
CFileItemPtr tag = g_PVRRecordings->GetByPath(strURL);
if (tag && tag->HasPVRRecordingInfoTag())
{
- if (!g_PVRManager.OpenRecordedStream(*tag->GetPVRRecordingInfoTag()))
+ if (!g_PVRManager.OpenRecordedStream(tag->GetPVRRecordingInfoTag()))
return false;
m_isPlayRecording = true;
diff --git a/xbmc/interfaces/json-rpc/FileItemHandler.cpp b/xbmc/interfaces/json-rpc/FileItemHandler.cpp
index 3066bf00e3..c768340a55 100644
--- a/xbmc/interfaces/json-rpc/FileItemHandler.cpp
+++ b/xbmc/interfaces/json-rpc/FileItemHandler.cpp
@@ -359,7 +359,7 @@ void CFileItemHandler::HandleFileItem(const char *ID, bool allowFile, const char
if (item->HasEPGInfoTag())
FillDetails(item->GetEPGInfoTag().get(), item, fields, object, thumbLoader);
if (item->HasPVRRecordingInfoTag())
- FillDetails(item->GetPVRRecordingInfoTag(), item, fields, object, thumbLoader);
+ FillDetails(item->GetPVRRecordingInfoTag().get(), item, fields, object, thumbLoader);
if (item->HasPVRTimerInfoTag())
FillDetails(item->GetPVRTimerInfoTag(), item, fields, object, thumbLoader);
if (item->HasVideoInfoTag())
diff --git a/xbmc/pvr/PVRGUIInfo.cpp b/xbmc/pvr/PVRGUIInfo.cpp
index b178ec3a6b..796a0048a5 100644
--- a/xbmc/pvr/PVRGUIInfo.cpp
+++ b/xbmc/pvr/PVRGUIInfo.cpp
@@ -872,7 +872,6 @@ CEpgInfoTagPtr CPVRGUIInfo::GetPlayingTag() const
void CPVRGUIInfo::UpdatePlayingTag(void)
{
CPVRChannelPtr currentChannel;
- CPVRRecording recording;
if (g_PVRManager.GetCurrentChannel(currentChannel))
{
CEpgInfoTagPtr epgTag(GetPlayingTag());
@@ -896,10 +895,14 @@ void CPVRGUIInfo::UpdatePlayingTag(void)
g_PVRManager.UpdateCurrentFile();
}
}
- else if (g_PVRClients->GetPlayingRecording(recording))
+ else
{
- ResetPlayingTag();
- m_iDuration = recording.GetDuration() * 1000;
+ CPVRRecordingPtr recording(g_PVRClients->GetPlayingRecording());
+ if (recording)
+ {
+ ResetPlayingTag();
+ m_iDuration = recording->GetDuration() * 1000;
+ }
}
}
diff --git a/xbmc/pvr/PVRManager.cpp b/xbmc/pvr/PVRManager.cpp
index 0f22fba993..a41d55980a 100644
--- a/xbmc/pvr/PVRManager.cpp
+++ b/xbmc/pvr/PVRManager.cpp
@@ -1048,7 +1048,7 @@ bool CPVRManager::OpenLiveStream(const CFileItem &channel)
return bReturn;
}
-bool CPVRManager::OpenRecordedStream(const CPVRRecording &tag)
+bool CPVRManager::OpenRecordedStream(const CPVRRecordingPtr &tag)
{
bool bReturn = false;
CSingleLock lock(m_critSection);
diff --git a/xbmc/pvr/PVRManager.h b/xbmc/pvr/PVRManager.h
index b50f5d7a42..907a7453a8 100644
--- a/xbmc/pvr/PVRManager.h
+++ b/xbmc/pvr/PVRManager.h
@@ -28,6 +28,7 @@
#include "utils/JobManager.h"
#include "utils/Observer.h"
#include "interfaces/IAnnouncer.h"
+#include "pvr/recordings/PVRRecording.h"
class CGUIDialogProgressBarHandle;
class CStopWatch;
@@ -46,7 +47,6 @@ namespace PVR
typedef boost::shared_ptr<PVR::CPVRChannel> CPVRChannelPtr;
class CPVRChannelGroupsContainer;
class CPVRChannelGroup;
- class CPVRRecording;
class CPVRRecordings;
class CPVRTimers;
class CPVRGUIInfo;
@@ -319,7 +319,7 @@ namespace PVR
* @param tag The recording to open.
* @return True if the stream was opened, false otherwise.
*/
- bool OpenRecordedStream(const CPVRRecording &tag);
+ bool OpenRecordedStream(const CPVRRecordingPtr &tag);
/*!
* @brief Try to playback the given file item
diff --git a/xbmc/pvr/addons/PVRClient.cpp b/xbmc/pvr/addons/PVRClient.cpp
index 06ff5b0b90..f327e15407 100644
--- a/xbmc/pvr/addons/PVRClient.cpp
+++ b/xbmc/pvr/addons/PVRClient.cpp
@@ -1365,15 +1365,13 @@ bool CPVRClient::GetPlayingChannel(CPVRChannelPtr &channel) const
return false;
}
-bool CPVRClient::GetPlayingRecording(CPVRRecording &recording) const
+CPVRRecordingPtr CPVRClient::GetPlayingRecording(void) const
{
CSingleLock lock(m_critSection);
if (m_bReadyToUse && m_bIsPlayingRecording)
- {
- recording = m_playingRecording;
- return true;
- }
- return false;
+ return m_playingRecording;
+
+ return CPVRRecordingPtr();
}
bool CPVRClient::OpenStream(const CPVRChannel &channel, bool bIsSwitchingChannel)
@@ -1426,7 +1424,7 @@ bool CPVRClient::OpenStream(const CPVRChannel &channel, bool bIsSwitchingChannel
return bReturn;
}
-bool CPVRClient::OpenStream(const CPVRRecording &recording)
+bool CPVRClient::OpenStream(const CPVRRecordingPtr &recording)
{
bool bReturn(false);
CloseStream();
@@ -1434,7 +1432,7 @@ bool CPVRClient::OpenStream(const CPVRRecording &recording)
if (m_bReadyToUse && m_addonCapabilities.bSupportsRecordings)
{
PVR_RECORDING tag;
- WriteClientRecordingInfo(recording, tag);
+ WriteClientRecordingInfo(*recording, tag);
try
{
diff --git a/xbmc/pvr/addons/PVRClient.h b/xbmc/pvr/addons/PVRClient.h
index 60f37a7ee1..58695cdda0 100644
--- a/xbmc/pvr/addons/PVRClient.h
+++ b/xbmc/pvr/addons/PVRClient.h
@@ -444,7 +444,7 @@ namespace PVR
* @param recording The recording to open.
* @return True if the stream has been opened succesfully, false otherwise.
*/
- bool OpenStream(const CPVRRecording &recording);
+ bool OpenStream(const CPVRRecordingPtr &recording);
//@}
/** @name PVR demultiplexer methods */
@@ -494,7 +494,7 @@ namespace PVR
bool IsPlayingRecording(void) const;
bool IsPlaying(void) const;
bool GetPlayingChannel(CPVRChannelPtr &channel) const;
- bool GetPlayingRecording(CPVRRecording &recording) const;
+ CPVRRecordingPtr GetPlayingRecording(void) const;
static const char *ToString(const PVR_ERROR error);
@@ -605,10 +605,10 @@ namespace PVR
CCriticalSection m_critSection;
- bool m_bIsPlayingTV;
- CPVRChannelPtr m_playingChannel;
- bool m_bIsPlayingRecording;
- CPVRRecording m_playingRecording;
+ bool m_bIsPlayingTV;
+ CPVRChannelPtr m_playingChannel;
+ bool m_bIsPlayingRecording;
+ CPVRRecordingPtr m_playingRecording;
ADDON::AddonVersion m_apiVersion;
};
}
diff --git a/xbmc/pvr/addons/PVRClients.cpp b/xbmc/pvr/addons/PVRClients.cpp
index e87b5a3ca7..ff23871bfc 100644
--- a/xbmc/pvr/addons/PVRClients.cpp
+++ b/xbmc/pvr/addons/PVRClients.cpp
@@ -36,6 +36,8 @@
#include "cores/IPlayer.h"
#include "network/Network.h"
+#include <assert.h>
+
using namespace ADDON;
using namespace PVR;
using namespace EPG;
@@ -348,12 +350,10 @@ bool CPVRClients::GetPlayingChannel(CPVRChannelPtr &channel) const
return false;
}
-bool CPVRClients::GetPlayingRecording(CPVRRecording &recording) const
+CPVRRecordingPtr CPVRClients::GetPlayingRecording(void) const
{
PVR_CLIENT client;
- if (GetPlayingClient(client))
- return client->GetPlayingRecording(recording);
- return false;
+ return GetPlayingClient(client) ? client->GetPlayingRecording() : CPVRRecordingPtr();
}
bool CPVRClients::HasTimerSupport(int iClientId)
@@ -1193,18 +1193,20 @@ bool CPVRClients::OpenStream(const CPVRChannel &tag, bool bIsSwitchingChannel)
return bReturn;
}
-bool CPVRClients::OpenStream(const CPVRRecording &tag)
+bool CPVRClients::OpenStream(const CPVRRecordingPtr &tag)
{
+ assert(tag.get());
+
bool bReturn(false);
CloseStream();
/* try to open the recording stream on the client */
PVR_CLIENT client;
- if (GetConnectedClient(tag.m_iClientId, client) &&
+ if (GetConnectedClient(tag->m_iClientId, client) &&
client->OpenStream(tag))
{
CSingleLock lock(m_critSection);
- m_playingClientId = tag.m_iClientId;
+ m_playingClientId = tag->m_iClientId;
m_bIsPlayingRecording = true;
m_strPlayingClientName = client->GetFriendlyName();
bReturn = true;
diff --git a/xbmc/pvr/addons/PVRClients.h b/xbmc/pvr/addons/PVRClients.h
index 5b6753b7de..069186e0a2 100644
--- a/xbmc/pvr/addons/PVRClients.h
+++ b/xbmc/pvr/addons/PVRClients.h
@@ -288,14 +288,13 @@ namespace PVR
* @param tag The recording to start playing.
* @return True if the stream was opened successfully, false otherwise.
*/
- bool OpenStream(const CPVRRecording &tag);
+ bool OpenStream(const CPVRRecordingPtr &tag);
/*!
* @brief Get the recordings that is currently playing.
- * @param recording A copy of the recording that is currently playing.
- * @return True if a recording is playing, false otherwise.
+ * @return The recording that is currently playing, NULL otherwise.
*/
- bool GetPlayingRecording(CPVRRecording &recording) const;
+ CPVRRecordingPtr GetPlayingRecording(void) const;
//@}
diff --git a/xbmc/pvr/dialogs/GUIDialogPVRGuideInfo.cpp b/xbmc/pvr/dialogs/GUIDialogPVRGuideInfo.cpp
index bce27265a4..d29a3e20d0 100644
--- a/xbmc/pvr/dialogs/GUIDialogPVRGuideInfo.cpp
+++ b/xbmc/pvr/dialogs/GUIDialogPVRGuideInfo.cpp
@@ -176,7 +176,7 @@ bool CGUIDialogPVRGuideInfo::OnClickButtonSwitch(CGUIMessage &message)
if (epgTag)
{
if (epgTag->HasRecording())
- ret = g_application.PlayFile(CFileItem(*epgTag->Recording()));
+ ret = g_application.PlayFile(CFileItem(epgTag->Recording()));
else if (epgTag->HasPVRChannel())
ret = g_application.PlayFile(CFileItem(*epgTag->ChannelTag()));
}
diff --git a/xbmc/pvr/recordings/PVRRecording.cpp b/xbmc/pvr/recordings/PVRRecording.cpp
index 454455b096..bb1713c170 100644
--- a/xbmc/pvr/recordings/PVRRecording.cpp
+++ b/xbmc/pvr/recordings/PVRRecording.cpp
@@ -232,10 +232,7 @@ void CPVRRecording::UpdateMetadata(CVideoDatabase &db)
if (!supportsPlayCount || !supportsLastPlayed)
{
if (!supportsPlayCount)
- {
- CFileItem pFileItem(*this);
- m_playCount = db.GetPlayCount(pFileItem);
- }
+ m_playCount = db.GetPlayCount(m_strFileNameAndPath);
if (!supportsLastPlayed)
db.GetResumeBookMark(m_strFileNameAndPath, m_resumePoint);
diff --git a/xbmc/pvr/recordings/PVRRecording.h b/xbmc/pvr/recordings/PVRRecording.h
index c9d9359651..0c14f6ed0b 100644
--- a/xbmc/pvr/recordings/PVRRecording.h
+++ b/xbmc/pvr/recordings/PVRRecording.h
@@ -84,6 +84,12 @@ namespace PVR
CPVRRecording(void);
CPVRRecording(const PVR_RECORDING &recording, unsigned int iClientId);
+
+ private:
+ CPVRRecording(const CPVRRecording &tag); // intentionally not implemented.
+ CPVRRecording &operator =(const CPVRRecording &other); // intentionally not implemented.
+
+ public:
virtual ~CPVRRecording() {};
bool operator ==(const CPVRRecording& right) const;
diff --git a/xbmc/pvr/recordings/PVRRecordings.cpp b/xbmc/pvr/recordings/PVRRecordings.cpp
index 14b1476b35..56eff347de 100644
--- a/xbmc/pvr/recordings/PVRRecordings.cpp
+++ b/xbmc/pvr/recordings/PVRRecordings.cpp
@@ -200,7 +200,7 @@ int CPVRRecordings::GetRecordings(CFileItemList* results)
for (PVR_RECORDINGMAP_CITR it = m_recordings.begin(); it != m_recordings.end(); it++)
{
- CFileItemPtr pFileItem(new CFileItem(*it->second));
+ CFileItemPtr pFileItem(new CFileItem(it->second));
results->Add(pFileItem);
}
@@ -236,7 +236,7 @@ bool CPVRRecordings::DeleteRecording(const CFileItem &item)
return false;
}
- CPVRRecording *tag = (CPVRRecording *)item.GetPVRRecordingInfoTag();
+ CPVRRecordingPtr tag = item.GetPVRRecordingInfoTag();
return tag->Delete();
}
@@ -248,7 +248,7 @@ bool CPVRRecordings::RenameRecording(CFileItem &item, std::string &strNewName)
return false;
}
- CPVRRecording* tag = item.GetPVRRecordingInfoTag();
+ CPVRRecordingPtr tag = item.GetPVRRecordingInfoTag();
return tag->Rename(strNewName);
}
@@ -288,7 +288,7 @@ bool CPVRRecordings::SetRecordingsPlayCount(const CFileItemPtr &item, int count)
if (!pItem->HasPVRRecordingInfoTag())
continue;
- CPVRRecordingPtr recording = GetByFileItem(*pItem);
+ const CPVRRecordingPtr recording = pItem->GetPVRRecordingInfoTag();
if (recording)
{
recording->SetPlayCount(count);
@@ -335,7 +335,7 @@ bool CPVRRecordings::GetDirectory(const std::string& strPath, CFileItemList &ite
if (m_database.IsOpen())
current->UpdateMetadata(m_database);
- CFileItemPtr pFileItem(new CFileItem(*current));
+ CFileItemPtr pFileItem(new CFileItem(current));
pFileItem->SetLabel2(current->RecordingTimeAsLocalTime().GetAsLocalizedDateTime(true, false));
pFileItem->m_dateTime = current->RecordingTimeAsLocalTime();
pFileItem->SetPath(current->m_strFileNameAndPath);
@@ -376,7 +376,7 @@ void CPVRRecordings::GetAll(CFileItemList &items)
if (m_database.IsOpen())
current->UpdateMetadata(m_database);
- CFileItemPtr pFileItem(new CFileItem(*current));
+ CFileItemPtr pFileItem(new CFileItem(current));
pFileItem->SetLabel2(current->RecordingTimeAsLocalTime().GetAsLocalizedDateTime(true, false));
pFileItem->m_dateTime = current->RecordingTimeAsLocalTime();
pFileItem->SetPath(current->m_strFileNameAndPath);
@@ -393,7 +393,7 @@ CFileItemPtr CPVRRecordings::GetById(unsigned int iId) const
for (PVR_RECORDINGMAP_CITR it = m_recordings.begin(); it != m_recordings.end(); it++)
{
if (iId == it->second->m_iRecordingId)
- item = CFileItemPtr(new CFileItem(*(it->second)));
+ item = CFileItemPtr(new CFileItem(it->second));
}
return item;
@@ -414,7 +414,7 @@ CFileItemPtr CPVRRecordings::GetByPath(const std::string &path)
CPVRRecordingPtr current = it->second;
if (URIUtils::PathEquals(path, current->m_strFileNameAndPath))
{
- CFileItemPtr fileItem(new CFileItem(*current));
+ CFileItemPtr fileItem(new CFileItem(current));
return fileItem;
}
}
@@ -435,31 +435,25 @@ CPVRRecordingPtr CPVRRecordings::GetById(int iClientId, const std::string &strRe
return retVal;
}
-CPVRRecordingPtr CPVRRecordings::GetByFileItem(const CFileItem &item) const
-{
- const CPVRRecording *recording = item.GetPVRRecordingInfoTag();
- return GetById(recording->m_iClientId, recording->m_strRecordingId);
-}
-
void CPVRRecordings::Clear()
{
CSingleLock lock(m_critSection);
m_recordings.clear();
}
-void CPVRRecordings::UpdateFromClient(const CPVRRecording &tag)
+void CPVRRecordings::UpdateFromClient(const CPVRRecordingPtr &tag)
{
CSingleLock lock(m_critSection);
- CPVRRecordingPtr newTag = GetById(tag.m_iClientId, tag.m_strRecordingId);
+ CPVRRecordingPtr newTag = GetById(tag->m_iClientId, tag->m_strRecordingId);
if (newTag)
{
- newTag->Update(tag);
+ newTag->Update(*tag);
}
else
{
newTag = CPVRRecordingPtr(new CPVRRecording);
- newTag->Update(tag);
+ newTag->Update(*tag);
newTag->m_iRecordingId = ++m_iLastId;
m_recordings.insert(std::make_pair(CPVRRecordingUid(newTag->m_iClientId, newTag->m_strRecordingId), newTag));
}
diff --git a/xbmc/pvr/recordings/PVRRecordings.h b/xbmc/pvr/recordings/PVRRecordings.h
index 2c42e7dd56..9463887222 100644
--- a/xbmc/pvr/recordings/PVRRecordings.h
+++ b/xbmc/pvr/recordings/PVRRecordings.h
@@ -48,7 +48,6 @@ namespace PVR
virtual const std::string GetDirectoryFromPath(const std::string &strPath, const std::string &strBase) const;
virtual bool IsDirectoryMember(const std::string &strDirectory, const std::string &strEntryDirectory) const;
virtual void GetSubDirectories(const std::string &strBase, CFileItemList *results);
- CPVRRecordingPtr GetByFileItem(const CFileItem &item) const;
/**
* @brief recursively deletes all recordings in the specified directory
@@ -65,7 +64,7 @@ namespace PVR
int Load();
void Unload();
void Clear();
- void UpdateFromClient(const CPVRRecording &tag);
+ void UpdateFromClient(const CPVRRecordingPtr &tag);
/**
* @brief refresh the recordings list from the clients.
diff --git a/xbmc/pvr/windows/GUIWindowPVRBase.cpp b/xbmc/pvr/windows/GUIWindowPVRBase.cpp
index 5adab71d41..025125c41a 100644
--- a/xbmc/pvr/windows/GUIWindowPVRBase.cpp
+++ b/xbmc/pvr/windows/GUIWindowPVRBase.cpp
@@ -549,7 +549,7 @@ bool CGUIWindowPVRBase::ActionPlayEpg(CFileItem *item)
CFileItem fileItem;
if (epgTag->HasRecording())
- fileItem = CFileItem(*epgTag->Recording());
+ fileItem = CFileItem(epgTag->Recording());
else
fileItem = CFileItem(*channel);
diff --git a/xbmc/pvr/windows/GUIWindowPVRRecordings.cpp b/xbmc/pvr/windows/GUIWindowPVRRecordings.cpp
index ccaefc402d..8f20bad083 100644
--- a/xbmc/pvr/windows/GUIWindowPVRRecordings.cpp
+++ b/xbmc/pvr/windows/GUIWindowPVRRecordings.cpp
@@ -342,14 +342,17 @@ bool CGUIWindowPVRRecordings::OnContextButtonRename(CFileItem *item, CONTEXT_BUT
if (button == CONTEXT_BUTTON_RENAME)
{
- bReturn = true;
-
- CPVRRecording *recording = item->GetPVRRecordingInfoTag();
- std::string strNewName = recording->m_strTitle;
- if (CGUIKeyboardFactory::ShowAndGetInput(strNewName, g_localizeStrings.Get(19041), false))
+ CPVRRecordingPtr recording = item->GetPVRRecordingInfoTag();
+ if (recording)
{
- if (g_PVRRecordings->RenameRecording(*item, strNewName))
- Refresh(true);
+ bReturn = true;
+
+ std::string strNewName = recording->m_strTitle;
+ if (CGUIKeyboardFactory::ShowAndGetInput(strNewName, g_localizeStrings.Get(19041), false))
+ {
+ if (g_PVRRecordings->RenameRecording(*item, strNewName))
+ Refresh(true);
+ }
}
}
diff --git a/xbmc/utils/SaveFileStateJob.cpp b/xbmc/utils/SaveFileStateJob.cpp
index 3be229bb38..813f6c2a19 100644
--- a/xbmc/utils/SaveFileStateJob.cpp
+++ b/xbmc/utils/SaveFileStateJob.cpp
@@ -105,7 +105,7 @@ bool CSaveFileStateJob::DoWork()
// PVR: Set/clear recording's resume bookmark on the backend (if supported)
if (m_item.HasPVRRecordingInfoTag())
{
- PVR::CPVRRecording *recording = m_item.GetPVRRecordingInfoTag();
+ PVR::CPVRRecordingPtr recording = m_item.GetPVRRecordingInfoTag();
recording->SetLastPlayedPosition(m_bookmark.timeInSeconds <= 0.0f ? 0 : (int)m_bookmark.timeInSeconds);
recording->m_resumePoint = m_bookmark;
}
diff --git a/xbmc/video/VideoDatabase.cpp b/xbmc/video/VideoDatabase.cpp
index 5b2fa973ce..7560ffe01e 100644
--- a/xbmc/video/VideoDatabase.cpp
+++ b/xbmc/video/VideoDatabase.cpp
@@ -4759,10 +4759,9 @@ bool CVideoDatabase::GetPlayCounts(const std::string &strPath, CFileItemList &it
return false;
}
-int CVideoDatabase::GetPlayCount(const CFileItem &item)
+int CVideoDatabase::GetPlayCount(int iFileId)
{
- int id = GetFileId(item);
- if (id < 0)
+ if (iFileId < 0)
return 0; // not in db, so not watched
try
@@ -4771,7 +4770,7 @@ int CVideoDatabase::GetPlayCount(const CFileItem &item)
if (NULL == m_pDB.get()) return -1;
if (NULL == m_pDS.get()) return -1;
- std::string strSQL = PrepareSQL("select playCount from files WHERE idFile=%i", id);
+ std::string strSQL = PrepareSQL("select playCount from files WHERE idFile=%i", iFileId);
int count = 0;
if (m_pDS->query(strSQL.c_str()))
{
@@ -4789,6 +4788,16 @@ int CVideoDatabase::GetPlayCount(const CFileItem &item)
return -1;
}
+int CVideoDatabase::GetPlayCount(const std::string& strFilenameAndPath)
+{
+ return GetPlayCount(GetFileId(strFilenameAndPath));
+}
+
+int CVideoDatabase::GetPlayCount(const CFileItem &item)
+{
+ return GetPlayCount(GetFileId(item));
+}
+
void CVideoDatabase::UpdateFanart(const CFileItem &item, VIDEODB_CONTENT_TYPE type)
{
if (NULL == m_pDB.get()) return;
diff --git a/xbmc/video/VideoDatabase.h b/xbmc/video/VideoDatabase.h
index e1d8928ada..8012bd59c7 100644
--- a/xbmc/video/VideoDatabase.h
+++ b/xbmc/video/VideoDatabase.h
@@ -408,6 +408,13 @@ public:
*/
int GetPlayCount(const CFileItem &item);
+ /*! \brief Get the playcount of a filename and path
+ \param strFilenameAndPath filename and path to get the playcount for
+ \return the playcount of the item, or -1 on error
+ \sa SetPlayCount, IncrementPlayCount, GetPlayCounts
+ */
+ int GetPlayCount(const std::string& strFilenameAndPath);
+
/*! \brief Update the last played time of an item
Updates the last played date
\param item CFileItem to update the last played time for
@@ -868,6 +875,13 @@ private:
*/
bool LookupByFolders(const std::string &path, bool shows = false);
+ /*! \brief Get the playcount for a file id
+ \param iFileId file id to get the playcount for
+ \return the playcount of the item, or -1 on error
+ \sa SetPlayCount, IncrementPlayCount, GetPlayCounts
+ */
+ int GetPlayCount(int iFileId);
+
virtual int GetMinSchemaVersion() const { return 60; };
virtual int GetSchemaVersion() const;
virtual int GetExportVersion() const { return 1; };