diff options
author | jenkins4kodi <jenkins4kodi@users.noreply.github.com> | 2015-02-07 02:56:40 +0100 |
---|---|---|
committer | jenkins4kodi <jenkins4kodi@users.noreply.github.com> | 2015-02-07 02:56:40 +0100 |
commit | ef4b16f40de0bdd5df5911fa84c9a7319a7b6b1b (patch) | |
tree | e67e15169262f649b5a538ba023f240f2bb433fc | |
parent | e09b74ea4a7488185e8f97d1563d31cca6c44522 (diff) | |
parent | f7c0719c67a94b7726963f9ebb2ec3d2d3b7a5a2 (diff) |
Merge pull request #6207 from ksooo/pvrrecording-optimizations
-rw-r--r-- | xbmc/FileItem.cpp | 55 | ||||
-rw-r--r-- | xbmc/FileItem.h | 11 | ||||
-rw-r--r-- | xbmc/addons/AddonCallbacksPVR.cpp | 2 | ||||
-rw-r--r-- | xbmc/epg/EpgSearchFilter.cpp | 3 | ||||
-rw-r--r-- | xbmc/filesystem/PVRFile.cpp | 2 | ||||
-rw-r--r-- | xbmc/interfaces/json-rpc/FileItemHandler.cpp | 2 | ||||
-rw-r--r-- | xbmc/pvr/PVRGUIInfo.cpp | 11 | ||||
-rw-r--r-- | xbmc/pvr/PVRManager.cpp | 2 | ||||
-rw-r--r-- | xbmc/pvr/PVRManager.h | 4 | ||||
-rw-r--r-- | xbmc/pvr/addons/PVRClient.cpp | 14 | ||||
-rw-r--r-- | xbmc/pvr/addons/PVRClient.h | 12 | ||||
-rw-r--r-- | xbmc/pvr/addons/PVRClients.cpp | 16 | ||||
-rw-r--r-- | xbmc/pvr/addons/PVRClients.h | 7 | ||||
-rw-r--r-- | xbmc/pvr/dialogs/GUIDialogPVRGuideInfo.cpp | 2 | ||||
-rw-r--r-- | xbmc/pvr/recordings/PVRRecording.cpp | 5 | ||||
-rw-r--r-- | xbmc/pvr/recordings/PVRRecording.h | 6 | ||||
-rw-r--r-- | xbmc/pvr/recordings/PVRRecordings.cpp | 30 | ||||
-rw-r--r-- | xbmc/pvr/recordings/PVRRecordings.h | 3 | ||||
-rw-r--r-- | xbmc/pvr/windows/GUIWindowPVRBase.cpp | 2 | ||||
-rw-r--r-- | xbmc/pvr/windows/GUIWindowPVRRecordings.cpp | 17 | ||||
-rw-r--r-- | xbmc/utils/SaveFileStateJob.cpp | 2 | ||||
-rw-r--r-- | xbmc/video/VideoDatabase.cpp | 17 | ||||
-rw-r--r-- | xbmc/video/VideoDatabase.h | 14 |
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; }; |