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