aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-02-18 23:37:44 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-02-18 23:37:44 -0500
commitd451386f5d1b2aa08d69040938be2cf9ee89e0ef (patch)
tree78d39e333ebc3cdf5299e706ddb041dd52d351b3
parent8497c2926f0ed44423f16479a4a234e36f200b68 (diff)
sync updates
-rw-r--r--MediaBrowser.Api/ItemUpdateService.cs7
-rw-r--r--MediaBrowser.Controller/Entities/Audio/MusicArtist.cs10
-rw-r--r--MediaBrowser.Controller/Entities/Audio/MusicGenre.cs5
-rw-r--r--MediaBrowser.Controller/Entities/GameGenre.cs5
-rw-r--r--MediaBrowser.Controller/Entities/Genre.cs5
-rw-r--r--MediaBrowser.Controller/Entities/Movies/BoxSet.cs5
-rw-r--r--MediaBrowser.Controller/Entities/Person.cs9
-rw-r--r--MediaBrowser.Controller/Entities/Studio.cs6
-rw-r--r--MediaBrowser.Controller/Entities/Year.cs5
-rw-r--r--MediaBrowser.LocalMetadata/Images/InternalMetadataFolderImageProvider.cs1
-rw-r--r--MediaBrowser.Model/Dto/ImageOptions.cs6
-rw-r--r--MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs53
-rw-r--r--MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs18
13 files changed, 124 insertions, 11 deletions
diff --git a/MediaBrowser.Api/ItemUpdateService.cs b/MediaBrowser.Api/ItemUpdateService.cs
index ea90afc3b..6517d738b 100644
--- a/MediaBrowser.Api/ItemUpdateService.cs
+++ b/MediaBrowser.Api/ItemUpdateService.cs
@@ -83,6 +83,13 @@ namespace MediaBrowser.Api
{
info.ContentTypeOptions = GetContentTypeOptions(true);
info.ContentType = configuredContentType;
+
+ if (string.Equals(inheritedContentType, CollectionType.TvShows, StringComparison.OrdinalIgnoreCase))
+ {
+ info.ContentTypeOptions = info.ContentTypeOptions
+ .Where(i => string.IsNullOrWhiteSpace(i.Value) || string.Equals(i.Value, CollectionType.TvShows, StringComparison.OrdinalIgnoreCase))
+ .ToList();
+ }
}
}
}
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
index e65d3c0e7..2b8145041 100644
--- a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
+++ b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
@@ -52,6 +52,16 @@ namespace MediaBrowser.Controller.Entities.Audio
}
}
+ public override bool IsSaveLocalMetadataEnabled()
+ {
+ if (IsAccessedByName)
+ {
+ return true;
+ }
+
+ return base.IsSaveLocalMetadataEnabled();
+ }
+
private readonly Task _cachedTask = Task.FromResult(true);
protected override Task ValidateChildrenInternal(IProgress<double> progress, CancellationToken cancellationToken, bool recursive, bool refreshChildMetadata, MetadataRefreshOptions refreshOptions, IDirectoryService directoryService)
{
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs b/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs
index ed0956073..971c09236 100644
--- a/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs
+++ b/MediaBrowser.Controller/Entities/Audio/MusicGenre.cs
@@ -44,6 +44,11 @@ namespace MediaBrowser.Controller.Entities.Audio
return false;
}
+ public override bool IsSaveLocalMetadataEnabled()
+ {
+ return true;
+ }
+
/// <summary>
/// Gets a value indicating whether this instance is owned item.
/// </summary>
diff --git a/MediaBrowser.Controller/Entities/GameGenre.cs b/MediaBrowser.Controller/Entities/GameGenre.cs
index b246b9388..c91acbe3f 100644
--- a/MediaBrowser.Controller/Entities/GameGenre.cs
+++ b/MediaBrowser.Controller/Entities/GameGenre.cs
@@ -43,6 +43,11 @@ namespace MediaBrowser.Controller.Entities
}
}
+ public override bool IsSaveLocalMetadataEnabled()
+ {
+ return true;
+ }
+
public override bool CanDelete()
{
return false;
diff --git a/MediaBrowser.Controller/Entities/Genre.cs b/MediaBrowser.Controller/Entities/Genre.cs
index e17a5c1d8..cb68e5dae 100644
--- a/MediaBrowser.Controller/Entities/Genre.cs
+++ b/MediaBrowser.Controller/Entities/Genre.cs
@@ -34,6 +34,11 @@ namespace MediaBrowser.Controller.Entities
}
}
+ public override bool IsSaveLocalMetadataEnabled()
+ {
+ return true;
+ }
+
public override bool CanDelete()
{
return false;
diff --git a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs
index d874046ef..0778643da 100644
--- a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs
+++ b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs
@@ -79,6 +79,11 @@ namespace MediaBrowser.Controller.Entities.Movies
return true;
}
+ public override bool IsSaveLocalMetadataEnabled()
+ {
+ return true;
+ }
+
/// <summary>
/// Gets the trailer ids.
/// </summary>
diff --git a/MediaBrowser.Controller/Entities/Person.cs b/MediaBrowser.Controller/Entities/Person.cs
index d8cb69ca1..ef24d4347 100644
--- a/MediaBrowser.Controller/Entities/Person.cs
+++ b/MediaBrowser.Controller/Entities/Person.cs
@@ -1,8 +1,8 @@
-using System.Runtime.Serialization;
-using MediaBrowser.Controller.Providers;
+using MediaBrowser.Controller.Providers;
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Runtime.Serialization;
namespace MediaBrowser.Controller.Entities
{
@@ -50,6 +50,11 @@ namespace MediaBrowser.Controller.Entities
return false;
}
+ public override bool IsSaveLocalMetadataEnabled()
+ {
+ return true;
+ }
+
/// <summary>
/// Gets a value indicating whether this instance is owned item.
/// </summary>
diff --git a/MediaBrowser.Controller/Entities/Studio.cs b/MediaBrowser.Controller/Entities/Studio.cs
index 31bbaf422..b8d359369 100644
--- a/MediaBrowser.Controller/Entities/Studio.cs
+++ b/MediaBrowser.Controller/Entities/Studio.cs
@@ -45,6 +45,11 @@ namespace MediaBrowser.Controller.Entities
return false;
}
+ public override bool IsSaveLocalMetadataEnabled()
+ {
+ return true;
+ }
+
/// <summary>
/// Gets a value indicating whether this instance is owned item.
/// </summary>
@@ -63,7 +68,6 @@ namespace MediaBrowser.Controller.Entities
return inputItems.Where(GetItemFilter());
}
-
public Func<BaseItem, bool> GetItemFilter()
{
return i => i.Studios.Contains(Name, StringComparer.OrdinalIgnoreCase);
diff --git a/MediaBrowser.Controller/Entities/Year.cs b/MediaBrowser.Controller/Entities/Year.cs
index cf3ad3b6a..a1a152387 100644
--- a/MediaBrowser.Controller/Entities/Year.cs
+++ b/MediaBrowser.Controller/Entities/Year.cs
@@ -52,6 +52,11 @@ namespace MediaBrowser.Controller.Entities
}
}
+ public override bool IsSaveLocalMetadataEnabled()
+ {
+ return true;
+ }
+
public IEnumerable<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems)
{
int year;
diff --git a/MediaBrowser.LocalMetadata/Images/InternalMetadataFolderImageProvider.cs b/MediaBrowser.LocalMetadata/Images/InternalMetadataFolderImageProvider.cs
index 7473d48e9..60533797a 100644
--- a/MediaBrowser.LocalMetadata/Images/InternalMetadataFolderImageProvider.cs
+++ b/MediaBrowser.LocalMetadata/Images/InternalMetadataFolderImageProvider.cs
@@ -1,5 +1,4 @@
using MediaBrowser.Common.IO;
-using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Audio;
diff --git a/MediaBrowser.Model/Dto/ImageOptions.cs b/MediaBrowser.Model/Dto/ImageOptions.cs
index 8e35c1323..98bd0279a 100644
--- a/MediaBrowser.Model/Dto/ImageOptions.cs
+++ b/MediaBrowser.Model/Dto/ImageOptions.cs
@@ -88,6 +88,12 @@ namespace MediaBrowser.Model.Dto
public int? PercentPlayed { get; set; }
/// <summary>
+ /// Gets or sets the un played count.
+ /// </summary>
+ /// <value>The un played count.</value>
+ public int? UnPlayedCount { get; set; }
+
+ /// <summary>
/// Gets or sets the color of the background.
/// </summary>
/// <value>The color of the background.</value>
diff --git a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs b/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs
index 7415fe092..4f0f42f3e 100644
--- a/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs
+++ b/MediaBrowser.Server.Implementations/FileOrganization/EpisodeFileOrganizer.cs
@@ -5,10 +5,12 @@ using MediaBrowser.Controller.FileOrganization;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Extensions;
using MediaBrowser.Model.FileOrganization;
using MediaBrowser.Model.Logging;
-using MediaBrowser.Naming.Common;
using MediaBrowser.Naming.IO;
+using MediaBrowser.Server.Implementations.Library;
+using MediaBrowser.Server.Implementations.Logging;
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -16,8 +18,6 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using MediaBrowser.Server.Implementations.Library;
-using MediaBrowser.Server.Implementations.Logging;
namespace MediaBrowser.Server.Implementations.FileOrganization
{
@@ -202,15 +202,26 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
if (overwriteExisting)
{
+ var hasRenamedFiles = false;
+
foreach (var path in otherDuplicatePaths)
{
_logger.Debug("Removing duplicate episode {0}", path);
_libraryMonitor.ReportFileSystemChangeBeginning(path);
+ var renameRelatedFiles = false;
+ //var renameRelatedFiles = !hasRenamedFiles &&
+ // string.Equals(Path.GetDirectoryName(path), Path.GetDirectoryName(result.TargetPath), StringComparison.OrdinalIgnoreCase);
+
+ if (renameRelatedFiles)
+ {
+ hasRenamedFiles = true;
+ }
+
try
{
- DeleteLibraryFile(path);
+ DeleteLibraryFile(path, renameRelatedFiles, result.TargetPath);
}
catch (IOException ex)
{
@@ -224,13 +235,41 @@ namespace MediaBrowser.Server.Implementations.FileOrganization
}
}
- private void DeleteLibraryFile(string path)
+ private void DeleteLibraryFile(string path, bool renameRelatedFiles, string targetPath)
{
- var filename = Path.GetFileNameWithoutExtension(path);
-
_fileSystem.DeleteFile(path);
+ if (!renameRelatedFiles)
+ {
+ return;
+ }
+
// Now find other files
+ var originalFilenameWithoutExtension = Path.GetFileNameWithoutExtension(path);
+ var directory = Path.GetDirectoryName(path);
+
+ if (!string.IsNullOrWhiteSpace(originalFilenameWithoutExtension) && !string.IsNullOrWhiteSpace(directory))
+ {
+ // Get all related files, e.g. metadata, images, etc
+ var files = Directory.EnumerateFiles(directory, "*", SearchOption.TopDirectoryOnly)
+ .Where(i => (Path.GetFileNameWithoutExtension(i) ?? string.Empty).StartsWith(originalFilenameWithoutExtension, StringComparison.OrdinalIgnoreCase))
+ .ToList();
+
+ var targetFilenameWithoutExtension = Path.GetFileNameWithoutExtension(targetPath);
+
+ foreach (var file in files)
+ {
+ directory = Path.GetDirectoryName(file);
+ var filename = Path.GetFileName(file);
+
+ filename = filename.Replace(originalFilenameWithoutExtension, targetFilenameWithoutExtension,
+ StringComparison.OrdinalIgnoreCase);
+
+ var destination = Path.Combine(directory, filename);
+
+ File.Move(file, destination);
+ }
+ }
}
private List<string> GetOtherDuplicatePaths(string targetPath, Series series, int seasonNumber, int episodeNumber, int? endingEpisodeNumber)
diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
index 046941e3c..6e8ba1c1d 100644
--- a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
+++ b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs
@@ -380,6 +380,14 @@ namespace MediaBrowser.Server.Implementations.HttpServer
Priority = route.Priority,
Summary = route.Summary
});
+
+ // TODO: This is a hack for iOS. Remove it asap.
+ routes.Add(new RouteAttribute(DoubleNormalizeRoutePath(route.Path), route.Verbs)
+ {
+ Notes = route.Notes,
+ Priority = route.Priority,
+ Summary = route.Summary
+ });
}
return routes.ToArray();
@@ -395,6 +403,16 @@ namespace MediaBrowser.Server.Implementations.HttpServer
return "mediabrowser/" + path;
}
+ private string DoubleNormalizeRoutePath(string path)
+ {
+ if (path.StartsWith("/", StringComparison.OrdinalIgnoreCase))
+ {
+ return "/mediabrowser/mediabrowser" + path;
+ }
+
+ return "mediabrowser//mediabrowser" + path;
+ }
+
/// <summary>
/// Releases the specified instance.
/// </summary>