Configuration and serialization improvements

This commit is contained in:
LukePulverenti Luke Pulverenti luke pulverenti 2012-07-29 11:19:25 -04:00
parent 77e81432f7
commit 5d88dc8575
11 changed files with 79 additions and 46 deletions

View file

@ -29,7 +29,8 @@ namespace MediaBrowser.Api
{
Item = item,
UserItemData = Kernel.Instance.GetUserItemData(userId, item.Id),
ItemType = item.GetType()
Type = item.GetType().Name,
IsFolder = (item is Folder)
};
if (includeChildren)

View file

@ -18,7 +18,7 @@ namespace MediaBrowser.Api
get { return "WebAPI"; }
}
public override void InitInServer()
public override void Init()
{
var httpServer = Kernel.Instance.HttpServer;

View file

@ -5,12 +5,12 @@ namespace MediaBrowser.Common.Configuration
/// <summary>
/// Serves as a common base class for the Server and UI application Configurations
/// </summary>
public class BaseConfiguration
public class BaseApplicationConfiguration
{
public LogSeverity LogSeverity { get; set; }
public int HttpServerPortNumber { get; set; }
public BaseConfiguration()
public BaseApplicationConfiguration()
{
LogSeverity = LogSeverity.Info;
HttpServerPortNumber = 8096;

View file

@ -1,5 +1,5 @@
using System.IO;
using System;
using System;
using System.IO;
namespace MediaBrowser.Common.Json
{
@ -22,6 +22,16 @@ namespace MediaBrowser.Common.Json
}
}
public static object DeserializeFromFile(Type type, string file)
{
Configure();
using (Stream stream = File.OpenRead(file))
{
return ServiceStack.Text.JsonSerializer.DeserializeFromStream(type, stream);
}
}
public static T DeserializeFromFile<T>(string file)
{
Configure();

View file

@ -18,7 +18,7 @@ namespace MediaBrowser.Common.Kernel
/// Represents a shared base kernel for both the UI and server apps
/// </summary>
public abstract class BaseKernel<TConfigurationType>
where TConfigurationType : BaseConfiguration, new()
where TConfigurationType : BaseApplicationConfiguration, new()
{
/// <summary>
/// Gets the path to the program data folder
@ -139,18 +139,13 @@ namespace MediaBrowser.Common.Kernel
plugin.Version = assemblyName.Version;
plugin.Path = Path.Combine(PluginsPath, assemblyName.Name);
plugin.Context = KernelContext;
plugin.ReloadConfiguration();
if (plugin.Enabled)
{
if (KernelContext == KernelContext.Server)
{
plugin.InitInServer();
}
else
{
plugin.InitInUI();
}
plugin.Init();
}
}
}

View file

@ -48,7 +48,7 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Configuration\BaseConfiguration.cs" />
<Compile Include="Configuration\BaseApplicationConfiguration.cs" />
<Compile Include="Events\GenericItemEventArgs.cs" />
<Compile Include="Json\JsonSerializer.cs" />
<Compile Include="Kernel\BaseKernel.cs" />

View file

@ -2,6 +2,7 @@
using System.IO;
using MediaBrowser.Common.Json;
using MediaBrowser.Model.Plugins;
using MediaBrowser.Common.Kernel;
namespace MediaBrowser.Common.Plugins
{
@ -23,31 +24,45 @@ namespace MediaBrowser.Common.Plugins
}
}
public override void ReloadConfiguration()
protected override Type ConfigurationType
{
if (!File.Exists(ConfigurationPath))
{
Configuration = new TConfigurationType();
}
else
{
Configuration = JsonSerializer.DeserializeFromFile<TConfigurationType>(ConfigurationPath);
Configuration.DateLastModified = File.GetLastWriteTime(ConfigurationPath);
}
get { return typeof(TConfigurationType); }
}
}
/// <summary>
/// Provides a common base class for all plugins
/// </summary>
public abstract class BasePlugin
public abstract class BasePlugin : IDisposable
{
/// <summary>
/// Gets or sets the plugin's current context
/// </summary>
public KernelContext Context { get; set; }
/// <summary>
/// Gets the name of the plugin
/// </summary>
public abstract string Name { get; }
/// <summary>
/// Gets the type of configuration this plugin uses
/// </summary>
protected abstract Type ConfigurationType { get; }
/// <summary>
/// Gets or sets the path to the plugin's folder
/// </summary>
public string Path { get; set; }
/// <summary>
/// Gets or sets the plugin version
/// </summary>
public Version Version { get; set; }
/// <summary>
/// Gets or sets the current plugin configuration
/// </summary>
public BasePluginConfiguration Configuration { get; protected set; }
protected string ConfigurationPath
@ -85,15 +100,31 @@ namespace MediaBrowser.Common.Plugins
}
}
public abstract void ReloadConfiguration();
public void ReloadConfiguration()
{
if (!File.Exists(ConfigurationPath))
{
Configuration = Activator.CreateInstance(ConfigurationType) as BasePluginConfiguration;
}
else
{
Configuration = JsonSerializer.DeserializeFromFile(ConfigurationType, ConfigurationPath) as BasePluginConfiguration;
Configuration.DateLastModified = File.GetLastWriteTime(ConfigurationPath);
}
}
public virtual void InitInServer()
/// <summary>
/// Starts the plugin.
/// </summary>
public virtual void Init()
{
}
public virtual void InitInUI()
/// <summary>
/// Disposes the plugins. Undos all actions performed during Init.
/// </summary>
public virtual void Dispose()
{
}
}
}

View file

@ -4,7 +4,7 @@ using MediaBrowser.Model.Configuration;
namespace MediaBrowser.Controller.Configuration
{
public class ServerConfiguration : BaseConfiguration
public class ServerConfiguration : BaseApplicationConfiguration
{
public string ImagesByNamePath { get; set; }

View file

@ -13,7 +13,7 @@ namespace MediaBrowser.HtmlBrowser
get { return "Html Library Browser"; }
}
public override void InitInServer()
public override void Init()
{
var httpServer = Kernel.Instance.HttpServer;

View file

@ -1,6 +1,4 @@
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Collections.Generic;
using MediaBrowser.Model.Users;
namespace MediaBrowser.Model.Entities
@ -25,15 +23,8 @@ namespace MediaBrowser.Model.Entities
public IEnumerable<ApiBaseItemWrapper<T>> Children { get; set; }
[IgnoreDataMember]
public Type ItemType { get; set; }
public bool IsFolder { get; set; }
public string Type
{
get
{
return ItemType.Name;
}
}
public string Type { get; set; }
}
}

View file

@ -16,11 +16,16 @@ namespace MediaBrowser.TV
get { return "TV"; }
}
public override void InitInServer()
public override void Init()
{
Kernel.Instance.ItemController.PreBeginResolvePath += ItemController_PreBeginResolvePath;
}
public override void Dispose()
{
Kernel.Instance.ItemController.PreBeginResolvePath -= ItemController_PreBeginResolvePath;
}
void ItemController_PreBeginResolvePath(object sender, PreBeginResolveEventArgs e)
{
if (e.IsFolder && System.IO.Path.GetFileName(e.Path).Equals("metadata", StringComparison.OrdinalIgnoreCase))