// Decompiled with JetBrains decompiler // Type: ZuneUI.Management // 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 Microsoft.Iris; using Microsoft.Zune.Configuration; using Microsoft.Zune.Shell; using Microsoft.Zune.Subscription; using Microsoft.Zune.Util; using MicrosoftZuneLibrary; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Threading; using UIXControls; namespace ZuneUI { public class Management : ModelItem { private static CategoryPage _currentCategoryPage; private Category _alertedDeviceCategory; private DeviceManagement _deviceManagement; private bool _deviceManagementLocked; private CommitListHashtable _commitList; private bool _hasPendingCommits; private bool _changeRequiresElevation; private BooleanChoice _sqmChoice; private ListDataSet _monitoredAudioFolders; private ListDataSet _monitoredPhotoFolders; private ListDataSet _monitoredPodcastFolders; private ListDataSet _monitoredVideoFolders; private BooleanChoice _mediaInfoChoice; private BooleanChoice _metadataChoice; private List _removedMonitoredFoldersToRemoveFromCollection; private ProxySettingDelegate[] _actionsToCommitOnLibraryIntegrate; private Choice _podcastDefaultKeepEpisodesChoice; private Choice _podcastPlaybackChoice; private string[] _defaultFileTypeExtensions = new string[7] { ".mp3", ".m4a", ".mp4", ".m4b", ".m4v", ".mbr", ".zpl" }; private IFileAssociationHandler _fileAssocHandler; private IList _allFileTypes; private IList _audioFileTypes; private IList _videoFileTypes; private IList _fileAssociationInfoList; private bool _canFileAssociationBeChanged; private ITunerInfoHandler _tunerHandler; private ArrayListDataSet _registeredComputersModelList; private ArrayListDataSet _registeredDevicesModelList; private ArrayListDataSet _registeredAppStoreDevicesModelList; private string _nextPCDeregistrationDate; private string _nextSubscriptionDeviceDeregistrationDate; private string _nextAppStoreDeviceDeregistrationDate; private IntRangedValue _slideShowSpeed; private Choice _burnDiscFormat; private BooleanChoice _autoEjectCDAfterBurn; private Choice _burnSpeed; private Choice _recordMode; private Choice _recordRate; private BooleanChoice _autoCopyCD; private BooleanChoice _autoEjectCD; private string _mediaFolder; private string _videoMediaFolder; private string _photoMediaFolder; private string _podcastMediaFolder; private Choice _wmaRate; private Choice _wmavRate; private Choice _mp3Rate; private string _sharingError; private string _sharingDisplayName; private BooleanChoice _sharingEnableMusic; private BooleanChoice _sharingEnableVideo; private BooleanChoice _sharingEnablePhoto; private Choice _sharingSelectDeviceChoice; private IList _sharingSelectDeviceOptions; private bool _sharingAllDevicesEnabled; private IList _sharingDeviceList; private uint _sharingDeviceIndex; private HMESettings _HME; private bool _nssDeviceListChangeEventAdded; private string _backgroundImage; private WindowColor _backgroundColor; private BooleanChoice _showNowPlayingBackgroundOnIdle; private Choice _screenGraphicsSlider; private BooleanChoice _playSounds; private BooleanChoice _compactModeAlwaysOnTop; private BooleanChoice _ratingsChoice; private BooleanChoice _applyRatingsChoice; private Choice _startupPageChoice; private bool _autoLaunchZuneOnConnect; private object mylock = new object(); public Management() { this._autoLaunchZuneOnConnect = ClientConfiguration.Devices.AutoLaunchZuneOnConnect; ClientConfiguration.Groveler.OnConfigurationChanged += new ConfigurationChangeEventHandler(this.OnGrovelerConfigurationChanged); this._actionsToCommitOnLibraryIntegrate = new ProxySettingDelegate[5] { new ProxySettingDelegate(this.OnMonitoredFoldersCommit), new ProxySettingDelegate(this.OnMediaFolderCommit), new ProxySettingDelegate(this.OnVideoMediaFolderCommit), new ProxySettingDelegate(this.OnPhotoMediaFolderCommit), new ProxySettingDelegate(this.OnPodcastMediaFolderCommit) }; } protected override void OnDispose(bool disposing) { if (disposing) { this.DisposeDeviceManagement(true); ClientConfiguration.Groveler.OnConfigurationChanged -= new ConfigurationChangeEventHandler(this.OnGrovelerConfigurationChanged); } if (this._fileAssocHandler != null) { ((IDisposable)this._fileAssocHandler).Dispose(); this._fileAssocHandler = null; } base.OnDispose(disposing); } private IFileAssociationHandler FileAssocHandler { get { if (this._fileAssocHandler == null) this._fileAssocHandler = FileAssociationHandlerFactory.CreateFileAssociationHandler(); return this._fileAssocHandler; } } public DeviceManagement DeviceManagement { get { if (this._deviceManagement == null && !this.DeviceManagementLocked) this._deviceManagement = new DeviceManagement(); return this._deviceManagement; } } public bool DeviceManagementLocked { get => this._deviceManagementLocked; private set { if (this._deviceManagementLocked == value) return; this._deviceManagementLocked = value; this.FirePropertyChanged(nameof(DeviceManagementLocked)); } } public void DisposeDeviceManagement(bool deviceManagementLocked) { this.DeviceManagementLocked = deviceManagementLocked; if (this._deviceManagement == null) return; UIDevice currentDeviceOverride = SyncControls.Instance.CurrentDeviceOverride; if (currentDeviceOverride.IsValid) { this.CommitList.RemoveByIntValue(currentDeviceOverride.IsGuest ? -1 : currentDeviceOverride.ID); this.CommitList.RemoveByStringValue("OnSyncPartnershipCommit"); } else this.CommitList.RemoveByIntValue(-1); this._deviceManagement.Dispose(); this._deviceManagement = null; this.FirePropertyChanged("DeviceManagementChanged"); } public bool DeviceManagementChanged => true; public CommitListHashtable CommitList { get { if (this._commitList == null) this._commitList = new CommitListHashtable(); return this._commitList; } set { if (this._commitList == value) return; this._commitList = value; this.FirePropertyChanged(nameof(CommitList)); if (value != null) return; this.HasPendingCommits = false; } } public bool HasPendingCommits { get => this._hasPendingCommits; internal set { if (this._hasPendingCommits == value) return; this._hasPendingCommits = value; this.FirePropertyChanged(nameof(HasPendingCommits)); } } public bool ActiveDeviceHasPendingCommits => this.CommitList.ContainsIntValue(SyncControls.Instance.CurrentDevice.ID); public bool ChangeRequiresElevation { get => this._changeRequiresElevation; set { if (this._changeRequiresElevation == value) return; this._changeRequiresElevation = value; this.FirePropertyChanged(nameof(ChangeRequiresElevation)); } } public string BuildNumber => VersionInfo.BuildNumber; public Choice RecordMode { get { if (this._recordMode == null) { this._wmaRate = new Choice(this); this._wmaRate.Options = (new NamedIntOption[6] { new NamedIntOption( null, Shell.LoadString(StringId.IDS_RIP_WMA_48), 48000), new NamedIntOption( null, Shell.LoadString(StringId.IDS_RIP_WMA_64), 64000), new NamedIntOption( null, Shell.LoadString(StringId.IDS_RIP_WMA_96), 96000), new NamedIntOption( null, Shell.LoadString(StringId.IDS_RIP_WMA_128), 128000), new NamedIntOption( null, Shell.LoadString(StringId.IDS_RIP_WMA_160), 160000), new NamedIntOption( null, Shell.LoadString(StringId.IDS_RIP_WMA_192), 192000) }); NamedIntOption.SelectOptionByValue(this._wmaRate, ClientConfiguration.Recorder.WMARecordRate); this._wmaRate.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnWmaRateCommit)] = null; this._wmavRate = new Choice(this); this._wmavRate.Options = (new NamedIntOption[5] { new NamedIntOption( null, Shell.LoadString(StringId.IDS_RIP_WMAV_25), 25), new NamedIntOption( null, Shell.LoadString(StringId.IDS_RIP_WMAV_50), 50), new NamedIntOption( null, Shell.LoadString(StringId.IDS_RIP_WMAV_75), 75), new NamedIntOption( null, Shell.LoadString(StringId.IDS_RIP_WMAV_90), 90), new NamedIntOption( null, Shell.LoadString(StringId.IDS_RIP_WMAV_98), 98) }); NamedIntOption.SelectOptionByValue(this._wmavRate, ClientConfiguration.Recorder.WMAVBRRecordQuality); this._wmavRate.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnWmavRateCommit)] = null; this._mp3Rate = new Choice(this); this._mp3Rate.Options = (new NamedIntOption[4] { new NamedIntOption( null, Shell.LoadString(StringId.IDS_RIP_MP3_128), 128000), new NamedIntOption( null, Shell.LoadString(StringId.IDS_RIP_MP3_192), 192000), new NamedIntOption( null, Shell.LoadString(StringId.IDS_RIP_MP3_256), 256000), new NamedIntOption( null, Shell.LoadString(StringId.IDS_RIP_MP3_320), 320000) }); NamedIntOption.SelectOptionByValue(this._mp3Rate, ClientConfiguration.Recorder.MP3RecordRate); this._mp3Rate.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnMp3RateCommit)] = null; this._recordMode = new Choice(this); this._recordMode.Options = (new RecordModeOption[4] { new RecordModeOption( null, Shell.LoadString(StringId.IDS_WMA_OPTION), 0, this._wmaRate), new RecordModeOption( null, Shell.LoadString(StringId.IDS_WMA_VARIABLE_OPTION), 3, this._wmavRate), new RecordModeOption( null, Shell.LoadString(StringId.IDS_WMA_LOSSLESS_OPTION), 1, null), new RecordModeOption( null, Shell.LoadString(StringId.IDS_MP3_OPTION), 2, this._mp3Rate) }); NamedIntOption.SelectOptionByValue(this._recordMode, ClientConfiguration.Recorder.RecordMode); this._recordMode.ChosenChanged += (sender, args) => { this.CommitList[new ProxySettingDelegate(this.OnRecordModeCommit)] = null; this.RecordRate = ((RecordModeOption)this._recordMode.ChosenValue).BitRate; }; this.RecordRate = ((RecordModeOption)this._recordMode.ChosenValue).BitRate; } return this._recordMode; } } private void OnWmaRateCommit(object data) => ClientConfiguration.Recorder.WMARecordRate = ((NamedIntOption)this._wmaRate.ChosenValue).Value; private void OnWmavRateCommit(object data) => ClientConfiguration.Recorder.WMAVBRRecordQuality = ((NamedIntOption)this._wmavRate.ChosenValue).Value; private void OnMp3RateCommit(object data) => ClientConfiguration.Recorder.MP3RecordRate = ((NamedIntOption)this._mp3Rate.ChosenValue).Value; private void OnRecordModeCommit(object data) => ClientConfiguration.Recorder.RecordMode = ((NamedIntOption)this._recordMode.ChosenValue).Value; public Choice RecordRate { get => this._recordRate; private set { if (this._recordRate == value) return; this._recordRate = value; this.FirePropertyChanged(nameof(RecordRate)); } } public Category AlertedDeviceCategory { get => this._alertedDeviceCategory; set { if (this._alertedDeviceCategory == value) return; if (_currentCategoryPage != null && value != null && this._alertedDeviceCategory != null) { _currentCategoryPage.CurrentCategory = this._alertedDeviceCategory; this._alertedDeviceCategory = null; } else { this._alertedDeviceCategory = value; this.FirePropertyChanged(nameof(AlertedDeviceCategory)); } } } public CategoryPage CurrentCategoryPage { get => _currentCategoryPage; set { if (_currentCategoryPage == value) return; _currentCategoryPage = value; this.FirePropertyChanged(nameof(CurrentCategoryPage)); } } public static void NavigateToSetupLandWizard(SetupLandPage page) => NavigateAwayFromCategory(new SetupLandWizardNavigationCommand(page)); public static void NavigateToCategory(Category category) { if (ZuneShell.DefaultInstance.Management.CurrentCategoryPage == null) return; ZuneShell.DefaultInstance.Management.CurrentCategoryPage.CurrentCategory = category; } public static void NavigateAwayFromCategory(Command confirmed) { Management management = ZuneShell.DefaultInstance.Management; if (management.HasPendingCommits) { Command yesCommand = new Command(null, Shell.LoadString(StringId.IDS_DIALOG_YES), null); yesCommand.Invoked += (sender, args) => { management.CommitListSave(); NavigateAwayFromCategory(confirmed); }; Command noCommand = new Command(null, Shell.LoadString(StringId.IDS_DIALOG_NO), null); noCommand.Invoked += (sender, args) => { management.CommitList = null; NavigateAwayFromCategory(confirmed); }; MessageBox.Show(Shell.LoadString(StringId.IDS_SAVE_CHANGES_DIALOG_TITLE), Shell.LoadString(StringId.IDS_SAVE_CHANGES_ON_BACK_DIALOG_TEXT), yesCommand, noCommand, null); } else { if (Shell.SettingsFrame.IsCurrent && !Shell.SettingsFrame.Wizard.FUE.IsCurrent && management.CurrentCategoryPage != null) management.CurrentCategoryPage.CancelAndExit(); Application.DeferredInvoke(delegate { confirmed?.Invoke(); }, null); } } public void CommitListSave() { this.CheckForAutomatedRequirements(); this.CommitList.Save(); } public void CheckForAutomatedRequirements() { if (DeviceManagement.SetupDevice == null) return; this.DeviceManagement.CheckForAutomatedRequirements(); } public bool CanFileAssociationBeChanged { get => this._canFileAssociationBeChanged; private set { if (this._canFileAssociationBeChanged == value) return; this._canFileAssociationBeChanged = value; this.FirePropertyChanged(nameof(CanFileAssociationBeChanged)); } } public SubscriptionState SubscribeToChannelFeed( bool isPersonalChannel, Guid channelId, string feedUrl, string title, ESubscriptionSource source) { return this.SubscribeToFeed(feedUrl, title, channelId, isPersonalChannel, source, EMediaTypes.eMediaTypePlaylist, Shell.LoadString(StringId.IDS_PLAYLIST_SUBSCRIPTION_ERROR)); } public SubscriptionState SubscribeToPodcastFeed( string feedUrl, string title, ESubscriptionSource source) { return this.SubscribeToPodcastFeed(feedUrl, title, Guid.Empty, source); } public SubscriptionState SubscribeToPodcastFeed( string feedUrl, string title, Guid serviceId, ESubscriptionSource source) { return this.SubscribeToFeed(feedUrl, title, serviceId, false, source, EMediaTypes.eMediaTypePodcastSeries, Shell.LoadString(StringId.IDS_PODCAST_SUBSCRIPTION_ERROR)); } private SubscriptionState SubscribeToFeed( string feedUrl, string title, Guid serviceId, bool isPersonalChannel, ESubscriptionSource source, EMediaTypes mediaType, string errorDialogHeader) { int subscriptionMediaId = 0; SubscriptionState subscriptionState = null; HRESULT hresult = SubscriptionManager.Instance.Subscribe(feedUrl, title, serviceId, isPersonalChannel, mediaType, source, out subscriptionMediaId); if (hresult.IsSuccess) subscriptionState = new SubscriptionState(true, true, subscriptionMediaId); else ErrorDialogInfo.Show(hresult.Int, errorDialogHeader); return subscriptionState; } public SubscriptionState GetSubscriptionState( string feedURL, EMediaTypes subscriptionType) { if (string.IsNullOrEmpty(feedURL)) return null; try { int subscriptionMediaId = -1; bool isSubscribed; bool byUrl = SubscriptionManager.Instance.FindByUrl(feedURL, subscriptionType, out subscriptionMediaId, out isSubscribed); return new SubscriptionState(isSubscribed, byUrl, subscriptionMediaId); } catch (ApplicationException ex) { } return null; } public SubscriptionState GetSubscriptionState( Guid serviceId, EMediaTypes subscriptionType) { if (serviceId == Guid.Empty) return null; try { int subscriptionMediaId = -1; bool isSubscribed; bool byServiceId = SubscriptionManager.Instance.FindByServiceId(serviceId, subscriptionType, out subscriptionMediaId, out isSubscribed); return new SubscriptionState(isSubscribed, byServiceId, subscriptionMediaId); } catch (ApplicationException ex) { } return null; } private void OnGrovelerConfigurationChanged(object sender, ConfigurationChangeEventArgs e) => Application.DeferredInvoke(delegate { if (!this.UsingWin7Libraries) return; if (e.PropertyName == "RipDirectory" || e.PropertyName == "MonitoredAudioFolders") { if (this._monitoredAudioFolders != null) { this._monitoredAudioFolders = null; this.FirePropertyChanged("MonitoredAudioFolders"); } if (this._mediaFolder == null) return; this._mediaFolder = null; this.FirePropertyChanged("MediaFolder"); } else if (e.PropertyName == "PhotoMediaFolder" || e.PropertyName == "MonitoredPhotoFolders") { if (this._monitoredPhotoFolders != null) { this._monitoredPhotoFolders = null; this.FirePropertyChanged("MonitoredPhotoFolders"); } if (this._photoMediaFolder == null) return; this._photoMediaFolder = null; this.FirePropertyChanged("PhotoMediaFolder"); } else if (e.PropertyName == "PodcastMediaFolder" || e.PropertyName == "MonitoredPodcastFolders") { if (this._monitoredPodcastFolders != null) { this._monitoredPodcastFolders = null; this.FirePropertyChanged("MonitoredPodcastFolders"); } if (this._podcastMediaFolder == null) return; this._podcastMediaFolder = null; this.FirePropertyChanged("PodcastMediaFolder"); } else { if (!(e.PropertyName == "VideoMediaFolder") && !(e.PropertyName == "MonitoredVideoFolders")) return; if (this._monitoredVideoFolders != null) { this._monitoredVideoFolders = null; this.FirePropertyChanged("MonitoredVideoFolders"); } if (this._videoMediaFolder == null) return; this._videoMediaFolder = null; this.FirePropertyChanged("VideoMediaFolder"); } }, null); public ListDataSet MonitoredAudioFolders { get { if (this._monitoredAudioFolders == null) { if (this.UsingWin7Libraries) this._monitoredAudioFolders = this.StringsToListDataSet(ClientConfiguration.Groveler.RipDirectory, ClientConfiguration.Groveler.MonitoredAudioFolders); else this._monitoredAudioFolders = this.StringsToListDataSet((object)ClientConfiguration.Groveler.MonitoredAudioFolders); } return this._monitoredAudioFolders; } } public ListDataSet MonitoredPhotoFolders { get { if (this._monitoredPhotoFolders == null) { if (this.UsingWin7Libraries) this._monitoredPhotoFolders = this.StringsToListDataSet(ClientConfiguration.Groveler.PhotoMediaFolder, ClientConfiguration.Groveler.MonitoredPhotoFolders); else this._monitoredPhotoFolders = this.StringsToListDataSet((object)ClientConfiguration.Groveler.MonitoredPhotoFolders); } return this._monitoredPhotoFolders; } } public ListDataSet MonitoredPodcastFolders { get { if (this._monitoredPodcastFolders == null) { if (this.UsingWin7Libraries) this._monitoredPodcastFolders = this.StringsToListDataSet(ClientConfiguration.Groveler.PodcastMediaFolder, ClientConfiguration.Groveler.MonitoredPodcastFolders); else this._monitoredPodcastFolders = this.StringsToListDataSet((object)ClientConfiguration.Groveler.MonitoredPodcastFolders); } return this._monitoredPodcastFolders; } } public ListDataSet MonitoredVideoFolders { get { if (this._monitoredVideoFolders == null) { if (this.UsingWin7Libraries) this._monitoredVideoFolders = this.StringsToListDataSet(ClientConfiguration.Groveler.VideoMediaFolder, ClientConfiguration.Groveler.MonitoredVideoFolders); else this._monitoredVideoFolders = this.StringsToListDataSet((object)ClientConfiguration.Groveler.MonitoredVideoFolders); } return this._monitoredVideoFolders; } } public bool Win7LibrariesAreAvailable => OSVersion.IsWin7(); public bool UsingWin7Libraries => this.Win7LibrariesAreAvailable && ClientConfiguration.Groveler.LibrarySync != -1; public void UseWin7Libraries() { foreach (ProxySettingDelegate proxySettingDelegate in this._actionsToCommitOnLibraryIntegrate) { if (this.CommitList.ContainsKey(proxySettingDelegate)) { this.CommitList.Remove(proxySettingDelegate); proxySettingDelegate(null); } } SQMLog.Log(SQMDataId.ZuneWin7LibraryOpt, 0); this.SetWin7LibrariesUsage(Win7LibrariesUsage.BeginIntegration); } public void DoNotUseWin7Libraries() { SQMLog.Log(SQMDataId.ZuneWin7LibraryOpt, 1); this.SetWin7LibrariesUsage(Win7LibrariesUsage.DoNotIntegrate); } private void SetWin7LibrariesUsage(Win7LibrariesUsage usage) { ClientConfiguration.Groveler.LibrarySync = (int)usage; this.FirePropertyChanged("UsingWin7Libraries"); } private ListDataSet StringsToListDataSet(params object[] source) { ListDataSet listDataSet = new ArrayListDataSet(this); if (source != null && source.Length > 0) { Dictionary dictionary = new Dictionary(); foreach (object obj in source) { if (obj != null) { if (!(obj is IEnumerable strings)) strings = (new string[1] { obj.ToString() }); if (strings != null) { foreach (string str in strings) { if (!string.IsNullOrEmpty(str)) { string lower = str.ToLower(); if (!dictionary.ContainsKey(lower)) { dictionary.Add(lower, null); listDataSet.Add(str); } } } } } } } listDataSet.Sort(); return listDataSet; } private IList ListDataSetToIList(ListDataSet listDataSet) { if (listDataSet == null) return new List(); IList stringList = new List(listDataSet.Count); for (int itemIndex = 0; itemIndex < listDataSet.Count; ++itemIndex) stringList.Add((string)listDataSet[itemIndex]); return stringList; } internal bool IsMonitored(ListDataSet monitoredFolders, string path) { DirectoryInfo directoryInfo = new DirectoryInfo(path); foreach (string monitoredFolder in monitoredFolders) { if (this.IsSubfolder(monitoredFolder, path)) return true; } return false; } private bool IsSubfolder(string root, string subfolder) { try { for (; subfolder != null; subfolder = Path.GetDirectoryName(subfolder)) { if (subfolder.Equals(root, StringComparison.OrdinalIgnoreCase)) return true; } } catch (ArgumentException ex) { } catch (PathTooLongException ex) { } return false; } public void AddMonitoredFolder(ListDataSet monitoredFolders) => FolderBrowseDialog.Show(Shell.LoadString(StringId.IDS_ADD_MONITORED_FOLDER_DIALOG_TITLE), args => { if (args == null) return; string str = (string)args; if (ZuneApplication.ZuneLibrary.CanAddFromFolder(str)) this.AddMonitoredFolder(monitoredFolders, str, false); else MessageBox.Show(Shell.LoadString(StringId.IDS_INVALID_MONITORED_FOLDER_TITLE), Shell.LoadString(StringId.IDS_INVALID_MONITORED_FOLDER_MESSAGE), null); }); public void AddMonitoredFolder(ListDataSet monitoredFolders, string path, bool commit) { bool flag = false; for (int itemIndex = 0; itemIndex < monitoredFolders.Count; ++itemIndex) { if (monitoredFolders[itemIndex].Equals(path)) { flag = true; break; } } if (!flag) monitoredFolders.Add(path); this.SaveMonitoredFolders(commit); } public void OpenMediaFile() => FileOpenDialog.Show(Shell.LoadString(StringId.IDS_OPEN_FILE_DIALOG_TITLE), this.MediaFolder, args => { }); public bool RemoveChildMonitoredFolders(string path, bool commit) { bool flag = false | this.RemoveChildMonitoredFolders(this.MonitoredAudioFolders, EMediaTypes.eMediaTypeAudio, path) | this.RemoveChildMonitoredFolders(this.MonitoredPhotoFolders, EMediaTypes.eMediaTypeImage, path) | this.RemoveChildMonitoredFolders(this.MonitoredPodcastFolders, EMediaTypes.eMediaTypePodcastEpisode, path) | this.RemoveChildMonitoredFolders(this.MonitoredVideoFolders, EMediaTypes.eMediaTypeVideo, path); this.SaveMonitoredFolders(commit); return flag; } private bool RemoveChildMonitoredFolders( ListDataSet monitoredFolders, EMediaTypes type, string path) { EWin7LibraryKind libraryKind; switch (type) { case EMediaTypes.eMediaTypeAudio: libraryKind = EWin7LibraryKind.eMusicLibrary; break; case EMediaTypes.eMediaTypeVideo: libraryKind = EWin7LibraryKind.eVideoLibrary; break; case EMediaTypes.eMediaTypeImage: libraryKind = EWin7LibraryKind.ePicturesLibrary; break; case EMediaTypes.eMediaTypePodcastEpisode: libraryKind = EWin7LibraryKind.ePodcastLibrary; break; default: return false; } List intList = new List(); for (int itemIndex = 0; itemIndex < monitoredFolders.Count; ++itemIndex) { if (this.IsSubfolder(path, (string)monitoredFolders[itemIndex])) intList.Add(itemIndex); } foreach (int num in intList) { if (this.UsingWin7Libraries) Win7ShellManager.Instance.RemoveLocationFromLibrary(libraryKind, out bool _, (string)monitoredFolders[num]); else this.RemoveMonitoredFolder(monitoredFolders, num, type); } return intList.Count > 0; } public void RemoveMonitoredFolder(ListDataSet monitoredFolders, string path, bool commit) { for (int index = 0; index < monitoredFolders.Count; ++index) { if (path.Equals((string)monitoredFolders[index], StringComparison.OrdinalIgnoreCase)) { this.RemoveMonitoredFolder(monitoredFolders, index, commit); break; } } } private void RemoveMonitoredFolder(ListDataSet monitoredFolders, int index) => this.RemoveMonitoredFolder(monitoredFolders, index, false); public void RemoveMonitoredFolder( ListDataSet monitoredFolders, int index, EMediaTypes mediaType) { if (this._removedMonitoredFoldersToRemoveFromCollection == null) this._removedMonitoredFoldersToRemoveFromCollection = new List(); this._removedMonitoredFoldersToRemoveFromCollection.Add(new MonitoredFolder((string)monitoredFolders[index], mediaType)); this.RemoveMonitoredFolder(monitoredFolders, index, false); } private void RemoveMonitoredFolder(ListDataSet monitoredFolders, int index, bool commit) { monitoredFolders.RemoveAt(index); this.SaveMonitoredFolders(commit); } private void SaveMonitoredFolders() => this.SaveMonitoredFolders(false); public void SaveMonitoredFolders(bool commit) { if (commit) this.OnMonitoredFoldersCommit(null); else this.CommitList[new ProxySettingDelegate(this.OnMonitoredFoldersCommit)] = null; } public void OpenLibraryDialog(EMediaTypes mediaType) { IntPtr winHandle = Application.Window.Handle; Thread thread = new Thread(args => { EWin7LibraryKind libraryKind = EWin7LibraryKind.eMusicLibrary; switch (mediaType) { case EMediaTypes.eMediaTypeAudio: libraryKind = EWin7LibraryKind.eMusicLibrary; break; case EMediaTypes.eMediaTypeVideo: libraryKind = EWin7LibraryKind.eVideoLibrary; break; case EMediaTypes.eMediaTypeImage: libraryKind = EWin7LibraryKind.ePicturesLibrary; break; case EMediaTypes.eMediaTypePodcastEpisode: libraryKind = EWin7LibraryKind.ePodcastLibrary; break; } Win7ShellManager.Instance.ShowLibraryDialog(libraryKind, winHandle, null, null); }); thread.TrySetApartmentState(ApartmentState.STA); thread.Start(); } private void OnMonitoredFoldersCommit(object data) { SQMLog.LogToStream(SQMDataId.MonitoredAudioFolders, (uint)this.MonitoredAudioFolders.Count); SQMLog.LogToStream(SQMDataId.MonitoredPhotoFolders, (uint)this.MonitoredPhotoFolders.Count); SQMLog.LogToStream(SQMDataId.MonitoredPodcastFolders, (uint)this.MonitoredPodcastFolders.Count); SQMLog.LogToStream(SQMDataId.MonitoredVideoFolders, (uint)this.MonitoredVideoFolders.Count); if (!this.UsingWin7Libraries) { if (this._removedMonitoredFoldersToRemoveFromCollection != null) { foreach (MonitoredFolder foldersToRemoveFrom in this._removedMonitoredFoldersToRemoveFromCollection) ZuneApplication.ZuneLibrary.DeleteRootFolder(foldersToRemoveFrom.Path, foldersToRemoveFrom.Schema); } ClientConfiguration.Groveler.MonitoredAudioFolders = this.ListDataSetToIList(this.MonitoredAudioFolders); ClientConfiguration.Groveler.MonitoredPhotoFolders = this.ListDataSetToIList(this.MonitoredPhotoFolders); ClientConfiguration.Groveler.MonitoredPodcastFolders = this.ListDataSetToIList(this.MonitoredPodcastFolders); ClientConfiguration.Groveler.MonitoredVideoFolders = this.ListDataSetToIList(this.MonitoredVideoFolders); this._removedMonitoredFoldersToRemoveFromCollection = null; this._monitoredAudioFolders = null; this._monitoredPhotoFolders = null; this._monitoredPodcastFolders = null; this._monitoredVideoFolders = null; } if (!this.HME.SharingEnabled) return; this.HME.SetSharedFoldersList(true); } public BooleanChoice AutoCopyCD { get { if (this._autoCopyCD == null) { this._autoCopyCD = new BooleanChoice(this, Shell.LoadString(StringId.IDS_AUTO_RIP)); this._autoCopyCD.Value = ClientConfiguration.Recorder.AutoCopyCD != 0; this._autoCopyCD.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnAutoCopyCDCommit)] = null; } return this._autoCopyCD; } } private void OnAutoCopyCDCommit(object data) => ClientConfiguration.Recorder.AutoCopyCD = this._autoCopyCD.Value ? 1 : 0; public BooleanChoice AutoEjectCD { get { if (this._autoEjectCD == null) { this._autoEjectCD = new BooleanChoice(this, Shell.LoadString(StringId.IDS_EJECT_AFTER_RIP)); this._autoEjectCD.Value = ClientConfiguration.Recorder.AutoEjectCD != 0; this._autoEjectCD.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnAutoEjectCDCommit)] = null; } return this._autoEjectCD; } } private void OnAutoEjectCDCommit(object data) => ClientConfiguration.Recorder.AutoEjectCD = this._autoEjectCD.Value ? 1 : 0; public bool MediaFolderHasSharedPathWithMonitoredFolder( string monitoredFolder, string mediaFolder) { bool flag = false; if (!string.IsNullOrEmpty(monitoredFolder) && !string.IsNullOrEmpty(mediaFolder)) { string localizedFolderPath1 = LocalizationHelper.GetLocalizedFolderPath(monitoredFolder); string localizedFolderPath2 = LocalizationHelper.GetLocalizedFolderPath(mediaFolder); if (localizedFolderPath1[localizedFolderPath1.Length - 1] != Path.PathSeparator) localizedFolderPath1 += (string)(object)Path.PathSeparator; if (localizedFolderPath2[localizedFolderPath2.Length - 1] != Path.PathSeparator) localizedFolderPath2 += (string)(object)Path.PathSeparator; flag = localizedFolderPath1.ToLower().IndexOf(localizedFolderPath2.ToLower()) == 0; } return flag; } public string MediaFolder { get { if (this._mediaFolder == null) this._mediaFolder = LocalizationHelper.GetLocalizedFolderPath(ClientConfiguration.Groveler.RipDirectory); return this._mediaFolder; } set { if (!(this._mediaFolder != value)) return; this.CommitList[new ProxySettingDelegate(this.OnMediaFolderCommit)] = null; this._mediaFolder = value; this.FirePropertyChanged(nameof(MediaFolder)); } } private void OnMediaFolderCommit(object data) { if (this.UsingWin7Libraries) return; ClientConfiguration.Groveler.RipDirectory = this._mediaFolder; this.UpdateSharedFoldersList(); this._mediaFolder = null; } public string VideoMediaFolder { get { if (this._videoMediaFolder == null) { this._videoMediaFolder = ClientConfiguration.Groveler.VideoMediaFolder; string[] strArray; string str; string videoMediaFolder; if (string.IsNullOrEmpty(this._videoMediaFolder) && ((HRESULT)ZuneApplication.ZuneLibrary.GetKnownFolders(out strArray, out strArray, out strArray, out strArray, out strArray, out str, out videoMediaFolder, out str, out str, out str)).IsSuccess) this._videoMediaFolder = LocalizationHelper.GetLocalizedFolderPath(videoMediaFolder); } return this._videoMediaFolder; } set { if (!(this._videoMediaFolder != value)) return; this.CommitList[new ProxySettingDelegate(this.OnVideoMediaFolderCommit)] = null; this._videoMediaFolder = value; this.FirePropertyChanged(nameof(VideoMediaFolder)); } } private void OnVideoMediaFolderCommit(object data) { if (this.UsingWin7Libraries) return; ClientConfiguration.Groveler.VideoMediaFolder = this._videoMediaFolder; this.UpdateSharedFoldersList(); this._videoMediaFolder = null; } public string PhotoMediaFolder { get { if (this._photoMediaFolder == null) { this._photoMediaFolder = ClientConfiguration.Groveler.PhotoMediaFolder; string[] strArray; string str; string photoMediaFolder; if (string.IsNullOrEmpty(this._photoMediaFolder) && ((HRESULT)ZuneApplication.ZuneLibrary.GetKnownFolders(out strArray, out strArray, out strArray, out strArray, out strArray, out str, out str, out photoMediaFolder, out str, out str)).IsSuccess) this._photoMediaFolder = LocalizationHelper.GetLocalizedFolderPath(photoMediaFolder); } return this._photoMediaFolder; } set { if (!(this._photoMediaFolder != value)) return; this.CommitList[new ProxySettingDelegate(this.OnPhotoMediaFolderCommit)] = null; this._photoMediaFolder = value; this.FirePropertyChanged(nameof(PhotoMediaFolder)); } } private void OnPhotoMediaFolderCommit(object data) { if (this.UsingWin7Libraries) return; ClientConfiguration.Groveler.PhotoMediaFolder = this._photoMediaFolder; this.UpdateSharedFoldersList(); this._photoMediaFolder = null; } public string PodcastMediaFolder { get { if (this._podcastMediaFolder == null) { this._podcastMediaFolder = ClientConfiguration.Groveler.PodcastMediaFolder; string[] strArray; string str; string podcastMediaFolder; if (string.IsNullOrEmpty(this._podcastMediaFolder) && ((HRESULT)ZuneApplication.ZuneLibrary.GetKnownFolders(out strArray, out strArray, out strArray, out strArray, out strArray, out str, out str, out str, out podcastMediaFolder, out str)).IsSuccess) this._podcastMediaFolder = LocalizationHelper.GetLocalizedFolderPath(podcastMediaFolder); } return this._podcastMediaFolder; } set { if (!(this._podcastMediaFolder != value)) return; this.CommitList[new ProxySettingDelegate(this.OnPodcastMediaFolderCommit)] = null; this._podcastMediaFolder = value; this.FirePropertyChanged(nameof(PodcastMediaFolder)); } } private void OnPodcastMediaFolderCommit(object data) { if (this.UsingWin7Libraries) return; ClientConfiguration.Groveler.PodcastMediaFolder = this._podcastMediaFolder; this.UpdateSharedFoldersList(); this._podcastMediaFolder = null; } private void UpdateSharedFoldersList() { if (!this.HME.SharingEnabled) return; this.HME.SetSharedFoldersList(true); } public void ChooseMediaFolder(MediaType mediaType) => FolderBrowseDialog.Show(Shell.LoadString(StringId.IDS_CHANGE_MEDIA_FOLDER_DIALOG_TITLE), args => { string folder = (string)args; if (folder == null) return; if (FolderBrowseDialog.CanWriteToFolder(folder) && ZuneApplication.ZuneLibrary.CanAddFromFolder(folder)) { switch (mediaType) { case MediaType.Track: this.MediaFolder = folder; break; case MediaType.Video: this.VideoMediaFolder = folder; break; case MediaType.Photo: this.PhotoMediaFolder = folder; break; case MediaType.Podcast: this.PodcastMediaFolder = folder; break; } } else MessageBox.Show(Shell.LoadString(StringId.IDS_INVALID_MEDIA_FOLDER_TITLE), Shell.LoadString(StringId.IDS_INVALID_MEDIA_FOLDER_MESSAGE), null); }, true); public BooleanChoice AutoEjectCDAfterBurn { get { if (this._autoEjectCDAfterBurn == null) { this._autoEjectCDAfterBurn = new BooleanChoice(this, Shell.LoadString(StringId.IDS_BURN_AUTO_EJECT_CHECK)); this._autoEjectCDAfterBurn.Value = ClientConfiguration.CDBurn.AutoEject; this._autoEjectCDAfterBurn.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnAutoEjectCDAfterBurnCommit)] = null; } return this._autoEjectCDAfterBurn; } } private void OnAutoEjectCDAfterBurnCommit(object data) => ClientConfiguration.CDBurn.AutoEject = this._autoEjectCDAfterBurn.Value; public Choice BurnFormat { get { if (this._burnDiscFormat == null) { this._burnDiscFormat = new Choice(this); this._burnDiscFormat.Options = (new NamedIntOption[2] { new NamedIntOption( null, Shell.LoadString(StringId.IDS_BURN_AUDIO_OPTION), 0), new NamedIntOption( null, Shell.LoadString(StringId.IDS_BURN_DATA_OPTION), 1) }); NamedIntOption.SelectOptionByValue(this._burnDiscFormat, ClientConfiguration.CDBurn.DiscFormat); this._burnDiscFormat.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnBurnDiscFormatCommit)] = null; } return this._burnDiscFormat; } } private void OnBurnDiscFormatCommit(object data) { ClientConfiguration.CDBurn.DiscFormat = ((NamedIntOption)this._burnDiscFormat.ChosenValue).Value; CDAccess.Instance.UpdateIsAudioBurn(); } public Choice BurnSpeed { get { if (this._burnSpeed == null) { this._burnSpeed = new Choice(this); this._burnSpeed.Options = (new NamedIntOption[4] { new NamedIntOption( null, Shell.LoadString(StringId.IDS_BURN_FASTEST_OPTION), 0), new NamedIntOption( null, Shell.LoadString(StringId.IDS_BURN_FAST_OPTION), 1), new NamedIntOption( null, Shell.LoadString(StringId.IDS_BURN_MEDIUM_OPTION), 2), new NamedIntOption( null, Shell.LoadString(StringId.IDS_BURN_SLOW_OPTION), 3) }); NamedIntOption.SelectOptionByValue(this._burnSpeed, ClientConfiguration.CDBurn.BurnSpeed); this._burnSpeed.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnBurnSpeedCommit)] = null; } return this._burnSpeed; } } private void OnBurnSpeedCommit(object data) => ClientConfiguration.CDBurn.BurnSpeed = ((NamedIntOption)this._burnSpeed.ChosenValue).Value; public BooleanChoice MediaInfoChoice { get { if (this._mediaInfoChoice == null) { StringId stringId = StringId.IDS_UPDATE_METADATA_CHECK; if (FeatureEnablement.IsFeatureEnabled(Features.eQuickMixZmp) || FeatureEnablement.IsFeatureEnabled(Features.eQuickMixLocal)) stringId = !FeatureEnablement.IsFeatureEnabled(Features.eMixview) ? StringId.IDS_UPDATE_METADATA_QUICKMIX_CHECK : StringId.IDS_UPDATE_METADATA_FEATURES_CHECK; this._mediaInfoChoice = new BooleanChoice(this, Shell.LoadString(stringId)); this._mediaInfoChoice.Value = ClientConfiguration.MediaStore.ConnectToInternetForAlbumMetadata; this._mediaInfoChoice.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnMediaInfoChoiceCommit)] = null; } return this._mediaInfoChoice; } } private void OnMediaInfoChoiceCommit(object data) => ClientConfiguration.MediaStore.ConnectToInternetForAlbumMetadata = this._mediaInfoChoice.Value; public void ScanAndClearDeletedMedia() => ZuneLibrary.ScanAndClearDeletedMedia(); public BooleanChoice SqmChoice { get { if (this._sqmChoice == null) { this._sqmChoice = new BooleanChoice(this, Shell.LoadString(StringId.IDS_USAGE_DATA_CHECK)); this._sqmChoice.Value = ClientConfiguration.SQM.UsageTracking; this._sqmChoice.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnSqmChoiceCommit)] = null; } return this._sqmChoice; } } private void OnSqmChoiceCommit(object data) { ClientConfiguration.SQM.UsageTracking = this._sqmChoice.Value; ClientConfiguration.FUE.AcceptedPrivacyStatement = this._sqmChoice.Value; } public Choice PodcastDefaultKeepEpisodesChoice { get { if (this._podcastDefaultKeepEpisodesChoice == null) { Choice choice = new Choice(this); choice.Options = NamedIntOption.PodcastKeepOptions; NamedIntOption.SelectOptionByValue(choice, ClientConfiguration.Series.PodcastDefaultKeepEpisodes); this._podcastDefaultKeepEpisodesChoice = choice; choice.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnPodcastDefaultKeepEpisodesChoiceCommit)] = null; } return this._podcastDefaultKeepEpisodesChoice; } } private void OnPodcastDefaultKeepEpisodesChoiceCommit(object data) => ClientConfiguration.Series.PodcastDefaultKeepEpisodes = ((NamedIntOption)this._podcastDefaultKeepEpisodesChoice.ChosenValue).Value; public Choice PodcastPlaybackChoice { get { if (this._podcastPlaybackChoice == null) { this._podcastPlaybackChoice = new Choice(this); this._podcastPlaybackChoice.Options = NamedIntOption.PodcastPlaybackOptions; NamedIntOption.SelectOptionByValue(this._podcastPlaybackChoice, ClientConfiguration.Series.PodcastDefaultPlaybackOrder); this._podcastPlaybackChoice.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnPodcastPlaybackChoiceCommit)] = null; } return this._podcastPlaybackChoice; } } private void OnPodcastPlaybackChoiceCommit(object data) => ClientConfiguration.Series.PodcastDefaultPlaybackOrder = ((NamedIntOption)this._podcastPlaybackChoice.ChosenValue).Value; public BooleanChoice MetadataChoice { get { if (this._metadataChoice == null) { Command[] commandArray = new Command[2]; Command command1 = new Command(this, Shell.LoadString(StringId.IDS_MISSING_METADATA), null); commandArray[0] = command1; Command command2 = new Command(this, Shell.LoadString(StringId.IDS_OVERWRITE_METADATA), null); commandArray[1] = command2; this._metadataChoice = new BooleanChoice(this); this._metadataChoice.Options = commandArray; this._metadataChoice.Value = ClientConfiguration.MediaStore.OverwriteAllMetadata; this._metadataChoice.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnMetadataChoiceCommit)] = null; } return this._metadataChoice; } } private void OnMetadataChoiceCommit(object data) => ClientConfiguration.MediaStore.OverwriteAllMetadata = this._metadataChoice.Value; public IList AudioFileTypes { get { if (this._audioFileTypes == null) this.PopulateFileTypes(); return (IList)this._audioFileTypes; } } public IList VideoFileTypes { get { if (this._videoFileTypes == null) this.PopulateFileTypes(); return (IList)this._videoFileTypes; } } private void PopulateFileTypes() { if (this._audioFileTypes != null && this._videoFileTypes != null) return; this._allFileTypes = new List(); this._audioFileTypes = new List(); this._videoFileTypes = new List(); HRESULT associationInfoList = this.FileAssocHandler.GetFileAssociationInfoList(out this._fileAssociationInfoList); if (associationInfoList.IsSuccess) { this.CanFileAssociationBeChanged = this.FileAssocHandler.CanAssociationBeChanged(); string format = Shell.LoadString(StringId.IDS_FILE_TYPES_DESCRIPTION_FORMAT); for (int index = 0; index < this._fileAssociationInfoList.Count; ++index) { string extension = this._fileAssociationInfoList[index].Extension; BooleanInputChoice booleanInputChoice = new BooleanInputChoice(this, string.Format(format, extension.Substring(1), _fileAssociationInfoList[index].Description), this.CanFileAssociationBeChanged); if (ClientConfiguration.FUE.ShowFUE && this.CanFileAssociationBeChanged && Array.IndexOf(this._defaultFileTypeExtensions, extension) >= 0) this._fileAssociationInfoList[index].IsCurrentlyOwned = true; booleanInputChoice.Value = this._fileAssociationInfoList[index].IsCurrentlyOwned; booleanInputChoice.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnFileTypesCommit)] = null; switch (this._fileAssociationInfoList[index].MediaType) { case EMediaTypes.eMediaTypeAudio: this._audioFileTypes.Add(booleanInputChoice); break; case EMediaTypes.eMediaTypeVideo: this._videoFileTypes.Add(booleanInputChoice); break; } this._allFileTypes.Add(booleanInputChoice); } } else ErrorDialogInfo.Show(associationInfoList.Int, Shell.LoadString(StringId.IDS_FILE_TYPES_ERROR_DIALOG_TITLE)); } private void OnFileTypesCommit(object data) { if (this.FileAssocHandler == null || !this.CanFileAssociationBeChanged) return; for (int index = 0; index < this._allFileTypes.Count; ++index) this._fileAssociationInfoList[index].IsCurrentlyOwned = this._allFileTypes[index].Value; HRESULT hresult = this.FileAssocHandler.SetFileAssociationInfo(this._fileAssociationInfoList); if (hresult.IsError) ErrorDialogInfo.Show(hresult.Int, Shell.LoadString(StringId.IDS_FILE_TYPES_ERROR_DIALOG_TITLE)); if (!Shell.SettingsFrame.Wizard.IsCurrent) return; Fue.Instance.SetFileTypeAssociationsAreSet(); } public void SelectAllFileTypes() { if (!this.CanFileAssociationBeChanged) return; for (int index = 0; index < this._allFileTypes.Count; ++index) this._allFileTypes[index].Value = true; } public void SaveFileTypesAsDefault() { if (!this.FileAssocHandler.CanAssociationBeChanged()) return; IList fileAssociationInfoList; HRESULT hresult = this.FileAssocHandler.GetFileAssociationInfoList(out fileAssociationInfoList); if (hresult.IsSuccess) { for (int index = 0; index < fileAssociationInfoList.Count; ++index) { if (Array.IndexOf(this._defaultFileTypeExtensions, fileAssociationInfoList[index].Extension) >= 0) fileAssociationInfoList[index].IsCurrentlyOwned = true; } hresult = this.FileAssocHandler.SetFileAssociationInfo(fileAssociationInfoList); if (!hresult.IsError) return; ErrorDialogInfo.Show(hresult.Int, Shell.LoadString(StringId.IDS_FILE_TYPES_ERROR_DIALOG_TITLE)); } else ErrorDialogInfo.Show(hresult.Int, Shell.LoadString(StringId.IDS_FILE_TYPES_ERROR_DIALOG_TITLE)); } public void ResetWarningMessages() { ClientConfiguration.MediaStore.LibraryDefaultDeleteChoice = 0; ClientConfiguration.MediaStore.PlaylistDefaultDeleteChoice = 0; ClientConfiguration.Pictures.DisplayAutouploadNotification = true; ClientConfiguration.Series.PodcastDefaultUnsubscribeChoice = 0; ClientConfiguration.Service.InhibitSubscriptionMachineCountExceededSignInWarning = false; ClientConfiguration.Service.InhibitSubscriptionBillingViolationSignInWarning = false; ClientConfiguration.Service.InhibitSubscriptionEndingWarning = false; ClientConfiguration.Service.InhibitSubscriptionFreePurchasePrompt = false; ClientConfiguration.Service.InhibitWinPhoneAppPurchaseConfirmation = false; ClientConfiguration.Service.InhibitReviewRefreshWarning = false; ClientConfiguration.Shell.ShowAppsForZuneHDOnlyHeader = true; ClientConfiguration.Shell.ShowAppsForWindowsPhoneOnlyHeader = true; ClientConfiguration.MediaStore.ConfirmAccountDevicePCDeletion = true; ClientConfiguration.MediaStore.ConfirmAccountDevicePortableDeletion = true; ClientConfiguration.MediaStore.ConfirmDeviceMediaDeletion = true; ClientConfiguration.MediaStore.ConfirmMultiAlbumEdit = true; ClientConfiguration.MediaStore.ConfirmMultiSongEdit = true; ClientConfiguration.MediaStore.ConfirmMultiVideoEdit = true; ClientConfiguration.MediaStore.ConfirmPasteAlbumArt = true; ClientConfiguration.MediaStore.AlertSyncAllFriendsBehavior = true; ClientConfiguration.Social.ConfirmAcceptFriend = true; ClientConfiguration.Social.ConfirmDeleteFriend = true; ClientConfiguration.QuickMix.OnlyEnableItemsWithQuickMix = false; ClientConfiguration.Devices.ShowExcludeFromSyncWarning = true; ClientConfiguration.Devices.ShowSyncInstructionsToast = true; foreach (UIDevice uiDevice in SingletonModelItem.Instance) uiDevice.PromptForAccountLinkage = true; } public bool InhibitSubscriptionMachineCountExceededSignInWarning { get => ClientConfiguration.Service.InhibitSubscriptionMachineCountExceededSignInWarning; set => ClientConfiguration.Service.InhibitSubscriptionMachineCountExceededSignInWarning = value; } public bool InhibitSubscriptionBillingViolationSignInWarning { get => ClientConfiguration.Service.InhibitSubscriptionBillingViolationSignInWarning; set => ClientConfiguration.Service.InhibitSubscriptionBillingViolationSignInWarning = value; } public bool InhibitSubscriptionEndingWarning { get => ClientConfiguration.Service.InhibitSubscriptionEndingWarning; set => ClientConfiguration.Service.InhibitSubscriptionEndingWarning = value; } public bool InhibitSubscriptionFreePurchasePrompt { get => ClientConfiguration.Service.InhibitSubscriptionFreePurchasePrompt; set => ClientConfiguration.Service.InhibitSubscriptionFreePurchasePrompt = value; } public int LibraryDefaultDeleteChoice { get => ClientConfiguration.MediaStore.LibraryDefaultDeleteChoice; set => ClientConfiguration.MediaStore.LibraryDefaultDeleteChoice = value; } public int PlaylistDefaultDeleteChoice { get => ClientConfiguration.MediaStore.PlaylistDefaultDeleteChoice; set => ClientConfiguration.MediaStore.PlaylistDefaultDeleteChoice = value; } public bool ConfirmAcceptFriend { get => ClientConfiguration.Social.ConfirmAcceptFriend; set => ClientConfiguration.Social.ConfirmAcceptFriend = value; } public bool ConfirmDeleteFriend { get => ClientConfiguration.Social.ConfirmDeleteFriend; set => ClientConfiguration.Social.ConfirmDeleteFriend = value; } public bool ConfirmAccountDevicePCDeletion { get => ClientConfiguration.MediaStore.ConfirmAccountDevicePCDeletion; set => ClientConfiguration.MediaStore.ConfirmAccountDevicePCDeletion = value; } public bool ConfirmAccountDevicePortableDeletion { get => ClientConfiguration.MediaStore.ConfirmAccountDevicePortableDeletion; set => ClientConfiguration.MediaStore.ConfirmAccountDevicePortableDeletion = value; } public bool ConfirmDeviceMediaDeletion { get => ClientConfiguration.MediaStore.ConfirmDeviceMediaDeletion; set => ClientConfiguration.MediaStore.ConfirmDeviceMediaDeletion = value; } public bool ConfirmMultiAlbumEdit { get => ClientConfiguration.MediaStore.ConfirmMultiAlbumEdit; set => ClientConfiguration.MediaStore.ConfirmMultiAlbumEdit = value; } public bool ConfirmMultiSongEdit { get => ClientConfiguration.MediaStore.ConfirmMultiSongEdit; set => ClientConfiguration.MediaStore.ConfirmMultiSongEdit = value; } public bool ConfirmMultiVideoEdit { get => ClientConfiguration.MediaStore.ConfirmMultiVideoEdit; set => ClientConfiguration.MediaStore.ConfirmMultiVideoEdit = value; } public bool ConfirmPasteAlbumArt { get => ClientConfiguration.MediaStore.ConfirmPasteAlbumArt; set => ClientConfiguration.MediaStore.ConfirmPasteAlbumArt = value; } public ArrayListDataSet DeviceList { get { if (this._registeredDevicesModelList == null) this.InitRegisteredTuners(); return this._registeredDevicesModelList; } } public ArrayListDataSet AppStoreDeviceList { get { if (this._registeredAppStoreDevicesModelList == null) this.InitRegisteredTuners(); return this._registeredAppStoreDevicesModelList; } } public ArrayListDataSet ComputerList { get { if (this._registeredComputersModelList == null) this.InitRegisteredTuners(); return this._registeredComputersModelList; } } public string NextPCDeregistrationDate { get => this._nextPCDeregistrationDate; private set { if (!(this._nextPCDeregistrationDate != value)) return; this._nextPCDeregistrationDate = value; this.FirePropertyChanged(nameof(NextPCDeregistrationDate)); } } public string NextSubscriptionDeviceDeregistrationDate { get => this._nextSubscriptionDeviceDeregistrationDate; private set { if (!(this._nextSubscriptionDeviceDeregistrationDate != value)) return; this._nextSubscriptionDeviceDeregistrationDate = value; this.FirePropertyChanged(nameof(NextSubscriptionDeviceDeregistrationDate)); } } public string NextAppStoreDeviceDeregistrationDate { get => this._nextAppStoreDeviceDeregistrationDate; private set { if (!(this._nextAppStoreDeviceDeregistrationDate != value)) return; this._nextAppStoreDeviceDeregistrationDate = value; this.FirePropertyChanged(nameof(NextAppStoreDeviceDeregistrationDate)); } } public bool CanShowDeviceList { get { if (this._tunerHandler == null) this.InitRegisteredTuners(); return this._tunerHandler.CanQueryTunerList(); } } public void RemoveTuner(TunerInfo tunerInfo) { if (this._tunerHandler == null) this.InitRegisteredTuners(); this._tunerHandler.DeregisterTuner(tunerInfo); } public void RefreshTunerList() { if (!this._tunerHandler.CanQueryTunerList()) return; this._tunerHandler.RefreshTunerList(); } private void OnTunerInfoChanged(object oSenderUNUSED, EventArgs eargs) { if (eargs != null && eargs.GetType() == typeof(EventArgsHR) && ((EventArgsHR)eargs).HResult == HRESULT._ZEST_E_TOO_MANY_DEREGISTRATIONS_WITHIN_MONTH) Application.DeferredInvoke(new DeferredInvokeHandler(this.DisplayServiceErrorMessage), eargs); else Application.DeferredInvoke(new DeferredInvokeHandler(this.UpdateRegisteredTunersList), DeferredInvokePriority.Normal); } private void DisplayServiceErrorMessage(object eargs) => Shell.ShowErrorDialog(((EventArgsHR)eargs).HResult, StringId.IDS_REGDEVICES_CANT_REMOVE); private void UpdateRegisteredTunersList(object argsUNUSED) { if (this._registeredComputersModelList == null || this._registeredDevicesModelList == null || this._registeredAppStoreDevicesModelList == null) return; int count1 = this._registeredComputersModelList.Count; int count2 = this._registeredDevicesModelList.Count; int count3 = this._registeredAppStoreDevicesModelList.Count; this._registeredComputersModelList.Clear(); this._registeredDevicesModelList.Clear(); this._registeredAppStoreDevicesModelList.Clear(); foreach (object pcs in this._tunerHandler.GetPCsList()) this._registeredComputersModelList.Add(pcs); foreach (object devices in this._tunerHandler.GetDevicesList()) this._registeredDevicesModelList.Add(devices); foreach (object appStoreDevices in this._tunerHandler.GetAppStoreDevicesList()) this._registeredAppStoreDevicesModelList.Add(appStoreDevices); DateTime deregistrationDate1 = this._tunerHandler.GetNextPCDeregistrationDate(); this.NextPCDeregistrationDate = !(deregistrationDate1 != DateTime.MinValue) || !(deregistrationDate1 > DateTime.Now) ? null : deregistrationDate1.AddDays(1.0).ToShortDateString(); DateTime deregistrationDate2 = this._tunerHandler.GetNextSubscriptionDeviceDeregistrationDate(); this.NextSubscriptionDeviceDeregistrationDate = !(deregistrationDate2 != DateTime.MinValue) || !(deregistrationDate2 > DateTime.Now) ? null : deregistrationDate2.AddDays(1.0).ToShortDateString(); DateTime deregistrationDate3 = this._tunerHandler.GetNextAppStoreDeviceDeregistrationDate(); this.NextAppStoreDeviceDeregistrationDate = !(deregistrationDate3 != DateTime.MinValue) || !(deregistrationDate3 > DateTime.Now) ? null : deregistrationDate3.AddDays(1.0).ToShortDateString(); if (this._registeredComputersModelList.Count >= count1 && this._registeredDevicesModelList.Count >= count2 && this._registeredAppStoreDevicesModelList.Count >= count3) return; SignIn.Instance.RefreshAccount(); } private void InitRegisteredTuners() { this._tunerHandler = TunerInfoHandlerFactory.CreateTunerInfoHandler(); this._tunerHandler.OnChanged += new EventHandler(this.OnTunerInfoChanged); this._registeredComputersModelList = new ArrayListDataSet(); this._registeredDevicesModelList = new ArrayListDataSet(); this._registeredAppStoreDevicesModelList = new ArrayListDataSet(); this._nextPCDeregistrationDate = null; this._nextSubscriptionDeviceDeregistrationDate = null; this._nextAppStoreDeviceDeregistrationDate = null; if (!this._tunerHandler.CanQueryTunerList()) return; this._tunerHandler.RefreshTunerList(); } public IntRangedValue SlideShowSpeed { get { if (this._slideShowSpeed == null) { this._slideShowSpeed = new IntRangedValue(this); this._slideShowSpeed.MinValue = 3000; this._slideShowSpeed.MaxValue = 10000; this._slideShowSpeed.Step = 1000; this._slideShowSpeed.Value = ClientConfiguration.GeneralSettings.SlideShowSpeed; this._slideShowSpeed.PropertyChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnSlideShowSpeedCommit)] = null; } return this._slideShowSpeed; } } private void OnSlideShowSpeedCommit(object data) => ClientConfiguration.GeneralSettings.SlideShowSpeed = this._slideShowSpeed.Value; public HMESettings HME { get { if (this._HME == null) { lock (this.mylock) { if (this._HME == null) { HMESettings hmeSettings = new HMESettings(); int num = ((HRESULT)hmeSettings.Init()).IsError ? 1 : 0; this._sharingAllDevicesEnabled = hmeSettings.GetAllDevicesEnabled(); this._HME = hmeSettings; } } } return this._HME; } } public bool UserCanModifySharing => Environment.OSVersion.Version.Major >= 6 || !this.SharingEnableRequiresElevation || this.SharingEnabled; public bool SharingEnableRequiresElevation => Environment.OSVersion.Version.Major < 6 ? this.HME.SharingEnableRequiresLoginAsAdmin : this.HME.SharingEnableRequiresElevation; public bool SharingEnabled => this.HME.SharingEnabled; private void SetSharingEnabledForAllMediaTypes(bool music, bool video, bool pictures) { this.HME.SetSharingEnabledForMediaType(EMediaTypes.eMediaTypeAudio, music); this.HME.SetSharingEnabledForMediaType(EMediaTypes.eMediaTypeVideo, video); this.HME.SetSharingEnabledForMediaType(EMediaTypes.eMediaTypeImage, pictures); } private void OnMediaSharingUpdate(object data) { if (this.HME == null) return; bool flag = this._sharingEnableMusic.Value || this._sharingEnableVideo.Value || this._sharingEnablePhoto.Value; HRESULT hresult1 = 0; if (flag) { if (((HRESULT)this.HME.EnableSharingForUser()).IsSuccess) this.SetSharingEnabledForAllMediaTypes(this._sharingEnableMusic.Value, this._sharingEnableVideo.Value, this._sharingEnablePhoto.Value); else this.SetSharingEnabledForAllMediaTypes(false, false, false); } else { HRESULT hresult2 = this.HME.DisableSharingForMachine(); if (hresult2.IsSuccess) hresult2 = this.HME.DisableSharingForUser(); if (hresult2.IsSuccess) this.SetSharingEnabledForAllMediaTypes(false, false, false); } this.HME.SetAllDevicesEnabled(this._sharingAllDevicesEnabled); if (!this._sharingAllDevicesEnabled) this.HME.EnableDevice(this._sharingDeviceIndex, true); this.HME.SetDisplayName(this._sharingDisplayName); } public string SharingDisplayName { get { if (this._sharingDisplayName == null) this.HME.GetDisplayName(ref this._sharingDisplayName); return this._sharingDisplayName; } set { if (string.IsNullOrEmpty(value)) { this.SharingError = Shell.LoadString(StringId.IDS_SHARE_NAME_EMPTY); } else { if (!(this._sharingDisplayName != value)) return; this.SharingError = string.Empty; this._sharingDisplayName = value; this.CommitList[new ProxySettingDelegate(this.OnMediaSharingUpdate)] = null; } } } public string SharingError { get => this._sharingError; set { if (!(this._sharingError != value)) return; this._sharingError = value; this.FirePropertyChanged(nameof(SharingError)); } } public BooleanChoice SharingEnableMusic { get { if (this._sharingEnableMusic == null) { this._sharingEnableMusic = new BooleanChoice(this, Shell.LoadString(StringId.IDS_SHARE_MUSIC_CHECK)); this._sharingEnableMusic.Value = this.HME.GetSharingEnabledForMediaType(EMediaTypes.eMediaTypeAudio); this._sharingEnableMusic.ChosenChanged += (sender, args) => { this.CommitList[new ProxySettingDelegate(this.OnMediaSharingUpdate)] = null; if (!this.SharingEnableRequiresElevation) return; this.ChangeRequiresElevation = true; }; } return this._sharingEnableMusic; } } public BooleanChoice SharingEnableVideo { get { if (this._sharingEnableVideo == null) { this._sharingEnableVideo = new BooleanChoice(this, Shell.LoadString(StringId.IDS_SHARE_VIDEOS_CHECK)); this._sharingEnableVideo.Value = this.HME.GetSharingEnabledForMediaType(EMediaTypes.eMediaTypeVideo); this._sharingEnableVideo.ChosenChanged += (sender, args) => { this.CommitList[new ProxySettingDelegate(this.OnMediaSharingUpdate)] = null; if (!this.SharingEnableRequiresElevation) return; this.ChangeRequiresElevation = true; }; } return this._sharingEnableVideo; } } public BooleanChoice SharingEnablePhoto { get { if (this._sharingEnablePhoto == null) { this._sharingEnablePhoto = new BooleanChoice(this, Shell.LoadString(StringId.IDS_SHARE_PICTURES_CHECK)); this._sharingEnablePhoto.Value = this.HME.GetSharingEnabledForMediaType(EMediaTypes.eMediaTypeImage); this._sharingEnablePhoto.ChosenChanged += (sender, args) => { this.CommitList[new ProxySettingDelegate(this.OnMediaSharingUpdate)] = null; if (!this.SharingEnableRequiresElevation) return; this.ChangeRequiresElevation = true; }; } return this._sharingEnablePhoto; } } public Choice SharingSelectDeviceChoice { get { if (this._sharingSelectDeviceChoice == null) { this._sharingSelectDeviceOptions = new List(); Command command1 = new Command(this, Shell.LoadString(StringId.IDS_GLOBAL_SHARING_OPTION), null); command1.Data.Add("value", true); this._sharingSelectDeviceOptions.Add(command1); Command command2 = new Command(this, Shell.LoadString(StringId.IDS_SELECTIVE_SHARING_OPTION), null); command2.Data.Add("value", false); command2.Available = this.SharingEnabled; this._sharingSelectDeviceOptions.Add(command2); this._sharingSelectDeviceChoice = new Choice(this); this._sharingSelectDeviceChoice.Options = (IList)this._sharingSelectDeviceOptions; this._sharingSelectDeviceChoice.ChosenChanged += (sender, args) => this.SharingAllDevicesEnabled = (bool)this._sharingSelectDeviceOptions[((Choice)sender).ChosenIndex].Data["value"]; } return this._sharingSelectDeviceChoice; } } public bool SharingAllDevicesEnabled { get => this._sharingAllDevicesEnabled; set { if (this._sharingAllDevicesEnabled == value) return; this._sharingAllDevicesEnabled = value; this.CommitList[new ProxySettingDelegate(this.OnMediaSharingUpdate)] = null; this.FirePropertyChanged(nameof(SharingAllDevicesEnabled)); } } public IList SharingDeviceList { get { if (this._sharingDeviceList == null) this._sharingDeviceList = this.CreateSharingDeviceList(); return (IList)this._sharingDeviceList; } } private IList CreateSharingDeviceList() { IList booleanInputChoiceList = new List(); uint deviceCount = this.HME.GetDeviceCount(); string strName = ""; string strMAC = ""; string strSerialNumber = ""; for (uint dwIndex = 0; dwIndex < deviceCount; ++dwIndex) { this.HME.GetDeviceProps(dwIndex, ref strName, ref strMAC, ref strSerialNumber); BooleanInputChoice booleanInputChoice = new BooleanInputChoice(this, deviceCount > 1U ? string.Format(Shell.LoadString(StringId.IDS_XBOX360_NAME_AND_SERIAL_NUMBER), strName, strSerialNumber) : strName, true); booleanInputChoice.Data["index"] = dwIndex; booleanInputChoice.Value = this.HME.GetDeviceEnabled(dwIndex); booleanInputChoice.ChosenChanged += new EventHandler(this.HandleSharingDeviceListValueChanged); booleanInputChoiceList.Add(booleanInputChoice); } if (!this._nssDeviceListChangeEventAdded) { this.HME.NSSDeviceListChangeEvent += new NSSDeviceListChangeHandler(this.HandleNSSDeviceListChangeEvent); this._nssDeviceListChangeEventAdded = true; } return booleanInputChoiceList; } public void RemoveNSSDeviceListChangeEvent() { if (!this._nssDeviceListChangeEventAdded) return; this.HME.NSSDeviceListChangeEvent -= new NSSDeviceListChangeHandler(this.HandleNSSDeviceListChangeEvent); this._nssDeviceListChangeEventAdded = false; this._sharingDeviceList = null; } private void HandleNSSDeviceListChangeEvent() => Application.DeferredInvoke(delegate { if (this._sharingDeviceList == null) return; this._sharingDeviceList = this.CreateSharingDeviceList(); this.FirePropertyChanged("SharingDeviceList"); }, null); private void HandleSharingDeviceListValueChanged(object sender, EventArgs args) => this._sharingDeviceIndex = (uint)((ModelItem)sender).Data["index"]; public bool ReevaluateVideoSettings { get => ClientConfiguration.GeneralSettings.ReevaluateVideoSettings; set { ClientConfiguration.GeneralSettings.ReevaluateVideoSettings = value; this.FirePropertyChanged(nameof(ReevaluateVideoSettings)); } } public RenderingType RequestedRenderingType { get { RenderingType renderingType = (RenderingType)ClientConfiguration.GeneralSettings.RenderingType; if (renderingType == RenderingType.Default) renderingType = Application.RenderingType; return renderingType; } set { ClientConfiguration.GeneralSettings.RenderingType = (int)value; this.ReevaluateVideoSettings = Application.RenderingType != RenderingType.DX9 && value == RenderingType.DX9; this.FirePropertyChanged(nameof(RequestedRenderingType)); } } private void ReevaluateVideoAcceleration(object sender, EventArgs args) => this.RequestedRenderingType = RenderingType.DX9; public RenderingQuality RequestedRenderingQuality { get => (RenderingQuality)ClientConfiguration.GeneralSettings.RenderingQuality; set { ClientConfiguration.GeneralSettings.RenderingQuality = (int)value; this.FirePropertyChanged(nameof(RequestedRenderingQuality)); } } public bool AnimationsEnabled { get => ClientConfiguration.GeneralSettings.AnimationsEnabled; set { ClientConfiguration.GeneralSettings.AnimationsEnabled = value; this.FirePropertyChanged(nameof(AnimationsEnabled)); } } public Choice ScreenGraphicsSlider { get { if (this._screenGraphicsSlider == null) { Choice choice = new Choice(this); choice.Options = NamedIntOption.ScreenGraphicsOptions; ScreenGraphics screenGraphics = Application.RenderingType != RenderingType.GDI ? (Application.RenderingQuality != RenderingQuality.MaxQuality ? (!Application.AnimationsEnabled ? ScreenGraphics.Advanced : ScreenGraphics.AdvancedWithAnimation) : ScreenGraphics.Premium) : ScreenGraphics.Basic; NamedIntOption.SelectOptionByValue(choice, (int)screenGraphics); this._screenGraphicsSlider = choice; choice.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnScreenGraphicsSliderCommit)] = null; } return this._screenGraphicsSlider; } } private void OnScreenGraphicsSliderCommit(object data) { ScreenGraphics screenGraphics = (ScreenGraphics)((NamedIntOption)this._screenGraphicsSlider.ChosenValue).Value; RenderingType requestedRenderingType = this.RequestedRenderingType; switch (screenGraphics) { case ScreenGraphics.Basic: this.RequestedRenderingType = RenderingType.GDI; this.RequestedRenderingQuality = RenderingQuality.MinQuality; this.AnimationsEnabled = false; break; case ScreenGraphics.Advanced: this.RequestedRenderingType = RenderingType.DX9; this.RequestedRenderingQuality = RenderingQuality.MinQuality; this.AnimationsEnabled = false; break; case ScreenGraphics.AdvancedWithAnimation: this.RequestedRenderingType = RenderingType.DX9; this.RequestedRenderingQuality = RenderingQuality.MinQuality; this.AnimationsEnabled = true; break; case ScreenGraphics.Premium: this.RequestedRenderingType = RenderingType.DX9; this.RequestedRenderingQuality = RenderingQuality.MaxQuality; this.AnimationsEnabled = true; break; } if (requestedRenderingType == RenderingType.GDI && this.RequestedRenderingType == RenderingType.DX9) MessageBox.Show(Shell.LoadString(StringId.IDS_SCREEN_GRAPHICS_TITLE), Shell.LoadString(StringId.IDS_ACCELERATION_PROMPT_TEXT), null); else MessageBox.Show(Shell.LoadString(StringId.IDS_SCREEN_GRAPHICS_TITLE), Shell.LoadString(StringId.IDS_ACCELERATION_RESTART_TEXT), null); } public string BackgroundImage { get { if (this._backgroundImage == null) this._backgroundImage = ClientConfiguration.Shell.BackgroundImage; return this._backgroundImage; } set { if (!(this._backgroundImage != value)) return; this.CommitList[new ProxySettingDelegate(this.OnBackgroundImageCommit)] = null; this._backgroundImage = value; this.FirePropertyChanged(nameof(BackgroundImage)); } } public WindowColor BackgroundColor { get => this._backgroundColor; set => this._backgroundColor = value; } private void OnBackgroundImageCommit(object data) { ClientConfiguration.Shell.BackgroundImage = this._backgroundImage; ClientConfiguration.Shell.BackgroundColor = Shell.WindowColorToRGB(this._backgroundColor); ((Shell)ZuneShell.DefaultInstance).BackgroundImage = this._backgroundImage; Application.Window.SetBackgroundColor(this._backgroundColor); } public BooleanChoice ShowNowPlayingBackgroundOnIdle { get { if (this._showNowPlayingBackgroundOnIdle == null) { this._showNowPlayingBackgroundOnIdle = new BooleanChoice(this, Shell.LoadString(StringId.IDS_SHOW_NOWPLAYING_ON_IDLE_DESCRIPTION)); this._showNowPlayingBackgroundOnIdle.Value = ClientConfiguration.Shell.ShowNowPlayingBackgroundOnIdleTimeout > 0; this._showNowPlayingBackgroundOnIdle.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnShowNowPlayingBackgroundOnIdleCommit)] = null; } return this._showNowPlayingBackgroundOnIdle; } } private void OnShowNowPlayingBackgroundOnIdleCommit(object data) { int num = this._showNowPlayingBackgroundOnIdle.Value ? 90 : 0; ClientConfiguration.Shell.ShowNowPlayingBackgroundOnIdleTimeout = num; ((Shell)ZuneShell.DefaultInstance).ShowNowPlayingBackgroundOnIdleTimeout = num; } public BooleanChoice PlaySounds { get { if (this._playSounds == null) { this._playSounds = new BooleanChoice(this, Shell.LoadString(StringId.IDS_SOUNDS_DESCRIPTION)); this._playSounds.Value = ClientConfiguration.Shell.Sounds; this._playSounds.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnPlaySoundsCommit)] = null; } return this._playSounds; } } private void OnPlaySoundsCommit(object data) { ClientConfiguration.Shell.Sounds = this._playSounds.Value; ((Shell)ZuneShell.DefaultInstance).PlaySounds = this._playSounds.Value; } public BooleanChoice CompactModeAlwaysOnTop { get { if (this._compactModeAlwaysOnTop == null) { this._compactModeAlwaysOnTop = new BooleanChoice(this, Shell.LoadString(StringId.IDS_COMPACT_MODE_ALWAYS_ON_TOP)); this._compactModeAlwaysOnTop.Value = ClientConfiguration.GeneralSettings.CompactModeAlwaysOnTop; this._compactModeAlwaysOnTop.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnCompactModeAlwaysOnTopCommit)] = null; } return this._compactModeAlwaysOnTop; } } private void OnCompactModeAlwaysOnTopCommit(object data) { ClientConfiguration.GeneralSettings.CompactModeAlwaysOnTop = this._compactModeAlwaysOnTop.Value; ((Shell)ZuneShell.DefaultInstance).CompactModeAlwaysOnTop = this._compactModeAlwaysOnTop.Value; SQMLog.Log(SQMDataId.CompactModeOnTopSetting, 1); } public BooleanChoice RatingsChoice { get { if (this._ratingsChoice == null) { Command[] commandArray = new Command[2] { new RichLayoutCommand( this, Shell.LoadString(StringId.IDS_COMMON_RATINGS_ALL_USERS_OPTION), true), new RichLayoutCommand( this, Shell.LoadString(StringId.IDS_PERSONAL_RATINGS_EACH_USER_OPTION), false) }; this._ratingsChoice = new BooleanChoice(this); this._ratingsChoice.Options = commandArray; this._ratingsChoice.Value = !ClientConfiguration.MediaStore.SharedUserRatings; this._ratingsChoice.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnRatingsCommit)] = null; } return this._ratingsChoice; } } private void OnRatingsCommit(object data) { ClientConfiguration.MediaStore.SharedUserRatings = !this._ratingsChoice.Value; if (!this._applyRatingsChoice.Value || this._ratingsChoice.Value) return; ZuneLibrary.ExportUserRatings(SignIn.Instance.LastSignedInUserId, EMediaTypes.eMediaTypeAudio); } public BooleanChoice ApplyRatingsChoice { get { if (this._applyRatingsChoice == null) { this._applyRatingsChoice = new BooleanChoice(this, Shell.LoadString(StringId.IDS_APPLY_RATINGS_DIALOG_DESCRIPTION)); this._applyRatingsChoice.Value = false; this._applyRatingsChoice.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnRatingsCommit)] = null; } return this._applyRatingsChoice; } } public Choice StartupPageChoice { get { if (this._startupPageChoice == null) { List commandList = new List(); if (FeatureEnablement.IsFeatureEnabled(Features.eQuickplay)) commandList.Add(new NamedStringOption(Shell.LoadString(StringId.IDS_VIEW_STARTUPPAGE_QUICKPLAY_CHOICE), Shell.MainFrame.Quickplay.DefaultUIPath)); commandList.Add(new NamedStringOption(Shell.LoadString(StringId.IDS_VIEW_STARTUPPAGE_COLLECTION_CHOICE), Shell.MainFrame.Collection.DefaultUIPath)); if (FeatureEnablement.IsFeatureEnabled(Features.eMarketplace)) commandList.Add(new NamedStringOption(Shell.LoadString(StringId.IDS_VIEW_STARTUPPAGE_MARKETPLACE_CHOICE), Shell.MainFrame.Marketplace.DefaultUIPath)); if (FeatureEnablement.IsFeatureEnabled(Features.eSocial)) commandList.Add(new NamedStringOption(Shell.LoadString(StringId.IDS_VIEW_STARTUPPAGE_SOCIAL_CHOICE), Shell.MainFrame.Social.DefaultUIPath)); this._startupPageChoice = new Choice(this); this._startupPageChoice.Options = commandList; foreach (NamedStringOption namedStringOption in commandList) { if (namedStringOption.Value == ClientConfiguration.Shell.StartupPage) { this._startupPageChoice.ChosenValue = namedStringOption; break; } } this._startupPageChoice.ChosenChanged += (sender, args) => this.CommitList[new ProxySettingDelegate(this.OnStartupPageCommit)] = null; } return this._startupPageChoice; } } private void OnStartupPageCommit(object data) { ClientConfiguration.Shell.StartupPage = ((NamedStringOption)this._startupPageChoice.ChosenValue).Value; ClientConfiguration.Quickplay.CheckUseCount = false; } public bool AutoLaunchZuneOnConnect { get => this._autoLaunchZuneOnConnect; set { if (this._autoLaunchZuneOnConnect == value) return; this._autoLaunchZuneOnConnect = value; this.CommitList[new ProxySettingDelegate(this.OnAutoLaunchZuneOnConnectCommit)] = null; this.FirePropertyChanged(nameof(AutoLaunchZuneOnConnect)); } } private void OnAutoLaunchZuneOnConnectCommit(object data) => ClientConfiguration.Devices.AutoLaunchZuneOnConnect = this._autoLaunchZuneOnConnect; private struct MonitoredFolder { public readonly string Path; public readonly EMediaTypes Schema; public MonitoredFolder(string path, EMediaTypes schema) { this.Path = path; this.Schema = schema; } } } }