diff options
| author | LukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com> | 2012-09-03 17:56:30 -0400 |
|---|---|---|
| committer | LukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com> | 2012-09-03 17:56:30 -0400 |
| commit | fc735e918723f5bfdd64979afa4995a6fec80e7c (patch) | |
| tree | 7777e8f0954a29953ed64beb79f4f58c5bda6aab | |
| parent | 7f8a4772786ed32781eab011cedb3260c9e2dd33 (diff) | |
Tweaked plugin downloading a bit
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs | 4 | ||||
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/PluginsHandler.cs | 3 | ||||
| -rw-r--r-- | MediaBrowser.ApiInteraction/ApiClient.cs | 39 | ||||
| -rw-r--r-- | MediaBrowser.ApiInteraction/IDataSerializer.cs | 7 | ||||
| -rw-r--r-- | MediaBrowser.Common/Kernel/BaseKernel.cs | 1 | ||||
| -rw-r--r-- | MediaBrowser.Common/Plugins/BasePlugin.cs | 22 | ||||
| -rw-r--r-- | MediaBrowser.Common/Serialization/JsonSerializer.cs | 7 | ||||
| -rw-r--r-- | MediaBrowser.Common/Serialization/JsvSerializer.cs | 12 | ||||
| -rw-r--r-- | MediaBrowser.Common/Serialization/ProtobufSerializer.cs | 8 | ||||
| -rw-r--r-- | MediaBrowser.Common/Serialization/XmlSerializer.cs | 8 | ||||
| -rw-r--r-- | MediaBrowser.Model/Plugins/BasePluginConfiguration.cs | 3 |
11 files changed, 91 insertions, 23 deletions
diff --git a/MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs b/MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs index 6abfb9b2d..38c039275 100644 --- a/MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/PluginConfigurationHandler.cs @@ -11,9 +11,9 @@ namespace MediaBrowser.Api.HttpHandlers {
protected override Task<BasePluginConfiguration> GetObjectToSerialize()
{
- string pluginName = QueryString["name"];
+ string name = QueryString["assemblyfilename"];
- BasePluginConfiguration config = Kernel.Instance.Plugins.First(p => p.Name.Equals(pluginName, StringComparison.OrdinalIgnoreCase)).Configuration;
+ BasePluginConfiguration config = Kernel.Instance.Plugins.First(p => p.AssemblyFileName.Equals(name, StringComparison.OrdinalIgnoreCase)).Configuration;
return Task.FromResult<BasePluginConfiguration>(config);
}
diff --git a/MediaBrowser.Api/HttpHandlers/PluginsHandler.cs b/MediaBrowser.Api/HttpHandlers/PluginsHandler.cs index b05642e70..d0be59cef 100644 --- a/MediaBrowser.Api/HttpHandlers/PluginsHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/PluginsHandler.cs @@ -22,7 +22,8 @@ namespace MediaBrowser.Api.HttpHandlers Enabled = p.Enabled,
DownloadToUI = p.DownloadToUI,
Version = p.Version.ToString(),
- AssemblyFileName = p.AssemblyFileName
+ AssemblyFileName = p.AssemblyFileName,
+ ConfigurationDateLastModified = p.ConfigurationDateLastModified
};
});
diff --git a/MediaBrowser.ApiInteraction/ApiClient.cs b/MediaBrowser.ApiInteraction/ApiClient.cs index 6384f3df9..18d6ddc21 100644 --- a/MediaBrowser.ApiInteraction/ApiClient.cs +++ b/MediaBrowser.ApiInteraction/ApiClient.cs @@ -590,15 +590,34 @@ namespace MediaBrowser.ApiInteraction }
/// <summary>
- /// Gets weather information for the default location as set in configuration
+ /// Gets the current server configuration
/// </summary>
public async Task<ServerConfiguration> GetServerConfigurationAsync()
{
string url = ApiUrl + "/ServerConfiguration";
- using (Stream stream = await GetSerializedStreamAsync(url, ApiInteraction.SerializationFormat.Json).ConfigureAwait(false))
+ // At the moment this can't be retrieved in protobuf format
+ SerializationFormat format = DataSerializer.CanDeserializeJsv ? SerializationFormat.Jsv : ApiInteraction.SerializationFormat.Json;
+
+ using (Stream stream = await GetSerializedStreamAsync(url, format).ConfigureAwait(false))
+ {
+ return DeserializeFromStream<ServerConfiguration>(stream, format);
+ }
+ }
+
+ /// <summary>
+ /// Gets weather information for the default location as set in configuration
+ /// </summary>
+ public async Task<object> GetPluginConfigurationAsync(PluginInfo plugin, Type configurationType)
+ {
+ 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;
+
+ using (Stream stream = await GetSerializedStreamAsync(url, format).ConfigureAwait(false))
{
- return DeserializeFromStream<ServerConfiguration>(stream, ApiInteraction.SerializationFormat.Json);
+ return DeserializeFromStream(stream, format, configurationType);
}
}
@@ -685,6 +704,20 @@ namespace MediaBrowser.ApiInteraction return DataSerializer.DeserializeJsonFromStream<T>(stream);
}
+ private object DeserializeFromStream(Stream stream, SerializationFormat format, Type type)
+ {
+ if (format == ApiInteraction.SerializationFormat.Protobuf)
+ {
+ return DataSerializer.DeserializeProtobufFromStream(stream, type);
+ }
+ if (format == ApiInteraction.SerializationFormat.Jsv)
+ {
+ return DataSerializer.DeserializeJsvFromStream(stream, type);
+ }
+
+ return DataSerializer.DeserializeJsonFromStream(stream, type);
+ }
+
/// <summary>
/// This is just a helper around HttpClient
/// </summary>
diff --git a/MediaBrowser.ApiInteraction/IDataSerializer.cs b/MediaBrowser.ApiInteraction/IDataSerializer.cs index 999045dda..33bac96df 100644 --- a/MediaBrowser.ApiInteraction/IDataSerializer.cs +++ b/MediaBrowser.ApiInteraction/IDataSerializer.cs @@ -1,4 +1,5 @@ -using System.IO;
+using System;
+using System.IO;
namespace MediaBrowser.ApiInteraction
{
@@ -11,6 +12,10 @@ namespace MediaBrowser.ApiInteraction 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; }
}
diff --git a/MediaBrowser.Common/Kernel/BaseKernel.cs b/MediaBrowser.Common/Kernel/BaseKernel.cs index 3704dbce0..8b865201b 100644 --- a/MediaBrowser.Common/Kernel/BaseKernel.cs +++ b/MediaBrowser.Common/Kernel/BaseKernel.cs @@ -168,6 +168,7 @@ namespace MediaBrowser.Common.Kernel if (!File.Exists(ApplicationPaths.SystemConfigurationFilePath))
{
Configuration = new TConfigurationType();
+ XmlSerializer.SerializeToFile(Configuration, ApplicationPaths.SystemConfigurationFilePath);
}
else
{
diff --git a/MediaBrowser.Common/Plugins/BasePlugin.cs b/MediaBrowser.Common/Plugins/BasePlugin.cs index e36a31c68..d2e186e12 100644 --- a/MediaBrowser.Common/Plugins/BasePlugin.cs +++ b/MediaBrowser.Common/Plugins/BasePlugin.cs @@ -24,7 +24,7 @@ namespace MediaBrowser.Common.Plugins }
}
- protected override Type ConfigurationType
+ public override Type ConfigurationType
{
get { return typeof(TConfigurationType); }
}
@@ -35,12 +35,12 @@ namespace MediaBrowser.Common.Plugins /// </summary>
public abstract class BasePlugin : IDisposable
{
- private IKernel Kernel { get; set; }
+ public IKernel IKernel { get; set; }
/// <summary>
/// Gets or sets the plugin's current context
/// </summary>
- protected KernelContext Context { get { return Kernel.KernelContext; } }
+ protected KernelContext Context { get { return IKernel.KernelContext; } }
/// <summary>
/// Gets the name of the plugin
@@ -50,7 +50,7 @@ namespace MediaBrowser.Common.Plugins /// <summary>
/// Gets the type of configuration this plugin uses
/// </summary>
- protected abstract Type ConfigurationType { get; }
+ public abstract Type ConfigurationType { get; }
/// <summary>
/// Gets the plugin version
@@ -74,6 +74,8 @@ namespace MediaBrowser.Common.Plugins }
}
+ public DateTime ConfigurationDateLastModified { get; private set; }
+
/// <summary>
/// Gets the path to the assembly file
/// </summary>
@@ -81,7 +83,7 @@ namespace MediaBrowser.Common.Plugins {
get
{
- return Path.Combine(Kernel.ApplicationPaths.PluginsPath, AssemblyFileName);
+ return Path.Combine(IKernel.ApplicationPaths.PluginsPath, AssemblyFileName);
}
}
@@ -102,7 +104,7 @@ namespace MediaBrowser.Common.Plugins {
get
{
- return Path.Combine(Kernel.ApplicationPaths.PluginConfigurationsPath, ConfigurationFileName);
+ return Path.Combine(IKernel.ApplicationPaths.PluginConfigurationsPath, ConfigurationFileName);
}
}
@@ -118,7 +120,7 @@ namespace MediaBrowser.Common.Plugins {
// Give the folder name the same name as the config file name
// We can always make this configurable if/when needed
- _DataFolderPath = Path.Combine(Kernel.ApplicationPaths.PluginsPath, Path.GetFileNameWithoutExtension(ConfigurationFileName));
+ _DataFolderPath = Path.Combine(IKernel.ApplicationPaths.PluginsPath, Path.GetFileNameWithoutExtension(ConfigurationFileName));
if (!Directory.Exists(_DataFolderPath))
{
@@ -154,7 +156,7 @@ namespace MediaBrowser.Common.Plugins /// </summary>
public void Initialize(IKernel kernel)
{
- Kernel = kernel;
+ IKernel = kernel;
ReloadConfiguration();
@@ -183,12 +185,14 @@ namespace MediaBrowser.Common.Plugins if (!File.Exists(ConfigurationFilePath))
{
Configuration = Activator.CreateInstance(ConfigurationType) as BasePluginConfiguration;
+ XmlSerializer.SerializeToFile(Configuration, ConfigurationFilePath);
}
else
{
Configuration = XmlSerializer.DeserializeFromFile(ConfigurationType, ConfigurationFilePath) as BasePluginConfiguration;
- Configuration.DateLastModified = File.GetLastWriteTime(ConfigurationFilePath);
}
+
+ ConfigurationDateLastModified = File.GetLastWriteTime(ConfigurationFilePath);
}
}
}
diff --git a/MediaBrowser.Common/Serialization/JsonSerializer.cs b/MediaBrowser.Common/Serialization/JsonSerializer.cs index e73048f17..b1c0726e5 100644 --- a/MediaBrowser.Common/Serialization/JsonSerializer.cs +++ b/MediaBrowser.Common/Serialization/JsonSerializer.cs @@ -52,6 +52,13 @@ namespace MediaBrowser.Common.Serialization return ServiceStack.Text.JsonSerializer.DeserializeFromStream<T>(stream);
}
+ public static object DeserializeFromStream(Stream stream, Type type)
+ {
+ Configure();
+
+ return ServiceStack.Text.JsonSerializer.DeserializeFromStream(type, stream);
+ }
+
private static bool IsConfigured = false;
private static void Configure()
{
diff --git a/MediaBrowser.Common/Serialization/JsvSerializer.cs b/MediaBrowser.Common/Serialization/JsvSerializer.cs index 24c4b074e..d482348af 100644 --- a/MediaBrowser.Common/Serialization/JsvSerializer.cs +++ b/MediaBrowser.Common/Serialization/JsvSerializer.cs @@ -1,4 +1,5 @@ -using System.IO;
+using System;
+using System.IO;
namespace MediaBrowser.Common.Serialization
{
@@ -19,11 +20,16 @@ namespace MediaBrowser.Common.Serialization return ServiceStack.Text.TypeSerializer.DeserializeFromStream<T>(stream);
}
+ public static object DeserializeFromStream(Stream stream, Type type)
+ {
+ return ServiceStack.Text.TypeSerializer.DeserializeFromStream(type, stream);
+ }
+
public static void SerializeToFile<T>(T obj, string file)
{
using (Stream stream = File.Open(file, FileMode.Create))
{
- ServiceStack.Text.TypeSerializer.SerializeToStream<T>(obj, stream);
+ SerializeToStream<T>(obj, stream);
}
}
@@ -31,7 +37,7 @@ namespace MediaBrowser.Common.Serialization {
using (Stream stream = File.OpenRead(file))
{
- return ServiceStack.Text.TypeSerializer.DeserializeFromStream<T>(stream);
+ return DeserializeFromStream<T>(stream);
}
}
}
diff --git a/MediaBrowser.Common/Serialization/ProtobufSerializer.cs b/MediaBrowser.Common/Serialization/ProtobufSerializer.cs index 701ef7029..6151e8341 100644 --- a/MediaBrowser.Common/Serialization/ProtobufSerializer.cs +++ b/MediaBrowser.Common/Serialization/ProtobufSerializer.cs @@ -1,4 +1,5 @@ -using System.IO;
+using System;
+using System.IO;
namespace MediaBrowser.Common.Serialization
{
@@ -18,6 +19,11 @@ namespace MediaBrowser.Common.Serialization return ProtoBuf.Serializer.Deserialize<T>(stream);
}
+ public static object DeserializeFromStream(Stream stream, Type type)
+ {
+ throw new NotImplementedException();
+ }
+
public static void SerializeToFile<T>(T obj, string file)
{
using (Stream stream = File.Open(file, FileMode.Create))
diff --git a/MediaBrowser.Common/Serialization/XmlSerializer.cs b/MediaBrowser.Common/Serialization/XmlSerializer.cs index 90361e2b9..b881591dd 100644 --- a/MediaBrowser.Common/Serialization/XmlSerializer.cs +++ b/MediaBrowser.Common/Serialization/XmlSerializer.cs @@ -39,6 +39,14 @@ namespace MediaBrowser.Common.Serialization }
}
+ public static void SerializeToFile(object obj, string file)
+ {
+ using (FileStream stream = new FileStream(file, FileMode.Create))
+ {
+ ServiceStack.Text.XmlSerializer.SerializeToStream(obj, stream);
+ }
+ }
+
public static object DeserializeFromFile(Type type, string file)
{
using (Stream stream = File.OpenRead(file))
diff --git a/MediaBrowser.Model/Plugins/BasePluginConfiguration.cs b/MediaBrowser.Model/Plugins/BasePluginConfiguration.cs index 7881de598..55c5133a8 100644 --- a/MediaBrowser.Model/Plugins/BasePluginConfiguration.cs +++ b/MediaBrowser.Model/Plugins/BasePluginConfiguration.cs @@ -7,9 +7,6 @@ namespace MediaBrowser.Model.Plugins {
public bool Enabled { get; set; }
- [IgnoreDataMember]
- public DateTime DateLastModified { get; set; }
-
public BasePluginConfiguration()
{
Enabled = true;
|
