// Decompiled with JetBrains decompiler // Type: ZuneUI.MetadataEditMedia // Assembly: ZuneShell, Version=4.7.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217 // MVID: FC8028F3-A47B-4FB4-B35B-11D1752D8264 // Assembly location: C:\Program Files\Zune\ZuneShell.dll using System; using System.Collections; using System.Collections.Generic; namespace ZuneUI { public class MetadataEditMedia { public static PropertyDescriptor s_TrackArtist = new PropertyDescriptor("ArtistName", Shell.LoadString(StringId.IDS_EMI_MULTIPLEARTISTS), ""); public static PropertyDescriptor s_TrackArtistList = new StringListPropertyDescriptor("ContributingArtistNames", Shell.LoadString(StringId.IDS_EMI_MULTIPLEARTISTS), ""); public static NonBlankPropertyDescriptor s_Artist = new NonBlankPropertyDescriptor("ArtistName", Shell.LoadString(StringId.IDS_EMI_MULTIPLEARTISTS), ""); public static PropertyDescriptor s_ArtistYomi = new PropertyDescriptor("ArtistNameYomi", "", ""); public static NonBlankPropertyDescriptor s_Title = new NonBlankPropertyDescriptor("Title", Shell.LoadString(StringId.IDS_EMI_MULTIPLETITLES), ""); public static PropertyDescriptor s_TitleYomi = new PropertyDescriptor("TitleYomi", "", ""); public static IntYearPropertyDescriptor s_ReleaseYear = new IntYearPropertyDescriptor("ReleaseDate", Shell.LoadString(StringId.IDS_EMI_MULTIPLEYEARS), Shell.LoadString(StringId.IDS_UNKNOWN_YEAR), 4); public static YearPropertyDescriptor s_TrackReleaseYear = new YearPropertyDescriptor("ReleaseDate", Shell.LoadString(StringId.IDS_EMI_MULTIPLEYEARS), Shell.LoadString(StringId.IDS_UNKNOWN_YEAR), 4); public static DatePropertyDescriptor s_ReleaseDate = new DatePropertyDescriptor("ReleaseDate", Shell.LoadString(StringId.IDS_EMI_MULTIPLEDATES), Shell.LoadString(StringId.IDS_RELEASE_DATE_UNKNOWN), DateTimeKind.Utc); public static IntPropertyDescriptor s_DiscNumber = new IntPropertyDescriptor("DiscNumber", Shell.LoadString(StringId.IDS_EMI_MULTIPLEDISCS), "", 3); public static IntPropertyDescriptor s_TrackNumber = new IntPropertyDescriptor("TrackNumber", "0", "", 3); public static PropertyDescriptor s_SeriesTitle = new PropertyDescriptor("SeriesTitle", Shell.LoadString(StringId.IDS_EMI_MULTIPLETITLES), ""); public static IntPropertyDescriptor s_SeasonNumber = new IntPropertyDescriptor("SeasonNumber", "", "", 6); public static IntPropertyDescriptor s_EpisodeNumber = new IntPropertyDescriptor("EpisodeNumber", "", "", 6); public static NonBlankPropertyDescriptor s_AlbumTitle = new NonBlankPropertyDescriptor("AlbumName", Shell.LoadString(StringId.IDS_EMI_MULTIPLETITLES), ""); public static PropertyDescriptor s_AlbumTitleYomi = new PropertyDescriptor("AlbumTitleYomi", "", ""); public static NonBlankPropertyDescriptor s_AlbumArtist = new NonBlankPropertyDescriptor("AlbumArtistName", Shell.LoadString(StringId.IDS_EMI_MULTIPLEARTISTS), ""); public static PropertyDescriptor s_AlbumArtistYomi = new PropertyDescriptor("AlbumArtistYomi", "", ""); public static PropertyDescriptor s_Composer = new PropertyDescriptor("ComposerName", Shell.LoadString(StringId.IDS_EMI_MULTIPLECOMPOSERS), ""); public static PropertyDescriptor s_Conductor = new PropertyDescriptor("ConductorName", Shell.LoadString(StringId.IDS_EMI_MULTIPLECONDUCTORS), ""); public static PropertyDescriptor s_Genre = new PropertyDescriptor("Genre", Shell.LoadString(StringId.IDS_EMI_MULTIPLEGENRES), Shell.LoadString(StringId.IDS_GENRE_UNKNOWN)); public static TypePropertyDescriptor s_Category = new TypePropertyDescriptor("CategoryId", "", ""); public static PropertyDescriptor s_Description = new PropertyDescriptor("Description", Shell.LoadString(StringId.IDS_EMI_MULTIPLEDESCRIPTIONS), ""); public static PropertyDescriptor s_CoverUrl = new PropertyDescriptor("CoverUrl", "", ""); public static IntPropertyDescriptor s_TrackCount = new IntPropertyDescriptor("TrackCount", "0", ""); public static IntPropertyDescriptor s_MediaId = new IntPropertyDescriptor("MediaId", "-1", "-1"); private IList _properties; private IList _mediaList; private Dictionary _propertyMap = new Dictionary(); protected PropertySource _source = DataProviderObjectPropertySource.Instance; protected bool _creationFailed; protected void Initialize(IList mediaList, PropertyDescriptor[] properties) { this._mediaList = mediaList; this._properties = properties; foreach (PropertyDescriptor property in _properties) this._propertyMap[property] = this.CreatePropertyFromMedia(this._mediaList, property); } public MetadataEditProperty GetProperty(PropertyDescriptor descriptor) => this._propertyMap[descriptor]; public MetadataEditProperty GetProperty(string descriptorName) { MetadataEditProperty metadataEditProperty1 = null; foreach (MetadataEditProperty metadataEditProperty2 in this._propertyMap.Values) { if (metadataEditProperty2.Descriptor.DescriptorName.Equals(descriptorName, StringComparison.InvariantCultureIgnoreCase)) { metadataEditProperty1 = metadataEditProperty2; break; } } return metadataEditProperty1; } public object GetPropertyData(PropertyDescriptor descriptor) { object obj = null; MetadataEditProperty property = this.GetProperty(descriptor); if (property != null) obj = property.ConvertToData(); return obj; } public void SetPropertyData(PropertyDescriptor descriptor, object value) => this.GetProperty(descriptor)?.ConvertFromData(value); public void SetPropertyState(PropertyDescriptor descriptor, object state) { MetadataEditProperty property = this.GetProperty(descriptor); if (property == null) return; property.State = state; } public void ResetExternalErrors() { foreach (MetadataEditProperty metadataEditProperty in this._propertyMap.Values) metadataEditProperty.ExternalError = HRESULT._S_OK; } public virtual void Commit() { foreach (PropertyDescriptor property1 in _properties) { MetadataEditProperty property2 = this._propertyMap[property1]; if (property2.Modified) this.SetPropertyToMedia(property2); } if (!this._source.NeedsCommit) return; foreach (object media in _mediaList) this._source.Commit(media); } public virtual bool IsValid() { foreach (MetadataEditProperty metadataEditProperty in this._propertyMap.Values) { if ((metadataEditProperty.Modified || metadataEditProperty.Required) && !metadataEditProperty.Valid) return false; } return true; } public virtual bool IsModified() { foreach (MetadataEditProperty metadataEditProperty in this._propertyMap.Values) { if (metadataEditProperty.Modified) return true; } return false; } public bool CreationFailed => this._creationFailed; private MetadataEditProperty CreatePropertyFromMedia( IList mediaList, PropertyDescriptor descriptor) { string str = descriptor.UnknownString; foreach (object media in _mediaList) { object obj = this._source.Get(media, descriptor); string newString = descriptor.ConvertToString(obj) ?? descriptor.UnknownString; str = this.AggregateString(str, newString, descriptor); } return new MetadataEditProperty(descriptor, str); } private void SetPropertyToMedia(MetadataEditProperty property) { foreach (object media in _mediaList) this._source.Set(media, property.Descriptor, property.Descriptor.ConvertFromString(property.Value, property.State)); } protected string AggregateString( string oldString, string newString, PropertyDescriptor descriptor) { string str = oldString; if (str != newString) str = !(str == descriptor.UnknownString) ? descriptor.MultiValueString : newString; return str; } public static PropertyDescriptor TrackArtistDescriptor => s_TrackArtist; public static PropertyDescriptor TrackArtistListDescriptor => s_TrackArtistList; public static PropertyDescriptor ArtistDescriptor => s_Artist; public static PropertyDescriptor ArtistYomiDescriptor => s_ArtistYomi; public static PropertyDescriptor TitleDescriptor => s_Title; public static PropertyDescriptor TitleYomiDescriptor => s_TitleYomi; public static PropertyDescriptor ReleaseYearDescriptor => s_ReleaseYear; public static PropertyDescriptor TrackReleaseYearDescriptor => s_TrackReleaseYear; public static PropertyDescriptor DiscNumberDescriptor => s_DiscNumber; public static PropertyDescriptor TrackNumberDescriptor => s_TrackNumber; public static PropertyDescriptor SeriesTitleDescriptor => s_SeriesTitle; public static PropertyDescriptor SeasonNumberDescriptor => s_SeasonNumber; public static PropertyDescriptor EpisodeNumberDescriptor => s_EpisodeNumber; public static PropertyDescriptor AlbumTitleDescriptor => s_AlbumTitle; public static PropertyDescriptor AlbumTitleYomiDescriptor => s_AlbumTitleYomi; public static PropertyDescriptor AlbumArtistDescriptor => s_AlbumArtist; public static PropertyDescriptor AlbumArtistYomiDescriptor => s_AlbumArtistYomi; public static PropertyDescriptor ComposerDescriptor => s_Composer; public static PropertyDescriptor ConductorDescriptor => s_Conductor; public static PropertyDescriptor GenreDescriptor => s_Genre; public static PropertyDescriptor CategoryDescriptor => s_Category; public static PropertyDescriptor ReleaseDateDescriptor => s_ReleaseDate; public static PropertyDescriptor DescriptionDescriptor => s_Description; public static PropertyDescriptor CoverUrlDescriptor => s_CoverUrl; public static PropertyDescriptor TrackCountDescriptor => s_TrackCount; public static PropertyDescriptor MediaIdDescriptor => s_MediaId; } }