/// <summary>
        ///   Retrieve media info in a Thread
        /// </summary>
        private void SetMediaInfoThread()
        {
            if (lbMediaInfo.InvokeRequired)
              {
            ThreadSafeAddMediaInfoDelegate d = SetMediaInfoThread;
            lbMediaInfo.Invoke(d);
            return;
              }

              lbMediaInfo.Text = localisation.ToString("Burning", "Retrieving");

              mediainfo = burnManager.GetMediaInfo();
              if (mediainfo != null)
            lbMediaInfo.Text = String.Format(localisation.ToString("Burning", "MediaInfo"), mediainfo.HumanMediaString,
                                         ConvertSizeToMinute(mediainfo.Size), mediainfo.DiskStatus);

              CalculateTotalTime();
        }
        private void ParseDescriptionForMediaInfo(List<string> MediaInfoDescription, ref MediaInfo aMediaInfo)
        {
            lock (this)
              {
            if (MediaInfoDescription.Count > 5)
            {
              for (int i = 0; i < MediaInfoDescription.Count; i++)
              {
            string checkStr = MediaInfoDescription[i];

            if (checkStr.Contains(@"Mounted media type"))
            {
              // Mounted media type:       DVD+R/DL
              // Using generic SCSI-3/mmc-3 DVD+RW driver (mmc_dvdplusrw).
              int checkPos = checkStr.IndexOf(@":");
              if (checkPos >= 0)
              {
                // Assume a disc is there (cdr will close the tray) - if not present it will be set later
                fHasMedia = true;
                string mounted = (checkStr.Substring(checkPos + 1)).Trim();
                checkPos = mounted.IndexOf(@" ");
                if (checkPos >= 0)
                  mounted = (mounted.Remove(checkPos));

                switch (mounted)
                {
                  case "DVD+R/DL":
                    aMediaInfo.CurrentMediaType = MediaType.DlDVDplusR;
                    break;
                  case "DVD-R/DL":
                    aMediaInfo.CurrentMediaType = MediaType.DlDVDminusR;
                    break;
                  case "DVD+RW":
                    aMediaInfo.CurrentMediaType = MediaType.DVDplusRW;
                    break;
                  case "DVD+R":
                    aMediaInfo.CurrentMediaType = MediaType.DVDplusR;
                    break;
                  case "DVD-RW":
                    aMediaInfo.CurrentMediaType = MediaType.DVDminusRW;
                    break;
                  case "DVD-R":
                    aMediaInfo.CurrentMediaType = MediaType.DVDminusR;
                    break;
                  case "DVD-RAM":
                    aMediaInfo.CurrentMediaType = MediaType.DVDRam;
                    break;
                  case "DVD-ROM":
                    aMediaInfo.CurrentMediaType = MediaType.ReadOnly;
                    break;
                  case "CD-RW":
                    aMediaInfo.CurrentMediaType = MediaType.CDRW;
                    break;
                  case "CD-R":
                    aMediaInfo.CurrentMediaType = MediaType.CDR;
                    break;
                  case "CD-ROM":
                    aMediaInfo.CurrentMediaType = MediaType.ReadOnly;
                    break;

                  default:
                    ServiceScope.Get<ILogger>().GetLogger.Debug("Burner: Could not recognize media type: {0}", mounted);
                    aMediaInfo.CurrentMediaType = MediaType.None;
                    fHasMedia = false;
                    break;
                }
              }
              else
                aMediaInfo.CurrentMediaType = MediaType.None;
            }
            else if (checkStr.Contains(@"Disk Is erasable"))
            {
              aMediaInfo.IsErasable = true;
              // cdrecord will use the mmc_cdr driver for CDRW as well
              if (aMediaInfo.CurrentMediaType == MediaType.CDR)
                aMediaInfo.CurrentMediaType = MediaType.CDRW;
            }
            else if (checkStr.Contains(@"data type:"))
            {
              // data type:                standard
              string dataType = checkStr.Substring(11).Trim(trimchars);
              aMediaInfo.DataType = dataType;
            }
            else if (checkStr.Contains(@"disk status:"))
            {
              // disk status:              empty
              string diskStatus = checkStr.Substring(13).Trim(trimchars);
              if (diskStatus != "empty")
                aMediaInfo.DiskStatus = BlankStatus.complete;
            }
            else if (checkStr.Contains(@"session status:"))
            {
              // session status:           empty
              string sessionStatus = checkStr.Substring(16).Trim(trimchars);
              if (sessionStatus != "empty")
                aMediaInfo.SessionStatus = BlankStatus.complete;
            }
            else if (checkStr.Contains(@"Disk Is not unrestricted"))
              aMediaInfo.IsRestricted = true; // false reports here?
            else
            {
              //     Capacity  Blklen/Sparesz.  Format-type  Type
              //       352965             2048         0x00  Formatted Media
              if (checkStr.Contains(@"Capacity  Blklen/Sparesz."))
              {
                string capacity = MediaInfoDescription[i + 1].Trim().Substring(0,
                                                                               MediaInfoDescription[i + 1].Trim().
                                                                                 IndexOf(" "));
                aMediaInfo.Size = Convert.ToInt32(capacity);
              }
            }
              }
            }
            else // Less than 5 lines of info? Tray must be empty
            {
              fHasMedia = false;
              aMediaInfo.CurrentMediaType = MediaType.None;
            }

            fCurrentMediaInfo = aMediaInfo;
              }
        }
        private void mediaChangeMonitor_MediaRemoved(string eDriveLetter)
        {
            if (lbMediaInfo.InvokeRequired)
              {
            ThreadSafeMediaRemovedDelegate d = mediaChangeMonitor_MediaRemoved;
            lbMediaInfo.Invoke(d, new object[] {eDriveLetter});
            return;
              }

              _main.BurnButtonsEnabled = false;

              mediainfo = null;
              lbMediaInfo.Text = localisation.ToString("Burning", "NoMedia");
        }
        private void GetCurrentMediaStatus()
        {
            List<string> MediaDescription = new List<string>(94);
              MediaInfo MyMediaInfo = new MediaInfo(MediaType.None, false, "Standard", BlankStatus.empty, BlankStatus.empty,
                                            FormatStatus.none, 1, 1, false, 0);
              string cdrParam = string.Format(@"dev={0} -minfo -v", fBusId);

              MediaDescription = DeviceHelper.ExecuteProcReturnStdOut("cdrecord.exe", cdrParam, 40000);
              ParseDescriptionForMediaInfo(MediaDescription, ref MyMediaInfo);
            // 40 sec because an open tray will be closed, etc
        }