Files
ZuneShell.dll/ZuneShell/ZuneXml/CatalogServiceQueryHelper.cs
T

145 lines
6.4 KiB
C#

// Decompiled with JetBrains decompiler
// Type: ZuneXml.CatalogServiceQueryHelper
// 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.Zune.Configuration;
using Microsoft.Zune.Service;
using Microsoft.Zune.Shell;
using System;
using System.Text;
namespace ZuneXml
{
internal class CatalogServiceQueryHelper : ZuneServiceQueryHelper
{
protected EServiceEndpointId _endPoint;
internal static ZuneServiceQueryHelper ConstructMusicCatalogQueryHelper(
ZuneServiceQuery query)
{
return new CatalogServiceQueryHelper(query);
}
internal CatalogServiceQueryHelper(ZuneServiceQuery query)
: base(query)
{
this._endPoint = EServiceEndpointId.SEID_RootCatalog;
if (string.IsNullOrEmpty(ClientConfiguration.Service.TimeTravel) || !ZuneApplication.Service2.IsSignedIn())
return;
query.PassportTicketType = EPassportPolicyId.MBI;
}
internal override string GetResourceUri() => this.BuildServiceUri(0, 0);
protected virtual bool ResourceOnly
{
get
{
object property = this.Query.GetProperty(nameof(ResourceOnly));
return property == null || !(bool)property;
}
}
protected virtual bool RequireId => this.ResourceOnly;
protected virtual bool RequireResource => true;
protected virtual bool RequireRepresentation => this.ResourceOnly;
private string BuildServiceUri(int chunkStart, int chunkSize)
{
StringBuilder requestUri = new StringBuilder(128);
string url = (string)this.Query.GetProperty("Url");
if (!string.IsNullOrEmpty(url))
{
requestUri.Append(url);
}
else
{
string id = (string)this.Query.GetProperty("Id");
if (this.RequireId && id == string.Empty)
return null;
string resourceType = (string)this.Query.GetProperty("ResourceType");
string representation = (string)this.Query.GetProperty("Representation");
if (this.RequireResource && resourceType == null || this.RequireRepresentation && representation == null)
return null;
string endPointUri = ZuneApplication.Service2.GetEndPointUri(this._endPoint);
requestUri.Append(endPointUri);
requestUri.Append("/");
if (!string.IsNullOrEmpty(resourceType))
{
requestUri.Append(resourceType);
requestUri.Append("/");
}
if (!string.IsNullOrEmpty(id))
{
requestUri.Append(id);
requestUri.Append("/");
}
if (!string.IsNullOrEmpty(representation))
{
requestUri.Append(representation);
requestUri.Append("/");
}
}
bool fFirst = true;
this.AppendStuffAfterRepresentation(requestUri, ref fFirst);
string clientType = (string)this.Query.GetProperty("ClientType");
if (!string.IsNullOrEmpty(clientType))
AppendParam(requestUri, "clientType", clientType, ref fFirst);
string cost = (string)this.Query.GetProperty("Cost");
if (!string.IsNullOrEmpty(cost))
AppendParam(requestUri, "cost", cost, ref fFirst);
string tag = (string)this.Query.GetProperty("Tag");
if (!string.IsNullOrEmpty(tag))
AppendParam(requestUri, "tag", tag, ref fFirst);
string store = (string)this.Query.GetProperty("Store");
if (!string.IsNullOrEmpty(store))
AppendParam(requestUri, "store", store, ref fFirst);
object chunkSizeOverride = this.Query.GetProperty("ChunkSize");
if (chunkSizeOverride != null && (int)chunkSizeOverride > 0)
AppendParam(requestUri, nameof(chunkSize), chunkSizeOverride.ToString(), ref fFirst);
object isActionable = this.Query.GetProperty("IsActionable");
if (isActionable != null)
{
if ((bool)isActionable)
AppendParam(requestUri, "isActionable", isActionable.ToString(), ref fFirst);
}
if (chunkSize > 0)
{
AppendParam(requestUri, "count", chunkSize.ToString(), ref fFirst);
AppendParam(requestUri, "startIndex", chunkStart.ToString(), ref fFirst);
}
string requestSortBy = (string)this.Query.GetProperty("RequestSortBy");
if (!string.IsNullOrEmpty(requestSortBy))
AppendParam(requestUri, "orderby", requestSortBy, ref fFirst);
string timeTravel = ClientConfiguration.Service.TimeTravel;
if (!string.IsNullOrEmpty(timeTravel) && ZuneApplication.Service2.IsSignedIn())
AppendParam(requestUri, "instant", Uri.EscapeDataString(timeTravel), ref fFirst);
return requestUri.ToString();
}
protected virtual void AppendStuffAfterRepresentation(StringBuilder requestUri, ref bool fFirst)
{
string startsWith = (string)this.Query.GetProperty("StartsWith");
if (!string.IsNullOrEmpty(startsWith))
AppendParam(requestUri, "startsWith", startsWith, ref fFirst);
string startDate = (string)this.Query.GetProperty("StartDate");
if (!string.IsNullOrEmpty(startDate))
AppendParam(requestUri, "startDate", startDate, ref fFirst);
string endDate = (string)this.Query.GetProperty("EndDate");
if (!string.IsNullOrEmpty(endDate))
AppendParam(requestUri, "endDate", endDate, ref fFirst);
object minWidth = this.Query.GetProperty("MinWidth");
if (minWidth != null && (int)minWidth > 0)
AppendParam(requestUri, "minWidth", minWidth.ToString(), ref fFirst);
object minHeight = this.Query.GetProperty("MinHeight");
if (minHeight == null || (int)minHeight <= 0)
return;
AppendParam(requestUri, "minHeight", minHeight.ToString(), ref fFirst);
}
}
}