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;
|
||||
|
||||
HttpClient = new HttpClient(handler);
|
||||
|
||||
DataSerializer.Configure();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -48,24 +50,11 @@ namespace MediaBrowser.ApiInteraction
|
|||
{
|
||||
get
|
||||
{
|
||||
// First try Protobuf since it has the best performance
|
||||
if (DataSerializer.CanDeserializeProtobuf)
|
||||
{
|
||||
return ApiInteraction.SerializationFormat.Protobuf;
|
||||
}
|
||||
|
||||
// Next best is jsv
|
||||
if (DataSerializer.CanDeserializeJsv)
|
||||
{
|
||||
return ApiInteraction.SerializationFormat.Jsv;
|
||||
}
|
||||
|
||||
return ApiInteraction.SerializationFormat.Json;
|
||||
return ApiInteraction.SerializationFormat.Jsv;
|
||||
}
|
||||
}
|
||||
|
||||
public HttpClient HttpClient { get; private set; }
|
||||
public IDataSerializer DataSerializer { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 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";
|
||||
|
||||
// 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))
|
||||
{
|
||||
|
@ -613,7 +602,7 @@ namespace MediaBrowser.ApiInteraction
|
|||
string url = ApiUrl + "/PluginConfiguration?assemblyfilename=" + plugin.AssemblyFileName;
|
||||
|
||||
// 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))
|
||||
{
|
||||
|
@ -708,7 +697,7 @@ namespace MediaBrowser.ApiInteraction
|
|||
{
|
||||
if (format == ApiInteraction.SerializationFormat.Protobuf)
|
||||
{
|
||||
return DataSerializer.DeserializeProtobufFromStream(stream, type);
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
if (format == ApiInteraction.SerializationFormat.Jsv)
|
||||
{
|
||||
|
@ -731,11 +720,4 @@ namespace MediaBrowser.ApiInteraction
|
|||
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>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{B1C27231-7017-4C9B-A678-DE891954FA38}</ProjectGuid>
|
||||
<ProjectGuid>{921C0F64-FDA7-4E9F-9E73-0CB0EEDB2422}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>MediaBrowser.ApiInteraction</RootNamespace>
|
||||
<AssemblyName>MediaBrowser.ApiInteraction</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>
|
||||
|
@ -32,18 +30,36 @@
|
|||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<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">
|
||||
<Project>{7eeeb4bb-f3e8-48fc-b4c5-70f0fff8329b}</Project>
|
||||
<Name>MediaBrowser.Model</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ApiClient.cs" />
|
||||
<Compile Include="IDataSerializer.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<None Include="packages.config" />
|
||||
</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.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using System.Resources;
|
||||
using System.Reflection;
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
|
@ -14,7 +13,14 @@ using System.Runtime.InteropServices;
|
|||
[assembly: AssemblyCopyright("Copyright © 2012")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[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:
|
||||
//
|
||||
|
|
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 Include="PresentationCore" />
|
||||
<Reference Include="PresentationFramework" />
|
||||
<Reference Include="protobuf-net, Version=2.0.0.580, Culture=neutral, PublicKeyToken=257b51d87d2e4d67, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\protobuf-net.2.0.0.580\lib\net40\protobuf-net.dll</HintPath>
|
||||
<Reference Include="protobuf-net">
|
||||
<HintPath>..\protobuf-net\Full\net30\protobuf-net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="ServiceStack.Text, Version=3.9.5.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<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-Interfaces" version="2.0.20823" targetFramework="net45" />
|
||||
<package id="Rx-Linq" version="2.0.20823" targetFramework="net45" />
|
||||
|
|
|
@ -30,9 +30,8 @@
|
|||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="protobuf-net, Version=2.0.0.580, Culture=neutral, PublicKeyToken=257b51d87d2e4d67, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\protobuf-net.2.0.0.580\lib\net40\protobuf-net.dll</HintPath>
|
||||
<Reference Include="protobuf-net">
|
||||
<HintPath>..\protobuf-net\Full\net30\protobuf-net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.ComponentModel.Composition" />
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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-Interfaces" version="2.0.20823" targetFramework="net45" />
|
||||
<package id="Rx-Linq" version="2.0.20823" targetFramework="net45" />
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<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>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
|
||||
|
|
|
@ -15,8 +15,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.Common", "Medi
|
|||
EndProject
|
||||
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", "{B1C27231-7017-4C9B-A678-DE891954FA38}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaBrowser.ServerApplication", "MediaBrowser.ServerApplication\MediaBrowser.ServerApplication.csproj", "{156EA256-AD2D-4D2F-B116-2ED4B9EFD869}"
|
||||
EndProject
|
||||
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}.Release|Any CPU.ActiveCfg = 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
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(Performance) = preSolution
|
||||
HasPerformanceSessions = true
|
||||
EndGlobalSection
|
||||
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