mirror of
https://github.com/ZuneDev/ZuneShell.dll.git
synced 2026-07-27 13:11:51 -07:00
415 lines
16 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|