Beispiel #1
0
 public string GetTotalDurationString()
 {
     return(Adapter.GetDurationString(GetTotalDuration()));
 }
Beispiel #2
0
        private void ReadDirectory()
        {
            // if a folder then read all media files
            // append all the durations and save in Duration
            if (Directory.Exists(Location))
            {
                // get largest file
                FileCollection = GetFilesToProcess(Location);
                List <FileInfo> listFileInfo = new List <FileInfo>();
                foreach (string fp in FileCollection)
                {
                    listFileInfo.Add(new FileInfo(fp));
                }

                // Subtitles, Format: DVD Video using VTS_01_0.IFO
                string[] ifo = Directory.GetFiles(Location, "VTS_01_0.IFO", SearchOption.AllDirectories);
                if (ifo.Length == 1) // CHECK IF A DVD
                {
                    this.Options.MediaTypeChoice = MediaType.MediaDisc;
                    MediaInfoLib.MediaInfo mi = new MediaInfoLib.MediaInfo();
                    this.DiscType = TDMakerLib.SourceType.DVD;

                    mi.Open(ifo[0]);

                    // most prolly this will be: DVD Video
                    this.Overall.Format = mi.Get(StreamKind.General, 0, "Format");

                    int subCount = 0;
                    int.TryParse(mi.Get(StreamKind.Text, 0, "StreamCount"), out subCount);

                    if (subCount > 0)
                    {
                        List <string> langs = new List <string>();
                        for (int i = 0; i < subCount; i++)
                        {
                            string lang = mi.Get(StreamKind.Text, i, "Language/String");
                            if (!string.IsNullOrEmpty(lang))
                            {
                                // System.Windows.Forms.MessageBox.Show(lang);
                                if (!langs.Contains(lang))
                                {
                                    langs.Add(lang);
                                }
                            }
                        }
                        StringBuilder sbLangs = new StringBuilder();
                        for (int i = 0; i < langs.Count; i++)
                        {
                            sbLangs.Append(langs[i]);
                            if (i < langs.Count - 1)
                            {
                                sbLangs.Append(", ");
                            }
                        }

                        this.Overall.Subtitles = sbLangs.ToString();
                    }

                    // close ifo file
                    mi.Close();

                    // AFTER IDENTIFIED THE MEDIA TYPE IS A DVD
                    listFileInfo.RemoveAll(x => x.Length < 1000000000);
                }

                // Set Media Type
                bool allAudio = Adapter.MediaIsAudio(FileCollection);
                if (allAudio)
                {
                    this.Options.MediaTypeChoice = MediaType.MusicAudioAlbum;
                }

                if (FileCollection.Count > 0)
                {
                    foreach (FileInfo fi in listFileInfo)
                    {
                        this.AddMedia(new MediaFile(fi.FullName, this.Source));
                    }

                    this.Overall = new MediaFile(FileSystemHelper.GetLargestFilePathFromDir(Location), this.Source);

                    // Set Overall File Name
                    this.Overall.FileName = Path.GetFileName(Location);
                    if (Overall.FileName.ToUpper().Equals("VIDEO_TS"))
                    {
                        Overall.FileName = Path.GetFileName(Path.GetDirectoryName(Location));
                    }
                    if (string.IsNullOrEmpty(Title))
                    {
                        this.Title = this.Overall.FileName;
                    }
                }

                // DVD Video
                // Combined Duration and File Size
                if (Options.MediaTypeChoice == MediaType.MediaDisc)
                {
                    if (listFileInfo.Count > 0)
                    {
                        long   dura = 0;
                        double size = 0;
                        foreach (FileInfo fiVob in listFileInfo)
                        {
                            MediaInfoLib.MediaInfo mi = new MediaInfoLib.MediaInfo();
                            mi.Open(fiVob.FullName);
                            string temp = mi.Get(0, 0, "Duration");
                            if (!string.IsNullOrEmpty(temp))
                            {
                                long d = 0;
                                long.TryParse(temp, out d);
                                dura += d;
                            }

                            // we are interested in combined file size only for VOB files
                            // thats why we dont calculate FileSize in FileInfo while determining largest file
                            double sz = 0;
                            double.TryParse(mi.Get(0, 0, "FileSize"), out sz);
                            size += sz;

                            // close vob file
                            mi.Close();
                        }

                        this.Overall.FileSize       = size; // override any previous file size
                        this.Overall.FileSizeString = string.Format("{0} MiB", (this.Overall.FileSize / 1024.0 / 1024.0).ToString("0.00"));

                        this.Overall.Duration        = dura;
                        this.Overall.DurationString2 = App.GetDurationString(dura);
                    }
                }
            } // if Location is a directory
        }