/// <summary> /// Internal method used to fire the TrackAdded event. /// </summary> /// <param name="row">Row that's just been added</param> private void NotifyEventSubscribers(MediaData.TrackRow row) { // notify any event subscribers if (TrackAdded != null) { TrackAdded(this, new TrackInfoEventArgs( (row.IsTitleNull() ? "" : row.Title), (row.IsAuthorNull() ? "" : row.Author))); } }
/// <summary> /// Retrieves media information for a single directory as a DataSet. /// </summary> /// <param name="directory">Directory to be used for data retrieval</param> /// <returns>MediaData object (a strongly-typed DataSet)</returns> public MediaData RetrieveSingleDirectoryInfo(string directory) { MediaData md = new MediaData(); DirectoryInfo dirInfo = new DirectoryInfo(directory); FileInfo[] fileInfos = dirInfo.GetFiles("*.wma"); for (int i = 0; i < fileInfos.Length; i++) { MediaData.TrackRow row = md.Track.NewTrackRow(); RetrieveTrackRow(dirInfo + "\\" + fileInfos[i].Name, ref row); md.Track.AddTrackRow(row); NotifyEventSubscribers(row); } return(md); }
/// <summary> /// Recursive function used by RetrieveRecursiveDirectoryInfo to drill down /// the directory tree. /// </summary> /// <param name="directory">Current directory level</param> /// <param name="md">MediaData structure in current form</param> private void RecurseDirectories(string directory, MediaData md) { DirectoryInfo parent = new DirectoryInfo(directory); DirectoryInfo[] children = parent.GetDirectories(); foreach (DirectoryInfo folder in children) { FileInfo[] fileInfos = folder.GetFiles("*.wma"); for (int i = 0; i < fileInfos.Length; i++) { MediaData.TrackRow row = md.Track.NewTrackRow(); RetrieveTrackRow(folder.FullName + "\\" + fileInfos[i].Name, ref row); md.Track.AddTrackRow(row); NotifyEventSubscribers(row); } RecurseDirectories(folder.FullName, md); } }
/// <summary> /// Used internally to fill a row of a DataSet with metadata for the given media file. /// </summary> /// <param name="filename">Windows Media File (.wma file)</param></param> /// <param name="row">The TrackRow to be filled with data</param> private void RetrieveTrackRow(string filename, ref MediaData.TrackRow row) { MediaData.TrackDataTable tab = new MediaData.TrackDataTable(); using (MetadataEditor md = new MetadataEditor(filename)) { row.Title = md[MediaMetadata.Title] as string; row.Author = md[MediaMetadata.Author] as string; row.AlbumTitle = md[MediaMetadata.AlbumTitle] as string; row.AlbumArtist = md[MediaMetadata.AlbumArtist] as string; row.Publisher = md[MediaMetadata.Publisher] as string; row.Genre = md[MediaMetadata.Genre] as string; object o = md[MediaMetadata.TrackNumber]; if (o == null) { row.SetTrackNumberNull(); } else { row.TrackNumber = (uint)o; } o = md[MediaMetadata.Duration]; if (o == null) { row.SetDurationNull(); } else { row.Duration = new TimeSpan((long)(ulong)o); } o = md[MediaMetadata.BitRate]; if (o == null) { row.SetBitRateNull(); } else { row.BitRate = (uint)o; } o = md[MediaMetadata.IsProtected]; if (o == null) { row.SetIsProtectedNull(); } else { row.IsProtected = (bool)o; } o = md[MediaMetadata.FileSize]; if (o == null) { row.SetFileSizeNull(); } else { row.FileSize = (ulong)o; } row.FileName = filename; } }