Made a separate ApiInteraction solution with platform-specific builds
This commit is contained in:
parent
5dd7080084
commit
0fb0d52a4c
|
@ -0,0 +1,66 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{94CEA07A-307C-4663-AA43-7BD852808574}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>MediaBrowser.ApiInteraction.Metro</RootNamespace>
|
||||||
|
<AssemblyName>MediaBrowser.ApiInteraction.Metro</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
|
<TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<!-- A reference to the entire .NET Framework is automatically included -->
|
||||||
|
<ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj">
|
||||||
|
<Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
|
||||||
|
<Name>MediaBrowser.Model</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="..\MediaBrowser.ApiInteraction\ApiClient.cs">
|
||||||
|
<Link>ApiClient.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="..\MediaBrowser.ApiInteraction\DataSerializer.cs">
|
||||||
|
<Link>DataSerializer.cs</Link>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="protobuf-net">
|
||||||
|
<HintPath>..\protobuf-net\Full\netcore45\protobuf-net.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ServiceStack.Text">
|
||||||
|
<HintPath>..\packages\ServiceStack.Text.3.9.5\lib\sl5\ServiceStack.Text.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
30
MediaBrowser.ApiInteraction.Metro/Properties/AssemblyInfo.cs
Normal file
30
MediaBrowser.ApiInteraction.Metro/Properties/AssemblyInfo.cs
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
using System.Resources;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("MediaBrowser.ApiInteraction.Metro")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("MediaBrowser.ApiInteraction.Metro")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2012")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
[assembly: NeutralResourcesLanguage("en")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
37
MediaBrowser.ApiInteraction.sln
Normal file
37
MediaBrowser.ApiInteraction.sln
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 2012
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Model", "MediaBrowser.Model\MediaBrowser.Model.csproj", "{7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.ApiInteraction", "MediaBrowser.ApiInteraction\MediaBrowser.ApiInteraction.csproj", "{921C0F64-FDA7-4E9F-9E73-0CB0EEDB2422}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{F0E0E64C-2A6F-4E35-9533-D53AC07C2CD1}"
|
||||||
|
ProjectSection(SolutionItems) = preProject
|
||||||
|
.nuget\packages.config = .nuget\packages.config
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.ApiInteraction.Metro", "MediaBrowser.ApiInteraction.Metro\MediaBrowser.ApiInteraction.Metro.csproj", "{94CEA07A-307C-4663-AA43-7BD852808574}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{921C0F64-FDA7-4E9F-9E73-0CB0EEDB2422}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{921C0F64-FDA7-4E9F-9E73-0CB0EEDB2422}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{921C0F64-FDA7-4E9F-9E73-0CB0EEDB2422}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{921C0F64-FDA7-4E9F-9E73-0CB0EEDB2422}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{94CEA07A-307C-4663-AA43-7BD852808574}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{94CEA07A-307C-4663-AA43-7BD852808574}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{94CEA07A-307C-4663-AA43-7BD852808574}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{94CEA07A-307C-4663-AA43-7BD852808574}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
|
@ -18,6 +18,8 @@ namespace MediaBrowser.ApiInteraction
|
||||||
handler.AutomaticDecompression = DecompressionMethods.Deflate;
|
handler.AutomaticDecompression = DecompressionMethods.Deflate;
|
||||||
|
|
||||||
HttpClient = new HttpClient(handler);
|
HttpClient = new HttpClient(handler);
|
||||||
|
|
||||||
|
DataSerializer.Configure();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -48,24 +50,11 @@ namespace MediaBrowser.ApiInteraction
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
// First try Protobuf since it has the best performance
|
return ApiInteraction.SerializationFormat.Jsv;
|
||||||
if (DataSerializer.CanDeserializeProtobuf)
|
|
||||||
{
|
|
||||||
return ApiInteraction.SerializationFormat.Protobuf;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Next best is jsv
|
|
||||||
if (DataSerializer.CanDeserializeJsv)
|
|
||||||
{
|
|
||||||
return ApiInteraction.SerializationFormat.Jsv;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ApiInteraction.SerializationFormat.Json;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public HttpClient HttpClient { get; private set; }
|
public HttpClient HttpClient { get; private set; }
|
||||||
public IDataSerializer DataSerializer { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets an image url that can be used to download an image from the api
|
/// Gets an image url that can be used to download an image from the api
|
||||||
|
@ -597,7 +586,7 @@ namespace MediaBrowser.ApiInteraction
|
||||||
string url = ApiUrl + "/ServerConfiguration";
|
string url = ApiUrl + "/ServerConfiguration";
|
||||||
|
|
||||||
// At the moment this can't be retrieved in protobuf format
|
// At the moment this can't be retrieved in protobuf format
|
||||||
SerializationFormat format = DataSerializer.CanDeserializeJsv ? SerializationFormat.Jsv : ApiInteraction.SerializationFormat.Json;
|
SerializationFormat format = SerializationFormat.Jsv;
|
||||||
|
|
||||||
using (Stream stream = await GetSerializedStreamAsync(url, format).ConfigureAwait(false))
|
using (Stream stream = await GetSerializedStreamAsync(url, format).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
|
@ -613,7 +602,7 @@ namespace MediaBrowser.ApiInteraction
|
||||||
string url = ApiUrl + "/PluginConfiguration?assemblyfilename=" + plugin.AssemblyFileName;
|
string url = ApiUrl + "/PluginConfiguration?assemblyfilename=" + plugin.AssemblyFileName;
|
||||||
|
|
||||||
// At the moment this can't be retrieved in protobuf format
|
// At the moment this can't be retrieved in protobuf format
|
||||||
SerializationFormat format = DataSerializer.CanDeserializeJsv ? SerializationFormat.Jsv : ApiInteraction.SerializationFormat.Json;
|
SerializationFormat format = SerializationFormat.Jsv;
|
||||||
|
|
||||||
using (Stream stream = await GetSerializedStreamAsync(url, format).ConfigureAwait(false))
|
using (Stream stream = await GetSerializedStreamAsync(url, format).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
|
@ -708,7 +697,7 @@ namespace MediaBrowser.ApiInteraction
|
||||||
{
|
{
|
||||||
if (format == ApiInteraction.SerializationFormat.Protobuf)
|
if (format == ApiInteraction.SerializationFormat.Protobuf)
|
||||||
{
|
{
|
||||||
return DataSerializer.DeserializeProtobufFromStream(stream, type);
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
if (format == ApiInteraction.SerializationFormat.Jsv)
|
if (format == ApiInteraction.SerializationFormat.Jsv)
|
||||||
{
|
{
|
||||||
|
@ -731,11 +720,4 @@ namespace MediaBrowser.ApiInteraction
|
||||||
HttpClient.Dispose();
|
HttpClient.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum SerializationFormat
|
|
||||||
{
|
|
||||||
Json,
|
|
||||||
Jsv,
|
|
||||||
Protobuf
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
49
MediaBrowser.ApiInteraction/DataSerializer.cs
Normal file
49
MediaBrowser.ApiInteraction/DataSerializer.cs
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using ProtoBuf;
|
||||||
|
using ServiceStack.Text;
|
||||||
|
|
||||||
|
namespace MediaBrowser.ApiInteraction
|
||||||
|
{
|
||||||
|
public static class DataSerializer
|
||||||
|
{
|
||||||
|
public static T DeserializeJsonFromStream<T>(Stream stream)
|
||||||
|
{
|
||||||
|
return JsonSerializer.DeserializeFromStream<T>(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static T DeserializeJsvFromStream<T>(Stream stream)
|
||||||
|
{
|
||||||
|
return TypeSerializer.DeserializeFromStream<T>(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static object DeserializeJsvFromStream(Stream stream, Type type)
|
||||||
|
{
|
||||||
|
return TypeSerializer.DeserializeFromStream(type, stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static object DeserializeJsonFromStream(Stream stream, Type type)
|
||||||
|
{
|
||||||
|
return JsonSerializer.DeserializeFromStream(type, stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static T DeserializeProtobufFromStream<T>(Stream stream)
|
||||||
|
{
|
||||||
|
return Serializer.Deserialize<T>(stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Configure()
|
||||||
|
{
|
||||||
|
JsConfig.DateHandler = ServiceStack.Text.JsonDateHandler.ISO8601;
|
||||||
|
JsConfig.ExcludeTypeInfo = true;
|
||||||
|
JsConfig.IncludeNullValues = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum SerializationFormat
|
||||||
|
{
|
||||||
|
Json,
|
||||||
|
Jsv,
|
||||||
|
Protobuf
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,22 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
|
|
||||||
namespace MediaBrowser.ApiInteraction
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Since ServiceStack Json is not portable, we need to abstract required json functions into an interface
|
|
||||||
/// </summary>
|
|
||||||
public interface IDataSerializer
|
|
||||||
{
|
|
||||||
T DeserializeJsonFromStream<T>(Stream stream);
|
|
||||||
T DeserializeJsvFromStream<T>(Stream stream);
|
|
||||||
T DeserializeProtobufFromStream<T>(Stream stream);
|
|
||||||
|
|
||||||
object DeserializeJsonFromStream(Stream stream, Type type);
|
|
||||||
object DeserializeJsvFromStream(Stream stream, Type type);
|
|
||||||
object DeserializeProtobufFromStream(Stream stream, Type type);
|
|
||||||
|
|
||||||
bool CanDeserializeJsv { get; }
|
|
||||||
bool CanDeserializeProtobuf { get; }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -4,15 +4,13 @@
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
<ProjectGuid>{B1C27231-7017-4C9B-A678-DE891954FA38}</ProjectGuid>
|
<ProjectGuid>{921C0F64-FDA7-4E9F-9E73-0CB0EEDB2422}</ProjectGuid>
|
||||||
<OutputType>Library</OutputType>
|
<OutputType>Library</OutputType>
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>MediaBrowser.ApiInteraction</RootNamespace>
|
<RootNamespace>MediaBrowser.ApiInteraction</RootNamespace>
|
||||||
<AssemblyName>MediaBrowser.ApiInteraction</AssemblyName>
|
<AssemblyName>MediaBrowser.ApiInteraction</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
<TargetFrameworkProfile>Profile7</TargetFrameworkProfile>
|
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<DebugSymbols>true</DebugSymbols>
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
@ -32,18 +30,36 @@
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<!-- A reference to the entire .NET Framework is automatically included -->
|
<Reference Include="protobuf-net">
|
||||||
|
<HintPath>..\protobuf-net\Full\net30\protobuf-net.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="ServiceStack.Text">
|
||||||
|
<HintPath>..\packages\ServiceStack.Text.3.9.5\lib\net35\ServiceStack.Text.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="ApiClient.cs" />
|
||||||
|
<Compile Include="DataSerializer.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj">
|
<ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj">
|
||||||
<Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
|
<Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
|
||||||
<Name>MediaBrowser.Model</Name>
|
<Name>MediaBrowser.Model</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="ApiClient.cs" />
|
<None Include="packages.config" />
|
||||||
<Compile Include="IDataSerializer.cs" />
|
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
<Target Name="BeforeBuild">
|
<Target Name="BeforeBuild">
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using System.Resources;
|
using System.Reflection;
|
||||||
using System.Reflection;
|
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
@ -14,7 +13,14 @@ using System.Runtime.InteropServices;
|
||||||
[assembly: AssemblyCopyright("Copyright © 2012")]
|
[assembly: AssemblyCopyright("Copyright © 2012")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
[assembly: NeutralResourcesLanguage("en")]
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("677618f2-de4b-44f4-8dfd-a90176297ee2")]
|
||||||
|
|
||||||
// Version information for an assembly consists of the following four values:
|
// Version information for an assembly consists of the following four values:
|
||||||
//
|
//
|
||||||
|
|
4
MediaBrowser.ApiInteraction/packages.config
Normal file
4
MediaBrowser.ApiInteraction/packages.config
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="ServiceStack.Text" version="3.9.5" targetFramework="net45" />
|
||||||
|
</packages>
|
|
@ -39,9 +39,8 @@
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="PresentationCore" />
|
<Reference Include="PresentationCore" />
|
||||||
<Reference Include="PresentationFramework" />
|
<Reference Include="PresentationFramework" />
|
||||||
<Reference Include="protobuf-net, Version=2.0.0.580, Culture=neutral, PublicKeyToken=257b51d87d2e4d67, processorArchitecture=MSIL">
|
<Reference Include="protobuf-net">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\protobuf-net\Full\net30\protobuf-net.dll</HintPath>
|
||||||
<HintPath>..\packages\protobuf-net.2.0.0.580\lib\net40\protobuf-net.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="ServiceStack.Text, Version=3.9.5.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="ServiceStack.Text, Version=3.9.5.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="MahApps.Metro" version="0.9.0.0" targetFramework="net45" />
|
<package id="MahApps.Metro" version="0.9.0.0" targetFramework="net45" />
|
||||||
<package id="protobuf-net" version="2.0.0.580" targetFramework="net45" />
|
|
||||||
<package id="Rx-Core" version="2.0.20823" targetFramework="net45" />
|
<package id="Rx-Core" version="2.0.20823" targetFramework="net45" />
|
||||||
<package id="Rx-Interfaces" version="2.0.20823" targetFramework="net45" />
|
<package id="Rx-Interfaces" version="2.0.20823" targetFramework="net45" />
|
||||||
<package id="Rx-Linq" version="2.0.20823" targetFramework="net45" />
|
<package id="Rx-Linq" version="2.0.20823" targetFramework="net45" />
|
||||||
|
|
|
@ -30,9 +30,8 @@
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="protobuf-net, Version=2.0.0.580, Culture=neutral, PublicKeyToken=257b51d87d2e4d67, processorArchitecture=MSIL">
|
<Reference Include="protobuf-net">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\protobuf-net\Full\net30\protobuf-net.dll</HintPath>
|
||||||
<HintPath>..\packages\protobuf-net.2.0.0.580\lib\net40\protobuf-net.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.ComponentModel.Composition" />
|
<Reference Include="System.ComponentModel.Composition" />
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="protobuf-net" version="2.0.0.580" targetFramework="net45" />
|
|
||||||
<package id="Rx-Core" version="2.0.20823" targetFramework="net45" />
|
<package id="Rx-Core" version="2.0.20823" targetFramework="net45" />
|
||||||
<package id="Rx-Interfaces" version="2.0.20823" targetFramework="net45" />
|
<package id="Rx-Interfaces" version="2.0.20823" targetFramework="net45" />
|
||||||
<package id="Rx-Linq" version="2.0.20823" targetFramework="net45" />
|
<package id="Rx-Linq" version="2.0.20823" targetFramework="net45" />
|
||||||
|
|
|
@ -65,7 +65,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="protobuf-net">
|
<Reference Include="protobuf-net">
|
||||||
<HintPath>..\packages\protobuf-net.2.0.0.580\lib\sl4\protobuf-net.dll</HintPath>
|
<HintPath>..\protobuf-net\Full\portable\protobuf-net.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
||||||
|
|
|
@ -15,8 +15,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Common", "Medi
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Model", "MediaBrowser.Model\MediaBrowser.Model.csproj", "{7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Model", "MediaBrowser.Model\MediaBrowser.Model.csproj", "{7EEEB4BB-F3E8-48FC-B4C5-70F0FFF8329B}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.ApiInteraction", "MediaBrowser.ApiInteraction\MediaBrowser.ApiInteraction.csproj", "{B1C27231-7017-4C9B-A678-DE891954FA38}"
|
|
||||||
EndProject
|
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.ServerApplication", "MediaBrowser.ServerApplication\MediaBrowser.ServerApplication.csproj", "{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.ServerApplication", "MediaBrowser.ServerApplication\MediaBrowser.ServerApplication.csproj", "{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.WebDashboard", "MediaBrowser.WebDashboard\MediaBrowser.WebDashboard.csproj", "{5624B7B5-B5A7-41D8-9F10-CC5611109619}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.WebDashboard", "MediaBrowser.WebDashboard\MediaBrowser.WebDashboard.csproj", "{5624B7B5-B5A7-41D8-9F10-CC5611109619}"
|
||||||
|
@ -68,15 +66,8 @@ Global
|
||||||
{92B9F802-4415-438F-90E1-44602135EA41}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{92B9F802-4415-438F-90E1-44602135EA41}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{92B9F802-4415-438F-90E1-44602135EA41}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{92B9F802-4415-438F-90E1-44602135EA41}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{92B9F802-4415-438F-90E1-44602135EA41}.Release|Any CPU.Build.0 = Release|Any CPU
|
{92B9F802-4415-438F-90E1-44602135EA41}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{B1C27231-7017-4C9B-A678-DE891954FA38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{B1C27231-7017-4C9B-A678-DE891954FA38}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{B1C27231-7017-4C9B-A678-DE891954FA38}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{B1C27231-7017-4C9B-A678-DE891954FA38}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(Performance) = preSolution
|
|
||||||
HasPerformanceSessions = true
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|
BIN
UpgradeLog.XML
Normal file
BIN
UpgradeLog.XML
Normal file
Binary file not shown.
BIN
UpgradeLog.htm
Normal file
BIN
UpgradeLog.htm
Normal file
Binary file not shown.
118
_UpgradeReport_Files/UpgradeReport.css
Normal file
118
_UpgradeReport_Files/UpgradeReport.css
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
/* Body style, for the entire document */
|
||||||
|
body
|
||||||
|
{
|
||||||
|
background: #F3F3F4;
|
||||||
|
color: #1E1E1F;
|
||||||
|
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Header1 style, used for the main title */
|
||||||
|
h1
|
||||||
|
{
|
||||||
|
padding: 10px 0px 10px 10px;
|
||||||
|
font-size: 21pt;
|
||||||
|
background-color: #E2E2E2;
|
||||||
|
border-bottom: 1px #C1C1C2 solid;
|
||||||
|
color: #201F20;
|
||||||
|
margin: 0;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Header2 style, used for "Overview" and other sections */
|
||||||
|
h2
|
||||||
|
{
|
||||||
|
font-size: 18pt;
|
||||||
|
font-weight: normal;
|
||||||
|
padding: 15px 0 5px 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Header3 style, used for sub-sections, such as project name */
|
||||||
|
h3
|
||||||
|
{
|
||||||
|
font-weight: normal;
|
||||||
|
font-size: 15pt;
|
||||||
|
margin: 0;
|
||||||
|
padding: 15px 0 5px 0;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Color all hyperlinks one color */
|
||||||
|
a
|
||||||
|
{
|
||||||
|
color: #1382CE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Table styles */
|
||||||
|
table
|
||||||
|
{
|
||||||
|
border-spacing: 0 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
font-size: 10pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
table th
|
||||||
|
{
|
||||||
|
background: #E7E7E8;
|
||||||
|
text-align: left;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: normal;
|
||||||
|
padding: 3px 6px 3px 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table td
|
||||||
|
{
|
||||||
|
vertical-align: top;
|
||||||
|
padding: 3px 6px 5px 5px;
|
||||||
|
margin: 0px;
|
||||||
|
border: 1px solid #E7E7E8;
|
||||||
|
background: #F7F7F8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Local link is a style for hyperlinks that link to file:/// content, there are lots so color them as 'normal' text until the user mouse overs */
|
||||||
|
.localLink
|
||||||
|
{
|
||||||
|
color: #1E1E1F;
|
||||||
|
background: #EEEEED;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.localLink:hover
|
||||||
|
{
|
||||||
|
color: #1382CE;
|
||||||
|
background: #FFFF99;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Center text, used in the over views cells that contain message level counts */
|
||||||
|
.textCentered
|
||||||
|
{
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The message cells in message tables should take up all avaliable space */
|
||||||
|
.messageCell
|
||||||
|
{
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Padding around the content after the h1 */
|
||||||
|
#content
|
||||||
|
{
|
||||||
|
padding: 0px 12px 12px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The overview table expands to width, with a max width of 97% */
|
||||||
|
#overview table
|
||||||
|
{
|
||||||
|
width: auto;
|
||||||
|
max-width: 75%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The messages tables are always 97% width */
|
||||||
|
#messages table
|
||||||
|
{
|
||||||
|
width: 97%;
|
||||||
|
}
|
538
_UpgradeReport_Files/UpgradeReport.xslt
Normal file
538
_UpgradeReport_Files/UpgradeReport.xslt
Normal file
|
@ -0,0 +1,538 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl='urn:schemas-microsoft-com:xslt'>
|
||||||
|
<xsl:output omit-xml-declaration="yes" />
|
||||||
|
|
||||||
|
<!-- Keys -->
|
||||||
|
<xsl:key name="ProjectKey" match="Event" use="@Project" />
|
||||||
|
|
||||||
|
<!-- String split template -->
|
||||||
|
<xsl:template name="SplitString">
|
||||||
|
<xsl:param name="source" select="''" />
|
||||||
|
<xsl:param name="separator" select="','" />
|
||||||
|
<xsl:if test="not($source = '' or $separator = '')">
|
||||||
|
<xsl:variable name="head" select="substring-before(concat($source, $separator), $separator)" />
|
||||||
|
<xsl:variable name="tail" select="substring-after($source, $separator)" />
|
||||||
|
<part>
|
||||||
|
<xsl:value-of select="$head"/>
|
||||||
|
</part>
|
||||||
|
<xsl:call-template name="SplitString">
|
||||||
|
<xsl:with-param name="source" select="$tail" />
|
||||||
|
<xsl:with-param name="separator" select="$separator" />
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:if>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Intermediate Templates -->
|
||||||
|
<xsl:template match="UpgradeReport" mode="ProjectOverviewXML">
|
||||||
|
<Projects>
|
||||||
|
<xsl:for-each select="Event[generate-id(.) = generate-id(key('ProjectKey', @Project))]">
|
||||||
|
<Project>
|
||||||
|
<xsl:variable name="pNode" select="current()" />
|
||||||
|
<xsl:variable name="errorCount" select="count(../Event[@Project = current()/@Project and @ErrorLevel=2])" />
|
||||||
|
<xsl:variable name="warningCount" select="count(../Event[@Project = current()/@Project and @ErrorLevel=1])" />
|
||||||
|
<xsl:variable name="messageCount" select="count(../Event[@Project = current()/@Project and @ErrorLevel=0])" />
|
||||||
|
<xsl:variable name="pathSplitSeparator">
|
||||||
|
<xsl:text>\</xsl:text>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:variable name="projectName">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="@Project = ''">Solution</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:value-of select="@Project"/>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:attribute name="IsSolution">
|
||||||
|
<xsl:value-of select="@Project = ''"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="Project">
|
||||||
|
<xsl:value-of select="$projectName"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="ProjectDisplayName">
|
||||||
|
<!-- Sometimes it is possible to have project name set to a path over a real project name,
|
||||||
|
we split the string on '\' and if we end up with >1 part in the resulting tokens set
|
||||||
|
we format the ProjectDisplayName as ..\prior\last -->
|
||||||
|
<xsl:variable name="pathTokens">
|
||||||
|
<xsl:call-template name="SplitString">
|
||||||
|
<xsl:with-param name="source" select="$projectName" />
|
||||||
|
<xsl:with-param name="separator" select="$pathSplitSeparator" />
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="count(msxsl:node-set($pathTokens)/part) > 1">
|
||||||
|
<xsl:value-of select="concat('..', $pathSplitSeparator, msxsl:node-set($pathTokens)/part[last() - 1], $pathSplitSeparator, msxsl:node-set($pathTokens)/part[last()])"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:value-of select="$projectName"/>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="ProjectSafeName">
|
||||||
|
<xsl:value-of select="translate($projectName, '\', '-')"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="Solution">
|
||||||
|
<xsl:value-of select="/UpgradeReport/Properties/Property[@Name='Solution']/@Value"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="Source">
|
||||||
|
<xsl:value-of select="@Source"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="Status">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$errorCount > 0">Error</xsl:when>
|
||||||
|
<xsl:when test="$warningCount > 0">Warning</xsl:when>
|
||||||
|
<xsl:otherwise>Success</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="ErrorCount">
|
||||||
|
<xsl:value-of select="$errorCount" />
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="WarningCount">
|
||||||
|
<xsl:value-of select="$warningCount" />
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="MessageCount">
|
||||||
|
<xsl:value-of select="$messageCount" />
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="TotalCount">
|
||||||
|
<xsl:value-of select="$errorCount + $warningCount + $messageCount"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:for-each select="../Event[@Project = $pNode/@Project and @ErrorLevel=3]">
|
||||||
|
<ConversionStatus>
|
||||||
|
<xsl:value-of select="@Description"/>
|
||||||
|
</ConversionStatus>
|
||||||
|
</xsl:for-each>
|
||||||
|
<Messages>
|
||||||
|
<xsl:for-each select="../Event[@Project = $pNode/@Project and @ErrorLevel<3]">
|
||||||
|
<Message>
|
||||||
|
<xsl:attribute name="Level">
|
||||||
|
<xsl:value-of select="@ErrorLevel" />
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="Status">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="@ErrorLevel = 0">Message</xsl:when>
|
||||||
|
<xsl:when test="@ErrorLevel = 1">Warning</xsl:when>
|
||||||
|
<xsl:when test="@ErrorLevel = 2">Error</xsl:when>
|
||||||
|
<xsl:otherwise>Message</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="Source">
|
||||||
|
<xsl:value-of select="@Source"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="Message">
|
||||||
|
<xsl:value-of select="@Description"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</Message>
|
||||||
|
</xsl:for-each>
|
||||||
|
</Messages>
|
||||||
|
</Project>
|
||||||
|
</xsl:for-each>
|
||||||
|
</Projects>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Project Overview template -->
|
||||||
|
<xsl:template match="Projects" mode="ProjectOverview">
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th></th>
|
||||||
|
<th _locID="ProjectTableHeader">Project</th>
|
||||||
|
<th _locID="PathTableHeader">Path</th>
|
||||||
|
<th _locID="ErrorsTableHeader">Errors</th>
|
||||||
|
<th _locID="WarningsTableHeader">Warnings</th>
|
||||||
|
<th _locID="MessagesTableHeader">Messages</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<xsl:for-each select="Project">
|
||||||
|
|
||||||
|
<xsl:sort select="@ErrorCount" order="descending" />
|
||||||
|
<xsl:sort select="@WarningCount" order="descending" />
|
||||||
|
<!-- Always make solution last within a group -->
|
||||||
|
<xsl:sort select="@IsSolution" order="ascending" />
|
||||||
|
<xsl:sort select="@ProjectSafeName" order="ascending" />
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img width="16" height="16">
|
||||||
|
<xsl:attribute name="src">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="@Status = 'Error'">_UpgradeReport_Files\UpgradeReport_Error.png</xsl:when>
|
||||||
|
<xsl:when test="@Status = 'Warning'">_UpgradeReport_Files\UpgradeReport_Warning.png</xsl:when>
|
||||||
|
<xsl:when test="@Status = 'Success'">_UpgradeReport_Files\UpgradeReport_Success.png</xsl:when>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="alt">
|
||||||
|
<xsl:value-of select="@Status" />
|
||||||
|
</xsl:attribute>
|
||||||
|
</img>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<strong>
|
||||||
|
<a>
|
||||||
|
<xsl:attribute name="href">
|
||||||
|
<xsl:value-of select="concat('#', @ProjectSafeName)"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:value-of select="@ProjectDisplayName" />
|
||||||
|
</a>
|
||||||
|
</strong>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<xsl:value-of select="@Source" />
|
||||||
|
</td>
|
||||||
|
<td class="textCentered">
|
||||||
|
<a>
|
||||||
|
<xsl:if test="@ErrorCount > 0">
|
||||||
|
<xsl:attribute name="href">
|
||||||
|
<xsl:value-of select="concat('#', @ProjectSafeName, 'Error')"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:value-of select="@ErrorCount" />
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td class="textCentered">
|
||||||
|
<a>
|
||||||
|
<xsl:if test="@WarningCount > 0">
|
||||||
|
<xsl:attribute name="href">
|
||||||
|
<xsl:value-of select="concat('#', @ProjectSafeName, 'Warning')"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:value-of select="@WarningCount" />
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td class="textCentered">
|
||||||
|
<a href="#">
|
||||||
|
<xsl:if test="@MessageCount > 0">
|
||||||
|
<xsl:attribute name="onclick">
|
||||||
|
<xsl:variable name="apos">
|
||||||
|
<xsl:text>'</xsl:text>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:variable name="JS" select="concat('ScrollToFirstVisibleMessage(', $apos, @ProjectSafeName, $apos, ')')" />
|
||||||
|
<xsl:value-of select="concat($JS, '; return false;')"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:value-of select="@MessageCount" />
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</xsl:for-each>
|
||||||
|
</table>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Show messages row -->
|
||||||
|
<xsl:template match="Project" mode="ProjectShowMessages">
|
||||||
|
<tr>
|
||||||
|
<xsl:attribute name="name">
|
||||||
|
<xsl:value-of select="concat('MessageRowHeaderShow', @ProjectSafeName)"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
<td>
|
||||||
|
<img width="16" height="16" src="_UpgradeReport_Files\UpgradeReport_Information.png" />
|
||||||
|
</td>
|
||||||
|
<td class="messageCell">
|
||||||
|
<xsl:variable name="apos">
|
||||||
|
<xsl:text>'</xsl:text>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:variable name="toggleRowsJS" select="concat('ToggleMessageVisibility(', $apos, @ProjectSafeName, $apos, ')')" />
|
||||||
|
|
||||||
|
<a _locID="ShowAdditionalMessages" href="#">
|
||||||
|
<xsl:attribute name="name">
|
||||||
|
<xsl:value-of select="concat(@ProjectSafeName, 'Message')"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="onclick">
|
||||||
|
<xsl:value-of select="concat($toggleRowsJS, '; return false;')"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
Show <xsl:value-of select="@MessageCount" /> additional messages
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Hide messages row -->
|
||||||
|
<xsl:template match="Project" mode="ProjectHideMessages">
|
||||||
|
<tr style="display: none">
|
||||||
|
<xsl:attribute name="name">
|
||||||
|
<xsl:value-of select="concat('MessageRowHeaderHide', @ProjectSafeName)"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
<td>
|
||||||
|
<img width="16" height="16" src="_UpgradeReport_Files\UpgradeReport_Information.png" />
|
||||||
|
</td>
|
||||||
|
<td class="messageCell">
|
||||||
|
<xsl:variable name="apos">
|
||||||
|
<xsl:text>'</xsl:text>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:variable name="toggleRowsJS" select="concat('ToggleMessageVisibility(', $apos, @ProjectSafeName, $apos, ')')" />
|
||||||
|
|
||||||
|
<a _locID="HideAdditionalMessages" href="#">
|
||||||
|
<xsl:attribute name="name">
|
||||||
|
<xsl:value-of select="concat(@ProjectSafeName, 'Message')"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="onclick">
|
||||||
|
<xsl:value-of select="concat($toggleRowsJS, '; return false;')"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
Hide <xsl:value-of select="@MessageCount" /> additional messages
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Message row templates -->
|
||||||
|
<xsl:template match="Message">
|
||||||
|
<tr>
|
||||||
|
<xsl:attribute name="name">
|
||||||
|
<xsl:value-of select="concat(@Status, 'RowClass', ../../@ProjectSafeName)"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
|
||||||
|
<xsl:if test="@Level = 0">
|
||||||
|
<xsl:attribute name="style">display: none</xsl:attribute>
|
||||||
|
</xsl:if>
|
||||||
|
<td>
|
||||||
|
<a>
|
||||||
|
<xsl:attribute name="name">
|
||||||
|
<xsl:value-of select="concat(../../@ProjectSafeName, @Status)"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</a>
|
||||||
|
<img width="16" height="16">
|
||||||
|
<xsl:attribute name="src">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="@Status = 'Error'">_UpgradeReport_Files\UpgradeReport_Error.png</xsl:when>
|
||||||
|
<xsl:when test="@Status = 'Warning'">_UpgradeReport_Files\UpgradeReport_Warning.png</xsl:when>
|
||||||
|
<xsl:when test="@Status = 'Message'">_UpgradeReport_Files\UpgradeReport_Information.png</xsl:when>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="alt">
|
||||||
|
<xsl:value-of select="@Status" />
|
||||||
|
</xsl:attribute>
|
||||||
|
</img>
|
||||||
|
</td>
|
||||||
|
<td class="messageCell">
|
||||||
|
<strong>
|
||||||
|
<xsl:value-of select="@Source"/>:
|
||||||
|
</strong>
|
||||||
|
<span>
|
||||||
|
<xsl:value-of select="@Message"/>
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Project Details Template -->
|
||||||
|
<xsl:template match="Projects" mode="ProjectDetails">
|
||||||
|
|
||||||
|
<xsl:for-each select="Project">
|
||||||
|
<xsl:sort select="@ErrorCount" order="descending" />
|
||||||
|
<xsl:sort select="@WarningCount" order="descending" />
|
||||||
|
<!-- Always make solution last within a group -->
|
||||||
|
<xsl:sort select="@IsSolution" order="ascending" />
|
||||||
|
<xsl:sort select="@ProjectSafeName" order="ascending" />
|
||||||
|
|
||||||
|
<a>
|
||||||
|
<xsl:attribute name="name">
|
||||||
|
<xsl:value-of select="@ProjectSafeName"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
</a>
|
||||||
|
<h3>
|
||||||
|
<xsl:value-of select="@ProjectDisplayName"/>
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<xsl:attribute name="id">
|
||||||
|
<xsl:value-of select="concat(@ProjectSafeName, 'HeaderRow')"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
<th></th>
|
||||||
|
<th class="messageCell" _locID="MessageTableHeader">Message</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- Errors and warnings -->
|
||||||
|
<xsl:for-each select="Messages/Message[@Level > 0]">
|
||||||
|
<xsl:sort select="@Level" order="descending" />
|
||||||
|
<xsl:apply-templates select="." />
|
||||||
|
</xsl:for-each>
|
||||||
|
|
||||||
|
<xsl:if test="@MessageCount > 0">
|
||||||
|
<xsl:apply-templates select="." mode="ProjectShowMessages" />
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
<!-- Messages -->
|
||||||
|
<xsl:for-each select="Messages/Message[@Level = 0]">
|
||||||
|
<xsl:apply-templates select="." />
|
||||||
|
</xsl:for-each>
|
||||||
|
|
||||||
|
<xsl:choose>
|
||||||
|
<!-- Additional row as a 'place holder' for 'Show/Hide' additional messages -->
|
||||||
|
<xsl:when test="@MessageCount > 0">
|
||||||
|
<xsl:apply-templates select="." mode="ProjectHideMessages" />
|
||||||
|
</xsl:when>
|
||||||
|
<!-- No messages at all, show blank row -->
|
||||||
|
<xsl:when test="@TotalCount = 0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img width="16" height="16" src="_UpgradeReport_Files\UpgradeReport_Information.png" />
|
||||||
|
</td>
|
||||||
|
<td class="messageCell" _locID="NoMessagesRow">
|
||||||
|
<xsl:value-of select="@ProjectDisplayName" /> logged no messages.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</xsl:when>
|
||||||
|
</xsl:choose>
|
||||||
|
</table>
|
||||||
|
</xsl:for-each>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Document, matches "UpgradeReport" -->
|
||||||
|
<xsl:template match="UpgradeReport">
|
||||||
|
<!-- Output doc type the 'Mark of the web' which disabled prompting to run JavaScript from local HTML Files in IE -->
|
||||||
|
<!-- NOTE: The whitespace around the 'Mark of the web' is important it must be exact -->
|
||||||
|
<xsl:text disable-output-escaping="yes"><![CDATA[<!DOCTYPE html>
|
||||||
|
<!-- saved from url=(0014)about:internet -->
|
||||||
|
]]>
|
||||||
|
</xsl:text>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta content="en-us" http-equiv="Content-Language" />
|
||||||
|
<meta content="text/html; charset=utf-16" http-equiv="Content-Type" />
|
||||||
|
<link type="text/css" rel="stylesheet" href="_UpgradeReport_Files\UpgradeReport.css" />
|
||||||
|
<title _locID="ConversionReport0">
|
||||||
|
Migration Report
|
||||||
|
</title>
|
||||||
|
|
||||||
|
<script type="text/javascript" language="javascript">
|
||||||
|
<xsl:text disable-output-escaping="yes">
|
||||||
|
<![CDATA[
|
||||||
|
|
||||||
|
// Startup
|
||||||
|
// Hook up the the loaded event for the document/window, to linkify the document content
|
||||||
|
var startupFunction = function() { linkifyElement("messages"); };
|
||||||
|
|
||||||
|
if(window.attachEvent)
|
||||||
|
{
|
||||||
|
window.attachEvent('onload', startupFunction);
|
||||||
|
}
|
||||||
|
else if (window.addEventListener)
|
||||||
|
{
|
||||||
|
window.addEventListener('load', startupFunction, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
document.addEventListener('load', startupFunction, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Toggles the visibility of table rows with the specified name
|
||||||
|
function toggleTableRowsByName(name)
|
||||||
|
{
|
||||||
|
var allRows = document.getElementsByTagName('tr');
|
||||||
|
for (i=0; i < allRows.length; i++)
|
||||||
|
{
|
||||||
|
var currentName = allRows[i].getAttribute('name');
|
||||||
|
if(!!currentName && currentName.indexOf(name) == 0)
|
||||||
|
{
|
||||||
|
var isVisible = allRows[i].style.display == '';
|
||||||
|
isVisible ? allRows[i].style.display = 'none' : allRows[i].style.display = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function scrollToFirstVisibleRow(name)
|
||||||
|
{
|
||||||
|
var allRows = document.getElementsByTagName('tr');
|
||||||
|
for (i=0; i < allRows.length; i++)
|
||||||
|
{
|
||||||
|
var currentName = allRows[i].getAttribute('name');
|
||||||
|
var isVisible = allRows[i].style.display == '';
|
||||||
|
if(!!currentName && currentName.indexOf(name) == 0 && isVisible)
|
||||||
|
{
|
||||||
|
allRows[i].scrollIntoView(true);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Linkifies the specified text content, replaces candidate links with html links
|
||||||
|
function linkify(text)
|
||||||
|
{
|
||||||
|
if(!text || 0 === text.length)
|
||||||
|
{
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find {DriveLetter}:\Something or \\{uncshare}\something strings and replace them with file:/// links
|
||||||
|
// It expects that a path ends in .extension, and that that extension does not have a space within it,
|
||||||
|
// it does this as not to greedily match in the case of "Text C:\foo\file.txt some other text"
|
||||||
|
var filePath = /([A-z]\:|\\{2}[A-z].+)\\([^<]+)\.([^<\s]+)/gi;
|
||||||
|
|
||||||
|
// Find http, https and ftp links and replace them with hyper links
|
||||||
|
var urlLink = /(http|https|ftp)\:\/\/[a-zA-Z0-9\-\.]+(:[a-zA-Z0-9]*)?\/?([a-zA-Z0-9\-\._\?\,\/\\\+&%\$#\=~;\{\}])*/gi;
|
||||||
|
|
||||||
|
return text.replace(filePath, '<a class="localLink" href="file:///$&">$&</a>')
|
||||||
|
.replace(urlLink, '<a href="$&">$&</a>') ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Linkifies the specified element by ID
|
||||||
|
function linkifyElement(id)
|
||||||
|
{
|
||||||
|
var element = document.getElementById(id);
|
||||||
|
if(!!element)
|
||||||
|
{
|
||||||
|
element.innerHTML = linkify(element.innerHTML);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function ToggleMessageVisibility(projectName)
|
||||||
|
{
|
||||||
|
if(!projectName || 0 === projectName.length)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
toggleTableRowsByName("MessageRowClass" + projectName);
|
||||||
|
toggleTableRowsByName('MessageRowHeaderShow' + projectName);
|
||||||
|
toggleTableRowsByName('MessageRowHeaderHide' + projectName);
|
||||||
|
}
|
||||||
|
|
||||||
|
function ScrollToFirstVisibleMessage(projectName)
|
||||||
|
{
|
||||||
|
if(!projectName || 0 === projectName.length)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// First try the 'Show messages' row
|
||||||
|
if(!scrollToFirstVisibleRow('MessageRowHeaderShow' + projectName))
|
||||||
|
{
|
||||||
|
// Failed to find a visible row for 'Show messages', try an actual message row
|
||||||
|
scrollToFirstVisibleRow('MessageRowClass' + projectName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</xsl:text>
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1 _locID="ConversionReport">
|
||||||
|
Migration Report - <xsl:value-of select="Properties/Property[@Name='Solution']/@Value"/>
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<div id="content">
|
||||||
|
<h2 _locID="OverviewTitle">Overview</h2>
|
||||||
|
<xsl:variable name="projectOverview">
|
||||||
|
<xsl:apply-templates select="self::node()" mode="ProjectOverviewXML" />
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<div id="overview">
|
||||||
|
<xsl:apply-templates select="msxsl:node-set($projectOverview)/*" mode="ProjectOverview" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2 _locID="SolutionAndProjectsTitle">Solution and projects</h2>
|
||||||
|
|
||||||
|
<div id="messages">
|
||||||
|
<xsl:apply-templates select="msxsl:node-set($projectOverview)/*" mode="ProjectDetails" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
BIN
_UpgradeReport_Files/UpgradeReport_Error.png
Normal file
BIN
_UpgradeReport_Files/UpgradeReport_Error.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 338 B |
BIN
_UpgradeReport_Files/UpgradeReport_Information.png
Normal file
BIN
_UpgradeReport_Files/UpgradeReport_Information.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 306 B |
BIN
_UpgradeReport_Files/UpgradeReport_Success.png
Normal file
BIN
_UpgradeReport_Files/UpgradeReport_Success.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 381 B |
BIN
_UpgradeReport_Files/UpgradeReport_Warning.png
Normal file
BIN
_UpgradeReport_Files/UpgradeReport_Warning.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 292 B |
Loading…
Reference in New Issue
Block a user