aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xbmc/pvr/filesystem/PVRGUIDirectory.cpp48
-rw-r--r--xbmc/pvr/filesystem/PVRGUIDirectory.h8
-rw-r--r--xbmc/video/VideoUtils.cpp18
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();
}
}