Switched to service stack json. Added more api enhancements.

This commit is contained in:
LukePulverenti Luke Pulverenti luke pulverenti 2012-07-15 16:27:07 -04:00
parent 2e03cb0916
commit baedafbeb9
27 changed files with 370 additions and 142 deletions

View File

@ -1,6 +1,7 @@
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Common.Net.Handlers;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Common.Json;
namespace MediaBrowser.Api.HttpHandlers namespace MediaBrowser.Api.HttpHandlers
{ {
@ -21,24 +22,19 @@ namespace MediaBrowser.Api.HttpHandlers
public static object GetSerializationObject(BaseItem item, bool includeChildren) public static object GetSerializationObject(BaseItem item, bool includeChildren)
{ {
Folder folder = item as Folder; if (includeChildren && item.IsFolder)
if (includeChildren && folder != null)
{ {
Folder folder = item as Folder;
return new return new
{ {
BaseItem = item, BaseItem = item,
Children = folder.Children, Children = folder.Children
Type = item.GetType().Name
}; };
} }
else else
{ {
return new return item;
{
BaseItem = item,
Type = item.GetType().Name
};
} }
} }

View File

@ -1,55 +1,55 @@
using System; using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace MediaBrowser.Common.Json namespace MediaBrowser.Common.Json
{ {
public class JsonSerializer public class JsonSerializer
{ {
public static void Serialize<T>(T o, Stream stream) public static void SerializeToStream<T>(T o, Stream stream)
{ {
using (StreamWriter streamWriter = new StreamWriter(stream)) Configure();
{
using (Newtonsoft.Json.JsonTextWriter writer = new Newtonsoft.Json.JsonTextWriter(streamWriter)) ServiceStack.Text.JsonSerializer.SerializeToStream<T>(o, stream);
{
var settings = new Newtonsoft.Json.JsonSerializerSettings()
{
NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore
};
Newtonsoft.Json.JsonSerializer.Create(settings).Serialize(writer, o);
}
}
} }
public static void Serialize<T>(T o, string file) public static void SerializeToFile<T>(T o, string file)
{ {
Configure();
using (StreamWriter streamWriter = new StreamWriter(file)) using (StreamWriter streamWriter = new StreamWriter(file))
{ {
using (Newtonsoft.Json.JsonTextWriter writer = new Newtonsoft.Json.JsonTextWriter(streamWriter)) ServiceStack.Text.JsonSerializer.SerializeToWriter<T>(o, streamWriter);
{
var settings = new Newtonsoft.Json.JsonSerializerSettings()
{
NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore
};
Newtonsoft.Json.JsonSerializer.Create(settings).Serialize(writer, o);
}
} }
} }
public static T Deserialize<T>(string file) public static T DeserializeFromFile<T>(string file)
{ {
using (StreamReader streamReader = new StreamReader(file)) Configure();
using (Stream stream = File.OpenRead(file))
{ {
using (Newtonsoft.Json.JsonTextReader reader = new Newtonsoft.Json.JsonTextReader(streamReader)) return ServiceStack.Text.JsonSerializer.DeserializeFromStream<T>(stream);
{
return Newtonsoft.Json.JsonSerializer.Create(new Newtonsoft.Json.JsonSerializerSettings() { }).Deserialize<T>(reader);
}
} }
} }
public static T DeserializeFromStream<T>(Stream stream)
{
Configure();
return ServiceStack.Text.JsonSerializer.DeserializeFromStream<T>(stream);
}
public static T DeserializeFromString<T>(string data)
{
Configure();
return ServiceStack.Text.JsonSerializer.DeserializeFromString<T>(data);
}
private static void Configure()
{
ServiceStack.Text.JsConfig.ExcludeTypeInfo = true;
ServiceStack.Text.JsConfig.IncludeNullValues = false;
ServiceStack.Text.JsConfig.DateHandler = ServiceStack.Text.JsonDateHandler.ISO8601;
}
} }
} }

View File

@ -2,6 +2,7 @@
using System.Diagnostics; using System.Diagnostics;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using MediaBrowser.Model.Logging;
namespace MediaBrowser.Common.Logging namespace MediaBrowser.Common.Logging
{ {

View File

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using MediaBrowser.Model.Logging;
namespace MediaBrowser.Common.Logging namespace MediaBrowser.Common.Logging
{ {

View File

@ -30,9 +30,6 @@
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Newtonsoft.Json">
<HintPath>..\packages\Newtonsoft.Json.4.5.7\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="ServiceStack.Text"> <Reference Include="ServiceStack.Text">
<HintPath>..\packages\ServiceStack.Text.3.8.5\lib\net35\ServiceStack.Text.dll</HintPath> <HintPath>..\packages\ServiceStack.Text.3.8.5\lib\net35\ServiceStack.Text.dll</HintPath>
</Reference> </Reference>
@ -50,6 +47,7 @@
<ItemGroup> <ItemGroup>
<Compile Include="Events\GenericItemEventArgs.cs" /> <Compile Include="Events\GenericItemEventArgs.cs" />
<Compile Include="Json\JsonSerializer.cs" /> <Compile Include="Json\JsonSerializer.cs" />
<Compile Include="Model\DictionaryBaseItem.cs" />
<Compile Include="Net\CollectionExtensions.cs" /> <Compile Include="Net\CollectionExtensions.cs" />
<Compile Include="Net\Handlers\BaseEmbeddedResourceHandler.cs" /> <Compile Include="Net\Handlers\BaseEmbeddedResourceHandler.cs" />
<Compile Include="Net\Handlers\JsonHandler.cs" /> <Compile Include="Net\Handlers\JsonHandler.cs" />
@ -63,7 +61,6 @@
<Compile Include="Logging\FileLogger.cs" /> <Compile Include="Logging\FileLogger.cs" />
<Compile Include="Logging\Logger.cs" /> <Compile Include="Logging\Logger.cs" />
<Compile Include="Logging\LogRow.cs" /> <Compile Include="Logging\LogRow.cs" />
<Compile Include="Logging\LogSeverity.cs" />
<Compile Include="Plugins\BasePlugin.cs" /> <Compile Include="Plugins\BasePlugin.cs" />
<Compile Include="Plugins\PluginController.cs" /> <Compile Include="Plugins\PluginController.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
@ -71,6 +68,12 @@
<ItemGroup> <ItemGroup>
<None Include="packages.config" /> <None Include="packages.config" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MediaBrowser.Model\MediaBrowser.Model.csproj">
<Project>{9b1ddd79-5134-4df3-ace3-d1957a7350d8}</Project>
<Name>MediaBrowser.Model</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.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.

View File

@ -0,0 +1,227 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MediaBrowser.Model.Entities;
using System.IO;
using MediaBrowser.Common.Json;
namespace MediaBrowser.Common.Model
{
public class DictionaryBaseItem : BaseItem
{
private Dictionary<string, object> Dictionary { get; set; }
public DictionaryBaseItem(Dictionary<string, object> dictionary)
{
Dictionary = dictionary;
}
public override string Name
{
get
{
return GetString("Name");
}
set
{
SetValue("Name", value);
}
}
public override string ArtImagePath
{
get
{
return GetString("ArtImagePath");
}
set
{
SetValue("ArtImagePath", value);
}
}
public override string AspectRatio
{
get
{
return GetString("AspectRatio");
}
set
{
SetValue("AspectRatio", value);
}
}
public override string BannerImagePath
{
get
{
return GetString("BannerImagePath");
}
set
{
SetValue("BannerImagePath", value);
}
}
public override string CustomPin
{
get
{
return GetString("CustomPin");
}
set
{
SetValue("CustomPin", value);
}
}
public override string CustomRating
{
get
{
return GetString("CustomRating");
}
set
{
SetValue("CustomRating", value);
}
}
public override string DisplayMediaType
{
get
{
return GetString("DisplayMediaType");
}
set
{
SetValue("DisplayMediaType", value);
}
}
public override string LogoImagePath
{
get
{
return GetString("LogoImagePath");
}
set
{
SetValue("LogoImagePath", value);
}
}
public override string OfficialRating
{
get
{
return GetString("OfficialRating");
}
set
{
SetValue("OfficialRating", value);
}
}
public override string Overview
{
get
{
return GetString("Overview");
}
set
{
SetValue("Overview", value);
}
}
public override string Path
{
get
{
return GetString("Path");
}
set
{
SetValue("Path", value);
}
}
public override string PrimaryImagePath
{
get
{
return GetString("PrimaryImagePath");
}
set
{
SetValue("PrimaryImagePath", value);
}
}
public override string SortName
{
get
{
return GetString("SortName");
}
set
{
SetValue("SortName", value);
}
}
public override string Tagline
{
get
{
return GetString("Tagline");
}
set
{
SetValue("Tagline", value);
}
}
public override string TrailerUrl
{
get
{
return GetString("TrailerUrl");
}
set
{
SetValue("TrailerUrl", value);
}
}
private string GetString(string name)
{
return Dictionary[name] as string;
}
private void SetValue<T>(string name, T value)
{
Dictionary[name] = value;
}
public static DictionaryBaseItem FromApiOutput(Stream stream)
{
Dictionary<string,object> data = JsonSerializer.DeserializeFromStream<Dictionary<string, object>>(stream);
if (data.ContainsKey("BaseItem"))
{
string baseItem = data["BaseItem"] as string;
data = JsonSerializer.DeserializeFromString<Dictionary<string, object>>(baseItem);
return new DictionaryBaseItem(data);
}
return new DictionaryBaseItem(data);
}
}
}

View File

@ -29,7 +29,7 @@ namespace MediaBrowser.Common.Net.Handlers
{ {
using (GZipStream gzipStream = new GZipStream(stream, CompressionMode.Compress, false)) using (GZipStream gzipStream = new GZipStream(stream, CompressionMode.Compress, false))
{ {
JsonSerializer.Serialize(ObjectToSerialize, gzipStream); JsonSerializer.SerializeToStream(ObjectToSerialize, gzipStream);
} }
} }
} }

View File

@ -40,7 +40,7 @@ namespace MediaBrowser.Common.Plugins
return new TConfigurationType(); return new TConfigurationType();
} }
return JsonSerializer.Deserialize<TConfigurationType>(ConfigurationPath); return JsonSerializer.DeserializeFromFile<TConfigurationType>(ConfigurationPath);
} }
} }

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Newtonsoft.Json" version="4.5.7" targetFramework="net45" />
<package id="Rx-Main" version="1.0.11226" targetFramework="net45" /> <package id="Rx-Main" version="1.0.11226" targetFramework="net45" />
<package id="ServiceStack.Text" version="3.8.5" targetFramework="net45" /> <package id="ServiceStack.Text" version="3.8.5" targetFramework="net45" />
</packages> </packages>

View File

@ -202,7 +202,7 @@ namespace MediaBrowser.Controller
return new Configuration(); return new Configuration();
} }
return JsonSerializer.Deserialize<Configuration>(file); return JsonSerializer.DeserializeFromFile<Configuration>(file);
} }
public void ReloadItem(BaseItem item) public void ReloadItem(BaseItem item)

View File

@ -30,10 +30,6 @@
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Newtonsoft.Json.4.5.7\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Reactive"> <Reference Include="System.Reactive">

View File

@ -41,7 +41,7 @@ namespace MediaBrowser.Controller
{ {
string file = Path.Combine(path, "user.js"); string file = Path.Combine(path, "user.js");
return JsonSerializer.Deserialize<User>(file); return JsonSerializer.DeserializeFromFile<User>(file);
} }
public void CreateUser(User user) public void CreateUser(User user)
@ -54,7 +54,7 @@ namespace MediaBrowser.Controller
Directory.CreateDirectory(userFolder); Directory.CreateDirectory(userFolder);
JsonSerializer.Serialize(user, Path.Combine(userFolder, "user.js")); JsonSerializer.SerializeToFile(user, Path.Combine(userFolder, "user.js"));
} }
} }
} }

View File

@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Newtonsoft.Json" version="4.5.7" targetFramework="net45" />
<package id="Rx-Main" version="1.0.11226" targetFramework="net45" /> <package id="Rx-Main" version="1.0.11226" targetFramework="net45" />
</packages> </packages>

View File

@ -1,4 +1,4 @@
using MediaBrowser.Common.Logging; using MediaBrowser.Model.Logging;
namespace MediaBrowser.Model.Configuration namespace MediaBrowser.Model.Configuration
{ {
@ -11,7 +11,7 @@ namespace MediaBrowser.Model.Configuration
public Configuration() public Configuration()
{ {
HttpServerPortNumber = 8096; HttpServerPortNumber = 8096;
LogSeverity = Common.Logging.LogSeverity.Info; LogSeverity = LogSeverity.Info;
} }
} }
} }

View File

@ -1,65 +1,85 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace MediaBrowser.Model.Entities namespace MediaBrowser.Model.Entities
{ {
public abstract class BaseItem public abstract class BaseItem
{ {
public string Name { get; set; } public virtual string Name { get; set; }
public string SortName { get; set; } public virtual string SortName { get; set; }
public Guid Id { get; set; } public virtual Guid Id { get; set; }
public DateTime DateCreated { get; set; } public virtual DateTime DateCreated { get; set; }
public DateTime DateModified { get; set; }
public string Path { get; set; } public virtual DateTime DateModified { get; set; }
[JsonIgnore] public virtual string Path { get; set; }
[IgnoreDataMember]
public Folder Parent { get; set; } public Folder Parent { get; set; }
public string PrimaryImagePath { get; set; } public virtual string PrimaryImagePath { get; set; }
public string LogoImagePath { get; set; } public virtual string LogoImagePath { get; set; }
public string ArtImagePath { get; set; } public virtual string ArtImagePath { get; set; }
public string ThumbnailImagePath { get; set; } public virtual string ThumbnailImagePath { get; set; }
public string BannerImagePath { get; set; } public virtual string BannerImagePath { get; set; }
public IEnumerable<string> BackdropImagePaths { get; set; } public virtual IEnumerable<string> BackdropImagePaths { get; set; }
public string OfficialRating { get; set; } public virtual string OfficialRating { get; set; }
public string CustomRating { get; set; } public virtual string CustomRating { get; set; }
public string CustomPin { get; set; } public virtual string CustomPin { get; set; }
public string Overview { get; set; } public virtual string Overview { get; set; }
public string Tagline { get; set; } public virtual string Tagline { get; set; }
[JsonIgnore] [IgnoreDataMember]
public IEnumerable<PersonInfo> People { get; set; } public virtual IEnumerable<PersonInfo> People { get; set; }
public IEnumerable<string> Studios { get; set; } public virtual IEnumerable<string> Studios { get; set; }
public IEnumerable<string> Genres { get; set; } public virtual IEnumerable<string> Genres { get; set; }
public string DisplayMediaType { get; set; } public virtual string DisplayMediaType { get; set; }
public float? UserRating { get; set; } public virtual float? UserRating { get; set; }
public TimeSpan? RunTime { get; set; } public virtual TimeSpan? RunTime { get; set; }
public string AspectRatio { get; set; } public virtual string AspectRatio { get; set; }
public int? ProductionYear { get; set; } public virtual int? ProductionYear { get; set; }
public IEnumerable<Video> LocalTrailers { get; set; } public virtual IEnumerable<Video> LocalTrailers { get; set; }
public string TrailerUrl { get; set; } public virtual string TrailerUrl { get; set; }
public override string ToString() public override string ToString()
{ {
return Name; return Name;
} }
/// <summary>
/// This is strictly to enhance json output, until I can find a way to customize service stack to add this without having to use a property
/// </summary>
public virtual bool IsFolder
{
get
{
return false;
}
}
/// <summary>
/// This is strictly to enhance json output, until I can find a way to customize service stack to add this without having to use a property
/// </summary>
public string Type
{
get
{
return GetType().Name;
}
}
} }
} }

View File

@ -1,10 +1,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO; using System.IO;
using Newtonsoft.Json; using System.Linq;
using System.Runtime.Serialization;
namespace MediaBrowser.Model.Entities namespace MediaBrowser.Model.Entities
{ {
@ -20,10 +18,18 @@ namespace MediaBrowser.Model.Entities
} }
} }
[JsonIgnore] public override bool IsFolder
{
get
{
return true;
}
}
[IgnoreDataMember]
public BaseItem[] Children { get; set; } public BaseItem[] Children { get; set; }
[JsonIgnore] [IgnoreDataMember]
public IEnumerable<Folder> FolderChildren { get { return Children.OfType<Folder>(); } } public IEnumerable<Folder> FolderChildren { get { return Children.OfType<Folder>(); } }
public Folder GetFolderByName(string name) public Folder GetFolderByName(string name)

View File

@ -4,7 +4,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace MediaBrowser.Common.Logging namespace MediaBrowser.Model.Logging
{ {
[Flags] [Flags]
public enum LogSeverity public enum LogSeverity

View File

@ -30,11 +30,9 @@
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Newtonsoft.Json">
<HintPath>..\packages\Newtonsoft.Json.4.5.7\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
@ -48,20 +46,12 @@
<Compile Include="Entities\BaseItem.cs" /> <Compile Include="Entities\BaseItem.cs" />
<Compile Include="Entities\Folder.cs" /> <Compile Include="Entities\Folder.cs" />
<Compile Include="Entities\PlaybackStatus.cs" /> <Compile Include="Entities\PlaybackStatus.cs" />
<Compile Include="Logging\LogSeverity.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Users\User.cs" /> <Compile Include="Users\User.cs" />
<Compile Include="Users\UserItemData.cs" /> <Compile Include="Users\UserItemData.cs" />
<Compile Include="Entities\Video.cs" /> <Compile Include="Entities\Video.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj">
<Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project>
<Name>MediaBrowser.Common</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.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.

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="4.5.7" targetFramework="net45" />
</packages>

View File

@ -49,6 +49,10 @@
<None Include="App.config" /> <None Include="App.config" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\MediaBrowser.Common\MediaBrowser.Common.csproj">
<Project>{9142eefa-7570-41e1-bfcc-468bb571af2f}</Project>
<Name>MediaBrowser.Common</Name>
</ProjectReference>
<ProjectReference Include="..\MediaBrowser.Controller\MediaBrowser.Controller.csproj"> <ProjectReference Include="..\MediaBrowser.Controller\MediaBrowser.Controller.csproj">
<Project>{17e1f4e6-8abd-4fe5-9ecf-43d4b6087ba2}</Project> <Project>{17e1f4e6-8abd-4fe5-9ecf-43d4b6087ba2}</Project>
<Name>MediaBrowser.Controller</Name> <Name>MediaBrowser.Controller</Name>

View File

@ -41,6 +41,7 @@ namespace MediaBrowser.Program
var time = DateTime.Now - now; var time = DateTime.Now - now;
Console.WriteLine("Done in " + time.TotalSeconds + " seconds"); Console.WriteLine("Done in " + time.TotalSeconds + " seconds");
Console.WriteLine("Press Enter to quit."); Console.WriteLine("Press Enter to quit.");
Console.ReadLine(); Console.ReadLine();
} }

View File

@ -8,6 +8,6 @@ namespace MediaBrowser.TV.Entities
{ {
public string SeasonNumber { get; set; } public string SeasonNumber { get; set; }
public string EpisodeNumber { get; set; } public string EpisodeNumber { get; set; }
public string FirstAired { get; set; } public DateTime? FirstAired { get; set; }
} }
} }

View File

@ -1,7 +1,6 @@
using MediaBrowser.Model.Entities; using System.Collections.Generic;
using System.Linq; using System.Runtime.Serialization;
using System.Collections.Generic; using MediaBrowser.Model.Entities;
using Newtonsoft.Json;
namespace MediaBrowser.TV.Entities namespace MediaBrowser.TV.Entities
{ {
@ -10,7 +9,7 @@ namespace MediaBrowser.TV.Entities
/// <summary> /// <summary>
/// Store these to reduce disk access in Episode Resolver /// Store these to reduce disk access in Episode Resolver
/// </summary> /// </summary>
[JsonIgnore] [IgnoreDataMember]
public IEnumerable<string> MetadataFiles { get; set; } public IEnumerable<string> MetadataFiles { get; set; }
} }
} }

View File

@ -30,12 +30,9 @@
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Newtonsoft.Json.4.5.7\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
@ -69,9 +66,6 @@
<Name>MediaBrowser.Model</Name> <Name>MediaBrowser.Model</Name>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup> <PropertyGroup>
<PostBuildEvent>xcopy "$(TargetPath)" "$(SolutionDir)\ProgramData\Plugins\$(ProjectName)\" /y</PostBuildEvent> <PostBuildEvent>xcopy "$(TargetPath)" "$(SolutionDir)\ProgramData\Plugins\$(ProjectName)\" /y</PostBuildEvent>

View File

@ -37,15 +37,16 @@ namespace MediaBrowser.TV.Metadata
case "FirstAired": case "FirstAired":
{ {
item.FirstAired = reader.ReadElementContentAsString() ?? string.Empty; string firstAired = reader.ReadElementContentAsString() ?? string.Empty;
if (!string.IsNullOrEmpty(item.FirstAired)) if (!string.IsNullOrEmpty(firstAired))
{ {
DateTime airDate; DateTime airDate;
int y = DateTime.TryParse(item.FirstAired, out airDate) ? airDate.Year : -1;
if (y > 1850) if (DateTime.TryParse(firstAired, out airDate) && airDate.Year > 1850)
{ {
item.ProductionYear = y; item.FirstAired = airDate;
item.ProductionYear = airDate.Year;
} }
} }

View File

@ -1,6 +1,5 @@
using System; using System;
using System.IO; using System.IO;
using System.Linq;
using MediaBrowser.Controller.Events; using MediaBrowser.Controller.Events;
using MediaBrowser.Controller.Resolvers; using MediaBrowser.Controller.Resolvers;
using MediaBrowser.TV.Entities; using MediaBrowser.TV.Entities;

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="4.5.7" targetFramework="net45" />
</packages>