if( options.fullscreen && g_renderManager.IsStarted()
&& g_windowManager.GetActiveWindow() != WINDOW_FULLSCREEN_VIDEO )
SwitchToFullScreen();
-
- if (!item.IsDVDImage() && !item.IsDVDFile())
- {
- CVideoInfoTag *details = m_itemCurrentFile->GetVideoInfoTag();
- // Save information about the stream if we currently have no data
- if (!details->HasStreamDetails() ||
- details->m_streamDetails.GetVideoDuration() <= 0)
- {
- if (m_pPlayer->GetStreamDetails(details->m_streamDetails) && details->HasStreamDetails())
- {
- CVideoDatabase dbs;
- dbs.Open();
- dbs.SetStreamDetailsForFileId(details->m_streamDetails, details->m_iFileId);
- dbs.Close();
- CUtil::DeleteVideoDatabaseDirectoryCache();
- }
- }
- }
}
#endif
else
if (m_progressTrackingItem->IsVideo())
{
- if ((m_progressTrackingItem->IsDVDImage() || m_progressTrackingItem->IsDVDFile()) && m_pPlayer->GetTotalTime() > 15*60*1000)
+ // Special case for DVDs: Only extract streamdetails if title length > 15m. Should yield more correct info
+ if (!(m_progressTrackingItem->IsDVDImage() || m_progressTrackingItem->IsDVDFile()) || m_pPlayer->GetTotalTime() > 15*60*1000)
{
- m_progressTrackingItem->GetVideoInfoTag()->m_streamDetails.Reset();
- m_pPlayer->GetStreamDetails(m_progressTrackingItem->GetVideoInfoTag()->m_streamDetails);
+ CStreamDetails details;
+ // Update with stream details from player, if any
+ if (m_pPlayer->GetStreamDetails(details))
+ m_progressTrackingItem->GetVideoInfoTag()->m_streamDetails = details;
}
+
// Update bookmark for save
m_progressTrackingVideoResumeBookmark.player = CPlayerCoreFactory::GetPlayerName(m_eCurrentPlayer);
m_progressTrackingVideoResumeBookmark.playerState = m_pPlayer->GetPlayerState();
videodatabase.SetVideoSettings(progressTrackingFile, g_settings.m_currentVideoSettings);
}
- if ((m_item.IsDVDImage() ||
- m_item.IsDVDFile() ) &&
- m_item.HasVideoInfoTag() &&
- m_item.GetVideoInfoTag()->HasStreamDetails())
+ if (m_item.HasVideoInfoTag() && m_item.GetVideoInfoTag()->HasStreamDetails())
{
- videodatabase.SetStreamDetailsForFile(m_item.GetVideoInfoTag()->m_streamDetails,progressTrackingFile);
- updateListing = true;
+ CFileItem dbItem(m_item);
+ videodatabase.GetStreamDetails(dbItem); // Fetch stream details from the db (if any)
+
+ // Check whether the item's db streamdetails need updating
+ if (!dbItem.GetVideoInfoTag()->HasStreamDetails() || dbItem.GetVideoInfoTag()->m_streamDetails != m_item.GetVideoInfoTag()->m_streamDetails)
+ {
+ videodatabase.SetStreamDetailsForFile(m_item.GetVideoInfoTag()->m_streamDetails, progressTrackingFile);
+ updateListing = true;
+ }
}
+
// in order to properly update the the list, we need to update the stack item which is held in g_application.m_stackFileItemToUpdate
if (m_item.HasProperty("stackFileItemToUpdate"))
{