Beispiel #1
0
        public object GetFileData(string filePath, string dataItem)
        {
            object functionReturnValue = null;
              //Function to retreive information from the given file.

              bool Directory = false;
              string DirectoryPath = "";
              if (filePath.ToLower().EndsWith("video_ts.ifo") == true)
              {
            Directory = true;
            DirectoryPath = GetDVDFolderPath(filePath);
            filePath = GetDVDMovieFile(filePath);
              }
              if (filePath.ToLower().EndsWith("index.bdmv") == true)
              {
            Directory = true;
            DirectoryPath = GetBRFolderPath(filePath);
            filePath = GetBRMovieFile(filePath);
              }

              string ReturnValue = "";
              long TempInteger = 0;
              string TempString = "";
              MediaInfo MI = new MediaInfo();
              int i = 0;
              if (!File.Exists(filePath))
              {
            return "ErrorEvent : File cannot be found";
            LogEvent("ErrorEvent - Cannot open file for analysis - " + filePath, EventLogLevel.ErrorEvent);
            return functionReturnValue;
              }

              System.IO.FileInfo f = new System.IO.FileInfo(filePath);

              switch (dataItem.ToLower())
              {

            //Guzzi Test'
            case "beschreibung":
              try
              {
            TempString = "Test-Guzzi-Beschreibung";
            ReturnValue = TempString;

              }
              catch (Exception ex)
              {
            Console.WriteLine(ex.Message);
            LogEvent("ErrorEvent : " + ex.Message.ToString(), 3);
            ReturnValue = "";
              }

              break;
            case "filename":
              try
              {
            //ReturnValue = MI.Get_(StreamKind.General, 0, "FileName")
            TempString = f.Name;
            //Console.WriteLine(f.Extension)
            TempString = TempString.Replace(f.Extension, "");
            //Put this bit in here to remove the '1of2' type bits using the system variable regex expression.
            Regex SplitText = new Regex("\\(" + CurrentSettings.RegEx_Check_For_MultiPart_Files + "\\)");
            TempString = SplitText.Replace(TempString, "");
            SplitText = new Regex(CurrentSettings.RegEx_Check_For_MultiPart_Files);
            TempString = SplitText.Replace(TempString, "");
            ReturnValue = TempString;

              }
              catch (Exception ex)
              {
            //Console.WriteLine(ex.Message)
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "";
              }

              break;
            case "runtime":
              try
              {
            if (Directory)
            {
              ReturnValue = "ErrorEvent";
            }
            else
            {
              MI = new MediaInfo();
              MI.Open(filePath);
              //PlayTime value is in miliseconds!
              TempString = MI.Get_(StreamKind.General, 0, "PlayTime");
              MI.Close();

              bool r = int.TryParse(TempString, out TempInteger);
              if (r)
              {
                if (TempInteger != 0)
                {
                  ReturnValue = Convert.ToInt64(TempInteger / 60000).ToString();
                }
                else
                {
                  ReturnValue = "";
                }
              }
              else
              {
                ReturnValue = "ErrorEvent";
              }
            }
              }
              catch (Exception ex)
              {
            //Console.WriteLine(ex.Message)
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "ErrorEvent";
              }
              break;
            case "videoformat":
              try
              {
            MI = new MediaInfo();
            MI.Open(filePath);
            TempString = MI.Get_(StreamKind.Visual, 0, "Codec/String");
            MI.Close();
            if (!string.IsNullOrEmpty(TempString))
            {
              ReturnValue = TempString;
            }
            else
            {
              ReturnValue = "";
            }
              }
              catch (Exception ex)
              {
            //Console.WriteLine(ex.Message)
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "";
              }
              break;
            case "videobitrate":
              //divide by 1000 as returned in bps.
              try
              {
            MI = new MediaInfo();
            MI.Open(filePath);
            TempString = MI.Get_(StreamKind.Visual, 0, "BitRate");
            MI.Close();
            int.TryParse(TempString, out TempInteger);
            if (TempInteger != 0)
            {
              ReturnValue = Convert.ToInt32(TempInteger / 1000).ToString();
            }
            else
            {
              ReturnValue = "";
            }
              }
              catch (Exception ex)
              {
            //Console.WriteLine(ex.Message)
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "";
              }
              break;
            case "audioformat":
              try
              {
            MI = new MediaInfo();
            MI.Open(filePath);
            ReturnValue = MI.Get_(StreamKind.Audio, 0, "Codec/String");
            MI.Close();
              }
              catch (Exception ex)
              {
            //Console.WriteLine(ex.Message)
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "";
              }
              break;
            case "audiostreamcount":
              try
              {
            MI = new MediaInfo();
            MI.Open(filePath);
            ReturnValue = MI.Get_(StreamKind.General, 0, "AudioCount");
            MI.Close();
              }
              catch (Exception ex)
              {
            //Console.WriteLine(ex.Message)
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "";
              }
              break;
            case "audiostreamcodeclist":
              try
              {
            MI = new MediaInfo();
            MI.Open(filePath);
            ReturnValue = MI.Get_(StreamKind.General, 0, "Audio_Codec_List").Replace(" / ", ", ");
            MI.Close();
              }
              catch (Exception ex)
              {
            //Console.WriteLine(ex.Message)
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "";
              }
              break;
            case "audiostreamlanguagelist":
              try
              {
            MI = new MediaInfo();
            MI.Open(filePath);
            //First get the count if possible
            TempString = "";
            int.TryParse(MI.Get_(StreamKind.General, 0, "AudioCount"), out TempInteger);
            if (TempInteger > 0)
            {
              for (i = 0; i <= TempInteger - 1; i++)
              {
                TempString = "";
                //Try to get the 'proper' language for this stream:
                TempString = MI.Get_(StreamKind.Audio, i, "Language/String");
                if (string.IsNullOrEmpty(TempString))
                {
                  //If not, check the IAS value - maybe has a language string there:
                  TempString = MI.Get_(StreamKind.General, 0, "IAS" + (i + 1).ToString());
                }
                if (!string.IsNullOrEmpty(TempString))
                {
                  //Build the list:
                  if (string.IsNullOrEmpty(ReturnValue))
                  {
                    ReturnValue = TempString;
                  }
                  else
                  {
                    ReturnValue += ", " + TempString;
                  }
                }
                if (string.IsNullOrEmpty(ReturnValue))
                {
                  //Still no value, maybe just put in the number of audio streams?
                  if (MI.Get_(StreamKind.General, 0, "AudioCount") != "1")
                  {
                    ReturnValue = MI.Get_(StreamKind.General, 0, "AudioCount").ToString;
                  }
                }
              }
            }
            else
            {
              //Cannot even get the count of streams - return empty:
              ReturnValue = "";
            }
            MI.Close();
              }
              catch (Exception ex)
              {
            Console.WriteLine(ex.Message);
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "";
              }
              break;
            case "audiobitrate":
              //divide
              try
              {
            MI = new MediaInfo();
            MI.Open(filePath);
            TempString = MI.Get_(StreamKind.Audio, 0, "BitRate");
            MI.Close();
            int.TryParse(TempString, out TempInteger);
            if (TempInteger != 0)
            {
              ReturnValue = Convert.ToInt32((TempInteger / 1000)).ToString();
            }
            else
            {
              ReturnValue = "";
            }
              }
              catch (Exception ex)
              {
            //Console.WriteLine(ex.Message)
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "";
              }
              break;
            case "audiochannelcount":
              try
              {
            MI = new MediaInfo();
            MI.Open(filePath);
            TempString = MI.Get_(StreamKind.Audio, 0, "Channel(s)");
            MI.Close();
            int.TryParse(TempString, out TempInteger);
            if (TempInteger > -1)
            {
              ReturnValue = TempInteger.ToString();
            }
            else
            {
              ReturnValue = "";
            }
              }
              catch (Exception ex)
              {
            //Console.WriteLine(ex.Message)
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "";
              }
              break;
            case "textstreamcodeclist":
              try
              {
            MI = new MediaInfo();
            MI.Open(filePath);
            ReturnValue = MI.Get_(StreamKind.General, 0, "Text_Codec_List").Replace(" / ", ", ");
            MI.Close();
              }
              catch (Exception ex)
              {
            //Console.WriteLine(ex.Message)
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "";
              }
              break;
            case "textstreamlanguagelist":
              try
              {
            MI = new MediaInfo();
            MI.Open(filePath);
            int.TryParse(MI.Get_(StreamKind.General, 0, "TextCount"), out TempInteger);
            if (TempInteger != 0)
            {
              for (i = 0; i <= TempInteger - 1; i++)
              {
                TempString = "";
                TempString = MI.Get_(StreamKind.Text, i, "Language/String");
                if (!string.IsNullOrEmpty(TempString))
                {
                  //Build the string
                  if (string.IsNullOrEmpty(ReturnValue))
                  {
                    ReturnValue = TempString;
                  }
                  else
                  {
                    ReturnValue += ", " + TempString;
                  }
                  //Check for a subtitle description:
                  TempString = MI.Get_(StreamKind.Text, i, "Title");
                  if (!string.IsNullOrEmpty(TempString))
                  {
                    //Clean up the title a bit:
                    TempString = TempString.Replace("<", "");
                    TempString = TempString.Replace(">", "");
                    TempString = TempString.Replace("(", "");
                    TempString = TempString.Replace(")", "");
                    ReturnValue += " (" + TempString + ")";
                  }
                }
              }
            }
            MI.Close();
              }
              catch (Exception ex)
              {
            Console.WriteLine(ex.Message);
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "";
              }

              break;
            case "resolution":
              try
              {
            MI = new MediaInfo();
            MI.Open(filePath);
            TempString = MI.Get_(StreamKind.Visual, 0, "Width") + "x" + MI.Get_(StreamKind.Visual, 0, "Height");
            MI.Close();
            if (TempString == "x")
            {
              TempString = "";
            }
            ReturnValue = TempString;
              }
              catch (Exception ex)
              {
            //Console.WriteLine(ex.Message)
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "";
              }
              break;
            case "framerate":
              try
              {
            MI = new MediaInfo();
            MI.Open(filePath);
            TempString = MI.Get_(StreamKind.Visual, 0, "FrameRate");
            MI.Close();
            ReturnValue = TempString;
              }
              catch (Exception ex)
              {
            //Console.WriteLine(ex.Message)
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "";
              }
              break;
            case "filesize":
              //get in MB = divide by 1024 twice
              try
              {
            if (Directory)
            {
              System.IO.DirectoryInfo d = new System.IO.DirectoryInfo(DirectoryPath);
              TempInteger = getDirectorySize(d);
            }
            else
            {
              TempString = Convert.ToString(f.Length);
              TempInteger = Convert.ToInt64(TempString);
            }
            ReturnValue = Convert.ToInt64((TempInteger / 1048576)).ToString();
              }
              catch (Exception ex)
              {
            //Console.WriteLine(ex.Message)
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "";
              }
              break;
            case "date":
              try
              {
            switch (CurrentSettings.Date_Handling)
            {
              //File Created Date
              //Current System Date
              //No Date
              case "File Created Date":
                ReturnValue = f.CreationTime.Date;
                //String.Format("{0:yyyy-MM-dd}", f.CreationTime.Date) '0:yyyy/MM/dd
                break;
              case "File Modified Date":
                ReturnValue = f.LastWriteTime.Date;
                //String.Format("{0:yyyy-MM-dd}", f.LastWriteTime.Date)
                break;
              case "Current System Date":
                ReturnValue = My.Computer.Clock.LocalTime.Date;
                //String.Format("{0:yyyy-MM-dd}", My.Computer.Clock.LocalTime.Date)
                break;
              case "No Date":
                ReturnValue = string.Empty;
                break;
              default:
                ReturnValue = string.Empty;
                break;
            }
              }
              catch (Exception ex)
              {
            //Console.WriteLine(ex.Message)
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "";
              }
              break;
            case "aspectratio":
              //PixelAspectRatio/String;;;N NT;;;Pixel Aspect ratio
              //PixelAspectRatio_Original/String;;;N NT;;;Original (in the raw stream) Pixel Aspect ratio
              // decimal ar -> 'DisplayAspectRatio;;;N YF;;;Display Aspect ratio
              // string, e.g. "16:9" -> ""'DisplayAspectRatio/String;;;Y NT;;;Display Aspect ratio
              //DisplayAspectRatio_Original/String;;;Y NT;;;Original (in the raw stream) Display Aspect ratio

              try
              {
            NumberStyles style = default(NumberStyles);
            style = NumberStyles.AllowDecimalPoint;
            //Or NumberStyles.Float
            MI = new MediaInfo();
            MI.Open(filePath);
            TempString = MI.Get_(StreamKind.Visual, 0, "DisplayAspectRatio");
            // & " (" & MI.Get_(StreamKind.Visual, 0, "DisplayAspectRatio/String") & ")"
            decimal aspectratio = default(decimal);
            if (decimal.TryParse(TempString, style, CultureInfo.InvariantCulture, out aspectratio))
            {
              TempString = decimal.Round(aspectratio, 2).ToString(CultureInfo.InvariantCulture);
            }
            // if (aspectratio < (decimal)(1.4)) movieRow.Aspectratio = "4:3"; //1,33 -> 4:3
            // else if (aspectratio < (decimal)(1.9)) movieRow.Aspectratio = "16:9"; //1,78 -> 16:9 / widescreen //1,85 -> widescreen
            // else if (aspectratio >= (decimal)(1.9)) movieRow.Aspectratio = "cinemascope"; //2,35+ -> cinemascope

            MI.Close();
            ReturnValue = TempString;
              }
              catch (Exception ex)
              {
            //Console.WriteLine(ex.Message)
            LogEvent("ErrorEvent : " + ex.Message.ToString(), EventLogLevel.ErrorEvent);
            ReturnValue = "";
              }
              break;
            default:
              ReturnValue = "Unknown Variable Requested";
              break;
              }
              //Console.WriteLine(DataItem.ToString + " - " + ReturnValue.ToString)
              //        MI.Close()
              if (MI != null)
              {
            MI = null;
              }

              return ReturnValue;
              return functionReturnValue;
        }