public override void Rebuild(bool deepLoad) { if (!string.IsNullOrEmpty(_discId)) { CDEntry cde = CDEntry.LoadPersistentDisc(_discId); if (cde != null) { _cdEntry = cde; return; } } RefreshDisk(); }
public CDAFileInfo(string path, bool deepLoad) : base(path, false) { try { string rootPath = System.IO.Path.GetPathRoot(path); if (!string.IsNullOrEmpty(rootPath)) { char letter = rootPath.ToUpperInvariant()[0]; using (CDDrive cd = new CDDrive()) { if (cd.Open(letter) && cd.Refresh()) { string trackStr = path.Replace(rootPath, "").ToLowerInvariant().Replace("track", "").Replace(".cda", ""); _track = -1; if (int.TryParse(trackStr, out _track) && _track > 0) { if (cd.IsAudioTrack(_track)) { _duration = cd.GetSeconds(_track); _discId = cd.GetCDDBDiskID(); // Check whether the disc is already added to our FreeDb lite database _cdEntry = CDEntry.LoadPersistentDisc(_discId); if (_cdEntry == null) { RefreshDisk(); } return; } } } } _cdEntry = null; } } catch (Exception ex) { Logger.LogException(ex); _cdEntry = null; } }
private void OnDriveSelected(object sender, EventArgs e) { Wizard.CanMoveNext = false; lvTracks.Items.Clear(); DriveInfoItem item = cmbAudioCDDrives.SelectedItem as DriveInfoItem; if (item != null) { string rootPath = System.IO.Path.GetPathRoot(item.Path); if (!string.IsNullOrEmpty(rootPath)) { (BkgTask as Task).DrivePath = rootPath; CDEntry cdEntry = null; char letter = rootPath.ToUpperInvariant()[0]; using (CDDrive cd = new CDDrive()) { if (cd.Open(letter) && cd.Refresh()) { // Check whether the disc is already added to our persistent storage string discId = cd.GetCDDBDiskID(); cdEntry = CDEntry.LoadPersistentDisc(discId); if (cdEntry == null) { switch (ProTONEConfig.AudioCdInfoSource) { case CddaInfoSource.CdText: cdEntry = CDAFileInfo.BuildCdEntryByCdText(cd, cd.GetCDDBDiskID()); break; case CddaInfoSource.Cddb: cdEntry = CDAFileInfo.BuildCdEntryByCddb(cd, cd.GetCDDBDiskID()); break; case CddaInfoSource.CdText_Cddb: { cdEntry = CDAFileInfo.BuildCdEntryByCdText(cd, cd.GetCDDBDiskID()); CDEntry cde = CDAFileInfo.BuildCdEntryByCddb(cd, cd.GetCDDBDiskID()); cdEntry = CDAFileInfo.Merge(cdEntry, cde); } break; case CddaInfoSource.Cddb_CdText: { cdEntry = CDAFileInfo.BuildCdEntryByCddb(cd, cd.GetCDDBDiskID()); CDEntry cde = CDAFileInfo.BuildCdEntryByCdText(cd, cd.GetCDDBDiskID()); cdEntry = CDAFileInfo.Merge(cdEntry, cde); } break; default: break; } if (cdEntry != null) { // Cache the disk to persistent storage for retrieving it faster later on cdEntry.PersistDisc(); } } } if (cdEntry != null) { for (int i = 1; i <= cdEntry.NumberOfTracks; i++) { double size = cd.TrackSize(i); int duration = cd.GetSeconds(i); ListViewItem lvItem = new ListViewItem(i.ToString()); lvItem.SubItems.Add(TimeSpan.FromSeconds(duration).ToString()); lvItem.SubItems.Add(((size / (1024 * 1024)).ToString("F")) + " MB"); OPMListViewSubItem subItem = new OPMListViewSubItem(tbEditAlbum, lvItem, cdEntry.Tracks[i - 1].Album ?? string.Empty); subItem.ReadOnly = false; lvItem.SubItems.Add(subItem); subItem = new OPMListViewSubItem(tbEditArtist, lvItem, cdEntry.Tracks[i - 1].Artist ?? string.Empty); subItem.ReadOnly = false; lvItem.SubItems.Add(subItem); subItem = new OPMListViewSubItem(tbEditTitle, lvItem, cdEntry.Tracks[i - 1].Title ?? string.Empty); subItem.ReadOnly = false; lvItem.SubItems.Add(subItem); subItem = new OPMListViewSubItem(cmbEditgenre, lvItem, cdEntry.Tracks[i - 1].Genre ?? string.Empty); subItem.ReadOnly = false; lvItem.SubItems.Add(subItem); if (Wizard.RepeatCount == 0) { lvItem.ImageIndex = 1; } else { //lvItem.ImageIndex = ((BkgTask as Task).Tracks.Contains(i)) ? 1 : 0; } lvItem.Tag = cdEntry.Tracks[i - 1]; lvTracks.Items.Add(lvItem); } } } } } CheckNextButton(); }