/// <summary>
/// Examines the current playing movie and fills in all the #tags for the skin.
/// For movies it will look in the video database for any IMDB info
/// For record TV programs it will look in the TVDatabase for recording info
/// </summary>
/// <param name="fileName">Filename of the current playing movie</param>
/// <remarks>
/// Function will fill in the following tags for TV programs
/// #Play.Current.Title, #Play.Current.Plot, #Play.Current.PlotOutline #Play.Current.File, #Play.Current.Thumb, #Play.Current.Year, #Play.Current.Channel,
///
/// Function will fill in the following tags for movies
/// #Play.Current.Title, #Play.Current.Plot, #Play.Current.PlotOutline #Play.Current.File, #Play.Current.Thumb, #Play.Current.Year
/// #Play.Current.Director, #cast, #dvdlabel, #imdbnumber, #Play.Current.Plot, #Play.Current.PlotOutline, #rating, #tagline, #votes, #credits
/// </remarks>
private void SetCurrentFile(string fileName)
{
GUIPropertyManager.RemovePlayerProperties();
GUIPropertyManager.SetProperty("#Play.Current.Title", Util.Utils.GetFilename(fileName));
GUIPropertyManager.SetProperty("#Play.Current.File", Util.Utils.GetFileNameWithExtension(fileName));
GUIPropertyManager.SetProperty("#Play.Current.Thumb", string.Empty);
GUIPropertyManager.SetProperty("#Play.Current.VideoCodec.Texture", string.Empty);
GUIPropertyManager.SetProperty("#Play.Current.VideoResolution", string.Empty);
GUIPropertyManager.SetProperty("#Play.Current.AudioCodec.Texture", string.Empty);
GUIPropertyManager.SetProperty("#Play.Current.AudioChannels", string.Empty);
GUIPropertyManager.SetProperty("#Play.Current.HasSubtitles", string.Empty);
GUIPropertyManager.SetProperty("#Play.Current.AspectRatio", string.Empty);
if ((g_Player.IsVideo || g_Player.IsDVD) && !g_Player.IsTV && g_Player.MediaInfo != null)
{
GUIPropertyManager.SetProperty("#Play.Current.VideoCodec.Texture",
Util.Utils.MakeFileName(g_Player.MediaInfo.VideoCodec));
GUIPropertyManager.SetProperty("#Play.Current.VideoResolution", g_Player.MediaInfo.VideoResolution);
GUIPropertyManager.SetProperty("#Play.Current.AudioCodec.Texture",
Util.Utils.MakeFileName(g_Player.MediaInfo.AudioCodec));
GUIPropertyManager.SetProperty("#Play.Current.AudioChannels", g_Player.MediaInfo.AudioChannelsFriendly);
GUIPropertyManager.SetProperty("#Play.Current.HasSubtitles", g_Player.MediaInfo.HasSubtitles.ToString());
GUIPropertyManager.SetProperty("#Play.Current.AspectRatio", g_Player.MediaInfo.AspectRatio);
}
if (g_Player.IsDVD)
{
// for dvd's the file is in the form c:\media\movies\the matrix\video_ts\video_ts.ifo
// first strip the \video_ts\video_ts.ifo
string lowPath = fileName.ToLower();
int index = lowPath.IndexOf("video_ts/");
if (index < 0)
{
index = lowPath.IndexOf(@"video_ts\");
}
if (index >= 0)
{
fileName = fileName.Substring(0, index);
fileName = Util.Utils.RemoveTrailingSlash(fileName);
// get the name by stripping the first part : c:\media\movies
string strName = fileName;
int pos = fileName.LastIndexOfAny(new char[] {'\\', '/'});
if (pos >= 0 && pos + 1 < fileName.Length - 1)
{
strName = fileName.Substring(pos + 1);
}
// get the name when play DVD directly from Drive letter
List<GUIListItem> rootDrives = VirtualDirectories.Instance.Movies.GetRootExt();
for (int i = rootDrives.Count - 1; i >= 0; i--)
{
GUIListItem itemDVDroot = (GUIListItem)rootDrives[i];
string itemDVD = Path.GetPathRoot(itemDVDroot.Path);
itemDVD = Util.Utils.RemoveTrailingSlash(itemDVD);
if (itemDVD == strName && !String.IsNullOrEmpty(itemDVDroot.DVDLabel)) //cd or dvd drive
{
strName = itemDVDroot.DVDLabel;
}
}
GUIPropertyManager.SetProperty("#Play.Current.Title", strName);
GUIPropertyManager.SetProperty("#Play.Current.File", strName);
// construct full filename as imdb info is stored...
fileName += @"\VIDEO_TS\VIDEO_TS.IFO";
}
}
bool isLive = g_Player.IsTimeShifting;
string extension = Util.Utils.GetFileExtension(fileName).ToLower();
if (extension.Equals(".sbe") || extension.Equals(".dvr-ms") ||
(extension.Equals(".ts") && !isLive || g_Player.IsTVRecording))
{
// this is a recorded movie.
// check the TVDatabase for the description,genre,title,...
if (g_Player.currentTitle != "")
{
GUIPropertyManager.SetProperty("#Play.Current.Title", g_Player.currentTitle);
GUIPropertyManager.SetProperty("#Play.Current.Plot",
g_Player.currentTitle + "\n" + g_Player.currentDescription);
GUIPropertyManager.SetProperty("#Play.Current.PlotOutline", g_Player.currentDescription);
}
}
/*if (fileName.Substring(0, 4) == "rtsp")
{
GUIPropertyManager.SetProperty("#Play.Current.Title", g_Player.currentTitle);
GUIPropertyManager.SetProperty("#Play.Current.Plot", g_Player.currentTitle + "\n" + g_Player.currentDescription);
GUIPropertyManager.SetProperty("#Play.Current.PlotOutline", g_Player.currentDescription);
}*/
IMDBMovie movieDetails = new IMDBMovie();
bool bMovieInfoFound = false;
ISelectBDHandler selectBdHandler;
if (GlobalServiceProvider.IsRegistered<ISelectBDHandler>())
{
selectBdHandler = GlobalServiceProvider.Get<ISelectBDHandler>();
}
else
{
selectBdHandler = new SelectBDHandler();
GlobalServiceProvider.Add<ISelectBDHandler>(selectBdHandler);
}
bool playingRemoteUrl = Util.Utils.IsRemoteUrl(fileName);
if (!g_Player.IsTVRecording && !playingRemoteUrl)
{
// Check if we play image file to search db with the proper filename
if (Util.Utils.IsISOImage(fileName))
{
fileName = DaemonTools.MountedIsoFile;
}
if (VideoDatabase.HasMovieInfo(fileName))
{
VideoDatabase.GetMovieInfo(fileName, ref movieDetails);
bMovieInfoFound = true;
}
else if (File.Exists(Path.ChangeExtension(fileName, ".xml")))
{
MatroskaTagInfo info = MatroskaTagHandler.Fetch(Path.ChangeExtension(fileName, ".xml"));
movieDetails.Title = info.title;
movieDetails.Plot = info.description;
movieDetails.Genre = info.genre;
GUIPropertyManager.SetProperty("#Play.Current.Channel", info.channelName);
string logo = Util.Utils.GetCoverArt(Thumbs.TVChannel, info.channelName);
if (!Util.Utils.FileExistsInCache(logo))
{
logo = "defaultVideoBig.png";
}
GUIPropertyManager.SetProperty("#Play.Current.Thumb", logo);
_thumbLogo = logo;
bMovieInfoFound = true;
}
else // Nfo support
{
string path = string.Empty;
int pathIndex = 0;
if (fileName.ToUpperInvariant().Contains(@"\BDMV"))
{
pathIndex = fileName.ToUpperInvariant().LastIndexOf(@"\BDMV");
path = fileName.Remove(pathIndex);
}
else if (fileName.ToUpperInvariant().Contains(@"\VIDEO_TS\"))
{
pathIndex = fileName.ToUpperInvariant().LastIndexOf(@"\VIDEO_TS\");
path = fileName.Remove(pathIndex);
}
else
{
path = Path.GetDirectoryName(fileName);
}
IMDBMovie.FetchMovieNfo(path, fileName, ref movieDetails);
if (!movieDetails.IsEmpty)
{
bMovieInfoFound = true;
}
}
if (bMovieInfoFound)
{
movieDetails.SetPlayProperties(true);
}
else
{
GUIListItem item = new GUIListItem();
item.IsFolder = false;
item.Path = fileName;
Util.Utils.SetThumbnails(ref item);
GUIPropertyManager.SetProperty("#Play.Current.Thumb", item.ThumbnailImage);
// Image file check to set title for OSD (non db)
if (VirtualDirectory.IsImageFile(Path.GetExtension(fileName)))
{
string title = Util.Utils.GetFilename(fileName, true);
GUIPropertyManager.SetProperty("#Play.Current.Title", title);
}
else if (fileName.ToLower().Contains("index.bdmv")) // BD folder title check
{
string title = selectBdHandler.GetBDFolderName(fileName);
// get the name when play BD directly from Drive letter
if (String.IsNullOrEmpty(title))
{
List<GUIListItem> rootDrives = VirtualDirectories.Instance.Movies.GetRootExt();
title = Path.GetPathRoot(fileName);
title = Util.Utils.RemoveTrailingSlash(title);
for (int i = rootDrives.Count - 1; i >= 0; i--)
{
GUIListItem itemBDroot = (GUIListItem)rootDrives[i];
string itemBD = Path.GetPathRoot(itemBDroot.Path);
itemBD = Util.Utils.RemoveTrailingSlash(itemBD);
if (itemBD == title && !String.IsNullOrEmpty(itemBDroot.DVDLabel)) //cd or dvd drive
{
title = itemBDroot.DVDLabel;
}
}
}
GUIPropertyManager.SetProperty("#Play.Current.Title", title);
}
else if (fileName.ToLower().Contains(".mpls")) // BD folder title check (playlist)
{
// Check if index.bdmv is in the VDB
int index = fileName.ToLower().LastIndexOf(@"\playlist");
string name = fileName.Remove(index);
name = name + @"\index.bdmv";
if (VideoDatabase.HasMovieInfo(name))
{
VideoDatabase.GetMovieInfo(name, ref movieDetails);
movieDetails.SetPlayProperties();
}
else
{
string title = selectBdHandler.GetBDFolderName(fileName);
// get the name when play BD directly from Drive letter
if (String.IsNullOrEmpty(title))
{
List<GUIListItem> rootDrives = VirtualDirectories.Instance.Movies.GetRootExt();
title = Path.GetPathRoot(fileName);
title = Util.Utils.RemoveTrailingSlash(title);
for (int i = rootDrives.Count - 1; i >= 0; i--)
{
GUIListItem itemBDroot = (GUIListItem)rootDrives[i];
string itemBD = Path.GetPathRoot(itemBDroot.Path);
itemBD = Util.Utils.RemoveTrailingSlash(itemBD);
if (itemBD == title && !String.IsNullOrEmpty(itemBDroot.DVDLabel)) //cd or dvd drive
{
title = itemBDroot.DVDLabel;
}
}
}
GUIPropertyManager.SetProperty("#Play.Current.Title", title);
}
}
}
}
else if (g_Player.IsTV && g_Player.IsTimeShifting)
{
GUIPropertyManager.SetProperty("#Play.Current.Title", GUIPropertyManager.GetProperty("#TV.View.channel"));
GUIPropertyManager.SetProperty("#Play.Current.Genre", GUIPropertyManager.GetProperty("#TV.View.title"));
}
else
{
GUIListItem item = new GUIListItem();
item.IsFolder = false;
item.Path = fileName;
Util.Utils.SetThumbnails(ref item);
GUIPropertyManager.SetProperty("#Play.Current.Thumb", item.ThumbnailImage);
}
_thumbLogo = GUIPropertyManager.GetProperty("#Play.Current.Thumb");
}