SetPlayProperties() public method

public SetPlayProperties ( ) : void
return void
コード例 #1
0
    /// <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");
    }
コード例 #2
0
    /// <summary>
    /// Examines the current playing movie and fills in all the properties 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 properties 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 properties 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)
    {
      // Clear all player properties and the audio / video properties
      GUIPropertyManager.RemovePlayerProperties();
      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);

      // Preset title and file
      GUIPropertyManager.SetProperty("#Play.Current.Title", Util.Utils.GetFilename(fileName));
      GUIPropertyManager.SetProperty("#Play.Current.File", Util.Utils.GetFileNameWithExtension(fileName));

      // Set audio / video properties
      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);
      }

      // Set the properties and thumb path for movies played with the tv plugin
      if (g_Player.IsTVRecording)
      {
        // Set the thumb path to the tv recorded thumbs cache or to the channel logo
        string thumb = string.Format("{0}\\{1}{2}", Thumbs.TVRecorded, Path.ChangeExtension(Util.Utils.SplitFilename(g_Player.currentFileName), null), Util.Utils.GetThumbExtension());
        if (!Util.Utils.FileExistsInCache(thumb))
          thumb = Util.Utils.GetCoverArt(Thumbs.TVChannel, GUIPropertyManager.GetProperty("#TV.RecordedTV.Channel"));
        GUIPropertyManager.SetProperty("#Play.Current.Thumb", thumb);

        // Set the properties to the #TV.Recorded properties
        GUIPropertyManager.SetProperty("#Play.Current.Title", GUIPropertyManager.GetProperty("#TV.RecordedTV.Title"));
        GUIPropertyManager.SetProperty("#Play.Current.Plot", GUIPropertyManager.GetProperty("#TV.RecordedTV.Description"));
        GUIPropertyManager.SetProperty("#Play.Current.Genre", GUIPropertyManager.GetProperty("#TV.RecordedTV.Genre"));
        GUIPropertyManager.SetProperty("#Play.Current.Channel", GUIPropertyManager.GetProperty("#TV.RecordedTV.Channel"));
        return;
      }

      // Set title and file for DVD
      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.ToLowerInvariant();
        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";
        }
      }

      // Get the BD handler
      ISelectBDHandler selectBdHandler;
      if (GlobalServiceProvider.IsRegistered<ISelectBDHandler>())
      {
        selectBdHandler = GlobalServiceProvider.Get<ISelectBDHandler>();
      }
      else
      {
        selectBdHandler = new SelectBDHandler();
        GlobalServiceProvider.Add<ISelectBDHandler>(selectBdHandler);
      }

      // Adapt filename for image files
      if (Util.Utils.IsISOImage(fileName))
      {
        fileName = DaemonTools.MountedIsoFile;
      }


      // -------------------------------------------------------
      // Try to set the properties and the thumb path in 5 steps

      bool movieInfoFound = false;
      bool thumbInfoFound = false;

      // Step 1 ------------------------------- -------------------------
      // Try to set the properties and thumb path from the video database
      IMDBMovie movie = new IMDBMovie();
      string name = fileName;
      if (fileName.ToLowerInvariant().Contains(".mpls")) // BD folder title check (playlist)
      {
        int index = fileName.ToLowerInvariant().LastIndexOf(@"\playlist");
        name = fileName.Remove(index) + @"\index.bdmv";
      }
      if (VideoDatabase.HasMovieInfo(name))
      {
        // Set the properties (incuding cover thumb) from the movie info
        VideoDatabase.GetMovieInfo(name, ref movie);
        if (movie.ThumbURL.ToLowerInvariant().StartsWith("file://"))
          movie.ThumbURL = movie.ThumbURL.Substring(7);
        movie.SetPlayProperties(true);
        movieInfoFound = true;
        if (!string.IsNullOrEmpty(movie.ThumbURL))
        {
          thumbInfoFound = true;
          return;
        }
      }

      // Step 2 --------------------------------------------------------
      // Try to set the properties and the thumb path from the .nfo file
      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 if (!String.IsNullOrEmpty(fileName))
      {
        path = Path.GetDirectoryName(fileName);
      }
          
      IMDBMovie.FetchMovieNfo(path, fileName, ref movie);
      if (!movie.IsEmpty)
      {
        // Set the properties (incuding cover thumb) from the .nfo file
        movie.SetPlayProperties(true);
        movieInfoFound = true;
        if (!string.IsNullOrEmpty(movie.ThumbURL))
        {
          thumbInfoFound = true;
          return;
        }
      }

      // Step 3 -------------------------------------
      // Try to set the properties from the .xml file
      if (File.Exists(Path.ChangeExtension(fileName, ".xml")))
      {
        MatroskaTagInfo info = MatroskaTagHandler.Fetch(Path.ChangeExtension(fileName, ".xml"));
        if (info != null)
        {
          // Set properties from the .xml file
          movieInfoFound = true;
          movie.Title = info.Title;
          movie.Plot = info.Description;
          movie.Genre = info.Genre;
          if (thumbInfoFound)
          {
            // take previously found thumb
            movie.ThumbURL = GUIPropertyManager.GetProperty("#Play.Current.Thumb");
          }
          else
          {
            // take channel logo (better than nothing, but do not set thumbInfoFound)
            movie.ThumbURL = Util.Utils.GetCoverArt(Thumbs.TVChannel, info.ChannelName);
          }
          movie.SetPlayProperties(true);
          GUIPropertyManager.SetProperty("#Play.Current.Channel", info.ChannelName);
        }
      }

      // Step 4 ------------------------------------------------------------
      // If nothing else helps, try to set the thumb path from the file name
      if (!thumbInfoFound)
      {
        GUIListItem item = new GUIListItem();
        item.IsFolder = false;
        item.Path = fileName;
        Util.Utils.SetThumbnails(ref item);
        if (!string.IsNullOrEmpty(item.ThumbnailImage))
          GUIPropertyManager.SetProperty("#Play.Current.Thumb", item.ThumbnailImage);
      }

      // Step 5 --------------------------------
      // All is done if the movie info was found
      if (movieInfoFound)
        return;

      // Fallback ----------------------------------------------
      // If no movie info could be found, set at least the title
      if (!movieInfoFound && g_Player.IsTV && g_Player.IsTimeShifting)
      {
        // Set the title for live TV
        GUIPropertyManager.SetProperty("#Play.Current.Title", GUIPropertyManager.GetProperty("#TV.View.title"));
        return;
      }

      if (!movieInfoFound && VirtualDirectory.IsImageFile(Path.GetExtension(fileName)))
      {
        // Set the title for images
        string title = Util.Utils.GetFilename(fileName, true);
        GUIPropertyManager.SetProperty("#Play.Current.Title", title);
        return;
      }

      if (fileName.ToLowerInvariant().Contains("index.bdmv"))
      {
        // Set the title for BDs 
        string title = selectBdHandler.GetDiscTitle(fileName);
        if (String.IsNullOrEmpty(title))
        {
          // get the name when play BD directly from Drive letter
          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))
            {
              title = itemBDroot.DVDLabel;
            }
          }
        }
        GUIPropertyManager.SetProperty("#Play.Current.Title", title);
      }
      else if (fileName.ToLowerInvariant().Contains(".mpls"))
      {
        // Set the title for BD playlist
        string title = selectBdHandler.GetDiscTitle(fileName);
        if (String.IsNullOrEmpty(title))
        {
          // get the name when play BD directly from Drive letter
          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))
            {
              title = itemBDroot.DVDLabel;
            }
          }
        }
        GUIPropertyManager.SetProperty("#Play.Current.Title", title);
      }
    }
コード例 #3
0
    /// <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", Path.GetFileName(fileName));
      GUIPropertyManager.SetProperty("#Play.Current.Thumb", "");
      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);
          }
          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 = Path.GetExtension(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;

      if (!g_Player.IsTVRecording)
      {
        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;
        }
        if (bMovieInfoFound)
        {
          movieDetails.SetPlayProperties();
        }
        else
        {
          GUIListItem item = new GUIListItem();
          item.IsFolder = false;
          item.Path = fileName;
          Util.Utils.SetThumbnails(ref item);
          GUIPropertyManager.SetProperty("#Play.Current.Thumb", item.ThumbnailImage);
        }
      }
      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");
    }