Skip to content

Commit 62985e7

Browse files
committed
[PVR][video] Fix loading of recording folder resume information.
1 parent a078fa5 commit 62985e7

File tree

3 files changed

+66
-8
lines changed

3 files changed

+66
-8
lines changed

xbmc/pvr/filesystem/PVRGUIDirectory.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,54 @@ void GetGetRecordingsSubDirectories(const CPVRRecordingsPath& recParentPath,
429429

430430
} // unnamed namespace
431431

432+
bool CPVRGUIDirectory::GetRecordingsDirectoryInfo(CFileItem& item)
433+
{
434+
CFileItemList results;
435+
const CPVRGUIDirectory dir{item.GetPath()};
436+
if (dir.GetRecordingsDirectory(results))
437+
{
438+
item.SetLabelPreformatted(true);
439+
item.SetProperty("totalepisodes", 0);
440+
item.SetProperty("watchedepisodes", 0);
441+
item.SetProperty("unwatchedepisodes", 0);
442+
item.SetProperty("inprogressepisodes", 0);
443+
444+
int64_t sizeInBytes{0};
445+
446+
for (const auto& result : results.GetList())
447+
{
448+
const auto recording{result->GetPVRRecordingInfoTag()};
449+
if (!recording)
450+
continue;
451+
452+
if (item.m_dateTime.IsValid() || (item.m_dateTime < recording->RecordingTimeAsLocalTime()))
453+
item.m_dateTime = recording->RecordingTimeAsLocalTime();
454+
455+
item.IncrementProperty("totalepisodes", 1);
456+
457+
if (recording->GetPlayCount() == 0)
458+
item.IncrementProperty("unwatchedepisodes", 1);
459+
else
460+
item.IncrementProperty("watchedepisodes", 1);
461+
462+
if (recording->GetResumePoint().IsPartWay())
463+
item.IncrementProperty("inprogressepisodes", 1);
464+
465+
sizeInBytes += recording->GetSizeInBytes();
466+
}
467+
468+
item.SetProperty("recordingsize", StringUtils::SizeToString(sizeInBytes));
469+
470+
if (item.GetProperty("unwatchedepisodes").asInteger() > 0)
471+
item.SetOverlayImage(CGUIListItem::ICON_OVERLAY_UNWATCHED);
472+
else
473+
item.SetOverlayImage(CGUIListItem::ICON_OVERLAY_WATCHED);
474+
475+
return true;
476+
}
477+
return false;
478+
}
479+
432480
bool CPVRGUIDirectory::GetRecordingsDirectory(CFileItemList& results) const
433481
{
434482
results.SetContent("recordings");

xbmc/pvr/filesystem/PVRGUIDirectory.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include <string>
1414

15+
class CFileItem;
1516
class CFileItemList;
1617

1718
namespace PVR
@@ -103,6 +104,13 @@ class CPVRGUIDirectory
103104
*/
104105
bool GetProvidersDirectory(CFileItemList& results) const;
105106

107+
/*!
108+
* @brief Get info for a recording folder.
109+
* @param item The folder.
110+
* @return True on success, false otherwise..
111+
*/
112+
static bool GetRecordingsDirectoryInfo(CFileItem& item);
113+
106114
private:
107115
bool GetTimersDirectory(CFileItemList& results) const;
108116
bool GetRecordingsDirectory(CFileItemList& results) const;

xbmc/video/VideoUtils.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "filesystem/Directory.h"
1616
#include "filesystem/VideoDatabaseDirectory/QueryParams.h"
1717
#include "playlists/PlayListFileItemClassify.h"
18+
#include "pvr/filesystem/PVRGUIDirectory.h"
1819
#include "settings/SettingUtils.h"
1920
#include "settings/Settings.h"
2021
#include "settings/SettingsComponent.h"
@@ -41,15 +42,17 @@ KODI::VIDEO::UTILS::ResumeInformation GetFolderItemResumeInformation(const CFile
4142
return {};
4243

4344
CFileItem folderItem(item);
44-
if ((!folderItem.HasProperty("inprogressepisodes") || // season/show
45-
(folderItem.GetProperty("inprogressepisodes").asInteger() == 0)) &&
46-
(!folderItem.HasProperty("inprogress") || // movie set
47-
(folderItem.GetProperty("inprogress").asInteger() == 0)))
45+
if (!folderItem.HasProperty("inprogressepisodes") && // season/show/recordings
46+
!folderItem.HasProperty("inprogress")) // movie set
4847
{
49-
CVideoDatabase db;
50-
if (db.Open())
48+
if (URIUtils::IsPVRRecordingFileOrFolder(folderItem.GetPath()))
5149
{
52-
if (!folderItem.HasProperty("inprogressepisodes") && !folderItem.HasProperty("inprogress"))
50+
PVR::CPVRGUIDirectory::GetRecordingsDirectoryInfo(folderItem);
51+
}
52+
else
53+
{
54+
CVideoDatabase db;
55+
if (db.Open())
5356
{
5457
XFILE::VIDEODATABASEDIRECTORY::CQueryParams params;
5558
XFILE::VIDEODATABASEDIRECTORY::CDirectoryNode::GetDatabaseInfo(item.GetPath(), params);
@@ -79,7 +82,6 @@ KODI::VIDEO::UTILS::ResumeInformation GetFolderItemResumeInformation(const CFile
7982
db.GetSetInfo(static_cast<int>(params.GetSetId()), details, &folderItem);
8083
}
8184
}
82-
db.Close();
8385
}
8486
}
8587

0 commit comments

Comments
 (0)