mirror of
https://github.com/ZuneDev/ZuneShell.dll.git
synced 2026-07-27 13:11:51 -07:00
1199 lines
52 KiB
C#
1199 lines
52 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: ZuneUI.DeviceManagement
|
|
// 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 System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Text;
|
|
using UIXControls;
|
|
|
|
namespace ZuneUI
|
|
{
|
|
public class DeviceManagement : ModelItem
|
|
{
|
|
private static UIDevice _setupDevice;
|
|
private static bool _setupQueueHandlingLocked = false;
|
|
private static MessageBox _deviceOOBEIncompleteDialog;
|
|
private int[] _defaultBitRates = new int[5]
|
|
{
|
|
96,
|
|
128,
|
|
192,
|
|
256,
|
|
320
|
|
};
|
|
private string errorMessage;
|
|
private bool validatingCreds;
|
|
private string _friendlyNameOnDevice;
|
|
private int _deviceNameMaxLength = 32;
|
|
private Choice _enableMarketplaceChoice;
|
|
private BooleanChoice _enableMarketplacePurchase;
|
|
private MarketplaceCredentialsForDevice _marketplaceCredentials;
|
|
private float _reservedSpaceOnDevice = float.NaN;
|
|
private Choice _musicSyncChoice;
|
|
private Choice _videoSyncChoice;
|
|
private Choice _photoSyncChoice;
|
|
private Choice _podcastSyncChoice;
|
|
private Choice _friendSyncChoice;
|
|
private Choice _channelSyncChoice;
|
|
private Choice _applicationSyncChoice;
|
|
private BooleanChoice _dontSyncDislikedContent;
|
|
private Command _formatNotifier;
|
|
private int _transcodeSizeLimit = -1;
|
|
private bool _transcodeInBG;
|
|
private bool _transcodeInBGIsSet;
|
|
private string _transcodedFilesCachePath;
|
|
private IList<Command> _bitRateList;
|
|
private Choice _audioConversionChoice;
|
|
private IList<Command> _audioConversionOptions;
|
|
private string _audioThresholdBitRate;
|
|
private string _audioTargetBitRate;
|
|
private Choice _videoConversionChoice;
|
|
private IList<Command> _videoConversionOptions;
|
|
private string _cameraRollDestinationPath;
|
|
private string _savedFolderDestinationPath;
|
|
private Choice _deleteAfterReverseSyncChoice;
|
|
private IList<Command> _deleteAfterReverseSyncOptions;
|
|
private Choice _imageQualitySyncChoice;
|
|
private IList<Command> _imageQualitySyncOptions;
|
|
private SyncGroupList _syncGroups;
|
|
private BooleanChoice _privacyChoice;
|
|
public static bool NavigatingToWizard = false;
|
|
internal static DeviceSetupHashtable SetupQueue = new DeviceSetupHashtable();
|
|
|
|
private UIDevice ActiveDevice => SyncControls.Instance.CurrentDeviceOverride;
|
|
|
|
protected override void OnDispose(bool disposing)
|
|
{
|
|
base.OnDispose(disposing);
|
|
SignIn.Instance.TempPasswordStorage = null;
|
|
WirelessSync.Instance = null;
|
|
SignIn.Instance.SignInStatusUpdatedEvent -= new EventHandler(this.OnSignInStatusUpdatedEvent);
|
|
}
|
|
|
|
internal static event DeviceConnectionHandledEventHandler DeviceConnectionHandled;
|
|
|
|
public string ErrorMessage
|
|
{
|
|
get => this.errorMessage;
|
|
set
|
|
{
|
|
if (!(this.errorMessage != value))
|
|
return;
|
|
this.errorMessage = value;
|
|
this.FirePropertyChanged(nameof(ErrorMessage));
|
|
}
|
|
}
|
|
|
|
public bool ValidatingCredentials
|
|
{
|
|
get => this.validatingCreds;
|
|
set
|
|
{
|
|
if (this.validatingCreds == value)
|
|
return;
|
|
this.validatingCreds = value;
|
|
this.FirePropertyChanged(nameof(ValidatingCredentials));
|
|
}
|
|
}
|
|
|
|
public static void NavigateToWizardMode(CategoryPageNode node, Category category)
|
|
{
|
|
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();
|
|
NavigateToWizardMode(node, category);
|
|
};
|
|
Command noCommand = new Command(null, Shell.LoadString(StringId.IDS_DIALOG_NO), null);
|
|
noCommand.Invoked += (sender, args) =>
|
|
{
|
|
management.CommitList = null;
|
|
NavigateToWizardMode(node, category);
|
|
};
|
|
MessageBox.Show(Shell.LoadString(StringId.IDS_SAVE_CHANGES_DIALOG_TITLE), Shell.LoadString(StringId.IDS_SAVE_CHANGES_ON_BACK_DIALOG_TEXT), yesCommand, noCommand, null);
|
|
}
|
|
else
|
|
{
|
|
NavigatingToWizard = true;
|
|
if (Shell.SettingsFrame.IsCurrent && !Shell.SettingsFrame.Wizard.FUE.IsCurrent)
|
|
management.CurrentCategoryPage.CancelAndExit();
|
|
Application.DeferredInvoke(delegate
|
|
{
|
|
if (category != null)
|
|
node.Invoke(category);
|
|
else
|
|
node.Invoke();
|
|
}, null);
|
|
}
|
|
}
|
|
|
|
public static UIDevice SetupDevice
|
|
{
|
|
get => _setupDevice;
|
|
set
|
|
{
|
|
if (_setupDevice == value)
|
|
return;
|
|
if (value == null)
|
|
{
|
|
_setupQueueHandlingLocked = false;
|
|
SetupQueue.Remove(_setupDevice.ID);
|
|
}
|
|
_setupDevice = value;
|
|
if (_setupDevice == null || Shell.SettingsFrame.IsCurrent)
|
|
return;
|
|
PhoneBrandingStringMap.Instance.BrandingEnabled = _setupDevice.SupportsBrandingType(DeviceBranding.WindowsPhone);
|
|
KinBrandingStringMap.Instance.BrandingEnabled = _setupDevice.SupportsBrandingType(DeviceBranding.Kin);
|
|
}
|
|
}
|
|
|
|
internal static void HandleSetupQueue()
|
|
{
|
|
if (_setupQueueHandlingLocked)
|
|
return;
|
|
_setupQueueHandlingLocked = true;
|
|
SetupDevice = null;
|
|
List<int> intList = new List<int>();
|
|
foreach (DictionaryEntry setup in SetupQueue)
|
|
{
|
|
UIDevice uiDevice = (UIDevice)setup.Value;
|
|
if (!uiDevice.IsConnectedToClient)
|
|
{
|
|
intList.Add(uiDevice.ID);
|
|
}
|
|
else
|
|
{
|
|
SetupDevice = uiDevice;
|
|
break;
|
|
}
|
|
}
|
|
foreach (int num in intList)
|
|
SetupQueue.Remove(num);
|
|
if (SetupDevice == null)
|
|
_setupQueueHandlingLocked = false;
|
|
else
|
|
HandleCurrentSetupDevice();
|
|
}
|
|
|
|
public static void HandleCurrentSetupDevice()
|
|
{
|
|
if (SetupDevice == null)
|
|
return;
|
|
if (SetupDevice.SupportsOOBECompleted)
|
|
{
|
|
if (!SetupDevice.OOBECompleted)
|
|
{
|
|
SingletonModelItem<UIDeviceList>.Instance.HideDevice(SetupDevice);
|
|
ShowDeviceOOBEIncompleteDialog();
|
|
SetupDevice = null;
|
|
return;
|
|
}
|
|
HideDeviceOOBEIncompleteDialog();
|
|
}
|
|
if (SetupDevice.RequiresClientUpdate)
|
|
{
|
|
SingletonModelItem<UIDeviceList>.Instance.HideDevice(SetupDevice);
|
|
MessageBox.Show(Shell.LoadString(StringId.IDS_CLIENT_UPDATE_HEADER), Shell.LoadString(StringId.IDS_CLIENT_UPDATE_DESC), (sender, args) => ClientUpdate.Instance.InvokeClientUpdate());
|
|
SetupDevice = null;
|
|
}
|
|
else if (!UIDeviceList.IsSuitableForConnection(SetupDevice))
|
|
{
|
|
if (SetupDevice.RequiresAutoRestore)
|
|
ZuneShell.DefaultInstance.NavigateToPage(new AutoRestoreLandPage());
|
|
else
|
|
ZuneShell.DefaultInstance.NavigateToPage(new FirstConnectLandPage());
|
|
}
|
|
else
|
|
{
|
|
UIFirmwareUpdater uiFirmwareUpdater = SetupDevice.UIFirmwareUpdater;
|
|
if (uiFirmwareUpdater != null)
|
|
{
|
|
bool launchWizardIfUpdatesFound = SetupDevice.SupportsBrandingType(DeviceBranding.WindowsPhone);
|
|
uiFirmwareUpdater.StartCheckForUpdates(SetupDevice.RequiresFirmwareUpdate, launchWizardIfUpdatesFound);
|
|
}
|
|
EndDeviceHandling(false, true);
|
|
}
|
|
}
|
|
|
|
public static void HideSetupDevice()
|
|
{
|
|
SingletonModelItem<UIDeviceList>.Instance.HideDevice(SetupDevice);
|
|
SetupDevice = null;
|
|
}
|
|
|
|
public void SetupComplete(bool navigateToLandingPage)
|
|
{
|
|
if (SetupDevice == null)
|
|
return;
|
|
if (this.ActiveDevice.IsValid)
|
|
{
|
|
this.ActiveDevice.PromptForAccountLinkage = true;
|
|
SyncControls.Instance.ChangeIntoSetupDevice = false;
|
|
EndDeviceHandling(true, navigateToLandingPage);
|
|
ZuneShell.DefaultInstance.Management.DisposeDeviceManagement(false);
|
|
}
|
|
else
|
|
this.ErrorMessage = Shell.LoadString(StringId.IDS_SYNC_SETUP_COMPLETION_ERROR);
|
|
}
|
|
|
|
private static void EndDeviceHandling(bool comingOutOfFirstConnect, bool navigateToLandingPage)
|
|
{
|
|
if (SetupDevice == null)
|
|
return;
|
|
SetupDevice.Enumerate();
|
|
SyncControls instance = SyncControls.Instance;
|
|
if (!Shell.SettingsFrame.IsCurrent || comingOutOfFirstConnect)
|
|
instance.SetCurrentDeviceIfNecessary(SetupDevice, comingOutOfFirstConnect);
|
|
if (!SetupDevice.IsGuest && SetupDevice.HasFailedLogin)
|
|
instance.AddDeviceToFailedSignInQueue(SetupDevice);
|
|
if (SetupDevice.SupportsBrandingType(DeviceBranding.WindowsPhone) || SetupDevice.SupportsBrandingType(DeviceBranding.Kin))
|
|
{
|
|
instance.ShowPhoneWelcomeMessage = true;
|
|
ClientConfiguration.Devices.HasPhoneBeenConnected = true;
|
|
}
|
|
if (navigateToLandingPage && comingOutOfFirstConnect && !(ZuneShell.DefaultInstance.CurrentPage is Deviceland))
|
|
Shell.MainFrame.Device.Invoke();
|
|
instance.ShowSyncInstructionsToast = true;
|
|
if (DeviceConnectionHandled != null)
|
|
DeviceConnectionHandled(null, new DeviceConnectionHandledEventArgs(SetupDevice, comingOutOfFirstConnect));
|
|
SetupDevice = null;
|
|
}
|
|
|
|
internal static void ShowDeviceOOBEIncompleteDialog()
|
|
{
|
|
if (_deviceOOBEIncompleteDialog != null)
|
|
return;
|
|
_deviceOOBEIncompleteDialog = MessageBox.Show(Shell.LoadString(StringId.IDS_PHONE_OOBE_INCOMPLETE_TITLE), Shell.LoadString(StringId.IDS_PHONE_OOBE_INCOMPLETE_DESCRIPTION), null, null, null, (sender, args) => HideDeviceOOBEIncompleteDialog(), null);
|
|
}
|
|
|
|
internal static void HideDeviceOOBEIncompleteDialog()
|
|
{
|
|
if (_deviceOOBEIncompleteDialog == null)
|
|
return;
|
|
_deviceOOBEIncompleteDialog.Hide();
|
|
_deviceOOBEIncompleteDialog = null;
|
|
}
|
|
|
|
public Choice MusicSyncChoice
|
|
{
|
|
get
|
|
{
|
|
if (this._musicSyncChoice == null)
|
|
this._musicSyncChoice = this.GenerateSyncModeChoice(SyncCategory.Music);
|
|
return this._musicSyncChoice;
|
|
}
|
|
private set
|
|
{
|
|
if (this._musicSyncChoice == value)
|
|
return;
|
|
this._musicSyncChoice = value;
|
|
this.FirePropertyChanged(nameof(MusicSyncChoice));
|
|
}
|
|
}
|
|
|
|
public Choice VideoSyncChoice
|
|
{
|
|
get
|
|
{
|
|
if (this._videoSyncChoice == null)
|
|
this._videoSyncChoice = this.GenerateSyncModeChoice(SyncCategory.Video);
|
|
return this._videoSyncChoice;
|
|
}
|
|
private set
|
|
{
|
|
if (this._videoSyncChoice == value)
|
|
return;
|
|
this._videoSyncChoice = value;
|
|
this.FirePropertyChanged(nameof(VideoSyncChoice));
|
|
}
|
|
}
|
|
|
|
public Choice PhotoSyncChoice
|
|
{
|
|
get
|
|
{
|
|
if (this._photoSyncChoice == null)
|
|
this._photoSyncChoice = this.GenerateSyncModeChoice(SyncCategory.Photo);
|
|
return this._photoSyncChoice;
|
|
}
|
|
private set
|
|
{
|
|
if (this._photoSyncChoice == value)
|
|
return;
|
|
this._photoSyncChoice = value;
|
|
this.FirePropertyChanged(nameof(PhotoSyncChoice));
|
|
}
|
|
}
|
|
|
|
public Choice PodcastSyncChoice
|
|
{
|
|
get
|
|
{
|
|
if (this._podcastSyncChoice == null)
|
|
this._podcastSyncChoice = this.GenerateSyncModeChoice(SyncCategory.Podcast);
|
|
return this._podcastSyncChoice;
|
|
}
|
|
private set
|
|
{
|
|
if (this._podcastSyncChoice == value)
|
|
return;
|
|
this._podcastSyncChoice = value;
|
|
this.FirePropertyChanged(nameof(PodcastSyncChoice));
|
|
}
|
|
}
|
|
|
|
public Choice FriendSyncChoice
|
|
{
|
|
get
|
|
{
|
|
if (this._friendSyncChoice == null)
|
|
this._friendSyncChoice = this.GenerateSyncModeChoice(SyncCategory.Friend);
|
|
return this._friendSyncChoice;
|
|
}
|
|
private set
|
|
{
|
|
if (this._friendSyncChoice == value)
|
|
return;
|
|
this._friendSyncChoice = value;
|
|
this.FirePropertyChanged(nameof(FriendSyncChoice));
|
|
}
|
|
}
|
|
|
|
public Choice ChannelSyncChoice
|
|
{
|
|
get
|
|
{
|
|
if (this._channelSyncChoice == null)
|
|
this._channelSyncChoice = this.GenerateSyncModeChoice(SyncCategory.Channel);
|
|
return this._channelSyncChoice;
|
|
}
|
|
private set
|
|
{
|
|
if (this._channelSyncChoice == value)
|
|
return;
|
|
this._channelSyncChoice = value;
|
|
this.FirePropertyChanged(nameof(ChannelSyncChoice));
|
|
}
|
|
}
|
|
|
|
public Choice ApplicationSyncChoice
|
|
{
|
|
get
|
|
{
|
|
if (this._applicationSyncChoice == null)
|
|
this._applicationSyncChoice = this.GenerateSyncModeChoice(SyncCategory.Application);
|
|
return this._applicationSyncChoice;
|
|
}
|
|
private set
|
|
{
|
|
if (this._applicationSyncChoice == value)
|
|
return;
|
|
this._applicationSyncChoice = value;
|
|
this.FirePropertyChanged(nameof(ApplicationSyncChoice));
|
|
}
|
|
}
|
|
|
|
private Choice GenerateSyncModeChoice(SyncCategory syncType)
|
|
{
|
|
Choice choice = new Choice(this);
|
|
List<SyncModeOptionPair> syncModeOptionPairList = new List<SyncModeOptionPair>();
|
|
string name1 = "";
|
|
string name2 = "";
|
|
string name3 = null;
|
|
EventHandler eventHandler = null;
|
|
switch (syncType)
|
|
{
|
|
case SyncCategory.Music:
|
|
name1 = Shell.LoadString(StringId.IDS_SYNC_ALL_OPTION_MUSIC);
|
|
name2 = Shell.LoadString(StringId.IDS_LET_ME_CHOOSE_OPTION_MUSIC);
|
|
name3 = Shell.LoadString(StringId.IDS_MANUAL_OPTION_MUSIC);
|
|
eventHandler = new EventHandler(this.HandleMusicSyncOptionChanged);
|
|
break;
|
|
case SyncCategory.Video:
|
|
name1 = Shell.LoadString(StringId.IDS_SYNC_ALL_OPTION_VIDEOS);
|
|
name2 = Shell.LoadString(StringId.IDS_LET_ME_CHOOSE_OPTION_VIDEOS);
|
|
name3 = Shell.LoadString(StringId.IDS_MANUAL_OPTION_VIDEOS);
|
|
eventHandler = new EventHandler(this.HandleVideoSyncOptionChanged);
|
|
break;
|
|
case SyncCategory.Photo:
|
|
name1 = Shell.LoadString(StringId.IDS_SYNC_ALL_OPTION_PICTURES);
|
|
name2 = Shell.LoadString(StringId.IDS_LET_ME_CHOOSE_OPTION_PICTURES);
|
|
name3 = Shell.LoadString(StringId.IDS_MANUAL_OPTION_PICTURES);
|
|
eventHandler = new EventHandler(this.HandlePhotoSyncOptionChanged);
|
|
break;
|
|
case SyncCategory.Podcast:
|
|
name1 = Shell.LoadString(StringId.IDS_SYNC_ALL_OPTION_PODCASTS);
|
|
name2 = Shell.LoadString(StringId.IDS_LET_ME_CHOOSE_OPTION_PODCASTS);
|
|
eventHandler = new EventHandler(this.HandlePodcastSyncOptionChanged);
|
|
break;
|
|
case SyncCategory.Friend:
|
|
name1 = Shell.LoadString(StringId.IDS_SYNC_ALL_OPTION_FRIENDS);
|
|
name2 = Shell.LoadString(StringId.IDS_LET_ME_CHOOSE_OPTION_FRIENDS);
|
|
eventHandler = new EventHandler(this.HandleFriendSyncOptionChanged);
|
|
break;
|
|
case SyncCategory.Channel:
|
|
name1 = Shell.LoadString(StringId.IDS_SYNC_ALL_OPTION_CHANNELS);
|
|
name2 = Shell.LoadString(StringId.IDS_LET_ME_CHOOSE_OPTION_CHANNELS);
|
|
eventHandler = new EventHandler(this.HandleChannelSyncOptionChanged);
|
|
break;
|
|
case SyncCategory.Application:
|
|
name1 = Shell.LoadString(StringId.IDS_SYNC_ALL_OPTION_APPLICATIONS);
|
|
name2 = Shell.LoadString(StringId.IDS_LET_ME_CHOOSE_OPTION_APPLICATIONS);
|
|
name3 = Shell.LoadString(StringId.IDS_MANUAL_OPTION_APPLICATIONS);
|
|
eventHandler = new EventHandler(this.HandleApplicationSyncOptionChanged);
|
|
break;
|
|
}
|
|
SyncModeOptionPair syncModeOptionPair1 = new SyncModeOptionPair(name1, SyncMode.SyncAll);
|
|
syncModeOptionPairList.Add(syncModeOptionPair1);
|
|
SyncModeOptionPair syncModeOptionPair2 = new SyncModeOptionPair(name2, SyncMode.LetMeChoose);
|
|
syncModeOptionPairList.Add(syncModeOptionPair2);
|
|
if (!string.IsNullOrEmpty(name3))
|
|
{
|
|
SyncModeOptionPair syncModeOptionPair3 = new SyncModeOptionPair(name3, SyncMode.Manual);
|
|
syncModeOptionPairList.Add(syncModeOptionPair3);
|
|
}
|
|
bool flag1 = this.ActiveDevice.IsSyncAllFor(syncType, true);
|
|
bool flag2 = !string.IsNullOrEmpty(name3) && this.ActiveDevice.IsManualFor(syncType, true);
|
|
choice.Options = syncModeOptionPairList;
|
|
choice.ChosenIndex = flag2 ? 2 : (flag1 ? 0 : 1);
|
|
if (eventHandler != null)
|
|
choice.ChosenChanged += eventHandler;
|
|
return choice;
|
|
}
|
|
|
|
private void HandleMusicSyncOptionChanged(object sender, EventArgs args) => ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnMusicSyncChoiceCommit)] = CommitDeviceID;
|
|
|
|
private void OnMusicSyncChoiceCommit(object data) => this.OnCategorySyncChoiceCommit(SyncCategory.Music, ((SyncModeOptionPair)this._musicSyncChoice.ChosenValue).Mode);
|
|
|
|
private void HandleVideoSyncOptionChanged(object sender, EventArgs args) => ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnVideoSyncChoiceCommit)] = CommitDeviceID;
|
|
|
|
private void OnVideoSyncChoiceCommit(object data) => this.OnCategorySyncChoiceCommit(SyncCategory.Video, ((SyncModeOptionPair)this._videoSyncChoice.ChosenValue).Mode);
|
|
|
|
private void HandlePhotoSyncOptionChanged(object sender, EventArgs args) => ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnPhotoSyncChoiceCommit)] = CommitDeviceID;
|
|
|
|
private void OnPhotoSyncChoiceCommit(object data) => this.OnCategorySyncChoiceCommit(SyncCategory.Photo, ((SyncModeOptionPair)this._photoSyncChoice.ChosenValue).Mode);
|
|
|
|
private void HandlePodcastSyncOptionChanged(object sender, EventArgs args) => ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnPodcastSyncChoiceCommit)] = CommitDeviceID;
|
|
|
|
private void OnPodcastSyncChoiceCommit(object data) => this.OnCategorySyncChoiceCommit(SyncCategory.Podcast, ((SyncModeOptionPair)this._podcastSyncChoice.ChosenValue).Mode);
|
|
|
|
private void HandleFriendSyncOptionChanged(object sender, EventArgs args)
|
|
{
|
|
if (((SyncModeOptionPair)this._friendSyncChoice.ChosenValue).Mode == SyncMode.SyncAll)
|
|
UIDevice.WarnUserAboutFriendSyncSize();
|
|
ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnFriendSyncChoiceCommit)] = CommitDeviceID;
|
|
}
|
|
|
|
private void OnFriendSyncChoiceCommit(object data)
|
|
{
|
|
if (!this.DeviceHasTag)
|
|
return;
|
|
this.OnCategorySyncChoiceCommit(SyncCategory.Friend, ((SyncModeOptionPair)this._friendSyncChoice.ChosenValue).Mode);
|
|
}
|
|
|
|
private void HandleChannelSyncOptionChanged(object sender, EventArgs args) => ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnChannelSyncChoiceCommit)] = CommitDeviceID;
|
|
|
|
private void OnChannelSyncChoiceCommit(object data)
|
|
{
|
|
if (!this.DeviceHasTag)
|
|
return;
|
|
this.OnCategorySyncChoiceCommit(SyncCategory.Channel, ((SyncModeOptionPair)this._channelSyncChoice.ChosenValue).Mode);
|
|
}
|
|
|
|
private void HandleApplicationSyncOptionChanged(object sender, EventArgs args) => ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnApplicationSyncChoiceCommit)] = CommitDeviceID;
|
|
|
|
private void OnApplicationSyncChoiceCommit(object data) => this.OnCategorySyncChoiceCommit(SyncCategory.Application, ((SyncModeOptionPair)this._applicationSyncChoice.ChosenValue).Mode);
|
|
|
|
private void OnCategorySyncChoiceCommit(SyncCategory cat, SyncMode mode)
|
|
{
|
|
if (!this.ActiveDevice.IsValid)
|
|
return;
|
|
SyncMode syncMode = this.ActiveDevice.GetSyncMode(cat);
|
|
this.ActiveDevice.SetSyncMode(cat, mode);
|
|
this.HandleSyncOptionChanges(syncMode, mode);
|
|
}
|
|
|
|
private void HandleSyncOptionChanges(SyncMode oldMode, SyncMode mode)
|
|
{
|
|
if (mode == oldMode)
|
|
return;
|
|
CategoryPage currentCategoryPage = ZuneShell.DefaultInstance.Management.CurrentCategoryPage;
|
|
}
|
|
|
|
public void FormatCurrentDevice() => MessageBox.Show(Shell.LoadString(StringId.IDS_FORMAT_DIALOG_TITLE), Shell.LoadString(StringId.IDS_FORMAT_DIALOG_TEXT), new EventHandler(this.ConfirmedFormatDevice), null);
|
|
|
|
private void ConfirmedFormatDevice(object sender, EventArgs e)
|
|
{
|
|
this.FormatBegun.Invoke();
|
|
SyncControls.Instance.CurrentDevice.Format();
|
|
}
|
|
|
|
public Command FormatBegun
|
|
{
|
|
get
|
|
{
|
|
if (this._formatNotifier == null)
|
|
this._formatNotifier = new Command(this);
|
|
return this._formatNotifier;
|
|
}
|
|
}
|
|
|
|
public BooleanChoice DontSyncDislikedContentChoice
|
|
{
|
|
get
|
|
{
|
|
if (this._dontSyncDislikedContent == null)
|
|
{
|
|
this._dontSyncDislikedContent = new BooleanChoice(this, Shell.LoadString(StringId.IDS_DONT_SYNC_DISLIKED_CONTENT));
|
|
this._dontSyncDislikedContent.Value = this.ActiveDevice.ExcludeDislikedContent;
|
|
this._dontSyncDislikedContent.ChosenChanged += (sender, args) => ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnDontSyncDislikedContentChoiceCommit)] = CommitDeviceID;
|
|
}
|
|
return this._dontSyncDislikedContent;
|
|
}
|
|
}
|
|
|
|
private void OnDontSyncDislikedContentChoiceCommit(object data) => this.ActiveDevice.ExcludeDislikedContent = this.DontSyncDislikedContentChoice.Value;
|
|
|
|
public Choice DeleteAfterReverseSyncChoice
|
|
{
|
|
get
|
|
{
|
|
if (this._deleteAfterReverseSyncChoice == null)
|
|
{
|
|
this._deleteAfterReverseSyncOptions = new List<Command>();
|
|
this._deleteAfterReverseSyncOptions.Add(new Command(this, Shell.LoadString(StringId.IDS_PHOTOS_SETTINGS_LEAVE_AFTER_REVERSE_SYNC), null));
|
|
this._deleteAfterReverseSyncOptions.Add(new Command(this, Shell.LoadString(StringId.IDS_PHOTOS_SETTINGS_DELETE_AFTER_REVERSE_SYNC), null));
|
|
this._deleteAfterReverseSyncChoice = new Choice(this);
|
|
this._deleteAfterReverseSyncChoice.Options = (IList)this._deleteAfterReverseSyncOptions;
|
|
this._deleteAfterReverseSyncChoice.DefaultIndex = this.ActiveDevice.DeletePicsFromPhoneAfterReverseSync ? 1 : 0;
|
|
this._deleteAfterReverseSyncChoice.DefaultValue();
|
|
this._deleteAfterReverseSyncChoice.ChosenChanged += (sender, args) => ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnDeleteAfterReverseSyncCommit)] = CommitDeviceID;
|
|
}
|
|
return this._deleteAfterReverseSyncChoice;
|
|
}
|
|
}
|
|
|
|
private void OnDeleteAfterReverseSyncCommit(object data) => this.ActiveDevice.DeletePicsFromPhoneAfterReverseSync = this.DeleteAfterReverseSyncChoice.ChosenIndex == 1;
|
|
|
|
public string FriendlyNameOnDevice
|
|
{
|
|
get
|
|
{
|
|
if (this._friendlyNameOnDevice == null)
|
|
this._friendlyNameOnDevice = this.ActiveDevice.Name;
|
|
return this._friendlyNameOnDevice;
|
|
}
|
|
set
|
|
{
|
|
string errorMessage;
|
|
if (this.IsDeviceNameValid(value, out errorMessage))
|
|
{
|
|
if (this._friendlyNameOnDevice != value)
|
|
{
|
|
this._friendlyNameOnDevice = value;
|
|
ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnFriendlyNameOnDeviceCommit)] = CommitDeviceID;
|
|
this.FirePropertyChanged(nameof(FriendlyNameOnDevice));
|
|
}
|
|
this.ErrorMessage = null;
|
|
}
|
|
else
|
|
this.ErrorMessage = errorMessage;
|
|
}
|
|
}
|
|
|
|
private void OnFriendlyNameOnDeviceCommit(object data) => this.ActiveDevice.Name = this._friendlyNameOnDevice.Trim();
|
|
|
|
private bool IsDeviceNameValid(string name, out string errorMessage)
|
|
{
|
|
if (string.IsNullOrEmpty(name))
|
|
{
|
|
errorMessage = Shell.LoadString(StringId.IDS_DEVICE_NAME_EMPTY);
|
|
return false;
|
|
}
|
|
if (name.Length > this._deviceNameMaxLength)
|
|
{
|
|
errorMessage = Shell.LoadString(StringId.IDS_DEVICE_NAME_TOO_LONG);
|
|
return false;
|
|
}
|
|
if (this.DeviceNameHasInvalidCharacters(name))
|
|
{
|
|
errorMessage = Shell.LoadString(StringId.IDS_DEVICE_NAME_INVALID_CHARS);
|
|
return false;
|
|
}
|
|
errorMessage = null;
|
|
return true;
|
|
}
|
|
|
|
private bool DeviceNameHasInvalidCharacters(string name)
|
|
{
|
|
if (this.ActiveDevice.SupportsBrandingType(DeviceBranding.WindowsPhone))
|
|
{
|
|
if (name.IndexOfAny(Path.GetInvalidFileNameChars()) != -1)
|
|
return true;
|
|
}
|
|
try
|
|
{
|
|
new UnicodeEncoding(false, false, true).GetBytes(name);
|
|
return false;
|
|
}
|
|
catch (EncoderFallbackException ex)
|
|
{
|
|
return true;
|
|
}
|
|
catch (ArgumentException ex)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public void CheckForAutomatedRequirements()
|
|
{
|
|
}
|
|
|
|
public MarketplaceCredentialsForDevice MarketplaceCredentials => this._marketplaceCredentials;
|
|
|
|
public Choice EnableMarketplaceChoice
|
|
{
|
|
get
|
|
{
|
|
if (this._enableMarketplaceChoice == null)
|
|
{
|
|
this._enableMarketplaceChoice = new Choice(this);
|
|
this._enableMarketplaceChoice.Options = (new Command[2]
|
|
{
|
|
new Command( this, Shell.LoadString(StringId.IDS_SKIP_FOR_NOW_OPTION), null),
|
|
new Command( this, Shell.LoadString(StringId.IDS_ENABLE_ZUNE_MARKETPLACE_OPTION), null)
|
|
});
|
|
this._marketplaceCredentials = new MarketplaceCredentialsForDevice(null, null, this.ActiveDevice.PurchaseEnabled, !Shell.SettingsFrame.Wizard.IsCurrent && !string.IsNullOrEmpty(this.ActiveDevice.ZuneTag), this.ActiveDevice.ZuneTag, this._enableMarketplaceChoice);
|
|
if (Shell.SettingsFrame.Wizard.IsCurrent)
|
|
{
|
|
this.MarketplaceCredentials.Email = SignIn.GetPassportIdFromUserId(SignIn.Instance.LastSignedInUserId);
|
|
this._enableMarketplaceChoice.DefaultIndex = string.IsNullOrEmpty(this.MarketplaceCredentials.Email) ? 0 : 1;
|
|
ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnMarketplaceCredentialsCommit)] = CommitDeviceID;
|
|
}
|
|
else
|
|
this._enableMarketplaceChoice.DefaultIndex = string.IsNullOrEmpty(this.ActiveDevice.ZuneTag) ? 0 : 1;
|
|
this._enableMarketplaceChoice.DefaultValue();
|
|
this._enableMarketplaceChoice.ChosenChanged += (sender, args) =>
|
|
{
|
|
ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnMarketplaceCredentialsCommit)] = CommitDeviceID;
|
|
this.FirePropertyChanged(nameof(EnableMarketplaceChoice));
|
|
};
|
|
}
|
|
return this._enableMarketplaceChoice;
|
|
}
|
|
}
|
|
|
|
private void OnMarketplaceCredentialsCommit(object data)
|
|
{
|
|
if (this.EnableMarketplaceChoice.ChosenIndex == 0)
|
|
{
|
|
this.ActiveDevice.ClearAccountAssociation();
|
|
}
|
|
else
|
|
{
|
|
this.ActiveDevice.SetGeoId();
|
|
this.ActiveDevice.PurchaseEnabled = this._marketplaceCredentials.PurchaseEnabled;
|
|
if (this.ActiveDevice.AssociateWithAccount(this._marketplaceCredentials.UserGuid, this._marketplaceCredentials.ZuneTag).IsSuccess)
|
|
this.ActiveDevice.SendMarketplaceCredentials(this._marketplaceCredentials.Email, this._marketplaceCredentials.Password);
|
|
else
|
|
this.ActiveDevice.ClearAccountAssociation();
|
|
}
|
|
}
|
|
|
|
public bool IsDevicePurchaseEnabled
|
|
{
|
|
get
|
|
{
|
|
if (this.MarketplaceCredentials == null)
|
|
return this.ActiveDevice.PurchaseEnabled;
|
|
return this.MarketplaceCredentials.IsAssociated && this.MarketplaceCredentials.PurchaseEnabled;
|
|
}
|
|
}
|
|
|
|
public bool IsAssociated => this.MarketplaceCredentials != null ? this.MarketplaceCredentials.IsAssociated : !string.IsNullOrEmpty(this.ActiveDevice.ZuneTag);
|
|
|
|
public bool DeviceHasTag
|
|
{
|
|
get
|
|
{
|
|
bool flag = false;
|
|
if (this.IsPartnered)
|
|
{
|
|
flag = SyncControls.Instance.CurrentDeviceOverride.UserId > 0;
|
|
if (!flag)
|
|
flag = this.IsAssociated;
|
|
}
|
|
return flag;
|
|
}
|
|
}
|
|
|
|
public BooleanChoice EnableMarketplacePurchase
|
|
{
|
|
get
|
|
{
|
|
if (this._enableMarketplacePurchase == null)
|
|
{
|
|
this._enableMarketplacePurchase = new BooleanChoice(this, Shell.LoadString(StringId.IDS_ENABLE_DEVICE_PURCHASE));
|
|
this._enableMarketplacePurchase.Value = this.MarketplaceCredentials.PurchaseEnabled;
|
|
this._enableMarketplacePurchase.ChosenChanged += (sender, args) => this.MarketplaceCredentials.PurchaseEnabled = this._enableMarketplacePurchase.Value;
|
|
}
|
|
return this._enableMarketplacePurchase;
|
|
}
|
|
}
|
|
|
|
public void ValidatePassportAccount(string email, string password)
|
|
{
|
|
if (email == string.Empty || password == string.Empty)
|
|
{
|
|
this.ErrorMessage = Shell.LoadString(StringId.IDS_VERIFY_CREDS_ERROR);
|
|
this.MarketplaceCredentials.PurchaseEnabled = false;
|
|
this.MarketplaceCredentials.ZuneTag = string.Empty;
|
|
this.FirePropertyChanged("MarketplaceCredentials");
|
|
}
|
|
else
|
|
{
|
|
this.ErrorMessage = string.Empty;
|
|
this.ValidatingCredentials = true;
|
|
this.MarketplaceCredentials.Email = email;
|
|
this.MarketplaceCredentials.Password = password;
|
|
SignIn.Instance.SignOut();
|
|
SignIn.Instance.SignInStatusUpdatedEvent += new EventHandler(this.OnSignInStatusUpdatedEvent);
|
|
SignIn.Instance.SignInUser(email, password);
|
|
}
|
|
}
|
|
|
|
private void OnSignInStatusUpdatedEvent(object sender, EventArgs e)
|
|
{
|
|
if (SignIn.Instance.SigningIn || !SignIn.Instance.SignInError.IsError && !SignIn.Instance.SignedIn)
|
|
return;
|
|
SignIn.Instance.SignInStatusUpdatedEvent -= new EventHandler(this.OnSignInStatusUpdatedEvent);
|
|
this.MarketplaceCredentials.hr = SignIn.Instance.SignInError.hr;
|
|
if (SignIn.Instance.SignInError.IsError)
|
|
{
|
|
this.ErrorMessage = Shell.LoadString(StringId.IDS_VERIFY_CREDS_ERROR);
|
|
this.MarketplaceCredentials.PurchaseEnabled = false;
|
|
this.MarketplaceCredentials.ZuneTag = string.Empty;
|
|
}
|
|
else
|
|
{
|
|
this.ErrorMessage = string.Empty;
|
|
this.MarketplaceCredentials.ZuneTag = SignIn.Instance.ZuneTag;
|
|
this.MarketplaceCredentials.UserGuid = SignIn.Instance.UserGuid;
|
|
}
|
|
if (!Shell.SettingsFrame.Wizard.IsCurrent)
|
|
this.OnMarketplaceCredentialsCommit(null);
|
|
this.ValidatingCredentials = false;
|
|
this.FirePropertyChanged("MarketplaceCredentials");
|
|
}
|
|
|
|
public bool CredentialValidationRequested
|
|
{
|
|
get => true;
|
|
set => this.FirePropertyChanged(nameof(CredentialValidationRequested));
|
|
}
|
|
|
|
public DeviceRelationship DevicePartnership
|
|
{
|
|
get
|
|
{
|
|
Management management = ZuneShell.DefaultInstance.Management;
|
|
if (management.CommitList.ContainsValue("OnSyncPartnershipCommit"))
|
|
return DeviceRelationship.Permanent;
|
|
DeviceRelationship deviceRelationship = this.ActiveDevice.Relationship;
|
|
if (this.ActiveDevice.IsValid && deviceRelationship == DeviceRelationship.None)
|
|
{
|
|
management.CommitList[new ProxySettingDelegate(this.OnSyncPartnershipCommit)] = "OnSyncPartnershipCommit";
|
|
deviceRelationship = DeviceRelationship.Permanent;
|
|
}
|
|
return deviceRelationship;
|
|
}
|
|
set
|
|
{
|
|
Management management = ZuneShell.DefaultInstance.Management;
|
|
if (value == DeviceRelationship.Permanent)
|
|
{
|
|
management.CommitList[new ProxySettingDelegate(this.OnSyncPartnershipCommit)] = "OnSyncPartnershipCommit";
|
|
}
|
|
else
|
|
{
|
|
management.CommitList[new ProxySettingDelegate(this.OnSyncPartnershipCommit)] = null;
|
|
this.ActiveDevice.Relationship = value;
|
|
}
|
|
this.FirePropertyChanged(nameof(DevicePartnership));
|
|
this.FirePropertyChanged("IsPartnered");
|
|
}
|
|
}
|
|
|
|
public bool IsPartnered => this.DevicePartnership == DeviceRelationship.Permanent;
|
|
|
|
public bool IsCurrentDeviceNull => this.ActiveDevice == UIDeviceList.NullDevice;
|
|
|
|
private void OnSyncPartnershipCommit(object data)
|
|
{
|
|
if (!this.ActiveDevice.IsValid || data == null || this.ActiveDevice.Relationship == DeviceRelationship.Permanent)
|
|
return;
|
|
this.ActiveDevice.Relationship = DeviceRelationship.Permanent;
|
|
if (!this.ActiveDevice.SupportsWirelessSetupMethod1 && !this.ActiveDevice.SupportsWirelessSetupMethod2)
|
|
return;
|
|
WirelessSync.Instance.ClearWirelessOnDevice();
|
|
}
|
|
|
|
public string TranscodeSizeLimit
|
|
{
|
|
get
|
|
{
|
|
string transcodedFilesCachePath = this.TranscodedFilesCachePath;
|
|
if (this._transcodeSizeLimit == -1)
|
|
this._transcodeSizeLimit = SingletonModelItem<UIDeviceList>.Instance.TranscodedFilesCacheSize;
|
|
return this._transcodeSizeLimit.ToString();
|
|
}
|
|
set
|
|
{
|
|
int result = 1;
|
|
if (string.IsNullOrEmpty(value) || int.TryParse(value, out result))
|
|
{
|
|
if (result < 1)
|
|
result = 1;
|
|
else if (result > 999999)
|
|
result = 999999;
|
|
if (this._transcodeSizeLimit != result)
|
|
{
|
|
this._transcodeSizeLimit = result;
|
|
ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnTranscodeSizeLimitCommit)] = CommitDeviceID;
|
|
}
|
|
}
|
|
this.FirePropertyChanged(nameof(TranscodeSizeLimit));
|
|
}
|
|
}
|
|
|
|
private void OnTranscodeSizeLimitCommit(object data) => SingletonModelItem<UIDeviceList>.Instance.TranscodedFilesCacheSize = this._transcodeSizeLimit;
|
|
|
|
public string TranscodedFilesCachePath
|
|
{
|
|
get
|
|
{
|
|
if (this._transcodedFilesCachePath == null)
|
|
this._transcodedFilesCachePath = SingletonModelItem<UIDeviceList>.Instance.TranscodedFilesCachePath;
|
|
return this._transcodedFilesCachePath;
|
|
}
|
|
private set
|
|
{
|
|
if (!(this._transcodedFilesCachePath != value))
|
|
return;
|
|
this._transcodedFilesCachePath = value;
|
|
this.FirePropertyChanged(nameof(TranscodedFilesCachePath));
|
|
}
|
|
}
|
|
|
|
public string CameraRollDestinationPath
|
|
{
|
|
get
|
|
{
|
|
if (this._cameraRollDestinationPath == null)
|
|
this._cameraRollDestinationPath = this.ActiveDevice.CameraRollDestinationPath;
|
|
return this._cameraRollDestinationPath;
|
|
}
|
|
private set
|
|
{
|
|
if (!(this._cameraRollDestinationPath != value))
|
|
return;
|
|
this._cameraRollDestinationPath = value;
|
|
ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnCameraRollDestinationPathCommit)] = CommitDeviceID;
|
|
this.FirePropertyChanged(nameof(CameraRollDestinationPath));
|
|
}
|
|
}
|
|
|
|
public void OnCameraRollDestinationPathCommit(object data) => this.ActiveDevice.CameraRollDestinationPath = this._cameraRollDestinationPath;
|
|
|
|
public string SavedFolderDestinationPath
|
|
{
|
|
get
|
|
{
|
|
if (this._savedFolderDestinationPath == null)
|
|
this._savedFolderDestinationPath = this.ActiveDevice.SavedFolderDestinationPath;
|
|
return this._savedFolderDestinationPath;
|
|
}
|
|
private set
|
|
{
|
|
if (!(this._savedFolderDestinationPath != value))
|
|
return;
|
|
this._savedFolderDestinationPath = value;
|
|
ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnSavedFolderDestinationPathCommit)] = CommitDeviceID;
|
|
this.FirePropertyChanged(nameof(SavedFolderDestinationPath));
|
|
}
|
|
}
|
|
|
|
public void OnSavedFolderDestinationPathCommit(object data) => this.ActiveDevice.SavedFolderDestinationPath = this._savedFolderDestinationPath;
|
|
|
|
public bool TranscodeInBG
|
|
{
|
|
get
|
|
{
|
|
if (!this._transcodeInBGIsSet)
|
|
{
|
|
this._transcodeInBG = ClientConfiguration.Transcode.BackgroundTranscode;
|
|
this._transcodeInBGIsSet = true;
|
|
}
|
|
return this._transcodeInBG;
|
|
}
|
|
set
|
|
{
|
|
if (this._transcodeInBG == value)
|
|
return;
|
|
this._transcodeInBG = value;
|
|
ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnTranscodeInBGCommit)] = null;
|
|
this.FirePropertyChanged(nameof(TranscodeInBG));
|
|
this._transcodeInBGIsSet = true;
|
|
}
|
|
}
|
|
|
|
private void OnTranscodeInBGCommit(object data) => ClientConfiguration.Transcode.BackgroundTranscode = this._transcodeInBG;
|
|
|
|
public void ChangeTranscodeFolder() => FolderBrowseDialog.Show("", args =>
|
|
{
|
|
if (args == null)
|
|
return;
|
|
ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnChangeTranscodeFolderCommit)] = null;
|
|
this.TranscodedFilesCachePath = (string)args;
|
|
}, true);
|
|
|
|
private void OnChangeTranscodeFolderCommit(object data) => SingletonModelItem<UIDeviceList>.Instance.TranscodedFilesCachePath = this._transcodedFilesCachePath;
|
|
|
|
public void ClearTranscodeFolder()
|
|
{
|
|
if (!this.ActiveDevice.IsValid)
|
|
return;
|
|
HRESULT hresult = SingletonModelItem<UIDeviceList>.Instance.ClearTranscodeCache();
|
|
if (!hresult.IsError)
|
|
return;
|
|
Shell.ShowErrorDialog(hresult.Int, StringId.IDS_CACHE_CLEAR_FAILED);
|
|
}
|
|
|
|
public void ChangeCameraRollDestinationPath()
|
|
{
|
|
if (!this.ActiveDevice.IsValid)
|
|
return;
|
|
FolderBrowseDialog.Show("", args =>
|
|
{
|
|
if (args == null)
|
|
return;
|
|
ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnChangeCameraRollDestinationPathCommit)] = CommitDeviceID;
|
|
this.CameraRollDestinationPath = (string)args;
|
|
}, true);
|
|
}
|
|
|
|
private void OnChangeCameraRollDestinationPathCommit(object data) => this.ActiveDevice.CameraRollDestinationPath = this._transcodedFilesCachePath;
|
|
|
|
public Choice ImageQualitySyncChoice
|
|
{
|
|
get
|
|
{
|
|
if (this._imageQualitySyncChoice == null)
|
|
{
|
|
this._imageQualitySyncOptions = new List<Command>();
|
|
this._imageQualitySyncOptions.Add(new Command(this, Shell.LoadString(StringId.IDS_PHOTOS_SETTINGS_QUALITY_DEFAULT), null));
|
|
this._imageQualitySyncOptions.Add(new Command(this, Shell.LoadString(StringId.IDS_PHOTOS_SETTINGS_QUALITY_ORIGINAL), null));
|
|
this._imageQualitySyncOptions.Add(new Command(this, Shell.LoadString(StringId.IDS_PHOTOS_SETTINGS_QUALITY_VGA), null));
|
|
this._imageQualitySyncChoice = new Choice(this);
|
|
this._imageQualitySyncChoice.Options = (IList)this._imageQualitySyncOptions;
|
|
this._imageQualitySyncChoice.DefaultIndex = this.ActiveDevice.ImageTranscodeQuality > ETranscodePhotoSetting.tsPhotoSettingDevicePreferred ? (int)this.ActiveDevice.ImageTranscodeQuality : 0;
|
|
this._imageQualitySyncChoice.DefaultValue();
|
|
this._imageQualitySyncChoice.ChosenChanged += (sender, args) => ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnImageQualitySyncChoiceCommit)] = CommitDeviceID;
|
|
}
|
|
return this._imageQualitySyncChoice;
|
|
}
|
|
private set
|
|
{
|
|
if (this._imageQualitySyncChoice == value)
|
|
return;
|
|
this._imageQualitySyncChoice = value;
|
|
this.FirePropertyChanged(nameof(ImageQualitySyncChoice));
|
|
}
|
|
}
|
|
|
|
private void OnImageQualitySyncChoiceCommit(object data) => this.ActiveDevice.ImageTranscodeQuality = (ETranscodePhotoSetting)this._imageQualitySyncChoice.ChosenIndex;
|
|
|
|
public Choice AudioConversionChoice
|
|
{
|
|
get
|
|
{
|
|
if (this._audioConversionChoice == null)
|
|
{
|
|
this._audioConversionOptions = new List<Command>();
|
|
this._audioConversionOptions.Add(new Command(this, Shell.LoadString(StringId.IDS_TRANSCODE_AUDIO_NOSUPPORT_OPTION), null));
|
|
this._audioConversionOptions.Add(new Command(this, Shell.LoadString(StringId.IDS_TRANSCODE_AUDIO_EXCEEDS_OPTION), null));
|
|
this._audioConversionChoice = new Choice(this);
|
|
this._audioConversionChoice.Options = (IList)this._audioConversionOptions;
|
|
this._audioConversionChoice.DefaultIndex = this.ActiveDevice.AudioTranscodeLimit > 0 ? 1 : 0;
|
|
this._audioConversionChoice.DefaultValue();
|
|
this._audioConversionChoice.ChosenChanged += (sender, args) => ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnAudioConversionChoiceCommit)] = CommitDeviceID;
|
|
}
|
|
return this._audioConversionChoice;
|
|
}
|
|
private set
|
|
{
|
|
if (this._audioConversionChoice == value)
|
|
return;
|
|
this._audioConversionChoice = value;
|
|
this.FirePropertyChanged(nameof(AudioConversionChoice));
|
|
}
|
|
}
|
|
|
|
public string AudioThresholdBitRate
|
|
{
|
|
get
|
|
{
|
|
if (this._audioThresholdBitRate == null)
|
|
this._audioThresholdBitRate = this.ActiveDevice.AudioTranscodeLimit.ToString();
|
|
return this._audioThresholdBitRate;
|
|
}
|
|
set
|
|
{
|
|
if (!(this._audioThresholdBitRate != value))
|
|
return;
|
|
this._audioThresholdBitRate = value;
|
|
ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnAudioConversionChoiceCommit)] = CommitDeviceID;
|
|
this.FirePropertyChanged(nameof(AudioThresholdBitRate));
|
|
}
|
|
}
|
|
|
|
public string AudioTargetBitRate
|
|
{
|
|
get
|
|
{
|
|
if (this._audioTargetBitRate == null)
|
|
this._audioTargetBitRate = this.ActiveDevice.AudioTranscodeTarget.ToString();
|
|
return this._audioTargetBitRate;
|
|
}
|
|
set
|
|
{
|
|
if (!(this._audioTargetBitRate != value))
|
|
return;
|
|
this._audioTargetBitRate = value;
|
|
ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnAudioConversionChoiceCommit)] = CommitDeviceID;
|
|
this.FirePropertyChanged(nameof(AudioTargetBitRate));
|
|
}
|
|
}
|
|
|
|
private void OnAudioConversionChoiceCommit(object data)
|
|
{
|
|
int result = 0;
|
|
if (this.AudioConversionChoice.ChosenIndex == 1)
|
|
{
|
|
int.TryParse(this._audioThresholdBitRate, out result);
|
|
this.ActiveDevice.AudioTranscodeLimit = result;
|
|
}
|
|
else
|
|
this.ActiveDevice.AudioTranscodeLimit = -1;
|
|
int.TryParse(this._audioTargetBitRate, out result);
|
|
this.ActiveDevice.AudioTranscodeTarget = result;
|
|
}
|
|
|
|
public Choice VideoConversionChoice
|
|
{
|
|
get
|
|
{
|
|
if (this._videoConversionChoice == null)
|
|
{
|
|
this._videoConversionOptions = new List<Command>();
|
|
this._videoConversionOptions.Add(new Command(this, Shell.LoadString(StringId.IDS_TRANSCODE_VIDEO_PLAYBACK_OPTION), null));
|
|
this._videoConversionOptions.Add(new Command(this, Shell.LoadString(StringId.IDS_TRANSCODE_VIDEO_TV_OUT_OPTION), null));
|
|
this._videoConversionChoice = new Choice(this);
|
|
this._videoConversionChoice.Options = (IList)this._videoConversionOptions;
|
|
this._videoConversionChoice.DefaultIndex = this.ActiveDevice.OptimizeVideoForTV ? 1 : 0;
|
|
this._videoConversionChoice.DefaultValue();
|
|
this._videoConversionChoice.ChosenChanged += (sender, args) => ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnVideoConversionChoiceCommit)] = CommitDeviceID;
|
|
}
|
|
return this._videoConversionChoice;
|
|
}
|
|
private set
|
|
{
|
|
if (this._videoConversionChoice == value)
|
|
return;
|
|
this._videoConversionChoice = value;
|
|
this.FirePropertyChanged(nameof(VideoConversionChoice));
|
|
}
|
|
}
|
|
|
|
private void OnVideoConversionChoiceCommit(object data) => this.ActiveDevice.OptimizeVideoForTV = this._videoConversionChoice.ChosenIndex == 1;
|
|
|
|
public IList<Command> BitRateList
|
|
{
|
|
get
|
|
{
|
|
if (this._bitRateList == null)
|
|
{
|
|
this._bitRateList = new List<Command>(this._defaultBitRates.Length);
|
|
for (int index = 0; index < this._defaultBitRates.Length; ++index)
|
|
this._bitRateList.Add(new Command(null, this._defaultBitRates[index].ToString(), null));
|
|
}
|
|
return this._bitRateList;
|
|
}
|
|
}
|
|
|
|
public float ReservedSpaceOnDevice
|
|
{
|
|
get
|
|
{
|
|
if (float.IsNaN(this._reservedSpaceOnDevice))
|
|
this._reservedSpaceOnDevice = ActiveDevice.PercentReserved;
|
|
return this._reservedSpaceOnDevice;
|
|
}
|
|
set
|
|
{
|
|
if (_reservedSpaceOnDevice == (double)value)
|
|
return;
|
|
ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnReservedSpaceOnDeviceCommit)] = CommitDeviceID;
|
|
this._reservedSpaceOnDevice = value;
|
|
}
|
|
}
|
|
|
|
private void OnReservedSpaceOnDeviceCommit(object data) => this.ActiveDevice.PercentReserved = (int)this._reservedSpaceOnDevice;
|
|
|
|
public SyncGroupList SyncGroupList
|
|
{
|
|
get
|
|
{
|
|
if (this._syncGroups == null)
|
|
this._syncGroups = this.ActiveDevice.GenerateSyncGroupList(this, false);
|
|
return this._syncGroups;
|
|
}
|
|
}
|
|
|
|
public BooleanChoice PrivacyChoice
|
|
{
|
|
get
|
|
{
|
|
if (this._privacyChoice == null)
|
|
{
|
|
this._privacyChoice = new BooleanChoice(this, Shell.LoadString(StringId.IDS_DEVICE_USAGE_DATA_CHECK));
|
|
this._privacyChoice.Value = this.ActiveDevice.EnableWatson;
|
|
this._privacyChoice.ChosenChanged += (sender, args) => ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnPrivacyChoiceCommit)] = CommitDeviceID;
|
|
}
|
|
return this._privacyChoice;
|
|
}
|
|
}
|
|
|
|
private void OnPrivacyChoiceCommit(object data) => this.ActiveDevice.EnableWatson = this.PrivacyChoice.Value;
|
|
|
|
public void AutomatePrivacy(bool enable)
|
|
{
|
|
this.ActiveDevice.EnableWatson = enable;
|
|
ZuneShell.DefaultInstance.Management.CommitList[new ProxySettingDelegate(this.OnPrivacyChoiceCommit)] = CommitDeviceID;
|
|
}
|
|
|
|
private int CommitDeviceID => !this.ActiveDevice.IsGuest ? this.ActiveDevice.ID : -1;
|
|
}
|
|
}
|