/// <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 }