Files
ZuneShell.dll/ZuneShell/ZuneUI/ComposerHelper.cs

415 lines
16 KiB
C#

// Decompiled with JetBrains decompiler
// Type: ZuneUI.ComposerHelper
// 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.ErrorMapperApi;
using Microsoft.Zune.Messaging;
using Microsoft.Zune.Util;
using MicrosoftZuneLibrary;
using System;
using System.Collections;
using System.Text;
using UIXControls;
namespace ZuneUI
{
public class ComposerHelper : DialogHelper
{
private const int c_maxMessageLength = 230;
private RecipientHelper _recipientHelper;
private Command _sendFailed;
private Command _sendSucceeded;
private string _message;
private string _serviceContext;
public ComposerHelper()
{
this._recipientHelper = new RecipientHelper();
this._sendFailed = new Command();
this._sendSucceeded = new Command();
}
public void ClearState()
{
this._recipientHelper.ClearState();
this.Message = string.Empty;
}
public bool Send(Attachment attachment)
{
string endPointUri = Microsoft.Zune.Shell.ZuneApplication.Service2.GetEndPointUri(Microsoft.Zune.Service.EServiceEndpointId.SEID_Messaging);
string zuneTag = SignIn.Instance.ZuneTag;
Uri.EscapeDataString(",");
string errorMessage = null;
HRESULT hresult = HRESULT._S_OK;
bool flag = true;
bool wishlist = false;
bool allowEmailRecipients = true;
if (attachment != null)
{
wishlist = attachment.Wishlist;
allowEmailRecipients = attachment.AllowEmailRecipients;
if (!attachment.IsValid(out errorMessage))
{
flag = false;
hresult = HRESULT._NS_E_MESSAGING_CLIENT_ERROR;
}
}
if (flag && !this.RecipientHelper.ValidateAll(allowEmailRecipients))
{
flag = false;
hresult = HRESULT._NS_E_MESSAGING_RECIPIENT_ERROR;
errorMessage = this.RecipientHelper.ErrorMessage;
}
if (!SignIn.Instance.SignedIn || string.IsNullOrEmpty(endPointUri) || string.IsNullOrEmpty(zuneTag))
flag = false;
if (flag)
flag = this.Send(string.Format("{0}/messaging/{1}/send", endPointUri, Uri.EscapeDataString(zuneTag)), attachment, wishlist);
if (!flag)
this.OnSendCompleted(hresult.IsError ? hresult : HRESULT._NS_E_MESSAGING_CLIENT_ERROR, errorMessage, wishlist);
return flag;
}
private bool Send(string requestUrl, Attachment attachment, bool wishlist)
{
bool flag = false;
if (attachment is PropertySetAttachment)
{
PropertySetAttachment propertySetAttachment = (PropertySetAttachment)attachment;
string recipientString = this.CreateRecipientString(false);
flag = MessagingService.Instance.Compose(requestUrl, this.Message, recipientString, propertySetAttachment.RequestType, propertySetAttachment.PropertySet, new MessagingCallback(this.OnSendCompletedAsync), wishlist);
}
else
{
string strMessage = null;
try
{
strMessage = this.CreateUrlEncodedString(attachment);
}
catch (ArgumentNullException ex)
{
}
if (strMessage != null)
flag = MessagingService.Instance.Compose(requestUrl, strMessage, new MessagingCallback(this.OnSendCompletedAsync), wishlist);
}
if (flag && attachment != null)
attachment.LogSend();
return flag;
}
public static bool ManageFriend(FriendAction action, string zuneTag)
{
bool flag = !string.IsNullOrEmpty(zuneTag);
string strPostUrl = null;
if (flag)
{
strPostUrl = CreateOperationUri("friends");
flag = strPostUrl != null;
}
if (flag)
flag = MessagingService.Instance.ManageFriend(action, strPostUrl, zuneTag);
return flag;
}
public bool ManageFavorites(FavoritesAction action, MediaType mediaType, IList favorites)
{
string str1 = null;
string str2 = null;
string operationUri = CreateOperationUri("playlists/BuiltIn-FavoriteTracks");
bool flag = operationUri != null;
switch (action)
{
case FavoritesAction.Add:
str1 = "add";
break;
case FavoritesAction.Remove:
str1 = "delete";
break;
default:
flag = false;
break;
}
if (mediaType == MediaType.Track)
str2 = "track";
else
flag = false;
if (flag)
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append(str1);
stringBuilder.Append(' ');
stringBuilder.Append(str2);
stringBuilder.Append(' ');
for (int index = 0; index < favorites.Count; ++index)
{
if (index > 0)
stringBuilder.Append(',');
stringBuilder.Append(favorites[index].ToString());
}
flag = MessagingService.Instance.ManageFavorites(action, operationUri, stringBuilder.ToString(), new MessagingCallback(this.OnFavoritesManagementCompletedAsync), new FavoritesManagementState(action, favorites.Count));
}
return flag;
}
public static bool ManageProfile(
string fieldName,
string fieldValue,
MessagingCallback callback,
object state)
{
bool flag = !string.IsNullOrEmpty(fieldName);
string strProfileUrl = null;
if (flag)
{
strProfileUrl = CreateOperationUri(fieldName);
flag = strProfileUrl != null;
}
if (flag)
flag = MessagingService.Instance.ManageProfile(strProfileUrl, fieldValue, callback, state);
return flag;
}
public static bool ManageProfileImage(
ProfileImage image,
MessagingCallback callback,
object state)
{
bool flag = !string.IsNullOrEmpty(image.TypeName);
string strProfileImageUrl = null;
if (flag)
{
strProfileImageUrl = CreateOperationUri(image.TypeName);
flag = strProfileImageUrl != null;
}
if (flag)
flag = image.Image == null ? image.ResourceId != null && MessagingService.Instance.ManageProfileImage(strProfileImageUrl, image.ResourceId, callback, state) : MessagingService.Instance.ManageProfileImage(strProfileImageUrl, image.Image, callback, state);
if (flag)
{
if (image.Type == ProfileImageType.Background)
SQMLog.Log(SQMDataId.SocialEditBackground, 1);
else if (image.Type == ProfileImageType.Tile)
SQMLog.Log(SQMDataId.SocialEditTile, 1);
}
return flag;
}
public static string CreateOperationUri(string operation)
{
string zuneTagOrGuid = null;
Guid userGuid = SignIn.Instance.UserGuid;
if (!GuidHelper.IsEmpty(userGuid))
zuneTagOrGuid = userGuid.ToString();
return CreateOperationUri(operation, zuneTagOrGuid);
}
public static string GetUserTileUri(string zuneTag) => CreateOperationUri("usertile", zuneTag);
public static string CreateOperationUri(string operation, string zuneTagOrGuid)
{
if (string.IsNullOrEmpty(zuneTagOrGuid))
return null;
string endPointUri = Microsoft.Zune.Shell.ZuneApplication.Service2.GetEndPointUri(
operation == "comments" ? Microsoft.Zune.Service.EServiceEndpointId.SEID_Comments : Microsoft.Zune.Service.EServiceEndpointId.SEID_SocialApi);
if (string.IsNullOrEmpty(endPointUri))
return null;
zuneTagOrGuid = Uri.EscapeUriString(zuneTagOrGuid);
StringBuilder stringBuilder = new StringBuilder(endPointUri);
stringBuilder.Append("/members");
if (operation == "search")
return UrlHelper.MakeUrl(stringBuilder.ToString(), "q", zuneTagOrGuid);
stringBuilder.Append("/");
stringBuilder.Append(zuneTagOrGuid);
if (!string.IsNullOrEmpty(operation))
{
stringBuilder.Append("/");
stringBuilder.Append(operation);
}
return stringBuilder.ToString();
}
private string CreateUrlEncodedString(Attachment attachment)
{
StringBuilder stringBuilder = new StringBuilder();
if (attachment != null)
{
foreach (string property in attachment.Properties)
{
if (property == null)
throw new ArgumentNullException();
}
}
stringBuilder.Append("recipients=");
stringBuilder.Append(this.CreateRecipientString(true));
if (!string.IsNullOrEmpty(this._message) && this._message.Length <= 230)
{
stringBuilder.Append("&text=");
stringBuilder.Append(Uri.EscapeDataString(this._message));
}
if (attachment != null)
{
string[] properties = attachment.Properties;
int num = properties.Length - 1;
for (int index = 0; index < num; index += 2)
{
stringBuilder.Append("&");
stringBuilder.Append(Uri.EscapeDataString(properties[index]));
stringBuilder.Append("=");
stringBuilder.Append(Uri.EscapeDataString(properties[index + 1]));
}
}
else
stringBuilder.Append("&type=message");
if (!string.IsNullOrEmpty(this._serviceContext))
{
stringBuilder.Append("&context=");
stringBuilder.Append(Uri.EscapeDataString(this._serviceContext));
}
return stringBuilder.ToString();
}
private string CreateRecipientString(bool uriEscape)
{
StringBuilder stringBuilder = new StringBuilder();
IList validRecipients = this.RecipientHelper.ValidRecipients;
string str = ",";
if (validRecipients != null)
{
for (int index = 0; index < validRecipients.Count; ++index)
{
if (index != 0)
stringBuilder.Append(str);
if (uriEscape)
stringBuilder.Append(Uri.EscapeDataString((string)validRecipients[index]));
else
stringBuilder.Append((string)validRecipients[index]);
}
}
return stringBuilder.ToString();
}
public RecipientHelper RecipientHelper => this._recipientHelper;
public int MaxMessageLength => 230;
public Command SendFailed => this._sendFailed;
public Command SendSucceeded => this._sendSucceeded;
public string Message
{
get => this._message;
set
{
if (!(this._message != value))
return;
this._message = value == null ? value : value.Replace("\r\n", "\n");
this.FirePropertyChanged(nameof(Message));
}
}
public string ServiceContext
{
get => this._serviceContext;
set
{
if (!(this._serviceContext != value))
return;
this._serviceContext = value;
this.FirePropertyChanged(nameof(ServiceContext));
}
}
protected override void OnDispose(bool disposing)
{
if (disposing && this._recipientHelper != null)
{
this._recipientHelper.Dispose();
this._recipientHelper = null;
}
base.OnDispose(disposing);
}
private void OnSendCompleted(HRESULT hr, string dialogMessage, bool wishlist)
{
if (hr.IsError)
{
if (wishlist)
{
ErrorMapperResult descriptionAndUrl = ErrorMapperApi.GetMappedErrorDescriptionAndUrl(hr.Int, eErrorCondition.eEC_Cart);
ErrorDialogInfo.Show(descriptionAndUrl.Hr, Shell.LoadString(StringId.IDS_CART_CANT_ADD_ITEMS), descriptionAndUrl.Description);
}
else
ErrorDialogInfo.Show(hr.Int, this.Description, dialogMessage);
this._sendFailed.Invoke();
}
else
{
this._sendSucceeded.Invoke();
if (!wishlist)
NotificationArea.Instance.Add(new MessageNotification(Shell.LoadString(StringId.IDS_MESSAGE_SENT_NOTIFICATION), NotificationTask.Messaging, NotificationState.OneShot));
else
++Shell.MainFrame.Marketplace.CartItemsCount;
}
}
private void OnSendCompleted(object obj)
{
SendCompletedParams sendCompletedParams = (SendCompletedParams)obj;
this.OnSendCompleted(sendCompletedParams.HR, null, sendCompletedParams.Wishlist);
}
private void OnSendCompletedAsync(HRESULT hr, object state)
{
bool wishlist = (bool)state;
Application.DeferredInvoke(new DeferredInvokeHandler(this.OnSendCompleted), new SendCompletedParams(hr, wishlist));
}
private void OnFavoritesManagementCompleted(object obj)
{
if (!(obj is FavoritesManagementState favoritesManagementState) || favoritesManagementState.Action != FavoritesAction.Add || !favoritesManagementState.MgmtOperationResult.IsSuccess)
return;
NotificationArea.Instance.Add(new MessageNotification(string.Format(Shell.LoadString(favoritesManagementState.FavoritesCount == 1 ? StringId.IDS_FAVORITE_MGMT_NOTIFICATION : StringId.IDS_FAVORITES_MGMT_NOTIFICATION), favoritesManagementState.FavoritesCount), NotificationTask.Messaging, NotificationState.OneShot));
}
private void OnFavoritesManagementCompletedAsync(HRESULT hr, object state)
{
if (!(state is FavoritesManagementState favoritesManagementState))
return;
favoritesManagementState.MgmtOperationResult = hr;
Application.DeferredInvoke(new DeferredInvokeHandler(this.OnFavoritesManagementCompleted), favoritesManagementState);
}
private class SendCompletedParams
{
private readonly HRESULT _hr;
private readonly bool _wishlist;
public SendCompletedParams(HRESULT hr, bool wishlist)
{
this._hr = hr;
this._wishlist = wishlist;
}
public HRESULT HR => this._hr;
public bool Wishlist => this._wishlist;
}
private class FavoritesManagementState
{
public FavoritesAction Action;
public int FavoritesCount;
public HRESULT MgmtOperationResult;
public FavoritesManagementState(FavoritesAction action, int favoritesCount)
{
this.Action = action;
this.FavoritesCount = favoritesCount;
}
}
}
}