Files
ZuneShell.dll/ZuneShell/ZuneXml/WMISServiceDataProviderQuery.cs

124 lines
4.7 KiB
C#

// Decompiled with JetBrains decompiler
// Type: ZuneXml.WMISServiceDataProviderQuery
// 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.Configuration;
using Microsoft.Zune.Service;
using Microsoft.Zune.Shell;
using System;
using System.Text;
using System.Threading;
using ZuneUI;
namespace ZuneXml
{
internal class WMISServiceDataProviderQuery : XmlDataProviderQuery
{
private string m_strPostBody;
private bool _endpointsInitialized;
internal static DataProviderQuery ConstructWmisQuery(object queryTypeCookie) => new WMISServiceDataProviderQuery(queryTypeCookie);
public WMISServiceDataProviderQuery(object queryTypeCookie)
: base(queryTypeCookie)
=> this._keepAlive = false;
protected override void BeginExecute()
{
if (this._endpointsInitialized)
base.BeginExecute();
else
ThreadPool.QueueUserWorkItem(new WaitCallback(this.BackgroundInitializeWMISEndpointCollection));
}
private void BackgroundInitializeWMISEndpointCollection(object unused)
{
HRESULT hresult = ZuneApplication.Service2.InitializeWMISEndpointCollection();
if (hresult.IsSuccess)
{
this._endpointsInitialized = true;
Application.DeferredInvoke(new DeferredInvokeHandler(this.DeferredInvokeBeginExecute), null);
}
else
{
++this._requestGeneration;
this.SetWorkerStatus(this._requestGeneration, DataProviderQueryStatus.RequestingData);
this.SetWorkerStatus(this._requestGeneration, DataProviderQueryStatus.Error, hresult);
}
}
private void DeferredInvokeBeginExecute(object unused) => base.BeginExecute();
protected override string GetResourceUri() => this.BuildServiceUri(0, 0);
protected override string GetPostBody() => this.m_strPostBody;
private string BuildServiceUri(int chunkStart, int chunkSize)
{
this.m_strPostBody = null;
string property1 = (string)this.GetProperty("SearchString");
string property2 = (string)this.GetProperty("artistId");
string property3 = (string)this.GetProperty("albumId");
string strEndPointName;
string paramName;
string paramValue1;
if (!string.IsNullOrEmpty(property1))
{
strEndPointName = WMISEndpointIds.WMISEID_Search;
paramName = "SearchString";
paramValue1 = property1;
}
else if (!string.IsNullOrEmpty(property2))
{
strEndPointName = WMISEndpointIds.WMISEID_GetResultsForArtist;
paramName = "artistId";
paramValue1 = property2;
}
else
{
if (string.IsNullOrEmpty(property3))
return null;
strEndPointName = WMISEndpointIds.WMISEID_GetAlbumDetailsByAlbumId;
paramName = "albumId";
paramValue1 = property3;
Guid.NewGuid();
this.m_strPostBody = string.Empty;
}
string wmisEndPointUri = ZuneApplication.Service2.GetWMISEndPointUri(strEndPointName);
if (string.IsNullOrEmpty(wmisEndPointUri))
return null;
UriBuilder uriBuilder = new UriBuilder(wmisEndPointUri);
StringBuilder args = new StringBuilder();
UrlHelper.AppendParam(true, args, paramName, paramValue1);
string wmisPartner = ClientConfiguration.Service.WMISPartner;
if (!string.IsNullOrEmpty(wmisPartner))
UrlHelper.AppendParam(false, args, "Partner", wmisPartner);
string[] strArray = new string[5]
{
"locale",
"maxNumberOfResults",
"resultTypeString",
"countOnly",
"volume"
};
foreach (string str in strArray)
{
string paramValue2 = null;
object property4 = this.GetProperty(str);
if (property4 != null)
paramValue2 = property4.ToString();
if (!string.IsNullOrEmpty(paramValue2))
UrlHelper.AppendParam(false, args, str, paramValue2);
}
string str1 = args.ToString();
if (str1.Length > 0 && str1[0] == '?')
str1 = str1.Remove(0, 1);
uriBuilder.Query = str1;
return uriBuilder.Uri.AbsoluteUri;
}
}
}