Files
ZuneShell.dll/ZuneShell/ZuneUI/RedeemCodeStep.cs

387 lines
14 KiB
C#

// Decompiled with JetBrains decompiler
// Type: ZuneUI.RedeemCodeStep
// 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.Service;
using System;
using System.Collections;
namespace ZuneUI
{
public class RedeemCodeStep : AccountManagementStep
{
private TokenDetails _tokenDetails;
private TokenDetails _confirmedTokenDetails;
private EClientTypeFlags _tokenClientTypes;
private bool _tokenExpired;
private bool _tokenInvalid;
private Command _redeemMediaCommand;
private AlbumOfferCollection _albumOffers;
private TrackOfferCollection _trackOffers;
private VideoOfferCollection _videoOffers;
private AppOfferCollection _appOffers;
public RedeemCodeStep(Wizard owner, AccountManagementWizardState state)
: base(owner, state, false)
{
this.Description = Shell.LoadString(StringId.IDS_BILLING_PREPAID_CODE_TITLE);
this.DetailDescription = Shell.LoadString(StringId.IDS_BILLING_PREPAID_CODE_HEADER);
WizardPropertyEditor wizardPropertyEditor = new RedeemCodePropertyEditor();
this._redeemMediaCommand = new Command();
this.Initialize(wizardPropertyEditor);
}
public override string UI => "res://ZuneShellResources!AccountInfo.uix#RedeemCodeStep";
public TokenDetails TokenDetails
{
get => this._tokenDetails;
private set
{
if (this._tokenDetails == value)
return;
this._tokenDetails = value;
this.FirePropertyChanged(nameof(TokenDetails));
this.FirePropertyChanged("TokenSupported");
this.FirePropertyChanged("MatchingBillingOffer");
}
}
public TokenDetails ConfirmedTokenDetails
{
get => this._confirmedTokenDetails;
private set
{
if (this._confirmedTokenDetails == value)
return;
this._confirmedTokenDetails = value;
this.FirePropertyChanged(nameof(ConfirmedTokenDetails));
}
}
public bool TokenSupported
{
get
{
if (this._tokenDetails != null)
{
switch (this._tokenDetails.TokenType)
{
case ETokenType.Media:
if (!this.TokenClientTypesSupported)
return false;
return this._tokenDetails.PurchaseOfferType == EPurchaseOfferType.TVEpisode || this._tokenDetails.PurchaseOfferType == EPurchaseOfferType.Movie;
case ETokenType.Points:
case ETokenType.Subscription:
return true;
}
}
return false;
}
}
public EClientTypeFlags TokenClientTypes
{
get => this._tokenClientTypes;
private set
{
if (this._tokenClientTypes == value)
return;
this._tokenClientTypes = value;
this.FirePropertyChanged(nameof(TokenClientTypes));
}
}
private bool TokenClientTypesSupported => this._tokenClientTypes == EClientTypeFlags.None || (this._tokenClientTypes & EClientTypeFlags.PC) == EClientTypeFlags.PC;
public bool TokenInvalid
{
get => this._tokenInvalid;
private set
{
if (this._tokenInvalid == value)
return;
this._tokenInvalid = value;
this.FirePropertyChanged(nameof(TokenInvalid));
}
}
public bool TokenExpired
{
get => this._tokenExpired;
private set
{
if (this._tokenExpired == value)
return;
this._tokenExpired = value;
this.FirePropertyChanged(nameof(TokenExpired));
}
}
public BillingOffer MatchingBillingOffer
{
get
{
BillingOffer billingOffer = null;
if (this.TokenDetails != null)
{
if (this.TokenDetails.TokenType == ETokenType.Points)
billingOffer = new BillingOffer(this.TokenDetails.BillingOfferId, EBillingOfferType.Points, this.TokenDetails.OfferName);
else if (this.TokenDetails.TokenType == ETokenType.Subscription)
billingOffer = new BillingOffer(this.TokenDetails.BillingOfferId, EBillingOfferType.Subscription, this.TokenDetails.OfferName);
}
return billingOffer;
}
}
public AlbumOfferCollection AlbumOffers
{
get => this._albumOffers;
private set
{
if (this._albumOffers == value)
return;
this._albumOffers = value;
this.FirePropertyChanged(nameof(AlbumOffers));
}
}
public TrackOfferCollection TrackOffers
{
get => this._trackOffers;
private set
{
if (this._trackOffers == value)
return;
this._trackOffers = value;
this.FirePropertyChanged(nameof(TrackOffers));
}
}
public VideoOfferCollection VideoOffers
{
get => this._videoOffers;
private set
{
if (this._videoOffers == value)
return;
this._videoOffers = value;
this.FirePropertyChanged(nameof(VideoOffers));
}
}
public AppOfferCollection AppOffers
{
get => this._appOffers;
private set
{
if (this._appOffers == value)
return;
this._appOffers = value;
this.FirePropertyChanged(nameof(AppOffers));
}
}
public Command RedeemMediaCommand => this._redeemMediaCommand;
public string MediaTitle => this._videoOffers != null && this._videoOffers.Items.Count > 0 ? ((Offer)this._videoOffers.Items[0]).Title : null;
public bool IsMediaRental => this._videoOffers != null && this.VideoOffers.Items.Count > 0 && ((VideoOffer)this.VideoOffers.Items[0]).IsRental;
public bool IsMediaSD
{
get
{
if (this._videoOffers != null)
{
foreach (VideoOffer videoOffer in _videoOffers.Items)
{
if (!videoOffer.IsHD)
return true;
}
}
return false;
}
}
public bool IsMediaHD
{
get
{
if (this._videoOffers != null)
{
foreach (VideoOffer videoOffer in _videoOffers.Items)
{
if (videoOffer.IsHD)
return true;
}
}
return false;
}
}
public string CreateRedeemCodeUrl(bool returnArguments)
{
string endPointUri = Service.GetEndPointUri(EServiceEndpointId.SEID_AccountManagement);
string urlPath = endPointUri + "/client/RedeemCode.ashx";
string str1;
if (returnArguments)
{
string str2 = Service.GetEndPointUri(EServiceEndpointId.SEID_ZuneNet) + "/social/articles/backtosoftware.htm";
str1 = UrlHelper.MakeUrl(endPointUri + "/client/RedeemCode.ashx", "ru", str2, "aru", str2);
}
else
str1 = UrlHelper.MakeUrl(urlPath);
return str1;
}
protected override void OnActivate()
{
base.OnActivate();
this.ServiceDeactivationRequestsDone = this.TokenDetails != null;
}
internal override bool OnMovingNext()
{
string uncommittedValue = this.GetUncommittedValue(RedeemCodePropertyEditor.Code) as string;
string committedValue = this.GetCommittedValue(RedeemCodePropertyEditor.Code) as string;
if (!uncommittedValue.Equals(committedValue, StringComparison.InvariantCultureIgnoreCase))
{
this.TokenDetails = null;
this.TokenExpired = false;
this.TokenClientTypes = EClientTypeFlags.None;
this.ConfirmedTokenDetails = null;
this.ServiceDeactivationRequestsDone = false;
this.AlbumOffers = null;
this.TrackOffers = null;
this.VideoOffers = null;
this.AppOffers = null;
}
if (this.ServiceDeactivationRequestsDone)
{
if (this.ConfirmedTokenDetails != null)
{
if (!this.TokenSupported)
{
ZuneShell.DefaultInstance.Execute("Web\\" + this.CreateRedeemCodeUrl(true), null);
this._owner.Cancel();
return false;
}
if (this.AlbumOffers == null && this.TrackOffers == null && (this.VideoOffers == null && this.AppOffers == null))
return base.OnMovingNext();
this._redeemMediaCommand.Invoke(InvokePolicy.Synchronous);
return false;
}
bool flag1 = this.TokenDetails != null && (this.TokenDetails.TokenType == ETokenType.Points || this.TokenDetails.TokenType == ETokenType.Subscription);
bool flag2 = !this.TokenExpired && this.TokenClientTypes != EClientTypeFlags.None;
if (flag1 || flag2)
this.ConfirmedTokenDetails = this.TokenDetails;
return false;
}
this.StartDeactivationRequests(uncommittedValue);
this.WizardPropertyEditor.Commit();
return false;
}
protected override void OnStartDeactivationRequests(object state)
{
ServiceData serviceData = this.VerifyToken(state as string);
if (!serviceData.TokenInvalid && serviceData.TokenDetails.TokenType == ETokenType.Media)
Service.Instance.GetOfferDetails(serviceData.TokenDetails.MediaOfferId, new GetOfferDetailsCompleteCallback(this.OnGetOfferDetailsSuccess), new GetOfferDetailsErrorCallback(this.OnGetOfferDetailsError), serviceData);
else
this.EndDeactivationRequests(serviceData);
}
protected override void OnEndDeactivationRequests(object args)
{
ServiceData serviceData = (ServiceData)args;
this.TokenClientTypes = serviceData.TokenClientTypes;
this.TokenDetails = serviceData.TokenDetails;
this.TokenInvalid = serviceData.TokenInvalid;
this.TokenExpired = serviceData.TokenExpired;
this.AlbumOffers = serviceData.AlbumOffers;
this.TrackOffers = serviceData.TrackOffers;
this.VideoOffers = serviceData.VideoOffers;
this.AppOffers = serviceData.AppOffers;
}
private ServiceData VerifyToken(string token)
{
ServiceData serviceData = new ServiceData();
if (((HRESULT)Service.Instance.VerifyToken(token, out serviceData.TokenDetails)).IsError)
serviceData.TokenInvalid = true;
return serviceData;
}
private void OnGetOfferDetailsSuccess(
AlbumOfferCollection albums,
TrackOfferCollection tracks,
VideoOfferCollection videos,
EClientTypeFlags clientTypes,
object state)
{
if (albums == null || tracks == null || videos == null)
{
this.OnGetOfferDetailsError(HRESULT._E_UNEXPECTED, state);
}
else
{
ServiceData serviceData = (ServiceData)state;
this.ZeroOfferPoints(albums.Items);
this.ZeroOfferPoints(tracks.Items);
this.ZeroOfferPoints(videos.Items);
serviceData.AlbumOffers = albums;
serviceData.TrackOffers = tracks;
serviceData.VideoOffers = videos;
serviceData.TokenClientTypes = clientTypes;
serviceData.TokenExpired = this.IsTokenExpired(albums.Items, tracks.Items, videos.Items);
serviceData.AppOffers = Service.Instance.CreateEmptyAppCollection();
this.EndDeactivationRequests(serviceData);
}
}
private bool IsTokenExpired(IList albums, IList tracks, IList videos)
{
if (albums != null && albums.Count > 0 || tracks != null && tracks.Count > 0 || (videos == null || videos.Count <= 0))
return false;
foreach (VideoOffer video in videos)
{
if (!video.ExpirationDate.HasValue || video.ExpirationDate.Value > DateTime.UtcNow)
return false;
}
return true;
}
private void OnGetOfferDetailsError(HRESULT hr, object state)
{
ServiceData serviceData = (ServiceData)state;
if (hr.IsError)
serviceData.TokenInvalid = true;
this.EndDeactivationRequests(serviceData);
}
private void ZeroOfferPoints(IEnumerable offers)
{
if (offers == null)
return;
foreach (Offer offer in offers)
offer.PriceInfo.MakeFree();
}
private class ServiceData
{
public TokenDetails TokenDetails;
public EClientTypeFlags TokenClientTypes;
public bool TokenInvalid;
public bool TokenExpired;
public AlbumOfferCollection AlbumOffers;
public TrackOfferCollection TrackOffers;
public VideoOfferCollection VideoOffers;
public AppOfferCollection AppOffers;
}
}
}