diff options
-rw-r--r-- | xbmc/pvr/filesystem/PVRGUIDirectory.cpp | 48 | ||||
-rw-r--r-- | xbmc/pvr/filesystem/PVRGUIDirectory.h | 8 | ||||
-rw-r--r-- | xbmc/video/VideoUtils.cpp | 18 |
3 files changed, 66 insertions, 8 deletions
diff --git a/xbmc/pvr/filesystem/PVRGUIDirectory.cpp b/xbmc/pvr/filesystem/PVRGUIDirectory.cpp index d53e8279a9..1fadc5d6d2 100644 --- a/xbmc/pvr/filesystem/PVRGUIDirectory.cpp +++ b/xbmc/pvr/filesystem/PVRGUIDirectory.cpp @@ -429,6 +429,54 @@ void GetGetRecordingsSubDirectories(const CPVRRecordingsPath& recParentPath, } // unnamed namespace +bool CPVRGUIDirectory::GetRecordingsDirectoryInfo(CFileItem& item) +{ + CFileItemList results; + const CPVRGUIDirectory dir{item.GetPath()}; + if (dir.GetRecordingsDirectory(results)) + { + item.SetLabelPreformatted(true); + item.SetProperty("totalepisodes", 0); + item.SetProperty("watchedepisodes", 0); + item.SetProperty("unwatchedepisodes", 0); + item.SetProperty("inprogressepisodes", 0); + + int64_t sizeInBytes{0}; + + for (const auto& result : results.GetList()) + { + const auto recording{result->GetPVRRecordingInfoTag()}; + if (!recording) + continue; + + if (item.m_dateTime.IsValid() || (item.m_dateTime < recording->RecordingTimeAsLocalTime())) + item.m_dateTime = recording->RecordingTimeAsLocalTime(); + + item.IncrementProperty("totalepisodes", 1); + + if (recording->GetPlayCount() == 0) + item.IncrementProperty("unwatchedepisodes", 1); + else + item.IncrementProperty("watchedepisodes", 1); + + if (recording->GetResumePoint().IsPartWay()) + item.IncrementProperty("inprogressepisodes", 1); + + sizeInBytes += recording->GetSizeInBytes(); + } + + item.SetProperty("recordingsize", StringUtils::SizeToString(sizeInBytes)); + + if (item.GetProperty("unwatchedepisodes").asInteger() > 0) + item.SetOverlayImage(CGUIListItem::ICON_OVERLAY_UNWATCHED); + else + item.SetOverlayImage(CGUIListItem::ICON_OVERLAY_WATCHED); + + return true; + } + return false; +} + bool CPVRGUIDirectory::GetRecordingsDirectory(CFileItemList& results) const { results.SetContent("recordings"); diff --git a/xbmc/pvr/filesystem/PVRGUIDirectory.h b/xbmc/pvr/filesystem/PVRGUIDirectory.h index 132b0a227d..925d97d0b3 100644 --- a/xbmc/pvr/filesystem/PVRGUIDirectory.h +++ b/xbmc/pvr/filesystem/PVRGUIDirectory.h @@ -12,6 +12,7 @@ #include <string> +class CFileItem; class CFileItemList; namespace PVR @@ -103,6 +104,13 @@ public: */ bool GetProvidersDirectory(CFileItemList& results) const; + /*! + * @brief Get info for a recording folder. + * @param item The folder. + * @return True on success, false otherwise.. + */ + static bool GetRecordingsDirectoryInfo(CFileItem& item); + private: bool GetTimersDirectory(CFileItemList& results) const; bool GetRecordingsDirectory(CFileItemList& results) const; diff --git a/xbmc/video/VideoUtils.cpp b/xbmc/video/VideoUtils.cpp index eb6ab9674d..16f6c0cd38 100644 --- a/xbmc/video/VideoUtils.cpp +++ b/xbmc/video/VideoUtils.cpp @@ -15,6 +15,7 @@ #include "filesystem/Directory.h" #include "filesystem/VideoDatabaseDirectory/QueryParams.h" #include "playlists/PlayListFileItemClassify.h" +#include "pvr/filesystem/PVRGUIDirectory.h" #include "settings/SettingUtils.h" #include "settings/Settings.h" #include "settings/SettingsComponent.h" @@ -41,15 +42,17 @@ KODI::VIDEO::UTILS::ResumeInformation GetFolderItemResumeInformation(const CFile return {}; CFileItem folderItem(item); - if ((!folderItem.HasProperty("inprogressepisodes") || // season/show - (folderItem.GetProperty("inprogressepisodes").asInteger() == 0)) && - (!folderItem.HasProperty("inprogress") || // movie set - (folderItem.GetProperty("inprogress").asInteger() == 0))) + if (!folderItem.HasProperty("inprogressepisodes") && // season/show/recordings + !folderItem.HasProperty("inprogress")) // movie set { - CVideoDatabase db; - if (db.Open()) + if (URIUtils::IsPVRRecordingFileOrFolder(folderItem.GetPath())) { - if (!folderItem.HasProperty("inprogressepisodes") && !folderItem.HasProperty("inprogress")) + PVR::CPVRGUIDirectory::GetRecordingsDirectoryInfo(folderItem); + } + else + { + CVideoDatabase db; + if (db.Open()) { XFILE::VIDEODATABASEDIRECTORY::CQueryParams params; XFILE::VIDEODATABASEDIRECTORY::CDirectoryNode::GetDatabaseInfo(item.GetPath(), params); @@ -79,7 +82,6 @@ KODI::VIDEO::UTILS::ResumeInformation GetFolderItemResumeInformation(const CFile db.GetSetInfo(static_cast<int>(params.GetSetId()), details, &folderItem); } } - db.Close(); } } |