aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-03-28 22:38:22 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-03-28 22:38:22 -0400
commitca9a0edd173cb16b823fa4872e364aab6c68729f (patch)
treebbce0ba1a7255a68a9ca8d08f4b8aba355495765
parent1aa7eb4c6276ac80b3a77f66afb244083bdb77a4 (diff)
implement profile create/edit
-rw-r--r--MediaBrowser.Dlna/DlnaManager.cs60
-rw-r--r--MediaBrowser.ServerApplication/ApplicationHost.cs2
2 files changed, 60 insertions, 2 deletions
diff --git a/MediaBrowser.Dlna/DlnaManager.cs b/MediaBrowser.Dlna/DlnaManager.cs
index ec9ecb9ef..958188f37 100644
--- a/MediaBrowser.Dlna/DlnaManager.cs
+++ b/MediaBrowser.Dlna/DlnaManager.cs
@@ -20,13 +20,15 @@ namespace MediaBrowser.Dlna
private readonly IXmlSerializer _xmlSerializer;
private readonly IFileSystem _fileSystem;
private readonly ILogger _logger;
+ private readonly IJsonSerializer _jsonSerializer;
- public DlnaManager(IXmlSerializer xmlSerializer, IFileSystem fileSystem, IApplicationPaths appPaths, ILogger logger)
+ public DlnaManager(IXmlSerializer xmlSerializer, IFileSystem fileSystem, IApplicationPaths appPaths, ILogger logger, IJsonSerializer jsonSerializer)
{
_xmlSerializer = xmlSerializer;
_fileSystem = fileSystem;
_appPaths = appPaths;
_logger = logger;
+ _jsonSerializer = jsonSerializer;
//DumpProfiles();
}
@@ -381,10 +383,66 @@ namespace MediaBrowser.Dlna
public void CreateProfile(DeviceProfile profile)
{
+ profile = ReserializeProfile(profile);
+
+ if (string.IsNullOrWhiteSpace(profile.Name))
+ {
+ throw new ArgumentException("Profile is missing Name");
+ }
+
+ var newFilename = _fileSystem.GetValidFilename(profile.Name) + ".xml";
+ var path = Path.Combine(UserProfilesPath, newFilename);
+
+ _xmlSerializer.SerializeToFile(profile, path);
}
public void UpdateProfile(DeviceProfile profile)
{
+ profile = ReserializeProfile(profile);
+
+ if (string.IsNullOrWhiteSpace(profile.Id))
+ {
+ throw new ArgumentException("Profile is missing Id");
+ }
+ if (string.IsNullOrWhiteSpace(profile.Name))
+ {
+ throw new ArgumentException("Profile is missing Name");
+ }
+
+ var current = GetProfileInfosInternal().First(i => string.Equals(i.Info.Id, profile.Id, StringComparison.OrdinalIgnoreCase));
+
+ if (current.Info.Type == DeviceProfileType.System)
+ {
+ throw new ArgumentException("System profiles are readonly");
+ }
+
+ var newFilename = _fileSystem.GetValidFilename(profile.Name) + ".xml";
+ var path = Path.Combine(UserProfilesPath, newFilename);
+
+ if (!string.Equals(path, current.Path, StringComparison.Ordinal))
+ {
+ File.Delete(current.Path);
+ }
+
+ _xmlSerializer.SerializeToFile(profile, path);
+ }
+
+ /// <summary>
+ /// Recreates the object using serialization, to ensure it's not a subclass.
+ /// If it's a subclass it may not serlialize properly to xml (different root element tag name)
+ /// </summary>
+ /// <param name="profile"></param>
+ /// <returns></returns>
+ private DeviceProfile ReserializeProfile(DeviceProfile profile)
+ {
+ if (profile.GetType() == typeof(DeviceProfile))
+ {
+ return profile;
+ }
+
+ var json = _jsonSerializer.SerializeToString(profile);
+
+ return _jsonSerializer.DeserializeFromString<DeviceProfile>(json);
}
class InternalProfileInfo
diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs
index b7e9017d6..d9d5e007e 100644
--- a/MediaBrowser.ServerApplication/ApplicationHost.cs
+++ b/MediaBrowser.ServerApplication/ApplicationHost.cs
@@ -503,7 +503,7 @@ namespace MediaBrowser.ServerApplication
var appThemeManager = new AppThemeManager(ApplicationPaths, FileSystemManager, JsonSerializer, Logger);
RegisterSingleInstance<IAppThemeManager>(appThemeManager);
- var dlnaManager = new DlnaManager(XmlSerializer, FileSystemManager, ApplicationPaths, LogManager.GetLogger("DLNA"));
+ var dlnaManager = new DlnaManager(XmlSerializer, FileSystemManager, ApplicationPaths, LogManager.GetLogger("DLNA"), JsonSerializer);
RegisterSingleInstance<IDlnaManager>(dlnaManager);
var collectionManager = new CollectionManager(LibraryManager, FileSystemManager, LibraryMonitor);