value["strPath"] = m_strPath;
value["dateTime"] = (m_dateTime.IsValid()) ? m_dateTime.GetAsRFC1123DateTime() : "";
+ value["lastmodified"] = m_dateTime.IsValid() ? m_dateTime.GetAsDBDateTime() : "";
value["size"] = m_dwSize;
value["DVDLabel"] = m_strDVDLabel;
value["title"] = m_strTitle;
bool CFileItem::IsMusicDb() const
{
- CURL url(m_strPath);
- return url.GetProtocol().Equals("musicdb");
+ return URIUtils::IsMusicDb(m_strPath);
}
bool CFileItem::IsVideoDb() const
{
- CURL url(m_strPath);
- return url.GetProtocol().Equals("videodb");
+ return URIUtils::IsVideoDb(m_strPath);
}
bool CFileItem::IsVirtualDirectoryRoot() const
void CFileItem::FillInMimeType(bool lookup /*= true*/)
{
+ // TODO: adapt this to use CMime::GetMimeType()
if (m_mimetype.empty())
{
if( m_bIsFolder )
return (item->GetProperty("item_start") == GetProperty("item_start"));
return true;
}
+ if (HasVideoInfoTag() && item->HasVideoInfoTag())
+ {
+ if (m_videoInfoTag->m_iDbId != -1 && item->m_videoInfoTag->m_iDbId != -1)
+ return ((m_videoInfoTag->m_iDbId == item->m_videoInfoTag->m_iDbId) &&
+ (m_videoInfoTag->m_type == item->m_videoInfoTag->m_type));
+ }
if (IsMusicDb() && HasMusicInfoTag())
{
CFileItem dbItem(m_musicInfoTag->GetURL(), false);
if (HasPVRRecordingInfoTag())
GetPVRRecordingInfoTag()->CopyClientInfo(GetVideoInfoTag());
SetOverlayImage(ICON_OVERLAY_UNWATCHED, GetVideoInfoTag()->m_playCount > 0);
+ SetInvalid();
}
if (item.HasMusicInfoTag())
+ {
*GetMusicInfoTag() = *item.GetMusicInfoTag();
+ SetInvalid();
+ }
if (item.HasPictureInfoTag())
+ {
*GetPictureInfoTag() = *item.GetPictureInfoTag();
-
+ SetInvalid();
+ }
if (replaceLabels && !item.GetLabel().empty())
SetLabel(item.GetLabel());
if (replaceLabels && !item.GetLabel2().empty())
URIUtils::Split(item1->GetPath(), filePath, file1);
if (URIUtils::ProtocolHasEncodedFilename(CURL(filePath).GetProtocol() ) )
- CURL::Decode(file1);
+ file1 = CURL::Decode(file1);
int j;
while (expr != stackRegExps.end())
CStdString file2, filePath2;
URIUtils::Split(item2->GetPath(), filePath2, file2);
if (URIUtils::ProtocolHasEncodedFilename(CURL(filePath2).GetProtocol() ) )
- CURL::Decode(file2);
+ file2 = CURL::Decode(file2);
if (expr->RegFind(file2, offset) != -1)
{
return thumbFile;
}
+bool CFileItem::SkipLocalArt() const
+{
+ return (m_strPath.empty()
+ || StringUtils::StartsWithNoCase(m_strPath, "newsmartplaylist://")
+ || StringUtils::StartsWithNoCase(m_strPath, "newplaylist://")
+ || m_bIsShareOrDrive
+ || IsInternetStream()
+ || URIUtils::IsUPnP(m_strPath)
+ || (URIUtils::IsFTP(m_strPath) && !g_advancedSettings.m_bFTPThumbs)
+ || IsPlugin()
+ || IsAddonsPath()
+ || IsParentFolder()
+ || IsLiveTV()
+ || IsDVD());
+}
+
CStdString CFileItem::FindLocalArt(const std::string &artFile, bool useFolder) const
{
- // ignore a bunch that are meaningless
- if (m_strPath.empty()
- || StringUtils::StartsWithNoCase(m_strPath, "newsmartplaylist://")
- || StringUtils::StartsWithNoCase(m_strPath, "newplaylist://")
- || m_bIsShareOrDrive
- || IsInternetStream()
- || URIUtils::IsUPnP(m_strPath)
- || (URIUtils::IsFTP(m_strPath) && !g_advancedSettings.m_bFTPThumbs)
- || IsPlugin()
- || IsAddonsPath()
- || IsParentFolder()
- || IsLiveTV()
- || IsDVD())
+ if (SkipLocalArt())
return "";
CStdString thumb;
strMovieName = CStackDirectory::GetStackedTitlePath(strMovieName);
URIUtils::RemoveSlashAtEnd(strMovieName);
- strMovieName = URIUtils::GetFileName(strMovieName);
- CURL::Decode(strMovieName);
- return strMovieName;
+ return CURL::Decode(URIUtils::GetFileName(strMovieName));
}
CStdString CFileItem::GetBaseMoviePath(bool bUseFolderNames) const
CStdString strDir = URIUtils::GetDirectory(strFile);
CFileItemList items;
- CDirectory::GetDirectory(strDir, items, g_advancedSettings.m_videoExtensions, DIR_FLAG_READ_CACHE | DIR_FLAG_NO_FILE_INFO);
+ CDirectory::GetDirectory(strDir, items, g_advancedSettings.m_videoExtensions, DIR_FLAG_READ_CACHE | DIR_FLAG_NO_FILE_INFO | DIR_FLAG_NO_FILE_DIRS);
URIUtils::RemoveExtension(strFile);
strFile += "-trailer";
CStdString strFile3 = URIUtils::AddFileToFolder(strDir, "movie-trailer");
return type;
}
+bool CFileItem::IsResumePointSet() const
+{
+ return (HasVideoInfoTag() && GetVideoInfoTag()->m_resumePoint.IsSet()) ||
+ (HasPVRRecordingInfoTag() && GetPVRRecordingInfoTag()->GetLastPlayedPosition() > 0);
+}
+
+double CFileItem::GetCurrentResumeTime() const
+{
+ if (HasPVRRecordingInfoTag())
+ {
+ // This will retrieve 'fresh' resume information from the PVR server
+ int rc = GetPVRRecordingInfoTag()->GetLastPlayedPosition();
+ if (rc > 0)
+ return rc;
+ // Fall through to default value
+ }
+ if (HasVideoInfoTag() && GetVideoInfoTag()->m_resumePoint.IsSet())
+ {
+ return GetVideoInfoTag()->m_resumePoint.timeInSeconds;
+ }
+ // Resume from start when resume points are invalid or the PVR server returns an error
+ return 0;
+}