aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/Channels/Channel.cs2
-rw-r--r--MediaBrowser.Controller/Channels/ChannelAudioItem.cs13
-rw-r--r--MediaBrowser.Controller/Channels/ChannelFolderItem.cs10
-rw-r--r--MediaBrowser.Controller/Channels/ChannelVideoItem.cs19
-rw-r--r--MediaBrowser.Controller/Channels/IChannelFactory.cs14
-rw-r--r--MediaBrowser.Controller/Channels/IChannelItem.cs6
-rw-r--r--MediaBrowser.Controller/Channels/IChannelManager.cs2
-rw-r--r--MediaBrowser.Controller/Channels/IChannelMediaItem.cs2
-rw-r--r--MediaBrowser.Controller/Drawing/IImageProcessor.cs16
-rw-r--r--MediaBrowser.Controller/Entities/AggregateFolder.cs8
-rw-r--r--MediaBrowser.Controller/Entities/Audio/Audio.cs21
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs242
-rw-r--r--MediaBrowser.Controller/Entities/Book.cs10
-rw-r--r--MediaBrowser.Controller/Entities/CollectionFolder.cs8
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs98
-rw-r--r--MediaBrowser.Controller/Entities/Game.cs10
-rw-r--r--MediaBrowser.Controller/Entities/IHasImages.cs38
-rw-r--r--MediaBrowser.Controller/Entities/IHasMetadata.cs21
-rw-r--r--MediaBrowser.Controller/Entities/IHasPreferredMetadataLanguage.cs21
-rw-r--r--MediaBrowser.Controller/Entities/IHasProgramAttributes.cs2
-rw-r--r--MediaBrowser.Controller/Entities/InternalItemsQuery.cs7
-rw-r--r--MediaBrowser.Controller/Entities/ItemImageInfo.cs17
-rw-r--r--MediaBrowser.Controller/Entities/Movies/Movie.cs6
-rw-r--r--MediaBrowser.Controller/Entities/TV/Episode.cs11
-rw-r--r--MediaBrowser.Controller/Entities/TV/Season.cs6
-rw-r--r--MediaBrowser.Controller/Entities/TV/Series.cs1
-rw-r--r--MediaBrowser.Controller/Entities/Trailer.cs3
-rw-r--r--MediaBrowser.Controller/Entities/User.cs11
-rw-r--r--MediaBrowser.Controller/Entities/UserView.cs30
-rw-r--r--MediaBrowser.Controller/Entities/UserViewBuilder.cs67
-rw-r--r--MediaBrowser.Controller/Entities/Video.cs29
-rw-r--r--MediaBrowser.Controller/IO/FileData.cs7
-rw-r--r--MediaBrowser.Controller/IServerApplicationHost.cs6
-rw-r--r--MediaBrowser.Controller/Library/ILibraryManager.cs44
-rw-r--r--MediaBrowser.Controller/Library/ItemResolveArgs.cs16
-rw-r--r--MediaBrowser.Controller/LiveTv/IListingsProvider.cs2
-rw-r--r--MediaBrowser.Controller/LiveTv/ILiveTvManager.cs3
-rw-r--r--MediaBrowser.Controller/LiveTv/ILiveTvRecording.cs8
-rw-r--r--MediaBrowser.Controller/LiveTv/ITunerHost.cs5
-rw-r--r--MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs22
-rw-r--r--MediaBrowser.Controller/LiveTv/LiveTvChannel.cs25
-rw-r--r--MediaBrowser.Controller/LiveTv/LiveTvProgram.cs53
-rw-r--r--MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs23
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj29
-rw-r--r--MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs7
-rw-r--r--MediaBrowser.Controller/MediaEncoding/MediaEncoderHelpers.cs15
-rw-r--r--MediaBrowser.Controller/Net/IHttpServer.cs5
-rw-r--r--MediaBrowser.Controller/Net/StaticResultOptions.cs1
-rw-r--r--MediaBrowser.Controller/Persistence/IItemRepository.cs7
-rw-r--r--MediaBrowser.Controller/Playlists/IPlaylistManager.cs8
-rw-r--r--MediaBrowser.Controller/Providers/BaseItemXmlParser.cs23
-rw-r--r--MediaBrowser.Controller/Providers/DirectoryService.cs41
-rw-r--r--MediaBrowser.Controller/Providers/DynamicImageResponse.cs2
-rw-r--r--MediaBrowser.Controller/Providers/EpisodeIdentity.cs12
-rw-r--r--MediaBrowser.Controller/Providers/EpisodeInfo.cs18
-rw-r--r--MediaBrowser.Controller/Providers/IDirectoryService.cs14
-rw-r--r--MediaBrowser.Controller/Providers/IHasIdentities.cs14
-rw-r--r--MediaBrowser.Controller/Providers/IItemIdentity.cs7
-rw-r--r--MediaBrowser.Controller/Providers/IItemIdentityConverter.cs2
-rw-r--r--MediaBrowser.Controller/Providers/IItemIdentityProvider.cs2
-rw-r--r--MediaBrowser.Controller/Providers/IProviderManager.cs12
-rw-r--r--MediaBrowser.Controller/Providers/ImageRefreshMode.cs8
-rw-r--r--MediaBrowser.Controller/Providers/ItemIdentifier.cs63
-rw-r--r--MediaBrowser.Controller/Providers/ItemIdentities.cs15
-rw-r--r--MediaBrowser.Controller/Providers/ItemInfo.cs2
-rw-r--r--MediaBrowser.Controller/Providers/LocalImageInfo.cs4
-rw-r--r--MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs6
-rw-r--r--MediaBrowser.Controller/Providers/MetadataStatus.cs30
-rw-r--r--MediaBrowser.Controller/Providers/SeasonIdentity.cs11
-rw-r--r--MediaBrowser.Controller/Providers/SeasonInfo.cs18
-rw-r--r--MediaBrowser.Controller/Providers/SeriesIdentity.cs9
-rw-r--r--MediaBrowser.Controller/Providers/SeriesInfo.cs20
-rw-r--r--MediaBrowser.Controller/Resolvers/IItemResolver.cs10
-rw-r--r--MediaBrowser.Controller/Themes/IAppThemeManager.cs38
-rw-r--r--MediaBrowser.Controller/Themes/InternalThemeImage.cs31
-rw-r--r--MediaBrowser.Controller/packages.config4
76 files changed, 658 insertions, 795 deletions
diff --git a/MediaBrowser.Controller/Channels/Channel.cs b/MediaBrowser.Controller/Channels/Channel.cs
index f0328a1d88..839b7d68f5 100644
--- a/MediaBrowser.Controller/Channels/Channel.cs
+++ b/MediaBrowser.Controller/Channels/Channel.cs
@@ -10,8 +10,6 @@ namespace MediaBrowser.Controller.Channels
{
public class Channel : Folder
{
- public string OriginalChannelName { get; set; }
-
public override bool IsVisible(User user)
{
if (user.Policy.BlockedChannels != null)
diff --git a/MediaBrowser.Controller/Channels/ChannelAudioItem.cs b/MediaBrowser.Controller/Channels/ChannelAudioItem.cs
index aa4b6731c7..653cec9016 100644
--- a/MediaBrowser.Controller/Channels/ChannelAudioItem.cs
+++ b/MediaBrowser.Controller/Channels/ChannelAudioItem.cs
@@ -7,24 +7,15 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Users;
using System.Collections.Generic;
using System.Linq;
+using System.Runtime.Serialization;
using System.Threading;
namespace MediaBrowser.Controller.Channels
{
public class ChannelAudioItem : Audio, IChannelMediaItem
{
- public string ExternalId { get; set; }
-
- public string DataVersion { get; set; }
-
- public ChannelItemType ChannelItemType { get; set; }
-
- public bool IsInfiniteStream { get; set; }
-
public ChannelMediaContentType ContentType { get; set; }
- public string OriginalImageUrl { get; set; }
-
public List<ChannelMediaInfo> ChannelMediaSources { get; set; }
protected override bool GetBlockUnratedValue(UserPolicy config)
@@ -37,6 +28,7 @@ namespace MediaBrowser.Controller.Channels
return ExternalId;
}
+ [IgnoreDataMember]
public override bool SupportsLocalMetadata
{
get
@@ -55,6 +47,7 @@ namespace MediaBrowser.Controller.Channels
ChannelMediaSources = new List<ChannelMediaInfo>();
}
+ [IgnoreDataMember]
public override LocationType LocationType
{
get
diff --git a/MediaBrowser.Controller/Channels/ChannelFolderItem.cs b/MediaBrowser.Controller/Channels/ChannelFolderItem.cs
index 7e9da52a92..9010470f8f 100644
--- a/MediaBrowser.Controller/Channels/ChannelFolderItem.cs
+++ b/MediaBrowser.Controller/Channels/ChannelFolderItem.cs
@@ -3,28 +3,24 @@ using MediaBrowser.Model.Channels;
using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Users;
using System;
+using System.Runtime.Serialization;
using System.Threading;
using System.Threading.Tasks;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Controller.Channels
{
public class ChannelFolderItem : Folder, IChannelItem
{
- public string ExternalId { get; set; }
-
- public string DataVersion { get; set; }
-
- public ChannelItemType ChannelItemType { get; set; }
public ChannelFolderType ChannelFolderType { get; set; }
- public string OriginalImageUrl { get; set; }
-
protected override bool GetBlockUnratedValue(UserPolicy config)
{
// Don't block.
return false;
}
+ [IgnoreDataMember]
public override bool SupportsLocalMetadata
{
get
diff --git a/MediaBrowser.Controller/Channels/ChannelVideoItem.cs b/MediaBrowser.Controller/Channels/ChannelVideoItem.cs
index ca5e343f8c..fb545e57aa 100644
--- a/MediaBrowser.Controller/Channels/ChannelVideoItem.cs
+++ b/MediaBrowser.Controller/Channels/ChannelVideoItem.cs
@@ -8,24 +8,15 @@ using MediaBrowser.Model.Users;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
+using System.Runtime.Serialization;
using System.Threading;
namespace MediaBrowser.Controller.Channels
{
public class ChannelVideoItem : Video, IChannelMediaItem, IHasLookupInfo<ChannelItemLookupInfo>
{
- public string ExternalId { get; set; }
-
- public string DataVersion { get; set; }
-
- public ChannelItemType ChannelItemType { get; set; }
-
- public bool IsInfiniteStream { get; set; }
-
public ChannelMediaContentType ContentType { get; set; }
- public string OriginalImageUrl { get; set; }
-
public List<ChannelMediaInfo> ChannelMediaSources { get; set; }
protected override string CreateUserDataKey()
@@ -56,6 +47,7 @@ namespace MediaBrowser.Controller.Channels
return config.BlockUnratedItems.Contains(UnratedItem.ChannelContent);
}
+ [IgnoreDataMember]
public override bool SupportsLocalMetadata
{
get
@@ -74,6 +66,7 @@ namespace MediaBrowser.Controller.Channels
ChannelMediaSources = new List<ChannelMediaInfo>();
}
+ [IgnoreDataMember]
public override LocationType LocationType
{
get
@@ -115,7 +108,11 @@ namespace MediaBrowser.Controller.Channels
var info = GetItemLookupInfo<ChannelItemLookupInfo>();
info.ContentType = ContentType;
- info.ExtraType = ExtraType;
+
+ if (ExtraType.HasValue)
+ {
+ info.ExtraType = ExtraType.Value;
+ }
return info;
}
diff --git a/MediaBrowser.Controller/Channels/IChannelFactory.cs b/MediaBrowser.Controller/Channels/IChannelFactory.cs
deleted file mode 100644
index c7ed925866..0000000000
--- a/MediaBrowser.Controller/Channels/IChannelFactory.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System.Collections.Generic;
-
-namespace MediaBrowser.Controller.Channels
-{
- public interface IChannelFactory
- {
- IEnumerable<IChannel> GetChannels();
- }
-
- public interface IFactoryChannel
- {
-
- }
-} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Channels/IChannelItem.cs b/MediaBrowser.Controller/Channels/IChannelItem.cs
index 7eb865b5bd..9b5f0359bd 100644
--- a/MediaBrowser.Controller/Channels/IChannelItem.cs
+++ b/MediaBrowser.Controller/Channels/IChannelItem.cs
@@ -7,11 +7,5 @@ namespace MediaBrowser.Controller.Channels
string ChannelId { get; set; }
string ExternalId { get; set; }
-
- ChannelItemType ChannelItemType { get; set; }
-
- string OriginalImageUrl { get; set; }
-
- string DataVersion { get; set; }
}
}
diff --git a/MediaBrowser.Controller/Channels/IChannelManager.cs b/MediaBrowser.Controller/Channels/IChannelManager.cs
index 8d3e0f5962..fec550df8b 100644
--- a/MediaBrowser.Controller/Channels/IChannelManager.cs
+++ b/MediaBrowser.Controller/Channels/IChannelManager.cs
@@ -16,7 +16,7 @@ namespace MediaBrowser.Controller.Channels
/// </summary>
/// <param name="channels">The channels.</param>
/// <param name="factories">The factories.</param>
- void AddParts(IEnumerable<IChannel> channels, IEnumerable<IChannelFactory> factories);
+ void AddParts(IEnumerable<IChannel> channels);
/// <summary>
/// Gets the channel download path.
diff --git a/MediaBrowser.Controller/Channels/IChannelMediaItem.cs b/MediaBrowser.Controller/Channels/IChannelMediaItem.cs
index 50df07e72b..60a29da90b 100644
--- a/MediaBrowser.Controller/Channels/IChannelMediaItem.cs
+++ b/MediaBrowser.Controller/Channels/IChannelMediaItem.cs
@@ -11,7 +11,7 @@ namespace MediaBrowser.Controller.Channels
ChannelMediaContentType ContentType { get; set; }
- ExtraType ExtraType { get; set; }
+ ExtraType? ExtraType { get; set; }
List<ChannelMediaInfo> ChannelMediaSources { get; set; }
}
diff --git a/MediaBrowser.Controller/Drawing/IImageProcessor.cs b/MediaBrowser.Controller/Drawing/IImageProcessor.cs
index aeb8173921..e1e98857ff 100644
--- a/MediaBrowser.Controller/Drawing/IImageProcessor.cs
+++ b/MediaBrowser.Controller/Drawing/IImageProcessor.cs
@@ -28,17 +28,17 @@ namespace MediaBrowser.Controller.Drawing
/// <summary>
/// Gets the size of the image.
/// </summary>
- /// <param name="path">The path.</param>
+ /// <param name="info">The information.</param>
/// <returns>ImageSize.</returns>
- ImageSize GetImageSize(string path);
+ ImageSize GetImageSize(ItemImageInfo info);
/// <summary>
/// Gets the size of the image.
/// </summary>
- /// <param name="info">The information.</param>
+ /// <param name="path">The path.</param>
/// <returns>ImageSize.</returns>
- ImageSize GetImageSize(ItemImageInfo info);
-
+ ImageSize GetImageSize(string path);
+
/// <summary>
/// Adds the parts.
/// </summary>
@@ -105,5 +105,11 @@ namespace MediaBrowser.Controller.Drawing
/// </summary>
/// <param name="options">The options.</param>
Task CreateImageCollage(ImageCollageOptions options);
+
+ /// <summary>
+ /// Gets a value indicating whether [supports image collage creation].
+ /// </summary>
+ /// <value><c>true</c> if [supports image collage creation]; otherwise, <c>false</c>.</value>
+ bool SupportsImageCollageCreation { get; }
}
}
diff --git a/MediaBrowser.Controller/Entities/AggregateFolder.cs b/MediaBrowser.Controller/Entities/AggregateFolder.cs
index 66a0d551b2..14f8c1617a 100644
--- a/MediaBrowser.Controller/Entities/AggregateFolder.cs
+++ b/MediaBrowser.Controller/Entities/AggregateFolder.cs
@@ -6,6 +6,8 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
+using CommonIO;
+using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Providers;
namespace MediaBrowser.Controller.Entities
@@ -62,7 +64,7 @@ namespace MediaBrowser.Controller.Entities
public List<string> PhysicalLocationsList { get; set; }
- protected override IEnumerable<FileSystemInfo> GetFileSystemChildren(IDirectoryService directoryService)
+ protected override IEnumerable<FileSystemMetadata> GetFileSystemChildren(IDirectoryService directoryService)
{
return CreateResolveArgs(directoryService).FileSystemChildren;
}
@@ -73,7 +75,7 @@ namespace MediaBrowser.Controller.Entities
var args = new ItemResolveArgs(ConfigurationManager.ApplicationPaths , directoryService)
{
- FileInfo = new DirectoryInfo(path),
+ FileInfo = FileSystem.GetDirectoryInfo(path),
Path = path,
Parent = Parent
};
@@ -94,7 +96,7 @@ namespace MediaBrowser.Controller.Entities
{
var paths = LibraryManager.NormalizeRootPathList(fileSystemDictionary.Keys);
- fileSystemDictionary = paths.Select(i => (FileSystemInfo)new DirectoryInfo(i)).ToDictionary(i => i.FullName);
+ fileSystemDictionary = paths.Select(FileSystem.GetDirectoryInfo).ToDictionary(i => i.FullName);
}
args.FileSystemDictionary = fileSystemDictionary;
diff --git a/MediaBrowser.Controller/Entities/Audio/Audio.cs b/MediaBrowser.Controller/Entities/Audio/Audio.cs
index 623329ca66..43b980c20d 100644
--- a/MediaBrowser.Controller/Entities/Audio/Audio.cs
+++ b/MediaBrowser.Controller/Entities/Audio/Audio.cs
@@ -24,14 +24,20 @@ namespace MediaBrowser.Controller.Entities.Audio
IThemeMedia,
IArchivable
{
- public string FormatName { get; set; }
public long? Size { get; set; }
public string Container { get; set; }
public int? TotalBitrate { get; set; }
public List<string> Tags { get; set; }
- public ExtraType ExtraType { get; set; }
+ public ExtraType? ExtraType { get; set; }
- public bool IsThemeMedia { get; set; }
+ [IgnoreDataMember]
+ public bool IsThemeMedia
+ {
+ get
+ {
+ return ExtraType.HasValue && ExtraType.Value == Model.Entities.ExtraType.ThemeSong;
+ }
+ }
public Audio()
{
@@ -46,12 +52,6 @@ namespace MediaBrowser.Controller.Entities.Audio
get { return LocationType == LocationType.FileSystem && RunTimeTicks.HasValue; }
}
- /// <summary>
- /// Gets or sets a value indicating whether this instance has embedded image.
- /// </summary>
- /// <value><c>true</c> if this instance has embedded image; otherwise, <c>false</c>.</value>
- public bool HasEmbeddedImage { get; set; }
-
[IgnoreDataMember]
protected override bool SupportsOwnedItems
{
@@ -212,8 +212,7 @@ namespace MediaBrowser.Controller.Entities.Audio
Path = enablePathSubstituion ? GetMappedPath(i.Path, locationType) : i.Path,
RunTimeTicks = i.RunTimeTicks,
Container = i.Container,
- Size = i.Size,
- Formats = (i.FormatName ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList()
+ Size = i.Size
};
if (string.IsNullOrEmpty(info.Container))
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index 594b5ca93c..ec688bd9f4 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -23,6 +23,7 @@ using System.Linq;
using System.Runtime.Serialization;
using System.Threading;
using System.Threading.Tasks;
+using CommonIO;
namespace MediaBrowser.Controller.Entities
{
@@ -38,7 +39,6 @@ namespace MediaBrowser.Controller.Entities
ProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
LockedFields = new List<MetadataFields>();
ImageInfos = new List<ItemImageInfo>();
- Identities = new List<IItemIdentity>();
}
/// <summary>
@@ -56,12 +56,16 @@ namespace MediaBrowser.Controller.Entities
public static string ThemeSongFilename = "theme";
public static string ThemeVideosFolderName = "backdrops";
+ public string PreferredMetadataCountryCode { get; set; }
+ public string PreferredMetadataLanguage { get; set; }
+
public List<ItemImageInfo> ImageInfos { get; set; }
/// <summary>
/// Gets or sets the channel identifier.
/// </summary>
/// <value>The channel identifier.</value>
+ [IgnoreDataMember]
public string ChannelId { get; set; }
[IgnoreDataMember]
@@ -121,6 +125,12 @@ namespace MediaBrowser.Controller.Entities
public Guid Id { get; set; }
/// <summary>
+ /// Gets or sets a value indicating whether this instance is hd.
+ /// </summary>
+ /// <value><c>true</c> if this instance is hd; otherwise, <c>false</c>.</value>
+ public bool? IsHD { get; set; }
+
+ /// <summary>
/// Return the id that should be used to key display prefs for this item.
/// Default is based on the type for everything except actual generic folders.
/// </summary>
@@ -162,6 +172,26 @@ namespace MediaBrowser.Controller.Entities
}
}
+ /// <summary>
+ /// Id of the program.
+ /// </summary>
+ [IgnoreDataMember]
+ public string ExternalId
+ {
+ get { return this.GetProviderId("ProviderExternalId"); }
+ set
+ {
+ this.SetProviderId("ProviderExternalId", value);
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the etag.
+ /// </summary>
+ /// <value>The etag.</value>
+ [IgnoreDataMember]
+ public string ExternalEtag { get; set; }
+
[IgnoreDataMember]
public virtual bool IsHidden
{
@@ -183,7 +213,7 @@ namespace MediaBrowser.Controller.Entities
{
// Local trailer, special feature, theme video, etc.
// An item that belongs to another item but is not part of the Parent-Child tree
- return !IsFolder && Parent == null && LocationType == LocationType.FileSystem;
+ return !IsFolder && ParentId == Guid.Empty && LocationType == LocationType.FileSystem;
}
}
@@ -305,6 +335,9 @@ namespace MediaBrowser.Controller.Entities
public DateTime DateLastSaved { get; set; }
+ [IgnoreDataMember]
+ public DateTime DateLastRefreshed { get; set; }
+
/// <summary>
/// The logger
/// </summary>
@@ -331,30 +364,8 @@ namespace MediaBrowser.Controller.Entities
return Name;
}
- /// <summary>
- /// Returns true if this item should not attempt to fetch metadata
- /// </summary>
- /// <value><c>true</c> if [dont fetch meta]; otherwise, <c>false</c>.</value>
- [Obsolete("Please use IsLocked instead of DontFetchMeta")]
- public bool DontFetchMeta { get; set; }
-
- [IgnoreDataMember]
- public bool IsLocked
- {
- get
- {
- return DontFetchMeta;
- }
- set
- {
- DontFetchMeta = value;
- }
- }
-
- public bool IsUnidentified { get; set; }
-
[IgnoreDataMember]
- public List<IItemIdentity> Identities { get; set; }
+ public bool IsLocked { get; set; }
/// <summary>
/// Gets or sets the locked fields.
@@ -484,7 +495,6 @@ namespace MediaBrowser.Controller.Entities
public Guid ParentId { get; set; }
- private Folder _parent;
/// <summary>
/// Gets or sets the parent.
/// </summary>
@@ -494,11 +504,6 @@ namespace MediaBrowser.Controller.Entities
{
get
{
- if (_parent != null)
- {
- return _parent;
- }
-
if (ParentId != Guid.Empty)
{
return LibraryManager.GetItemById(ParentId) as Folder;
@@ -506,12 +511,14 @@ namespace MediaBrowser.Controller.Entities
return null;
}
- set { _parent = value; }
+ set
+ {
+
+ }
}
public void SetParent(Folder parent)
{
- Parent = parent;
ParentId = parent == null ? Guid.Empty : parent.Id;
}
@@ -558,6 +565,7 @@ namespace MediaBrowser.Controller.Entities
/// Gets or sets the end date.
/// </summary>
/// <value>The end date.</value>
+ [IgnoreDataMember]
public DateTime? EndDate { get; set; }
/// <summary>
@@ -582,6 +590,7 @@ namespace MediaBrowser.Controller.Entities
/// Gets or sets the custom rating.
/// </summary>
/// <value>The custom rating.</value>
+ //[IgnoreDataMember]
public string CustomRating { get; set; }
/// <summary>
@@ -591,12 +600,6 @@ namespace MediaBrowser.Controller.Entities
public string Overview { get; set; }
/// <summary>
- /// Gets or sets the people.
- /// </summary>
- /// <value>The people.</value>
- public List<PersonInfo> People { get; set; }
-
- /// <summary>
/// Gets or sets the studios.
/// </summary>
/// <value>The studios.</value>
@@ -618,6 +621,7 @@ namespace MediaBrowser.Controller.Entities
/// Gets or sets the community rating.
/// </summary>
/// <value>The community rating.</value>
+ //[IgnoreDataMember]
public float? CommunityRating { get; set; }
/// <summary>
@@ -643,6 +647,7 @@ namespace MediaBrowser.Controller.Entities
/// This could be episode number, album track number, etc.
/// </summary>
/// <value>The index number.</value>
+ //[IgnoreDataMember]
public int? IndexNumber { get; set; }
/// <summary>
@@ -662,7 +667,7 @@ namespace MediaBrowser.Controller.Entities
{
get
{
- if (!string.IsNullOrEmpty(CustomRating))
+ if (!string.IsNullOrWhiteSpace(CustomRating))
{
return CustomRating;
}
@@ -701,16 +706,16 @@ namespace MediaBrowser.Controller.Entities
/// Loads the theme songs.
/// </summary>
/// <returns>List{Audio.Audio}.</returns>
- private IEnumerable<Audio.Audio> LoadThemeSongs(List<FileSystemInfo> fileSystemChildren, IDirectoryService directoryService)
+ private IEnumerable<Audio.Audio> LoadThemeSongs(List<FileSystemMetadata> fileSystemChildren, IDirectoryService directoryService)
{
- var files = fileSystemChildren.OfType<DirectoryInfo>()
+ var files = fileSystemChildren.Where(i => i.IsDirectory)
.Where(i => string.Equals(i.Name, ThemeSongsFolderName, StringComparison.OrdinalIgnoreCase))
- .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly))
+ .SelectMany(i => directoryService.GetFiles(i.FullName))
.ToList();
// Support plex/xbmc convention
- files.AddRange(fileSystemChildren.OfType<FileInfo>()
- .Where(i => string.Equals(FileSystem.GetFileNameWithoutExtension(i), ThemeSongFilename, StringComparison.OrdinalIgnoreCase))
+ files.AddRange(fileSystemChildren
+ .Where(i => !i.IsDirectory && string.Equals(FileSystem.GetFileNameWithoutExtension(i), ThemeSongFilename, StringComparison.OrdinalIgnoreCase))
);
return LibraryManager.ResolvePaths(files, directoryService, null)
@@ -737,11 +742,11 @@ namespace MediaBrowser.Controller.Entities
/// Loads the video backdrops.
/// </summary>
/// <returns>List{Video}.</returns>
- private IEnumerable<Video> LoadThemeVideos(IEnumerable<FileSystemInfo> fileSystemChildren, IDirectoryService directoryService)
+ private IEnumerable<Video> LoadThemeVideos(IEnumerable<FileSystemMetadata> fileSystemChildren, IDirectoryService directoryService)
{
- var files = fileSystemChildren.OfType<DirectoryInfo>()
+ var files = fileSystemChildren.Where(i => i.IsDirectory)
.Where(i => string.Equals(i.Name, ThemeVideosFolderName, StringComparison.OrdinalIgnoreCase))
- .SelectMany(i => i.EnumerateFiles("*", SearchOption.TopDirectoryOnly));
+ .SelectMany(i => directoryService.GetFiles(i.FullName));
return LibraryManager.ResolvePaths(files, directoryService, null)
.OfType<Video>()
@@ -765,7 +770,7 @@ namespace MediaBrowser.Controller.Entities
public Task RefreshMetadata(CancellationToken cancellationToken)
{
- return RefreshMetadata(new MetadataRefreshOptions(new DirectoryService()), cancellationToken);
+ return RefreshMetadata(new MetadataRefreshOptions(new DirectoryService(FileSystem)), cancellationToken);
}
/// <summary>
@@ -786,7 +791,7 @@ namespace MediaBrowser.Controller.Entities
{
var files = locationType != LocationType.Remote && locationType != LocationType.Virtual ?
GetFileSystemChildren(options.DirectoryService).ToList() :
- new List<FileSystemInfo>();
+ new List<FileSystemMetadata>();
var ownedItemsChanged = await RefreshedOwnedItems(options, files, cancellationToken).ConfigureAwait(false);
@@ -833,7 +838,7 @@ namespace MediaBrowser.Controller.Entities
/// <param name="fileSystemChildren"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
- protected virtual async Task<bool> RefreshedOwnedItems(MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
+ protected virtual async Task<bool> RefreshedOwnedItems(MetadataRefreshOptions options, List<FileSystemMetadata> fileSystemChildren, CancellationToken cancellationToken)
{
var themeSongsChanged = false;
@@ -864,14 +869,14 @@ namespace MediaBrowser.Controller.Entities
return themeSongsChanged || themeVideosChanged || localTrailersChanged;
}
- protected virtual IEnumerable<FileSystemInfo> GetFileSystemChildren(IDirectoryService directoryService)
+ protected virtual IEnumerable<FileSystemMetadata> GetFileSystemChildren(IDirectoryService directoryService)
{
var path = ContainingFolderPath;
return directoryService.GetFileSystemEntries(path);
}
- private async Task<bool> RefreshLocalTrailers(IHasTrailers item, MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
+ private async Task<bool> RefreshLocalTrailers(IHasTrailers item, MetadataRefreshOptions options, List<FileSystemMetadata> fileSystemChildren, CancellationToken cancellationToken)
{
var newItems = LibraryManager.FindTrailers(this, fileSystemChildren, options.DirectoryService).ToList();
@@ -888,7 +893,7 @@ namespace MediaBrowser.Controller.Entities
return itemsChanged;
}
- private async Task<bool> RefreshThemeVideos(IHasThemeMedia item, MetadataRefreshOptions options, IEnumerable<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
+ private async Task<bool> RefreshThemeVideos(IHasThemeMedia item, MetadataRefreshOptions options, IEnumerable<FileSystemMetadata> fileSystemChildren, CancellationToken cancellationToken)
{
var newThemeVideos = LoadThemeVideos(fileSystemChildren, options.DirectoryService).ToList();
@@ -902,7 +907,7 @@ namespace MediaBrowser.Controller.Entities
if (!i.IsThemeMedia)
{
- i.IsThemeMedia = true;
+ i.ExtraType = ExtraType.ThemeVideo;
subOptions.ForceSave = true;
}
@@ -919,7 +924,7 @@ namespace MediaBrowser.Controller.Entities
/// <summary>
/// Refreshes the theme songs.
/// </summary>
- private async Task<bool> RefreshThemeSongs(IHasThemeMedia item, MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
+ private async Task<bool> RefreshThemeSongs(IHasThemeMedia item, MetadataRefreshOptions options, List<FileSystemMetadata> fileSystemChildren, CancellationToken cancellationToken)
{
var newThemeSongs = LoadThemeSongs(fileSystemChildren, options.DirectoryService).ToList();
var newThemeSongIds = newThemeSongs.Select(i => i.Id).ToList();
@@ -932,7 +937,7 @@ namespace MediaBrowser.Controller.Entities
if (!i.IsThemeMedia)
{
- i.IsThemeMedia = true;
+ i.ExtraType = ExtraType.ThemeSong;
subOptions.ForceSave = true;
}
@@ -999,18 +1004,11 @@ namespace MediaBrowser.Controller.Entities
/// <returns>System.String.</returns>
public string GetPreferredMetadataLanguage()
{
- string lang = null;
-
- var hasLang = this as IHasPreferredMetadataLanguage;
-
- if (hasLang != null)
- {
- lang = hasLang.PreferredMetadataLanguage;
- }
+ string lang = PreferredMetadataLanguage;
if (string.IsNullOrWhiteSpace(lang))
{
- lang = Parents.OfType<IHasPreferredMetadataLanguage>()
+ lang = Parents
.Select(i => i.PreferredMetadataLanguage)
.FirstOrDefault(i => !string.IsNullOrWhiteSpace(i));
}
@@ -1036,18 +1034,11 @@ namespace MediaBrowser.Controller.Entities
/// <returns>System.String.</returns>
public string GetPreferredMetadataCountryCode()
{
- string lang = null;
-
- var hasLang = this as IHasPreferredMetadataLanguage;
-
- if (hasLang != null)
- {
- lang = hasLang.PreferredMetadataCountryCode;
- }
+ string lang = PreferredMetadataCountryCode;
if (string.IsNullOrWhiteSpace(lang))
{
- lang = Parents.OfType<IHasPreferredMetadataLanguage>()
+ lang = Parents
.Select(i => i.PreferredMetadataCountryCode)
.FirstOrDefault(i => !string.IsNullOrWhiteSpace(i));
}
@@ -1114,7 +1105,14 @@ namespace MediaBrowser.Controller.Entities
// Could not determine the integer value
if (!value.HasValue)
{
- return true;
+ var isAllowed = !GetBlockUnratedValue(user.Policy);
+
+ if (!isAllowed)
+ {
+ Logger.Debug("{0} has an unrecognized parental rating of {1}.", Name, rating);
+ }
+
+ return isAllowed;
}
return value.Value <= maxAllowedRating.Value;
@@ -1165,6 +1163,17 @@ namespace MediaBrowser.Controller.Entities
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
protected virtual bool GetBlockUnratedValue(UserPolicy config)
{
+ // Don't block plain folders that are unrated. Let the media underneath get blocked
+ // Special folders like series and albums will override this method.
+ if (IsFolder)
+ {
+ return false;
+ }
+ if (this is IItemByName)
+ {
+ return false;
+ }
+
return config.BlockUnratedItems.Contains(UnratedItem.Other);
}
@@ -1418,7 +1427,7 @@ namespace MediaBrowser.Controller.Entities
/// <returns>Task.</returns>
public virtual Task ChangedExternally()
{
- ProviderManager.QueueRefresh(Id, new MetadataRefreshOptions());
+ ProviderManager.QueueRefresh(Id, new MetadataRefreshOptions(FileSystem));
return Task.FromResult(true);
}
@@ -1434,7 +1443,24 @@ namespace MediaBrowser.Controller.Entities
return GetImageInfo(type, imageIndex) != null;
}
- public void SetImagePath(ImageType type, int index, FileSystemInfo file)
+ public void SetImage(ItemImageInfo image, int index)
+ {
+ if (image.Type == ImageType.Chapter)
+ {
+ throw new ArgumentException("Cannot set chapter images using SetImagePath");
+ }
+
+ var existingImage = GetImageInfo(image.Type, index);
+
+ if (existingImage != null)
+ {
+ ImageInfos.Remove(existingImage);
+ }
+
+ ImageInfos.Add(image);
+ }
+
+ public void SetImagePath(ImageType type, int index, FileSystemMetadata file)
{
if (type == ImageType.Chapter)
{
@@ -1475,18 +1501,21 @@ namespace MediaBrowser.Controller.Entities
// Remove it from the item
RemoveImage(info);
- // Delete the source file
- var currentFile = new FileInfo(info.Path);
-
- // Deletion will fail if the file is hidden so remove the attribute first
- if (currentFile.Exists)
+ if (info.IsLocalFile)
{
- if ((currentFile.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
+ // Delete the source file
+ var currentFile = new FileInfo(info.Path);
+
+ // Deletion will fail if the file is hidden so remove the attribute first
+ if (currentFile.Exists)
{
- currentFile.Attributes &= ~FileAttributes.Hidden;
- }
+ if ((currentFile.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
+ {
+ currentFile.Attributes &= ~FileAttributes.Hidden;
+ }
- FileSystem.DeleteFile(currentFile.FullName);
+ FileSystem.DeleteFile(currentFile.FullName);
+ }
}
return UpdateToRepository(ItemUpdateType.ImageUpdate, CancellationToken.None);
@@ -1507,11 +1536,16 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
public bool ValidateImages(IDirectoryService directoryService)
{
- var allDirectories = ImageInfos.Select(i => System.IO.Path.GetDirectoryName(i.Path)).Distinct(StringComparer.OrdinalIgnoreCase).ToList();
- var allFiles = allDirectories.SelectMany(directoryService.GetFiles).Select(i => i.FullName).ToList();
+ var allFiles = ImageInfos
+ .Where(i => i.IsLocalFile)
+ .Select(i => System.IO.Path.GetDirectoryName(i.Path))
+ .Distinct(StringComparer.OrdinalIgnoreCase)
+ .SelectMany(directoryService.GetFiles)
+ .Select(i => i.FullName)
+ .ToList();
var deletedImages = ImageInfos
- .Where(image => !allFiles.Contains(image.Path, StringComparer.OrdinalIgnoreCase))
+ .Where(image => image.IsLocalFile && !allFiles.Contains(image.Path, StringComparer.OrdinalIgnoreCase))
.ToList();
if (deletedImages.Count > 0)
@@ -1584,11 +1618,6 @@ namespace MediaBrowser.Controller.Entities
return ImageInfos.Where(i => i.Type == imageType);
}
- public bool AddImages(ImageType imageType, IEnumerable<FileInfo> images)
- {
- return AddImages(imageType, images.Cast<FileSystemInfo>().ToList());
- }
-
/// <summary>
/// Adds the images.
/// </summary>
@@ -1596,7 +1625,7 @@ namespace MediaBrowser.Controller.Entities
/// <param name="images">The images.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
/// <exception cref="System.ArgumentException">Cannot call AddImages with chapter images</exception>
- public bool AddImages(ImageType imageType, List<FileSystemInfo> images)
+ public bool AddImages(ImageType imageType, List<FileSystemMetadata> images)
{
if (imageType == ImageType.Chapter)
{
@@ -1606,7 +1635,7 @@ namespace MediaBrowser.Controller.Entities
var existingImages = GetImages(imageType)
.ToList();
- var newImageList = new List<FileSystemInfo>();
+ var newImageList = new List<FileSystemMetadata>();
var imageAdded = false;
foreach (var newImage in images)
@@ -1626,7 +1655,10 @@ namespace MediaBrowser.Controller.Entities
}
else
{
- existing.DateModified = FileSystem.GetLastWriteTimeUtc(newImage);
+ if (existing.IsLocalFile)
+ {
+ existing.DateModified = FileSystem.GetLastWriteTimeUtc(newImage);
+ }
}
}
@@ -1635,7 +1667,7 @@ namespace MediaBrowser.Controller.Entities
var newImagePaths = images.Select(i => i.FullName).ToList();
var deleted = existingImages
- .Where(i => !newImagePaths.Contains(i.Path, StringComparer.OrdinalIgnoreCase) && !File.Exists(i.Path))
+ .Where(i => i.IsLocalFile && !newImagePaths.Contains(i.Path, StringComparer.OrdinalIgnoreCase) && !FileSystem.FileExists(i.Path))
.ToList();
ImageInfos = ImageInfos.Except(deleted).ToList();
@@ -1646,7 +1678,7 @@ namespace MediaBrowser.Controller.Entities
return newImageList.Count > 0;
}
- private ItemImageInfo GetImageInfo(FileSystemInfo file, ImageType type)
+ private ItemImageInfo GetImageInfo(FileSystemMetadata file, ImageType type)
{
return new ItemImageInfo
{
@@ -1686,6 +1718,12 @@ namespace MediaBrowser.Controller.Entities
return Task.FromResult(true);
}
+ if (!info1.IsLocalFile || !info2.IsLocalFile)
+ {
+ // TODO: Not supported yet
+ return Task.FromResult(true);
+ }
+
var path1 = info1.Path;
var path2 = info2.Path;
@@ -1769,7 +1807,7 @@ namespace MediaBrowser.Controller.Entities
{
foreach (var map in ConfigurationManager.Configuration.PathSubstitutions)
{
- path = FileSystem.SubstitutePath(path, map.From, map.To);
+ path = LibraryManager.SubstitutePath(path, map.From, map.To);
}
}
@@ -1810,7 +1848,7 @@ namespace MediaBrowser.Controller.Entities
if (video == null)
{
- video = LibraryManager.ResolvePath(new FileInfo(path)) as Video;
+ video = LibraryManager.ResolvePath(FileSystem.GetFileSystemInfo(path)) as Video;
newOptions.ForceSave = true;
}
diff --git a/MediaBrowser.Controller/Entities/Book.cs b/MediaBrowser.Controller/Entities/Book.cs
index e59db67a6a..d31675baf6 100644
--- a/MediaBrowser.Controller/Entities/Book.cs
+++ b/MediaBrowser.Controller/Entities/Book.cs
@@ -7,7 +7,7 @@ using MediaBrowser.Model.Users;
namespace MediaBrowser.Controller.Entities
{
- public class Book : BaseItem, IHasTags, IHasPreferredMetadataLanguage, IHasLookupInfo<BookInfo>, IHasSeries
+ public class Book : BaseItem, IHasTags, IHasLookupInfo<BookInfo>, IHasSeries
{
public override string MediaType
{
@@ -25,14 +25,6 @@ namespace MediaBrowser.Controller.Entities
public string SeriesName { get; set; }
- public string PreferredMetadataLanguage { get; set; }
-
- /// <summary>
- /// Gets or sets the preferred metadata country code.
- /// </summary>
- /// <value>The preferred metadata country code.</value>
- public string PreferredMetadataCountryCode { get; set; }
-
public Book()
{
Tags = new List<string>();
diff --git a/MediaBrowser.Controller/Entities/CollectionFolder.cs b/MediaBrowser.Controller/Entities/CollectionFolder.cs
index 8821f35c8b..946d95a0bb 100644
--- a/MediaBrowser.Controller/Entities/CollectionFolder.cs
+++ b/MediaBrowser.Controller/Entities/CollectionFolder.cs
@@ -8,6 +8,8 @@ using System.Linq;
using System.Runtime.Serialization;
using System.Threading;
using System.Threading.Tasks;
+using CommonIO;
+using MediaBrowser.Common.IO;
namespace MediaBrowser.Controller.Entities
{
@@ -80,7 +82,7 @@ namespace MediaBrowser.Controller.Entities
public List<string> PhysicalLocationsList { get; set; }
- protected override IEnumerable<FileSystemInfo> GetFileSystemChildren(IDirectoryService directoryService)
+ protected override IEnumerable<FileSystemMetadata> GetFileSystemChildren(IDirectoryService directoryService)
{
return CreateResolveArgs(directoryService).FileSystemChildren;
}
@@ -107,7 +109,7 @@ namespace MediaBrowser.Controller.Entities
var args = new ItemResolveArgs(ConfigurationManager.ApplicationPaths, directoryService)
{
- FileInfo = new DirectoryInfo(path),
+ FileInfo = FileSystem.GetDirectoryInfo(path),
Path = path,
Parent = Parent,
CollectionType = CollectionType
@@ -129,7 +131,7 @@ namespace MediaBrowser.Controller.Entities
{
var paths = LibraryManager.NormalizeRootPathList(fileSystemDictionary.Keys);
- fileSystemDictionary = paths.Select(i => (FileSystemInfo)new DirectoryInfo(i)).ToDictionary(i => i.FullName);
+ fileSystemDictionary = paths.Select(FileSystem.GetDirectoryInfo).ToDictionary(i => i.FullName);
}
args.FileSystemDictionary = fileSystemDictionary;
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index c3ac77328d..05965e1b5a 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -13,13 +13,15 @@ using System.Linq;
using System.Runtime.Serialization;
using System.Threading;
using System.Threading.Tasks;
+using CommonIO;
+using MediaBrowser.Common.IO;
namespace MediaBrowser.Controller.Entities
{
/// <summary>
/// Class Folder
/// </summary>
- public class Folder : BaseItem, IHasThemeMedia, IHasTags, IHasPreferredMetadataLanguage
+ public class Folder : BaseItem, IHasThemeMedia, IHasTags
{
public static IUserManager UserManager { get; set; }
public static IUserViewManager UserViewManager { get; set; }
@@ -28,14 +30,6 @@ namespace MediaBrowser.Controller.Entities
public List<Guid> ThemeVideoIds { get; set; }
public List<string> Tags { get; set; }
- public string PreferredMetadataLanguage { get; set; }
-
- /// <summary>
- /// Gets or sets the preferred metadata country code.
- /// </summary>
- /// <value>The preferred metadata country code.</value>
- public string PreferredMetadataCountryCode { get; set; }
-
public Folder()
{
LinkedChildren = new List<LinkedChild>();
@@ -48,7 +42,7 @@ namespace MediaBrowser.Controller.Entities
[IgnoreDataMember]
public virtual bool IsPreSorted
{
- get { return ConfigurationManager.Configuration.EnableWindowsShortcuts; }
+ get { return false; }
}
/// <summary>
@@ -120,7 +114,7 @@ namespace MediaBrowser.Controller.Entities
[IgnoreDataMember]
protected virtual bool SupportsShortcutChildren
{
- get { return false; }
+ get { return ConfigurationManager.Configuration.EnableWindowsShortcuts; }
}
/// <summary>
@@ -213,7 +207,7 @@ namespace MediaBrowser.Controller.Entities
return base.OfficialRatingForComparison;
}
- return !string.IsNullOrEmpty(base.OfficialRatingForComparison) ? base.OfficialRatingForComparison : "None";
+ return !string.IsNullOrWhiteSpace(base.OfficialRatingForComparison) ? base.OfficialRatingForComparison : "None";
}
}
@@ -320,7 +314,7 @@ namespace MediaBrowser.Controller.Entities
[IgnoreDataMember]
public IEnumerable<BaseItem> Children
{
- get { return ActualChildren; }
+ get { return ActualChildren.ToList(); }
}
/// <summary>
@@ -371,7 +365,7 @@ namespace MediaBrowser.Controller.Entities
public Task ValidateChildren(IProgress<double> progress, CancellationToken cancellationToken)
{
- return ValidateChildren(progress, cancellationToken, new MetadataRefreshOptions(new DirectoryService()));
+ return ValidateChildren(progress, cancellationToken, new MetadataRefreshOptions(new DirectoryService(FileSystem)));
}
/// <summary>
@@ -474,7 +468,7 @@ namespace MediaBrowser.Controller.Entities
currentChild.DateModified = child.DateModified;
}
- currentChild.IsOffline = false;
+ await UpdateIsOffline(currentChild, false).ConfigureAwait(false);
validChildren.Add(currentChild);
}
else
@@ -509,12 +503,12 @@ namespace MediaBrowser.Controller.Entities
else if (!string.IsNullOrEmpty(item.Path) && IsPathOffline(item.Path))
{
- item.IsOffline = true;
+ await UpdateIsOffline(item, true).ConfigureAwait(false);
validChildren.Add(item);
}
else
{
- item.IsOffline = false;
+ await UpdateIsOffline(item, false).ConfigureAwait(false);
actualRemovals.Add(item);
}
}
@@ -569,6 +563,17 @@ namespace MediaBrowser.Controller.Entities
progress.Report(100);
}
+ private Task UpdateIsOffline(BaseItem item, bool newValue)
+ {
+ if (item.IsOffline != newValue)
+ {
+ item.IsOffline = newValue;
+ return item.UpdateToRepository(ItemUpdateType.None, CancellationToken.None);
+ }
+
+ return Task.FromResult(true);
+ }
+
private async Task RefreshMetadataRecursive(MetadataRefreshOptions refreshOptions, bool recursive, IProgress<double> progress, CancellationToken cancellationToken)
{
var children = ActualChildren.ToList();
@@ -691,9 +696,9 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
/// <param name="path">The path.</param>
/// <returns><c>true</c> if the specified path is offline; otherwise, <c>false</c>.</returns>
- private bool IsPathOffline(string path)
+ public static bool IsPathOffline(string path)
{
- if (File.Exists(path))
+ if (FileSystem.FileExists(path))
{
return false;
}
@@ -703,7 +708,7 @@ namespace MediaBrowser.Controller.Entities
// Depending on whether the path is local or unc, it may return either null or '\' at the top
while (!string.IsNullOrEmpty(path) && path.Length > 1)
{
- if (Directory.Exists(path))
+ if (FileSystem.DirectoryExists(path))
{
return false;
}
@@ -725,12 +730,12 @@ namespace MediaBrowser.Controller.Entities
/// <param name="folders">The folders.</param>
/// <param name="path">The path.</param>
/// <returns><c>true</c> if the specified folders contains path; otherwise, <c>false</c>.</returns>
- private bool ContainsPath(IEnumerable<VirtualFolderInfo> folders, string path)
+ private static bool ContainsPath(IEnumerable<VirtualFolderInfo> folders, string path)
{
return folders.SelectMany(i => i.Locations).Any(i => ContainsPath(i, path));
}
- private bool ContainsPath(string parent, string path)
+ private static bool ContainsPath(string parent, string path)
{
return string.Equals(parent, path, StringComparison.OrdinalIgnoreCase) || FileSystem.ContainsSubPath(parent, path);
}
@@ -752,21 +757,24 @@ namespace MediaBrowser.Controller.Entities
/// <returns>IEnumerable{BaseItem}.</returns>
protected IEnumerable<BaseItem> GetCachedChildren()
{
- var childrenItems = ItemRepository.GetChildrenItems(Id).Select(RetrieveChild).Where(i => i != null);
-
- //var children = ItemRepository.GetChildren(Id).Select(RetrieveChild).Where(i => i != null).ToList();
-
- //if (children.Count != childrenItems.Count)
- //{
- // var b = this;
- //}
+ if (ConfigurationManager.Configuration.DisableStartupScan)
+ {
+ return ItemRepository.GetChildrenItems(Id).Select(RetrieveChild).Where(i => i != null);
+ //return ItemRepository.GetItems(new InternalItemsQuery
+ //{
+ // ParentId = Id
- return childrenItems;
+ //}).Items.Select(RetrieveChild).Where(i => i != null);
+ }
+ else
+ {
+ return ItemRepository.GetChildrenItems(Id).Select(RetrieveChild).Where(i => i != null);
+ }
}
private BaseItem RetrieveChild(BaseItem child)
{
- if (child.Id == Guid.Empty)
+ if (child == null || child.Id == Guid.Empty)
{
Logger.Error("Item found with empty Id: " + (child.Path ?? child.Name));
return null;
@@ -1064,7 +1072,7 @@ namespace MediaBrowser.Controller.Entities
}
}
- protected override async Task<bool> RefreshedOwnedItems(MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
+ protected override async Task<bool> RefreshedOwnedItems(MetadataRefreshOptions options, List<FileSystemMetadata> fileSystemChildren, CancellationToken cancellationToken)
{
var changesFound = false;
@@ -1085,7 +1093,7 @@ namespace MediaBrowser.Controller.Entities
/// Refreshes the linked children.
/// </summary>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
- private bool RefreshLinkedChildren(IEnumerable<FileSystemInfo> fileSystemChildren)
+ private bool RefreshLinkedChildren(IEnumerable<FileSystemMetadata> fileSystemChildren)
{
var currentManualLinks = LinkedChildren.Where(i => i.Type == LinkedChildType.Manual).ToList();
var currentShortcutLinks = LinkedChildren.Where(i => i.Type == LinkedChildType.Shortcut).ToList();
@@ -1170,9 +1178,16 @@ namespace MediaBrowser.Controller.Entities
DateTime? datePlayed,
bool resetPosition)
{
+ var itemsResult = await GetItems(new InternalItemsQuery
+ {
+ User = user,
+ Recursive = true,
+ IsFolder = false
+
+ }).ConfigureAwait(false);
+
// Sweep through recursively and update status
- var tasks = GetRecursiveChildren(user, i => !i.IsFolder && i.LocationType != LocationType.Virtual)
- .Select(c => c.MarkPlayed(user, datePlayed, resetPosition));
+ var tasks = itemsResult.Items.Select(c => c.MarkPlayed(user, datePlayed, resetPosition));
await Task.WhenAll(tasks).ConfigureAwait(false);
}
@@ -1184,9 +1199,16 @@ namespace MediaBrowser.Controller.Entities
/// <returns>Task.</returns>
public override async Task MarkUnplayed(User user)
{
+ var itemsResult = await GetItems(new InternalItemsQuery
+ {
+ User = user,
+ Recursive = true,
+ IsFolder = false
+
+ }).ConfigureAwait(false);
+
// Sweep through recursively and update status
- var tasks = GetRecursiveChildren(user, i => !i.IsFolder && i.LocationType != LocationType.Virtual)
- .Select(c => c.MarkUnplayed(user));
+ var tasks = itemsResult.Items.Select(c => c.MarkUnplayed(user));
await Task.WhenAll(tasks).ConfigureAwait(false);
}
diff --git a/MediaBrowser.Controller/Entities/Game.cs b/MediaBrowser.Controller/Entities/Game.cs
index 15d2d755a8..ed3e85d586 100644
--- a/MediaBrowser.Controller/Entities/Game.cs
+++ b/MediaBrowser.Controller/Entities/Game.cs
@@ -8,19 +8,11 @@ using System.Linq;
namespace MediaBrowser.Controller.Entities
{
- public class Game : BaseItem, IHasTrailers, IHasThemeMedia, IHasTags, IHasScreenshots, ISupportsPlaceHolders, IHasPreferredMetadataLanguage, IHasLookupInfo<GameInfo>
+ public class Game : BaseItem, IHasTrailers, IHasThemeMedia, IHasTags, IHasScreenshots, ISupportsPlaceHolders, IHasLookupInfo<GameInfo>
{
public List<Guid> ThemeSongIds { get; set; }
public List<Guid> ThemeVideoIds { get; set; }
- public string PreferredMetadataLanguage { get; set; }
-
- /// <summary>
- /// Gets or sets the preferred metadata country code.
- /// </summary>
- /// <value>The preferred metadata country code.</value>
- public string PreferredMetadataCountryCode { get; set; }
-
public Game()
{
MultiPartGameFiles = new List<string>();
diff --git a/MediaBrowser.Controller/Entities/IHasImages.cs b/MediaBrowser.Controller/Entities/IHasImages.cs
index ffb351c943..28835168a6 100644
--- a/MediaBrowser.Controller/Entities/IHasImages.cs
+++ b/MediaBrowser.Controller/Entities/IHasImages.cs
@@ -2,7 +2,11 @@
using MediaBrowser.Model.Entities;
using System.Collections.Generic;
using System.IO;
+using System.Threading;
using System.Threading.Tasks;
+using CommonIO;
+using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.Library;
namespace MediaBrowser.Controller.Entities
{
@@ -67,7 +71,7 @@ namespace MediaBrowser.Controller.Entities
/// <param name="type">The type.</param>
/// <param name="index">The index.</param>
/// <param name="file">The file.</param>
- void SetImagePath(ImageType type, int index, FileSystemInfo file);
+ void SetImagePath(ImageType type, int index, FileSystemMetadata file);
/// <summary>
/// Determines whether the specified type has image.
@@ -134,7 +138,7 @@ namespace MediaBrowser.Controller.Entities
/// <param name="imageType">Type of the image.</param>
/// <param name="images">The images.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
- bool AddImages(ImageType imageType, List<FileSystemInfo> images);
+ bool AddImages(ImageType imageType, List<FileSystemMetadata> images);
/// <summary>
/// Determines whether [is save local metadata enabled].
@@ -189,6 +193,21 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
/// <param name="image">The image.</param>
void RemoveImage(ItemImageInfo image);
+
+ /// <summary>
+ /// Updates to repository.
+ /// </summary>
+ /// <param name="updateReason">The update reason.</param>
+ /// <param name="cancellationToken">The cancellation token.</param>
+ /// <returns>Task.</returns>
+ Task UpdateToRepository(ItemUpdateType updateReason, CancellationToken cancellationToken);
+
+ /// <summary>
+ /// Sets the image.
+ /// </summary>
+ /// <param name="image">The image.</param>
+ /// <param name="index">The index.</param>
+ void SetImage(ItemImageInfo image, int index);
}
public static class HasImagesExtensions
@@ -215,7 +234,7 @@ namespace MediaBrowser.Controller.Entities
/// <param name="item">The item.</param>
/// <param name="imageType">Type of the image.</param>
/// <param name="file">The file.</param>
- public static void SetImagePath(this IHasImages item, ImageType imageType, FileSystemInfo file)
+ public static void SetImagePath(this IHasImages item, ImageType imageType, FileSystemMetadata file)
{
item.SetImagePath(imageType, 0, file);
}
@@ -228,7 +247,18 @@ namespace MediaBrowser.Controller.Entities
/// <param name="file">The file.</param>
public static void SetImagePath(this IHasImages item, ImageType imageType, string file)
{
- item.SetImagePath(imageType, new FileInfo(file));
+ if (file.StartsWith("http", System.StringComparison.OrdinalIgnoreCase))
+ {
+ item.SetImage(new ItemImageInfo
+ {
+ Path = file,
+ Type = imageType
+ }, 0);
+ }
+ else
+ {
+ item.SetImagePath(imageType, BaseItem.FileSystem.GetFileInfo(file));
+ }
}
}
}
diff --git a/MediaBrowser.Controller/Entities/IHasMetadata.cs b/MediaBrowser.Controller/Entities/IHasMetadata.cs
index 158bcb6d19..473ee120ea 100644
--- a/MediaBrowser.Controller/Entities/IHasMetadata.cs
+++ b/MediaBrowser.Controller/Entities/IHasMetadata.cs
@@ -31,13 +31,11 @@ namespace MediaBrowser.Controller.Entities
DateTime DateLastSaved { get; set; }
/// <summary>
- /// Updates to repository.
+ /// Gets or sets the date last refreshed.
/// </summary>
- /// <param name="updateReason">The update reason.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- Task UpdateToRepository(ItemUpdateType updateReason, CancellationToken cancellationToken);
-
+ /// <value>The date last refreshed.</value>
+ DateTime DateLastRefreshed { get; set; }
+
/// <summary>
/// This is called before any metadata refresh and returns true or false indicating if changes were made
/// </summary>
@@ -45,17 +43,6 @@ namespace MediaBrowser.Controller.Entities
bool BeforeMetadataRefresh();
/// <summary>
- /// Gets or sets a value indicating whether this instance is unidentified.
- /// </summary>
- /// <value><c>true</c> if this instance is unidentified; otherwise, <c>false</c>.</value>
- bool IsUnidentified { get; set; }
-
- /// <summary>
- /// Gets the item identities.
- /// </summary>
- List<IItemIdentity> Identities { get; set; }
-
- /// <summary>
/// Afters the metadata refresh.
/// </summary>
void AfterMetadataRefresh();
diff --git a/MediaBrowser.Controller/Entities/IHasPreferredMetadataLanguage.cs b/MediaBrowser.Controller/Entities/IHasPreferredMetadataLanguage.cs
deleted file mode 100644
index e3a233e49e..0000000000
--- a/MediaBrowser.Controller/Entities/IHasPreferredMetadataLanguage.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-
-namespace MediaBrowser.Controller.Entities
-{
- /// <summary>
- /// Interface IHasPreferredMetadataLanguage
- /// </summary>
- public interface IHasPreferredMetadataLanguage
- {
- /// <summary>
- /// Gets or sets the preferred metadata language.
- /// </summary>
- /// <value>The preferred metadata language.</value>
- string PreferredMetadataLanguage { get; set; }
-
- /// <summary>
- /// Gets or sets the preferred metadata country code.
- /// </summary>
- /// <value>The preferred metadata country code.</value>
- string PreferredMetadataCountryCode { get; set; }
- }
-}
diff --git a/MediaBrowser.Controller/Entities/IHasProgramAttributes.cs b/MediaBrowser.Controller/Entities/IHasProgramAttributes.cs
index 9938a44894..1c3270d72c 100644
--- a/MediaBrowser.Controller/Entities/IHasProgramAttributes.cs
+++ b/MediaBrowser.Controller/Entities/IHasProgramAttributes.cs
@@ -15,6 +15,6 @@ namespace MediaBrowser.Controller.Entities
bool IsLive { get; set; }
bool IsPremiere { get; set; }
ProgramAudio? Audio { get; set; }
- DateTime? OriginalAirDate { get; set; }
+ string EpisodeTitle { get; set; }
}
}
diff --git a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs
index 0af4972f74..785e2fd2bb 100644
--- a/MediaBrowser.Controller/Entities/InternalItemsQuery.cs
+++ b/MediaBrowser.Controller/Entities/InternalItemsQuery.cs
@@ -52,7 +52,6 @@ namespace MediaBrowser.Controller.Entities
public bool? IsHD { get; set; }
public bool? IsInBoxSet { get; set; }
public bool? IsLocked { get; set; }
- public bool? IsUnidentified { get; set; }
public bool? IsPlaceHolder { get; set; }
public bool? IsYearMismatched { get; set; }
@@ -98,7 +97,11 @@ namespace MediaBrowser.Controller.Entities
public bool? IsCurrentSchema { get; set; }
public bool? HasDeadParentId { get; set; }
-
+ public bool? IsOffline { get; set; }
+ public LocationType? LocationType { get; set; }
+
+ public Guid? ParentId { get; set; }
+
public InternalItemsQuery()
{
Tags = new string[] { };
diff --git a/MediaBrowser.Controller/Entities/ItemImageInfo.cs b/MediaBrowser.Controller/Entities/ItemImageInfo.cs
index b36b818ffe..bb113e596d 100644
--- a/MediaBrowser.Controller/Entities/ItemImageInfo.cs
+++ b/MediaBrowser.Controller/Entities/ItemImageInfo.cs
@@ -1,5 +1,6 @@
using MediaBrowser.Model.Entities;
using System;
+using System.Runtime.Serialization;
namespace MediaBrowser.Controller.Entities
{
@@ -22,5 +23,21 @@ namespace MediaBrowser.Controller.Entities
/// </summary>
/// <value>The date modified.</value>
public DateTime DateModified { get; set; }
+
+ [IgnoreDataMember]
+ public bool IsLocalFile
+ {
+ get
+ {
+ if (Path != null)
+ {
+ if (Path.StartsWith("http", StringComparison.OrdinalIgnoreCase))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/Movies/Movie.cs b/MediaBrowser.Controller/Entities/Movies/Movie.cs
index 083ec0cb4c..1a8148edfb 100644
--- a/MediaBrowser.Controller/Entities/Movies/Movie.cs
+++ b/MediaBrowser.Controller/Entities/Movies/Movie.cs
@@ -8,6 +8,8 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using CommonIO;
+using MediaBrowser.Common.IO;
namespace MediaBrowser.Controller.Entities.Movies
{
@@ -122,7 +124,7 @@ namespace MediaBrowser.Controller.Entities.Movies
return key;
}
- protected override async Task<bool> RefreshedOwnedItems(MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
+ protected override async Task<bool> RefreshedOwnedItems(MetadataRefreshOptions options, List<FileSystemMetadata> fileSystemChildren, CancellationToken cancellationToken)
{
var hasChanges = await base.RefreshedOwnedItems(options, fileSystemChildren, cancellationToken).ConfigureAwait(false);
@@ -141,7 +143,7 @@ namespace MediaBrowser.Controller.Entities.Movies
return hasChanges;
}
- private async Task<bool> RefreshSpecialFeatures(MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
+ private async Task<bool> RefreshSpecialFeatures(MetadataRefreshOptions options, List<FileSystemMetadata> fileSystemChildren, CancellationToken cancellationToken)
{
var newItems = LibraryManager.FindExtras(this, fileSystemChildren, options.DirectoryService).ToList();
var newItemIds = newItems.Select(i => i.Id).ToList();
diff --git a/MediaBrowser.Controller/Entities/TV/Episode.cs b/MediaBrowser.Controller/Entities/TV/Episode.cs
index 5163c3de4a..92ca9e9703 100644
--- a/MediaBrowser.Controller/Entities/TV/Episode.cs
+++ b/MediaBrowser.Controller/Entities/TV/Episode.cs
@@ -296,9 +296,16 @@ namespace MediaBrowser.Controller.Entities.TV
{
var hasChanges = base.BeforeMetadataRefresh();
- if (LibraryManager.FillMissingEpisodeNumbersFromPath(this))
+ try
{
- hasChanges = true;
+ if (LibraryManager.FillMissingEpisodeNumbersFromPath(this))
+ {
+ hasChanges = true;
+ }
+ }
+ catch (Exception ex)
+ {
+ Logger.ErrorException("Error in FillMissingEpisodeNumbersFromPath. Episode: {0}", ex, Path ?? Name ?? Id.ToString());
}
return hasChanges;
diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs
index cfd6b46e0f..21b89d7a99 100644
--- a/MediaBrowser.Controller/Entities/TV/Season.cs
+++ b/MediaBrowser.Controller/Entities/TV/Season.cs
@@ -62,17 +62,13 @@ namespace MediaBrowser.Controller.Entities.TV
}
/// <summary>
- /// The _series
- /// </summary>
- private Series _series;
- /// <summary>
/// This Episode's Series Instance
/// </summary>
/// <value>The series.</value>
[IgnoreDataMember]
public Series Series
{
- get { return _series ?? (_series = FindParent<Series>()); }
+ get { return FindParent<Series>(); }
}
[IgnoreDataMember]
diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs
index 2663d19e8f..b23833845e 100644
--- a/MediaBrowser.Controller/Entities/TV/Series.cs
+++ b/MediaBrowser.Controller/Entities/TV/Series.cs
@@ -20,7 +20,6 @@ namespace MediaBrowser.Controller.Entities.TV
public List<Guid> SpecialFeatureIds { get; set; }
public string OriginalTitle { get; set; }
- public int SeasonCount { get; set; }
public int? AnimeSeriesIndex { get; set; }
diff --git a/MediaBrowser.Controller/Entities/Trailer.cs b/MediaBrowser.Controller/Entities/Trailer.cs
index f44128e2d6..6ec512783d 100644
--- a/MediaBrowser.Controller/Entities/Trailer.cs
+++ b/MediaBrowser.Controller/Entities/Trailer.cs
@@ -7,6 +7,7 @@ using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Runtime.Serialization;
+using MediaBrowser.Controller.Entities.Movies;
namespace MediaBrowser.Controller.Entities
{
@@ -78,7 +79,7 @@ namespace MediaBrowser.Controller.Entities
protected override string CreateUserDataKey()
{
- var key = this.GetProviderId(MetadataProviders.Imdb) ?? this.GetProviderId(MetadataProviders.Tmdb);
+ var key = Movie.GetMovieUserDataKey(this);
if (!string.IsNullOrWhiteSpace(key))
{
diff --git a/MediaBrowser.Controller/Entities/User.cs b/MediaBrowser.Controller/Entities/User.cs
index 71e3d1ce03..a9e314ede1 100644
--- a/MediaBrowser.Controller/Entities/User.cs
+++ b/MediaBrowser.Controller/Entities/User.cs
@@ -20,6 +20,7 @@ namespace MediaBrowser.Controller.Entities
{
public static IUserManager UserManager { get; set; }
public static IXmlSerializer XmlSerializer { get; set; }
+ public bool EnableUserViews { get; set; }
/// <summary>
/// From now on all user paths will be Id-based.
@@ -177,24 +178,24 @@ namespace MediaBrowser.Controller.Entities
var oldConfigurationDirectory = ConfigurationDirectoryPath;
// Exceptions will be thrown if these paths already exist
- if (Directory.Exists(newConfigDirectory))
+ if (FileSystem.DirectoryExists(newConfigDirectory))
{
FileSystem.DeleteDirectory(newConfigDirectory, true);
}
- if (Directory.Exists(oldConfigurationDirectory))
+ if (FileSystem.DirectoryExists(oldConfigurationDirectory))
{
- Directory.Move(oldConfigurationDirectory, newConfigDirectory);
+ FileSystem.MoveDirectory(oldConfigurationDirectory, newConfigDirectory);
}
else
{
- Directory.CreateDirectory(newConfigDirectory);
+ FileSystem.CreateDirectory(newConfigDirectory);
}
}
Name = newName;
- return RefreshMetadata(new MetadataRefreshOptions(new DirectoryService())
+ return RefreshMetadata(new MetadataRefreshOptions(new DirectoryService(FileSystem))
{
ReplaceAllMetadata = true,
ImageRefreshMode = ImageRefreshMode.FullRefresh,
diff --git a/MediaBrowser.Controller/Entities/UserView.cs b/MediaBrowser.Controller/Entities/UserView.cs
index 488e54cc3c..5ee49ae5a3 100644
--- a/MediaBrowser.Controller/Entities/UserView.cs
+++ b/MediaBrowser.Controller/Entities/UserView.cs
@@ -13,6 +13,7 @@ namespace MediaBrowser.Controller.Entities
{
public string ViewType { get; set; }
public Guid ParentId { get; set; }
+ public Guid DisplayParentId { get; set; }
public Guid? UserId { get; set; }
@@ -28,7 +29,11 @@ namespace MediaBrowser.Controller.Entities
{
var parent = this as Folder;
- if (ParentId != Guid.Empty)
+ if (DisplayParentId != Guid.Empty)
+ {
+ parent = LibraryManager.GetItemById(DisplayParentId) as Folder ?? parent;
+ }
+ else if (ParentId != Guid.Empty)
{
parent = LibraryManager.GetItemById(ParentId) as Folder ?? parent;
}
@@ -82,7 +87,28 @@ namespace MediaBrowser.Controller.Entities
{
CollectionType.Books,
CollectionType.HomeVideos,
- CollectionType.Photos
+ CollectionType.Photos,
+ CollectionType.Playlists,
+ CollectionType.BoxSets,
+ CollectionType.MusicVideos
+ };
+
+ var collectionFolder = folder as ICollectionFolder;
+
+ if (collectionFolder == null)
+ {
+ return false;
+ }
+
+ return standaloneTypes.Contains(collectionFolder.CollectionType ?? string.Empty);
+ }
+
+ public static bool IsUserSpecific(Folder folder)
+ {
+ var standaloneTypes = new List<string>
+ {
+ CollectionType.Playlists,
+ CollectionType.BoxSets
};
var collectionFolder = folder as ICollectionFolder;
diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs
index cee5dadd25..f5800ce818 100644
--- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs
+++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs
@@ -577,19 +577,9 @@ namespace MediaBrowser.Controller.Entities
private async Task<QueryResult<BaseItem>> GetBoxsetView(Folder parent, User user, InternalItemsQuery query)
{
- return GetResult(GetMediaFolders(user).SelectMany(i =>
- {
- var hasCollectionType = i as ICollectionFolder;
- Func<BaseItem, bool> filter = b => b is BoxSet;
-
- if (hasCollectionType != null && string.Equals(hasCollectionType.CollectionType, CollectionType.BoxSets, StringComparison.OrdinalIgnoreCase))
- {
- return i.GetChildren(user, true).Where(filter);
- }
-
- return i.GetRecursiveChildren(user, filter);
+ var collections = _collectionManager.GetCollections(user);
- }), parent, query);
+ return GetResult(collections, parent, query);
}
private async Task<QueryResult<BaseItem>> GetPhotosView(Folder queryParent, User user, InternalItemsQuery query)
@@ -1041,11 +1031,6 @@ namespace MediaBrowser.Controller.Entities
return false;
}
- if (request.IsUnidentified.HasValue)
- {
- return false;
- }
-
if (request.IsYearMismatched.HasValue)
{
return false;
@@ -1412,16 +1397,7 @@ namespace MediaBrowser.Controller.Entities
var val = query.IsHD.Value;
var video = item as Video;
- if (video == null || val != video.IsHD)
- {
- return false;
- }
- }
-
- if (query.IsUnidentified.HasValue)
- {
- var val = query.IsUnidentified.Value;
- if (item.IsUnidentified != val)
+ if (video == null || !video.IsHD.HasValue || val != video.IsHD)
{
return false;
}
@@ -1808,6 +1784,13 @@ namespace MediaBrowser.Controller.Entities
private IEnumerable<Folder> GetMediaFolders(User user)
{
+ if (user == null)
+ {
+ return _libraryManager.RootFolder
+ .Children
+ .OfType<Folder>()
+ .Where(i => !UserView.IsExcludedFromGrouping(i));
+ }
return user.RootFolder
.GetChildren(user, true, true)
.OfType<Folder>()
@@ -1816,6 +1799,16 @@ namespace MediaBrowser.Controller.Entities
private IEnumerable<Folder> GetMediaFolders(User user, IEnumerable<string> viewTypes)
{
+ if (user == null)
+ {
+ return GetMediaFolders(null)
+ .Where(i =>
+ {
+ var folder = i as ICollectionFolder;
+
+ return folder != null && viewTypes.Contains(folder.CollectionType ?? string.Empty, StringComparer.OrdinalIgnoreCase);
+ });
+ }
return GetMediaFolders(user)
.Where(i =>
{
@@ -1839,9 +1832,19 @@ namespace MediaBrowser.Controller.Entities
{
if (parent == null || parent is UserView)
{
+ if (user == null)
+ {
+ return GetMediaFolders(null, viewTypes).SelectMany(i => i.GetRecursiveChildren());
+ }
+
return GetMediaFolders(user, viewTypes).SelectMany(i => i.GetRecursiveChildren(user));
}
+ if (user == null)
+ {
+ return parent.GetRecursiveChildren();
+ }
+
return parent.GetRecursiveChildren(user);
}
@@ -1849,9 +1852,19 @@ namespace MediaBrowser.Controller.Entities
{
if (parent == null || parent is UserView)
{
+ if (user == null)
+ {
+ return GetMediaFolders(null, viewTypes).SelectMany(i => i.GetRecursiveChildren(filter));
+ }
+
return GetMediaFolders(user, viewTypes).SelectMany(i => i.GetRecursiveChildren(user, filter));
}
+ if (user == null)
+ {
+ return parent.GetRecursiveChildren(filter);
+ }
+
return parent.GetRecursiveChildren(user, filter);
}
diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs
index 00dc5dc672..8beee79bf5 100644
--- a/MediaBrowser.Controller/Entities/Video.cs
+++ b/MediaBrowser.Controller/Entities/Video.cs
@@ -11,6 +11,8 @@ using System.Linq;
using System.Runtime.Serialization;
using System.Threading;
using System.Threading.Tasks;
+using CommonIO;
+using MediaBrowser.Common.IO;
namespace MediaBrowser.Controller.Entities
{
@@ -23,7 +25,6 @@ namespace MediaBrowser.Controller.Entities
ISupportsPlaceHolders,
IHasMediaSources,
IHasShortOverview,
- IHasPreferredMetadataLanguage,
IThemeMedia,
IArchivable
{
@@ -33,21 +34,20 @@ namespace MediaBrowser.Controller.Entities
public List<string> LocalAlternateVersions { get; set; }
public List<LinkedChild> LinkedAlternateVersions { get; set; }
- public bool IsThemeMedia { get; set; }
+ [IgnoreDataMember]
+ public bool IsThemeMedia
+ {
+ get
+ {
+ return ExtraType.HasValue && ExtraType.Value == Model.Entities.ExtraType.ThemeVideo;
+ }
+ }
- public string FormatName { get; set; }
public long? Size { get; set; }
public string Container { get; set; }
public int? TotalBitrate { get; set; }
public string ShortOverview { get; set; }
- public ExtraType ExtraType { get; set; }
-
- /// <summary>
- /// Gets or sets the preferred metadata country code.
- /// </summary>
- /// <value>The preferred metadata country code.</value>
- public string PreferredMetadataCountryCode { get; set; }
- public string PreferredMetadataLanguage { get; set; }
+ public ExtraType? ExtraType { get; set; }
/// <summary>
/// Gets or sets the timestamp.
@@ -313,7 +313,7 @@ namespace MediaBrowser.Controller.Entities
/// <returns>List{System.String}.</returns>
public List<string> GetPlayableStreamFiles(string rootPath)
{
- var allFiles = Directory.EnumerateFiles(rootPath, "*", SearchOption.AllDirectories).ToList();
+ var allFiles = FileSystem.GetFilePaths(rootPath, true).ToList();
return PlayableStreamFileNames.Select(name => allFiles.FirstOrDefault(f => string.Equals(System.IO.Path.GetFileName(f), name, StringComparison.OrdinalIgnoreCase)))
.Where(f => !string.IsNullOrEmpty(f))
@@ -330,8 +330,6 @@ namespace MediaBrowser.Controller.Entities
get { return Video3DFormat.HasValue; }
}
- public bool IsHD { get; set; }
-
/// <summary>
/// Gets the type of the media.
/// </summary>
@@ -345,7 +343,7 @@ namespace MediaBrowser.Controller.Entities
}
}
- protected override async Task<bool> RefreshedOwnedItems(MetadataRefreshOptions options, List<FileSystemInfo> fileSystemChildren, CancellationToken cancellationToken)
+ protected override async Task<bool> RefreshedOwnedItems(MetadataRefreshOptions options, List<FileSystemMetadata> fileSystemChildren, CancellationToken cancellationToken)
{
var hasChanges = await base.RefreshedOwnedItems(options, fileSystemChildren, cancellationToken).ConfigureAwait(false);
@@ -498,7 +496,6 @@ namespace MediaBrowser.Controller.Entities
VideoType = i.VideoType,
Container = i.Container,
Size = i.Size,
- Formats = (i.FormatName ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(),
Timestamp = i.Timestamp,
Type = type,
PlayableStreamFileNames = i.PlayableStreamFileNames.ToList(),
diff --git a/MediaBrowser.Controller/IO/FileData.cs b/MediaBrowser.Controller/IO/FileData.cs
index fb0f07331b..20dfc425e3 100644
--- a/MediaBrowser.Controller/IO/FileData.cs
+++ b/MediaBrowser.Controller/IO/FileData.cs
@@ -5,6 +5,7 @@ using MediaBrowser.Model.Logging;
using System;
using System.Collections.Generic;
using System.IO;
+using CommonIO;
namespace MediaBrowser.Controller.IO
{
@@ -25,7 +26,7 @@ namespace MediaBrowser.Controller.IO
/// <param name="resolveShortcuts">if set to <c>true</c> [resolve shortcuts].</param>
/// <returns>Dictionary{System.StringFileSystemInfo}.</returns>
/// <exception cref="System.ArgumentNullException">path</exception>
- public static Dictionary<string, FileSystemInfo> GetFilteredFileSystemEntries(IDirectoryService directoryService,
+ public static Dictionary<string, FileSystemMetadata> GetFilteredFileSystemEntries(IDirectoryService directoryService,
string path,
IFileSystem fileSystem,
ILogger logger,
@@ -49,7 +50,7 @@ namespace MediaBrowser.Controller.IO
var entries = directoryService.GetFileSystemEntries(path);
- var dict = new Dictionary<string, FileSystemInfo>(StringComparer.OrdinalIgnoreCase);
+ var dict = new Dictionary<string, FileSystemMetadata>(StringComparer.OrdinalIgnoreCase);
foreach (var entry in entries)
{
@@ -69,7 +70,7 @@ namespace MediaBrowser.Controller.IO
}
// Don't check if it exists here because that could return false for network shares.
- var data = new DirectoryInfo(newPath);
+ var data = fileSystem.GetDirectoryInfo(newPath);
// add to our physical locations
args.AddAdditionalLocation(newPath);
diff --git a/MediaBrowser.Controller/IServerApplicationHost.cs b/MediaBrowser.Controller/IServerApplicationHost.cs
index d202e221e0..1b842a5f62 100644
--- a/MediaBrowser.Controller/IServerApplicationHost.cs
+++ b/MediaBrowser.Controller/IServerApplicationHost.cs
@@ -24,6 +24,12 @@ namespace MediaBrowser.Controller
bool SupportsAutoRunAtStartup { get; }
/// <summary>
+ /// Gets a value indicating whether [supports library monitor].
+ /// </summary>
+ /// <value><c>true</c> if [supports library monitor]; otherwise, <c>false</c>.</value>
+ bool SupportsLibraryMonitor { get; }
+
+ /// <summary>
/// Gets the HTTP server port.
/// </summary>
/// <value>The HTTP server port.</value>
diff --git a/MediaBrowser.Controller/Library/ILibraryManager.cs b/MediaBrowser.Controller/Library/ILibraryManager.cs
index 9331ca7598..c7ab88524f 100644
--- a/MediaBrowser.Controller/Library/ILibraryManager.cs
+++ b/MediaBrowser.Controller/Library/ILibraryManager.cs
@@ -11,6 +11,8 @@ using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
+using CommonIO;
+using MediaBrowser.Common.IO;
namespace MediaBrowser.Controller.Library
{
@@ -25,19 +27,18 @@ namespace MediaBrowser.Controller.Library
/// <param name="fileInfo">The file information.</param>
/// <param name="parent">The parent.</param>
/// <returns>BaseItem.</returns>
- BaseItem ResolvePath(FileSystemInfo fileInfo,
+ BaseItem ResolvePath(FileSystemMetadata fileInfo,
Folder parent = null);
/// <summary>
/// Resolves a set of files into a list of BaseItem
/// </summary>
- /// <typeparam name="T"></typeparam>
/// <param name="files">The files.</param>
/// <param name="directoryService">The directory service.</param>
/// <param name="parent">The parent.</param>
/// <param name="collectionType">Type of the collection.</param>
/// <returns>List{``0}.</returns>
- IEnumerable<BaseItem> ResolvePaths(IEnumerable<FileSystemInfo> files,
+ IEnumerable<BaseItem> ResolvePaths(IEnumerable<FileSystemMetadata> files,
IDirectoryService directoryService,
Folder parent, string
collectionType = null);
@@ -385,6 +386,21 @@ namespace MediaBrowser.Controller.Library
CancellationToken cancellationToken);
/// <summary>
+ /// Gets the shadow view.
+ /// </summary>
+ /// <param name="parent">The parent.</param>
+ /// <param name="viewType">Type of the view.</param>
+ /// <param name="sortName">Name of the sort.</param>
+ /// <param name="uniqueId">The unique identifier.</param>
+ /// <param name="cancellationToken">The cancellation token.</param>
+ /// <returns>Task&lt;UserView&gt;.</returns>
+ Task<UserView> GetShadowView(BaseItem parent,
+ string viewType,
+ string sortName,
+ string uniqueId,
+ CancellationToken cancellationToken);
+
+ /// <summary>
/// Determines whether [is video file] [the specified path].
/// </summary>
/// <param name="path">The path.</param>
@@ -434,7 +450,7 @@ namespace MediaBrowser.Controller.Library
/// <param name="fileSystemChildren">The file system children.</param>
/// <param name="directoryService">The directory service.</param>
/// <returns>IEnumerable&lt;Trailer&gt;.</returns>
- IEnumerable<Video> FindTrailers(BaseItem owner, List<FileSystemInfo> fileSystemChildren,
+ IEnumerable<Video> FindTrailers(BaseItem owner, List<FileSystemMetadata> fileSystemChildren,
IDirectoryService directoryService);
/// <summary>
@@ -444,7 +460,7 @@ namespace MediaBrowser.Controller.Library
/// <param name="fileSystemChildren">The file system children.</param>
/// <param name="directoryService">The directory service.</param>
/// <returns>IEnumerable&lt;Video&gt;.</returns>
- IEnumerable<Video> FindExtras(BaseItem owner, List<FileSystemInfo> fileSystemChildren,
+ IEnumerable<Video> FindExtras(BaseItem owner, List<FileSystemMetadata> fileSystemChildren,
IDirectoryService directoryService);
/// <summary>
@@ -509,5 +525,23 @@ namespace MediaBrowser.Controller.Library
/// <param name="query">The query.</param>
/// <returns>QueryResult&lt;BaseItem&gt;.</returns>
QueryResult<BaseItem> QueryItems(InternalItemsQuery query);
+
+ /// <summary>
+ /// Substitutes the path.
+ /// </summary>
+ /// <param name="path">The path.</param>
+ /// <param name="from">From.</param>
+ /// <param name="to">To.</param>
+ /// <returns>System.String.</returns>
+ string SubstitutePath(string path, string from, string to);
+
+ /// <summary>
+ /// Converts the image to local.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <param name="image">The image.</param>
+ /// <param name="imageIndex">Index of the image.</param>
+ /// <returns>Task.</returns>
+ Task<ItemImageInfo> ConvertImageToLocal(IHasImages item, ItemImageInfo image, int imageIndex);
}
} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Library/ItemResolveArgs.cs b/MediaBrowser.Controller/Library/ItemResolveArgs.cs
index db441d285a..90158942fb 100644
--- a/MediaBrowser.Controller/Library/ItemResolveArgs.cs
+++ b/MediaBrowser.Controller/Library/ItemResolveArgs.cs
@@ -4,6 +4,8 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using CommonIO;
+using MediaBrowser.Common.IO;
namespace MediaBrowser.Controller.Library
{
@@ -35,7 +37,7 @@ namespace MediaBrowser.Controller.Library
/// Gets the file system children.
/// </summary>
/// <value>The file system children.</value>
- public IEnumerable<FileSystemInfo> FileSystemChildren
+ public IEnumerable<FileSystemMetadata> FileSystemChildren
{
get
{
@@ -43,7 +45,7 @@ namespace MediaBrowser.Controller.Library
if (dict == null)
{
- return new List<FileSystemInfo>();
+ return new List<FileSystemMetadata>();
}
return dict.Values;
@@ -54,7 +56,7 @@ namespace MediaBrowser.Controller.Library
/// Gets or sets the file system dictionary.
/// </summary>
/// <value>The file system dictionary.</value>
- public Dictionary<string, FileSystemInfo> FileSystemDictionary { get; set; }
+ public Dictionary<string, FileSystemMetadata> FileSystemDictionary { get; set; }
/// <summary>
/// Gets or sets the parent.
@@ -66,7 +68,7 @@ namespace MediaBrowser.Controller.Library
/// Gets or sets the file info.
/// </summary>
/// <value>The file info.</value>
- public FileSystemInfo FileInfo { get; set; }
+ public FileSystemMetadata FileInfo { get; set; }
/// <summary>
/// Gets or sets the path.
@@ -201,7 +203,7 @@ namespace MediaBrowser.Controller.Library
/// <param name="name">The name.</param>
/// <returns>FileSystemInfo.</returns>
/// <exception cref="System.ArgumentNullException"></exception>
- public FileSystemInfo GetFileSystemEntryByName(string name)
+ public FileSystemMetadata GetFileSystemEntryByName(string name)
{
if (string.IsNullOrEmpty(name))
{
@@ -217,7 +219,7 @@ namespace MediaBrowser.Controller.Library
/// <param name="path">The path.</param>
/// <returns>FileSystemInfo.</returns>
/// <exception cref="System.ArgumentNullException"></exception>
- public FileSystemInfo GetFileSystemEntryByPath(string path)
+ public FileSystemMetadata GetFileSystemEntryByPath(string path)
{
if (string.IsNullOrEmpty(path))
{
@@ -226,7 +228,7 @@ namespace MediaBrowser.Controller.Library
if (FileSystemDictionary != null)
{
- FileSystemInfo entry;
+ FileSystemMetadata entry;
if (FileSystemDictionary.TryGetValue(path, out entry))
{
diff --git a/MediaBrowser.Controller/LiveTv/IListingsProvider.cs b/MediaBrowser.Controller/LiveTv/IListingsProvider.cs
index e60183bd93..f5048bdda0 100644
--- a/MediaBrowser.Controller/LiveTv/IListingsProvider.cs
+++ b/MediaBrowser.Controller/LiveTv/IListingsProvider.cs
@@ -11,7 +11,7 @@ namespace MediaBrowser.Controller.LiveTv
{
string Name { get; }
string Type { get; }
- Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ListingsProviderInfo info, string channelNumber, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken);
+ Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ListingsProviderInfo info, string channelNumber, string channelName, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken);
Task AddMetadata(ListingsProviderInfo info, List<ChannelInfo> channels, CancellationToken cancellationToken);
Task Validate(ListingsProviderInfo info, bool validateLogin, bool validateListings);
Task<List<NameIdPair>> GetLineups(ListingsProviderInfo info, string country, string location);
diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
index 1458c1bc2e..241b01405a 100644
--- a/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
+++ b/MediaBrowser.Controller/LiveTv/ILiveTvManager.cs
@@ -338,8 +338,9 @@ namespace MediaBrowser.Controller.LiveTv
/// </summary>
/// <param name="item">The item.</param>
/// <param name="dto">The dto.</param>
+ /// <param name="addChannelInfo">if set to <c>true</c> [add channel information].</param>
/// <param name="user">The user.</param>
- void AddInfoToProgramDto(BaseItem item, BaseItemDto dto, User user = null);
+ void AddInfoToProgramDto(BaseItem item, BaseItemDto dto, bool addChannelInfo, User user = null);
/// <summary>
/// Saves the tuner host.
/// </summary>
diff --git a/MediaBrowser.Controller/LiveTv/ILiveTvRecording.cs b/MediaBrowser.Controller/LiveTv/ILiveTvRecording.cs
index ba0b82a0b6..5dc5f68cd2 100644
--- a/MediaBrowser.Controller/LiveTv/ILiveTvRecording.cs
+++ b/MediaBrowser.Controller/LiveTv/ILiveTvRecording.cs
@@ -12,7 +12,6 @@ namespace MediaBrowser.Controller.LiveTv
public interface ILiveTvRecording : IHasImages, IHasMediaSources, IHasUserData, ILiveTvItem, IHasStartDate, IHasProgramAttributes
{
string ChannelId { get; }
- string ProgramId { get; set; }
string MediaType { get; }
string Container { get; }
@@ -31,16 +30,9 @@ namespace MediaBrowser.Controller.LiveTv
bool CanDelete(User user);
- string ProviderImagePath { get; set; }
-
- string ProviderImageUrl { get; set; }
-
- string ExternalId { get; set; }
- string EpisodeTitle { get; set; }
string SeriesTimerId { get; set; }
RecordingStatus Status { get; set; }
DateTime? EndDate { get; set; }
- ChannelType ChannelType { get; set; }
DateTime DateLastSaved { get; set; }
DateTime DateCreated { get; set; }
DateTime DateModified { get; set; }
diff --git a/MediaBrowser.Controller/LiveTv/ITunerHost.cs b/MediaBrowser.Controller/LiveTv/ITunerHost.cs
index bedbcffe32..2e3a71f703 100644
--- a/MediaBrowser.Controller/LiveTv/ITunerHost.cs
+++ b/MediaBrowser.Controller/LiveTv/ITunerHost.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Model.Dto;
+using System;
+using MediaBrowser.Model.Dto;
using MediaBrowser.Model.LiveTv;
using System.Collections.Generic;
using System.Threading;
@@ -37,7 +38,7 @@ namespace MediaBrowser.Controller.LiveTv
/// <param name="streamId">The stream identifier.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task&lt;MediaSourceInfo&gt;.</returns>
- Task<MediaSourceInfo> GetChannelStream(string channelId, string streamId, CancellationToken cancellationToken);
+ Task<Tuple<MediaSourceInfo,SemaphoreSlim>> GetChannelStream(string channelId, string streamId, CancellationToken cancellationToken);
/// <summary>
/// Gets the channel stream media sources.
/// </summary>
diff --git a/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs b/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs
index 2179c5ecd7..03c05ec69b 100644
--- a/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs
+++ b/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs
@@ -14,26 +14,29 @@ namespace MediaBrowser.Controller.LiveTv
{
public class LiveTvAudioRecording : Audio, ILiveTvRecording
{
- public string ExternalId { get; set; }
- public string ProviderImagePath { get; set; }
- public string ProviderImageUrl { get; set; }
+ [IgnoreDataMember]
public string EpisodeTitle { get; set; }
+ [IgnoreDataMember]
public bool IsSeries { get; set; }
public string SeriesTimerId { get; set; }
+ [IgnoreDataMember]
public DateTime StartDate { get; set; }
public RecordingStatus Status { get; set; }
+ [IgnoreDataMember]
public bool IsSports { get; set; }
+ [IgnoreDataMember]
public bool IsNews { get; set; }
+ [IgnoreDataMember]
public bool IsKids { get; set; }
+ [IgnoreDataMember]
public bool IsRepeat { get; set; }
+ [IgnoreDataMember]
public bool IsMovie { get; set; }
- public bool? IsHD { get; set; }
+ [IgnoreDataMember]
public bool IsLive { get; set; }
+ [IgnoreDataMember]
public bool IsPremiere { get; set; }
- public ChannelType ChannelType { get; set; }
- public string ProgramId { get; set; }
public ProgramAudio? Audio { get; set; }
- public DateTime? OriginalAirDate { get; set; }
/// <summary>
/// Gets the user data key.
@@ -43,11 +46,6 @@ namespace MediaBrowser.Controller.LiveTv
{
var name = GetClientTypeName();
- if (!string.IsNullOrEmpty(ProgramId))
- {
- return name + "-" + ProgramId;
- }
-
return name + "-" + Name + (EpisodeTitle ?? string.Empty);
}
diff --git a/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs b/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs
index cb10003ed8..89168c578d 100644
--- a/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs
+++ b/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs
@@ -47,12 +47,6 @@ namespace MediaBrowser.Controller.LiveTv
public string Number { get; set; }
/// <summary>
- /// Gets or sets the external identifier.
- /// </summary>
- /// <value>The external identifier.</value>
- public string ExternalId { get; set; }
-
- /// <summary>
/// Gets or sets the type of the channel.
/// </summary>
/// <value>The type of the channel.</value>
@@ -64,24 +58,7 @@ namespace MediaBrowser.Controller.LiveTv
/// <value>The name of the service.</value>
public string ServiceName { get; set; }
- /// <summary>
- /// Supply the image path if it can be accessed directly from the file system
- /// </summary>
- /// <value>The image path.</value>
- public string ProviderImagePath { get; set; }
-
- /// <summary>
- /// Supply the image url if it can be downloaded
- /// </summary>
- /// <value>The image URL.</value>
- public string ProviderImageUrl { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether this instance has image.
- /// </summary>
- /// <value><c>null</c> if [has image] contains no value, <c>true</c> if [has image]; otherwise, <c>false</c>.</value>
- public bool? HasProviderImage { get; set; }
-
+ [IgnoreDataMember]
public override LocationType LocationType
{
get
diff --git a/MediaBrowser.Controller/LiveTv/LiveTvProgram.cs b/MediaBrowser.Controller/LiveTv/LiveTvProgram.cs
index 12052905f2..e4b52fd994 100644
--- a/MediaBrowser.Controller/LiveTv/LiveTvProgram.cs
+++ b/MediaBrowser.Controller/LiveTv/LiveTvProgram.cs
@@ -7,6 +7,7 @@ using MediaBrowser.Model.Users;
using System;
using System.Linq;
using System.Runtime.Serialization;
+using MediaBrowser.Model.Entities;
namespace MediaBrowser.Controller.LiveTv
{
@@ -31,23 +32,6 @@ namespace MediaBrowser.Controller.LiveTv
}
/// <summary>
- /// Gets or sets the etag.
- /// </summary>
- /// <value>The etag.</value>
- public string Etag { get; set; }
-
- /// <summary>
- /// Id of the program.
- /// </summary>
- public string ExternalId { get; set; }
-
- /// <summary>
- /// Gets or sets the original air date.
- /// </summary>
- /// <value>The original air date.</value>
- public DateTime? OriginalAirDate { get; set; }
-
- /// <summary>
/// Gets or sets the type of the channel.
/// </summary>
/// <value>The type of the channel.</value>
@@ -56,15 +40,10 @@ namespace MediaBrowser.Controller.LiveTv
/// <summary>
/// The start date of the program, in UTC.
/// </summary>
+ [IgnoreDataMember]
public DateTime StartDate { get; set; }
/// <summary>
- /// Gets or sets a value indicating whether this instance is hd.
- /// </summary>
- /// <value><c>true</c> if this instance is hd; otherwise, <c>false</c>.</value>
- public bool? IsHD { get; set; }
-
- /// <summary>
/// Gets or sets the audio.
/// </summary>
/// <value>The audio.</value>
@@ -74,12 +53,14 @@ namespace MediaBrowser.Controller.LiveTv
/// Gets or sets a value indicating whether this instance is repeat.
/// </summary>
/// <value><c>true</c> if this instance is repeat; otherwise, <c>false</c>.</value>
+ [IgnoreDataMember]
public bool IsRepeat { get; set; }
/// <summary>
/// Gets or sets the episode title.
/// </summary>
/// <value>The episode title.</value>
+ [IgnoreDataMember]
public string EpisodeTitle { get; set; }
/// <summary>
@@ -89,63 +70,52 @@ namespace MediaBrowser.Controller.LiveTv
public string ServiceName { get; set; }
/// <summary>
- /// Supply the image path if it can be accessed directly from the file system
- /// </summary>
- /// <value>The image path.</value>
- public string ProviderImagePath { get; set; }
-
- /// <summary>
- /// Supply the image url if it can be downloaded
- /// </summary>
- /// <value>The image URL.</value>
- public string ProviderImageUrl { get; set; }
-
- /// <summary>
- /// Gets or sets a value indicating whether this instance has image.
- /// </summary>
- /// <value><c>null</c> if [has image] contains no value, <c>true</c> if [has image]; otherwise, <c>false</c>.</value>
- public bool? HasProviderImage { get; set; }
-
- /// <summary>
/// Gets or sets a value indicating whether this instance is movie.
/// </summary>
/// <value><c>true</c> if this instance is movie; otherwise, <c>false</c>.</value>
+ [IgnoreDataMember]
public bool IsMovie { get; set; }
/// <summary>
/// Gets or sets a value indicating whether this instance is sports.
/// </summary>
/// <value><c>true</c> if this instance is sports; otherwise, <c>false</c>.</value>
+ [IgnoreDataMember]
public bool IsSports { get; set; }
/// <summary>
/// Gets or sets a value indicating whether this instance is series.
/// </summary>
/// <value><c>true</c> if this instance is series; otherwise, <c>false</c>.</value>
+ [IgnoreDataMember]
public bool IsSeries { get; set; }
/// <summary>
/// Gets or sets a value indicating whether this instance is live.
/// </summary>
/// <value><c>true</c> if this instance is live; otherwise, <c>false</c>.</value>
+ [IgnoreDataMember]
public bool IsLive { get; set; }
/// <summary>
/// Gets or sets a value indicating whether this instance is news.
/// </summary>
/// <value><c>true</c> if this instance is news; otherwise, <c>false</c>.</value>
+ [IgnoreDataMember]
public bool IsNews { get; set; }
/// <summary>
/// Gets or sets a value indicating whether this instance is kids.
/// </summary>
/// <value><c>true</c> if this instance is kids; otherwise, <c>false</c>.</value>
+ [IgnoreDataMember]
public bool IsKids { get; set; }
/// <summary>
/// Gets or sets a value indicating whether this instance is premiere.
/// </summary>
/// <value><c>true</c> if this instance is premiere; otherwise, <c>false</c>.</value>
+ [IgnoreDataMember]
public bool IsPremiere { get; set; }
/// <summary>
@@ -244,6 +214,7 @@ namespace MediaBrowser.Controller.LiveTv
return info;
}
+ [IgnoreDataMember]
public override bool SupportsPeople
{
get
diff --git a/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs b/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs
index 960f8054a1..77404cfe8e 100644
--- a/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs
+++ b/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs
@@ -14,26 +14,29 @@ namespace MediaBrowser.Controller.LiveTv
{
public class LiveTvVideoRecording : Video, ILiveTvRecording
{
- public string ExternalId { get; set; }
- public string ProviderImagePath { get; set; }
- public string ProviderImageUrl { get; set; }
+ [IgnoreDataMember]
public string EpisodeTitle { get; set; }
+ [IgnoreDataMember]
public bool IsSeries { get; set; }
public string SeriesTimerId { get; set; }
+ [IgnoreDataMember]
public DateTime StartDate { get; set; }
public RecordingStatus Status { get; set; }
+ [IgnoreDataMember]
public bool IsSports { get; set; }
+ [IgnoreDataMember]
public bool IsNews { get; set; }
+ [IgnoreDataMember]
public bool IsKids { get; set; }
+ [IgnoreDataMember]
public bool IsRepeat { get; set; }
+ [IgnoreDataMember]
public bool IsMovie { get; set; }
- public bool? IsHD { get; set; }
+ [IgnoreDataMember]
public bool IsLive { get; set; }
+ [IgnoreDataMember]
public bool IsPremiere { get; set; }
- public ChannelType ChannelType { get; set; }
- public string ProgramId { get; set; }
public ProgramAudio? Audio { get; set; }
- public DateTime? OriginalAirDate { get; set; }
/// <summary>
/// Gets the user data key.
@@ -53,11 +56,6 @@ namespace MediaBrowser.Controller.LiveTv
var name = GetClientTypeName();
- if (!string.IsNullOrEmpty(ProgramId))
- {
- return name + "-" + ProgramId;
- }
-
return name + "-" + Name + (EpisodeTitle ?? string.Empty);
}
@@ -109,6 +107,7 @@ namespace MediaBrowser.Controller.LiveTv
return false;
}
+ [IgnoreDataMember]
public override bool SupportsLocalMetadata
{
get
diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
index 24309734f8..bcf4de2a29 100644
--- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj
+++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
@@ -11,10 +11,9 @@
<AssemblyName>MediaBrowser.Controller</AssemblyName>
<FileAlignment>512</FileAlignment>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
- <ProductVersion>10.0.0</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
- <RestorePackages>true</RestorePackages>
+ <ReleaseVersion>
+ </ReleaseVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
@@ -24,7 +23,6 @@
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
- <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
@@ -33,7 +31,6 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
- <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup>
<RunPostBuildEvent>Always</RunPostBuildEvent>
@@ -45,15 +42,17 @@
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
- <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>
<ItemGroup>
+ <Reference Include="CommonIO, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\CommonIO.1.0.0.5\lib\net45\CommonIO.dll</HintPath>
+ </Reference>
<Reference Include="Interfaces.IO">
<HintPath>..\packages\Interfaces.IO.1.0.0.5\lib\portable-net45+sl4+wp71+win8+wpa81\Interfaces.IO.dll</HintPath>
</Reference>
- <Reference Include="MoreLinq, Version=1.1.17511.0, Culture=neutral, PublicKeyToken=384d532d7e88985d, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>..\packages\morelinq.1.1.0\lib\net35\MoreLinq.dll</HintPath>
+ <Reference Include="Patterns.Logging">
+ <HintPath>..\packages\Patterns.Logging.1.0.0.2\lib\portable-net45+sl4+wp71+win8+wpa81\Patterns.Logging.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
@@ -66,6 +65,9 @@
<Reference Include="ServiceStack.Interfaces">
<HintPath>..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll</HintPath>
</Reference>
+ <Reference Include="MoreLinq">
+ <HintPath>..\packages\morelinq.1.1.1\lib\net35\MoreLinq.dll</HintPath>
+ </Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="..\SharedVersion.cs">
@@ -81,7 +83,6 @@
<Compile Include="Channels\ChannelParentalRating.cs" />
<Compile Include="Channels\ChannelSearchInfo.cs" />
<Compile Include="Channels\IChannel.cs" />
- <Compile Include="Channels\IChannelFactory.cs" />
<Compile Include="Channels\IChannelManager.cs" />
<Compile Include="Channels\IChannelItem.cs" />
<Compile Include="Channels\ChannelAudioItem.cs" />
@@ -149,7 +150,6 @@
<Compile Include="Entities\IHasMediaSources.cs" />
<Compile Include="Entities\IHasMetascore.cs" />
<Compile Include="Entities\IHasOriginalTitle.cs" />
- <Compile Include="Entities\IHasPreferredMetadataLanguage.cs" />
<Compile Include="Entities\IHasProductionLocations.cs" />
<Compile Include="Entities\IHasProgramAttributes.cs" />
<Compile Include="Entities\IHasScreenshots.cs" />
@@ -273,7 +273,6 @@
<Compile Include="Providers\DirectoryService.cs" />
<Compile Include="Providers\DynamicImageInfo.cs" />
<Compile Include="Providers\DynamicImageResponse.cs" />
- <Compile Include="Providers\EpisodeIdentity.cs" />
<Compile Include="Providers\EpisodeInfo.cs" />
<Compile Include="Providers\ExtraInfo.cs" />
<Compile Include="Providers\ExtraSource.cs" />
@@ -287,14 +286,12 @@
<Compile Include="Providers\IForcedProvider.cs" />
<Compile Include="Providers\IHasChangeMonitor.cs" />
<Compile Include="Entities\IHasMetadata.cs" />
- <Compile Include="Providers\IHasIdentities.cs" />
<Compile Include="Providers\IHasItemChangeMonitor.cs" />
<Compile Include="Providers\IHasLookupInfo.cs" />
<Compile Include="Providers\IHasOrder.cs" />
<Compile Include="Providers\IImageFileSaver.cs" />
<Compile Include="Providers\IImageProvider.cs" />
<Compile Include="Providers\IImageSaver.cs" />
- <Compile Include="Providers\IItemIdentity.cs" />
<Compile Include="Providers\IItemIdentityConverter.cs" />
<Compile Include="Providers\IItemIdentityProvider.cs" />
<Compile Include="Providers\ILocalImageFileProvider.cs" />
@@ -319,9 +316,7 @@
<Compile Include="Providers\MusicVideoInfo.cs" />
<Compile Include="Providers\PersonLookupInfo.cs" />
<Compile Include="Providers\RemoteSearchQuery.cs" />
- <Compile Include="Providers\SeasonIdentity.cs" />
<Compile Include="Providers\SeasonInfo.cs" />
- <Compile Include="Providers\SeriesIdentity.cs" />
<Compile Include="Providers\SeriesInfo.cs" />
<Compile Include="Providers\SeriesOrderTypes.cs" />
<Compile Include="Providers\SongInfo.cs" />
@@ -418,8 +413,6 @@
<Compile Include="Sync\ISyncRepository.cs" />
<Compile Include="Sync\SyncedFileInfo.cs" />
<Compile Include="Sync\SyncedItemProgress.cs" />
- <Compile Include="Themes\IAppThemeManager.cs" />
- <Compile Include="Themes\InternalThemeImage.cs" />
<Compile Include="TV\ITVSeriesManager.cs" />
</ItemGroup>
<ItemGroup>
diff --git a/MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs b/MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs
index 23285b612a..427af6f6d7 100644
--- a/MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs
+++ b/MediaBrowser.Controller/MediaEncoding/IMediaEncoder.cs
@@ -25,6 +25,13 @@ namespace MediaBrowser.Controller.MediaEncoding
string Version { get; }
/// <summary>
+ /// Supportses the decoder.
+ /// </summary>
+ /// <param name="decoder">The decoder.</param>
+ /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
+ bool SupportsDecoder(string decoder);
+
+ /// <summary>
/// Extracts the audio image.
/// </summary>
/// <param name="path">The path.</param>
diff --git a/MediaBrowser.Controller/MediaEncoding/MediaEncoderHelpers.cs b/MediaBrowser.Controller/MediaEncoding/MediaEncoderHelpers.cs
index da9dd4dfd2..7985ec054d 100644
--- a/MediaBrowser.Controller/MediaEncoding/MediaEncoderHelpers.cs
+++ b/MediaBrowser.Controller/MediaEncoding/MediaEncoderHelpers.cs
@@ -4,6 +4,8 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using CommonIO;
+using MediaBrowser.Common.IO;
namespace MediaBrowser.Controller.MediaEncoding
{
@@ -15,29 +17,30 @@ namespace MediaBrowser.Controller.MediaEncoding
/// <summary>
/// Gets the input argument.
/// </summary>
+ /// <param name="fileSystem">The file system.</param>
/// <param name="videoPath">The video path.</param>
/// <param name="protocol">The protocol.</param>
/// <param name="isoMount">The iso mount.</param>
/// <param name="playableStreamFileNames">The playable stream file names.</param>
/// <returns>System.String[][].</returns>
- public static string[] GetInputArgument(string videoPath, MediaProtocol protocol, IIsoMount isoMount, List<string> playableStreamFileNames)
+ public static string[] GetInputArgument(IFileSystem fileSystem, string videoPath, MediaProtocol protocol, IIsoMount isoMount, List<string> playableStreamFileNames)
{
if (playableStreamFileNames.Count > 0)
{
if (isoMount == null)
{
- return GetPlayableStreamFiles(videoPath, playableStreamFileNames).ToArray();
+ return GetPlayableStreamFiles(fileSystem, videoPath, playableStreamFileNames).ToArray();
}
- return GetPlayableStreamFiles(isoMount.MountedPath, playableStreamFileNames).ToArray();
+ return GetPlayableStreamFiles(fileSystem, isoMount.MountedPath, playableStreamFileNames).ToArray();
}
return new[] {videoPath};
}
- public static List<string> GetPlayableStreamFiles(string rootPath, IEnumerable<string> filenames)
+ public static List<string> GetPlayableStreamFiles(IFileSystem fileSystem, string rootPath, IEnumerable<string> filenames)
{
- var allFiles = Directory
- .EnumerateFiles(rootPath, "*", SearchOption.AllDirectories)
+ var allFiles = fileSystem
+ .GetFilePaths(rootPath, true)
.ToList();
return filenames.Select(name => allFiles.FirstOrDefault(f => string.Equals(Path.GetFileName(f), name, StringComparison.OrdinalIgnoreCase)))
diff --git a/MediaBrowser.Controller/Net/IHttpServer.cs b/MediaBrowser.Controller/Net/IHttpServer.cs
index 37142af194..91da5fab20 100644
--- a/MediaBrowser.Controller/Net/IHttpServer.cs
+++ b/MediaBrowser.Controller/Net/IHttpServer.cs
@@ -53,5 +53,10 @@ namespace MediaBrowser.Controller.Net
/// Inits this instance.
/// </summary>
void Init(IEnumerable<IRestfulService> services);
+
+ /// <summary>
+ /// If set, all requests will respond with this message
+ /// </summary>
+ string GlobalResponse { get; set; }
}
} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Net/StaticResultOptions.cs b/MediaBrowser.Controller/Net/StaticResultOptions.cs
index 6a104554af..b5efc1b8fb 100644
--- a/MediaBrowser.Controller/Net/StaticResultOptions.cs
+++ b/MediaBrowser.Controller/Net/StaticResultOptions.cs
@@ -19,6 +19,7 @@ namespace MediaBrowser.Controller.Net
public IDictionary<string, string> ResponseHeaders { get; set; }
public Action OnComplete { get; set; }
+ public Action OnError { get; set; }
public StaticResultOptions()
{
diff --git a/MediaBrowser.Controller/Persistence/IItemRepository.cs b/MediaBrowser.Controller/Persistence/IItemRepository.cs
index a4b9bf1202..8fc0aedd3f 100644
--- a/MediaBrowser.Controller/Persistence/IItemRepository.cs
+++ b/MediaBrowser.Controller/Persistence/IItemRepository.cs
@@ -169,6 +169,13 @@ namespace MediaBrowser.Controller.Persistence
/// <param name="query">The query.</param>
/// <returns>List&lt;System.String&gt;.</returns>
List<string> GetPeopleNames(InternalPeopleQuery query);
+
+ /// <summary>
+ /// Gets the item ids with path.
+ /// </summary>
+ /// <param name="query">The query.</param>
+ /// <returns>QueryResult&lt;Tuple&lt;Guid, System.String&gt;&gt;.</returns>
+ QueryResult<Tuple<Guid, string>> GetItemIdsWithPath(InternalItemsQuery query);
}
}
diff --git a/MediaBrowser.Controller/Playlists/IPlaylistManager.cs b/MediaBrowser.Controller/Playlists/IPlaylistManager.cs
index cbe0b97a4e..a9336d8e33 100644
--- a/MediaBrowser.Controller/Playlists/IPlaylistManager.cs
+++ b/MediaBrowser.Controller/Playlists/IPlaylistManager.cs
@@ -45,5 +45,13 @@ namespace MediaBrowser.Controller.Playlists
/// <returns>Folder.</returns>
Folder GetPlaylistsFolder(string userId);
+ /// <summary>
+ /// Moves the item.
+ /// </summary>
+ /// <param name="playlistId">The playlist identifier.</param>
+ /// <param name="entryId">The entry identifier.</param>
+ /// <param name="newIndex">The new index.</param>
+ /// <returns>Task.</returns>
+ Task MoveItem(string playlistId, string entryId, int newIndex);
}
}
diff --git a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
index 383d0881e9..3e53538124 100644
--- a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
+++ b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
@@ -61,7 +61,16 @@ namespace MediaBrowser.Controller.Providers
};
//Fetch(item, metadataFile, settings, Encoding.GetEncoding("ISO-8859-1"), cancellationToken);
- Fetch(item, metadataFile, settings, Encoding.UTF8, cancellationToken);
+
+ try
+ {
+ Fetch(item, metadataFile, settings, Encoding.UTF8, cancellationToken);
+ }
+ catch
+ {
+ Logger.Error("Error parsing xml file {0}", metadataFile);
+ throw;
+ }
}
/// <summary>
@@ -304,11 +313,7 @@ namespace MediaBrowser.Controller.Providers
{
var val = reader.ReadElementContentAsString();
- var hasLanguage = item as IHasPreferredMetadataLanguage;
- if (hasLanguage != null)
- {
- hasLanguage.PreferredMetadataLanguage = val;
- }
+ item.PreferredMetadataLanguage = val;
break;
}
@@ -317,11 +322,7 @@ namespace MediaBrowser.Controller.Providers
{
var val = reader.ReadElementContentAsString();
- var hasLanguage = item as IHasPreferredMetadataLanguage;
- if (hasLanguage != null)
- {
- hasLanguage.PreferredMetadataCountryCode = val;
- }
+ item.PreferredMetadataCountryCode = val;
break;
}
diff --git a/MediaBrowser.Controller/Providers/DirectoryService.cs b/MediaBrowser.Controller/Providers/DirectoryService.cs
index 79ffb0d01f..cf1c3d286d 100644
--- a/MediaBrowser.Controller/Providers/DirectoryService.cs
+++ b/MediaBrowser.Controller/Providers/DirectoryService.cs
@@ -4,48 +4,52 @@ using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using CommonIO;
+using MediaBrowser.Common.IO;
namespace MediaBrowser.Controller.Providers
{
public class DirectoryService : IDirectoryService
{
private readonly ILogger _logger;
+ private readonly IFileSystem _fileSystem;
- private readonly ConcurrentDictionary<string, Dictionary<string,FileSystemInfo>> _cache =
- new ConcurrentDictionary<string, Dictionary<string, FileSystemInfo>>(StringComparer.OrdinalIgnoreCase);
+ private readonly ConcurrentDictionary<string, Dictionary<string, FileSystemMetadata>> _cache =
+ new ConcurrentDictionary<string, Dictionary<string, FileSystemMetadata>>(StringComparer.OrdinalIgnoreCase);
- public DirectoryService(ILogger logger)
+ public DirectoryService(ILogger logger, IFileSystem fileSystem)
{
_logger = logger;
+ _fileSystem = fileSystem;
}
- public DirectoryService()
- : this(new NullLogger())
+ public DirectoryService(IFileSystem fileSystem)
+ : this(new NullLogger(), fileSystem)
{
}
- public IEnumerable<FileSystemInfo> GetFileSystemEntries(string path)
+ public IEnumerable<FileSystemMetadata> GetFileSystemEntries(string path)
{
return GetFileSystemEntries(path, false);
}
- public Dictionary<string, FileSystemInfo> GetFileSystemDictionary(string path)
+ public Dictionary<string, FileSystemMetadata> GetFileSystemDictionary(string path)
{
return GetFileSystemDictionary(path, false);
}
- private Dictionary<string, FileSystemInfo> GetFileSystemDictionary(string path, bool clearCache)
+ private Dictionary<string, FileSystemMetadata> GetFileSystemDictionary(string path, bool clearCache)
{
if (string.IsNullOrWhiteSpace(path))
{
throw new ArgumentNullException("path");
}
- Dictionary<string, FileSystemInfo> entries;
+ Dictionary<string, FileSystemMetadata> entries;
if (clearCache)
{
- Dictionary<string, FileSystemInfo> removed;
+ Dictionary<string, FileSystemMetadata> removed;
_cache.TryRemove(path, out removed);
}
@@ -54,13 +58,12 @@ namespace MediaBrowser.Controller.Providers
{
//_logger.Debug("Getting files for " + path);
- entries = new Dictionary<string, FileSystemInfo>(StringComparer.OrdinalIgnoreCase);
+ entries = new Dictionary<string, FileSystemMetadata>(StringComparer.OrdinalIgnoreCase);
try
{
// using EnumerateFileSystemInfos doesn't handle reparse points (symlinks)
- var list = new DirectoryInfo(path).EnumerateDirectories("*", SearchOption.TopDirectoryOnly)
- .Concat<FileSystemInfo>(new DirectoryInfo(path).EnumerateFiles("*", SearchOption.TopDirectoryOnly));
+ var list = _fileSystem.GetFileSystemEntries(path);
// Seeing dupes on some users file system for some reason
foreach (var item in list)
@@ -80,34 +83,34 @@ namespace MediaBrowser.Controller.Providers
return entries;
}
- private IEnumerable<FileSystemInfo> GetFileSystemEntries(string path, bool clearCache)
+ private IEnumerable<FileSystemMetadata> GetFileSystemEntries(string path, bool clearCache)
{
return GetFileSystemDictionary(path, clearCache).Values;
}
- public IEnumerable<FileSystemInfo> GetFiles(string path)
+ public IEnumerable<FileSystemMetadata> GetFiles(string path)
{
return GetFiles(path, false);
}
- public IEnumerable<FileSystemInfo> GetFiles(string path, bool clearCache)
+ public IEnumerable<FileSystemMetadata> GetFiles(string path, bool clearCache)
{
return GetFileSystemEntries(path, clearCache).Where(i => (i.Attributes & FileAttributes.Directory) != FileAttributes.Directory);
}
- public FileSystemInfo GetFile(string path)
+ public FileSystemMetadata GetFile(string path)
{
var directory = Path.GetDirectoryName(path);
var dict = GetFileSystemDictionary(directory, false);
- FileSystemInfo entry;
+ FileSystemMetadata entry;
dict.TryGetValue(path, out entry);
return entry;
}
- public IEnumerable<FileSystemInfo> GetDirectories(string path)
+ public IEnumerable<FileSystemMetadata> GetDirectories(string path)
{
return GetFileSystemEntries(path, false).Where(i => (i.Attributes & FileAttributes.Directory) == FileAttributes.Directory);
}
diff --git a/MediaBrowser.Controller/Providers/DynamicImageResponse.cs b/MediaBrowser.Controller/Providers/DynamicImageResponse.cs
index 71a937cd9d..fdd1891ed6 100644
--- a/MediaBrowser.Controller/Providers/DynamicImageResponse.cs
+++ b/MediaBrowser.Controller/Providers/DynamicImageResponse.cs
@@ -1,12 +1,14 @@
using System;
using System.IO;
using MediaBrowser.Model.Drawing;
+using MediaBrowser.Model.MediaInfo;
namespace MediaBrowser.Controller.Providers
{
public class DynamicImageResponse
{
public string Path { get; set; }
+ public MediaProtocol Protocol { get; set; }
public Stream Stream { get; set; }
public ImageFormat Format { get; set; }
public bool HasImage { get; set; }
diff --git a/MediaBrowser.Controller/Providers/EpisodeIdentity.cs b/MediaBrowser.Controller/Providers/EpisodeIdentity.cs
deleted file mode 100644
index 53f469e955..0000000000
--- a/MediaBrowser.Controller/Providers/EpisodeIdentity.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-namespace MediaBrowser.Controller.Providers
-{
- public class EpisodeIdentity : IItemIdentity
- {
- public string Type { get; set; }
-
- public string SeriesId { get; set; }
- public int? SeasonIndex { get; set; }
- public int IndexNumber { get; set; }
- public int? IndexNumberEnd { get; set; }
- }
-} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/EpisodeInfo.cs b/MediaBrowser.Controller/Providers/EpisodeInfo.cs
index 88a7cbab7f..28abd636a2 100644
--- a/MediaBrowser.Controller/Providers/EpisodeInfo.cs
+++ b/MediaBrowser.Controller/Providers/EpisodeInfo.cs
@@ -1,15 +1,10 @@
using System;
using System.Collections.Generic;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
namespace MediaBrowser.Controller.Providers
{
- public class EpisodeInfo : ItemLookupInfo, IHasIdentities<EpisodeIdentity>
+ public class EpisodeInfo : ItemLookupInfo
{
- private List<EpisodeIdentity> _identities = new List<EpisodeIdentity>();
-
public Dictionary<string, string> SeriesProviderIds { get; set; }
public int? IndexNumberEnd { get; set; }
@@ -19,16 +14,5 @@ namespace MediaBrowser.Controller.Providers
{
SeriesProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
}
-
- public IEnumerable<EpisodeIdentity> Identities
- {
- get { return _identities; }
- }
-
- public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken)
- {
- var identifier = new ItemIdentifier<EpisodeInfo, EpisodeIdentity>();
- _identities = (await identifier.FindIdentities(this, providerManager, cancellationToken)).ToList();
- }
}
} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/IDirectoryService.cs b/MediaBrowser.Controller/Providers/IDirectoryService.cs
index 343cf361f0..062a109015 100644
--- a/MediaBrowser.Controller/Providers/IDirectoryService.cs
+++ b/MediaBrowser.Controller/Providers/IDirectoryService.cs
@@ -1,15 +1,17 @@
using System.Collections.Generic;
using System.IO;
+using CommonIO;
+using MediaBrowser.Common.IO;
namespace MediaBrowser.Controller.Providers
{
public interface IDirectoryService
{
- IEnumerable<FileSystemInfo> GetFileSystemEntries(string path);
- IEnumerable<FileSystemInfo> GetFiles(string path);
- IEnumerable<FileSystemInfo> GetDirectories(string path);
- IEnumerable<FileSystemInfo> GetFiles(string path, bool clearCache);
- FileSystemInfo GetFile(string path);
- Dictionary<string, FileSystemInfo> GetFileSystemDictionary(string path);
+ IEnumerable<FileSystemMetadata> GetFileSystemEntries(string path);
+ IEnumerable<FileSystemMetadata> GetFiles(string path);
+ IEnumerable<FileSystemMetadata> GetDirectories(string path);
+ IEnumerable<FileSystemMetadata> GetFiles(string path, bool clearCache);
+ FileSystemMetadata GetFile(string path);
+ Dictionary<string, FileSystemMetadata> GetFileSystemDictionary(string path);
}
} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/IHasIdentities.cs b/MediaBrowser.Controller/Providers/IHasIdentities.cs
deleted file mode 100644
index 36f940dd31..0000000000
--- a/MediaBrowser.Controller/Providers/IHasIdentities.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace MediaBrowser.Controller.Providers
-{
- public interface IHasIdentities<out TIdentity>
- where TIdentity : IItemIdentity
- {
- IEnumerable<TIdentity> Identities { get; }
-
- Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken);
- }
-} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/IItemIdentity.cs b/MediaBrowser.Controller/Providers/IItemIdentity.cs
deleted file mode 100644
index cab189c84f..0000000000
--- a/MediaBrowser.Controller/Providers/IItemIdentity.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace MediaBrowser.Controller.Providers
-{
- public interface IItemIdentity
- {
- string Type { get; }
- }
-} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/IItemIdentityConverter.cs b/MediaBrowser.Controller/Providers/IItemIdentityConverter.cs
index 30e96b9e51..bfdd1dbf3a 100644
--- a/MediaBrowser.Controller/Providers/IItemIdentityConverter.cs
+++ b/MediaBrowser.Controller/Providers/IItemIdentityConverter.cs
@@ -1,4 +1,4 @@
namespace MediaBrowser.Controller.Providers
{
- public interface IItemIdentityConverter : IHasOrder { }
+ public interface IItemIdentityConverter { }
} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/IItemIdentityProvider.cs b/MediaBrowser.Controller/Providers/IItemIdentityProvider.cs
index 9d437c208b..6b403bb55f 100644
--- a/MediaBrowser.Controller/Providers/IItemIdentityProvider.cs
+++ b/MediaBrowser.Controller/Providers/IItemIdentityProvider.cs
@@ -1,4 +1,4 @@
namespace MediaBrowser.Controller.Providers
{
- public interface IItemIdentityProvider : IHasOrder { }
+ public interface IItemIdentityProvider { }
} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/IProviderManager.cs b/MediaBrowser.Controller/Providers/IProviderManager.cs
index d6fc39c5f5..57e4ff3200 100644
--- a/MediaBrowser.Controller/Providers/IProviderManager.cs
+++ b/MediaBrowser.Controller/Providers/IProviderManager.cs
@@ -195,18 +195,16 @@ namespace MediaBrowser.Controller.Providers
/// Gets the item identity providers.
/// </summary>
/// <typeparam name="TLookupInfo">The type of the t lookup information.</typeparam>
- /// <typeparam name="TIdentity">The type of the t identity.</typeparam>
/// <returns>IEnumerable&lt;IItemIdentityProvider&lt;TLookupInfo, TIdentity&gt;&gt;.</returns>
- IEnumerable<IItemIdentityProvider<TLookupInfo, TIdentity>> GetItemIdentityProviders<TLookupInfo, TIdentity>()
- where TLookupInfo : ItemLookupInfo
- where TIdentity : IItemIdentity;
+ IEnumerable<IItemIdentityProvider<TLookupInfo>> GetItemIdentityProviders<TLookupInfo>()
+ where TLookupInfo : ItemLookupInfo;
/// <summary>
/// Gets the item identity converters.
/// </summary>
- /// <typeparam name="TIdentity">The type of the t identity.</typeparam>
+ /// <typeparam name="TLookupInfo">The type of the t lookup information.</typeparam>
/// <returns>IEnumerable&lt;IItemIdentityConverter&lt;TIdentity&gt;&gt;.</returns>
- IEnumerable<IItemIdentityConverter<TIdentity>> GetItemIdentityConverters<TIdentity>()
- where TIdentity : IItemIdentity;
+ IEnumerable<IItemIdentityConverter<TLookupInfo>> GetItemIdentityConverters<TLookupInfo>()
+ where TLookupInfo : ItemLookupInfo;
}
} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/ImageRefreshMode.cs b/MediaBrowser.Controller/Providers/ImageRefreshMode.cs
index df10c91f6a..73ef4b8cda 100644
--- a/MediaBrowser.Controller/Providers/ImageRefreshMode.cs
+++ b/MediaBrowser.Controller/Providers/ImageRefreshMode.cs
@@ -8,14 +8,14 @@ namespace MediaBrowser.Controller.Providers
None = 0,
/// <summary>
- /// The default
+ /// Existing images will be validated
/// </summary>
- Default = 1,
+ ValidationOnly = 1,
/// <summary>
- /// Existing images will be validated
+ /// The default
/// </summary>
- ValidationOnly = 2,
+ Default = 2,
/// <summary>
/// All providers will be executed to search for new metadata
diff --git a/MediaBrowser.Controller/Providers/ItemIdentifier.cs b/MediaBrowser.Controller/Providers/ItemIdentifier.cs
index 13e4f137f9..bbc6dd76cd 100644
--- a/MediaBrowser.Controller/Providers/ItemIdentifier.cs
+++ b/MediaBrowser.Controller/Providers/ItemIdentifier.cs
@@ -1,73 +1,36 @@
-using System.Collections.Generic;
-using System.Linq;
+using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace MediaBrowser.Controller.Providers
{
- public class ItemIdentifier<TLookupInfo, TIdentity>
+ public static class ItemIdentifier<TLookupInfo>
where TLookupInfo : ItemLookupInfo
- where TIdentity : IItemIdentity
{
- public async Task<IEnumerable<TIdentity>> FindIdentities(TLookupInfo item, IProviderManager providerManager, CancellationToken cancellationToken)
+ public static async Task FindIdentities(TLookupInfo item, IProviderManager providerManager, CancellationToken cancellationToken)
{
- var providers = providerManager.GetItemIdentityProviders<TLookupInfo, TIdentity>();
- var converters = providerManager.GetItemIdentityConverters<TIdentity>();
-
- var identities = new List<IdentityPair>();
-
+ var providers = providerManager.GetItemIdentityProviders<TLookupInfo>();
+ var converters = providerManager.GetItemIdentityConverters<TLookupInfo>().ToList();
+
foreach (var provider in providers)
{
- var result = new IdentityPair
- {
- Identity = await provider.FindIdentity(item),
- Order = provider.Order
- };
-
- if (!Equals(result.Identity, default(TIdentity)))
- {
- identities.Add(result);
- }
+ await provider.Identify(item);
}
- var convertersAvailable = new List<IItemIdentityConverter<TIdentity>>(converters);
- bool changesMade;
+ bool changesMade = true;
- do
+ while (changesMade)
{
changesMade = false;
- for (int i = convertersAvailable.Count - 1; i >= 0; i--)
+ foreach (var converter in converters)
{
- var converter = convertersAvailable[i];
- var input = identities.FirstOrDefault(id => id.Identity.Type == converter.SourceType);
- var existing = identities.Where(id => id.Identity.Type == converter.ResultType);
-
- if (input != null && !existing.Any(id => id.Order <= converter.Order))
+ if (await converter.Convert(item))
{
- var result = new IdentityPair
- {
- Identity = await converter.Convert(input.Identity).ConfigureAwait(false),
- Order = converter.Order
- };
-
- if (!Equals(result.Identity, default(TIdentity)))
- {
- identities.Add(result);
- convertersAvailable.RemoveAt(i);
- changesMade = true;
- }
+ changesMade = true;
}
}
- } while (changesMade);
-
- return identities.OrderBy(id => id.Order).Select(id => id.Identity);
- }
-
- private class IdentityPair
- {
- public TIdentity Identity;
- public int Order;
+ }
}
}
} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/ItemIdentities.cs b/MediaBrowser.Controller/Providers/ItemIdentities.cs
index 939fd3b8ff..48316d0f44 100644
--- a/MediaBrowser.Controller/Providers/ItemIdentities.cs
+++ b/MediaBrowser.Controller/Providers/ItemIdentities.cs
@@ -2,20 +2,15 @@
namespace MediaBrowser.Controller.Providers
{
- public interface IItemIdentityProvider<in TLookupInfo, TIdentity> : IItemIdentityProvider
+ public interface IItemIdentityProvider<in TLookupInfo> : IItemIdentityProvider
where TLookupInfo : ItemLookupInfo
- where TIdentity : IItemIdentity
{
- Task<TIdentity> FindIdentity(TLookupInfo info);
+ Task Identify(TLookupInfo info);
}
- public interface IItemIdentityConverter<TIdentity> : IItemIdentityConverter
- where TIdentity : IItemIdentity
+ public interface IItemIdentityConverter<in TLookupInfo> : IItemIdentityConverter
+ where TLookupInfo : ItemLookupInfo
{
- Task<TIdentity> Convert(TIdentity identity);
-
- string SourceType { get; }
-
- string ResultType { get; }
+ Task<bool> Convert(TLookupInfo info);
}
} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/ItemInfo.cs b/MediaBrowser.Controller/Providers/ItemInfo.cs
index 78f352057b..d16a730286 100644
--- a/MediaBrowser.Controller/Providers/ItemInfo.cs
+++ b/MediaBrowser.Controller/Providers/ItemInfo.cs
@@ -19,6 +19,7 @@ namespace MediaBrowser.Controller.Providers
if (video != null)
{
VideoType = video.VideoType;
+ IsPlaceHolder = video.IsPlaceHolder;
}
}
@@ -26,5 +27,6 @@ namespace MediaBrowser.Controller.Providers
public string ContainingFolderPath { get; set; }
public VideoType VideoType { get; set; }
public bool IsInMixedFolder { get; set; }
+ public bool IsPlaceHolder { get; set; }
}
} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/LocalImageInfo.cs b/MediaBrowser.Controller/Providers/LocalImageInfo.cs
index 59d74def26..51916268fe 100644
--- a/MediaBrowser.Controller/Providers/LocalImageInfo.cs
+++ b/MediaBrowser.Controller/Providers/LocalImageInfo.cs
@@ -1,11 +1,13 @@
using System.IO;
+using CommonIO;
+using MediaBrowser.Common.IO;
using MediaBrowser.Model.Entities;
namespace MediaBrowser.Controller.Providers
{
public class LocalImageInfo
{
- public FileSystemInfo FileInfo { get; set; }
+ public FileSystemMetadata FileInfo { get; set; }
public ImageType Type { get; set; }
}
} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs b/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs
index dbb7fbfcdb..6f217eea2b 100644
--- a/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs
+++ b/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs
@@ -1,4 +1,6 @@
using System.Linq;
+using CommonIO;
+using MediaBrowser.Common.IO;
namespace MediaBrowser.Controller.Providers
{
@@ -15,8 +17,8 @@ namespace MediaBrowser.Controller.Providers
public bool ForceSave { get; set; }
- public MetadataRefreshOptions()
- : this(new DirectoryService())
+ public MetadataRefreshOptions(IFileSystem fileSystem)
+ : this(new DirectoryService(fileSystem))
{
}
diff --git a/MediaBrowser.Controller/Providers/MetadataStatus.cs b/MediaBrowser.Controller/Providers/MetadataStatus.cs
index 283b9edbc2..9b946aee27 100644
--- a/MediaBrowser.Controller/Providers/MetadataStatus.cs
+++ b/MediaBrowser.Controller/Providers/MetadataStatus.cs
@@ -41,12 +41,6 @@ namespace MediaBrowser.Controller.Providers
public DateTime? DateLastImagesRefresh { get; set; }
/// <summary>
- /// Gets or sets the last result.
- /// </summary>
- /// <value>The last result.</value>
- public ProviderRefreshStatus LastStatus { get; set; }
-
- /// <summary>
/// Gets or sets the last result error message.
/// </summary>
/// <value>The last result error message.</value>
@@ -54,33 +48,19 @@ namespace MediaBrowser.Controller.Providers
public DateTime? ItemDateModified { get; set; }
- public void AddStatus(ProviderRefreshStatus status, string errorMessage)
+ public void AddStatus(string errorMessage)
{
- if (LastStatus != status)
- {
- IsDirty = true;
- }
-
if (string.IsNullOrEmpty(LastErrorMessage))
{
LastErrorMessage = errorMessage;
}
- if (LastStatus == ProviderRefreshStatus.Success)
- {
- LastStatus = status;
- }
- }
-
- public MetadataStatus()
- {
- LastStatus = ProviderRefreshStatus.Success;
}
public bool IsDirty { get; private set; }
- public void SetDateLastMetadataRefresh(DateTime date)
+ public void SetDateLastMetadataRefresh(DateTime? date)
{
- if (date != (DateLastMetadataRefresh ?? DateTime.MinValue))
+ if (date != DateLastMetadataRefresh)
{
IsDirty = true;
}
@@ -88,9 +68,9 @@ namespace MediaBrowser.Controller.Providers
DateLastMetadataRefresh = date;
}
- public void SetDateLastImagesRefresh(DateTime date)
+ public void SetDateLastImagesRefresh(DateTime? date)
{
- if (date != (DateLastImagesRefresh ?? DateTime.MinValue))
+ if (date != DateLastImagesRefresh)
{
IsDirty = true;
}
diff --git a/MediaBrowser.Controller/Providers/SeasonIdentity.cs b/MediaBrowser.Controller/Providers/SeasonIdentity.cs
deleted file mode 100644
index 1e6b9b65a3..0000000000
--- a/MediaBrowser.Controller/Providers/SeasonIdentity.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-namespace MediaBrowser.Controller.Providers
-{
- public class SeasonIdentity : IItemIdentity
- {
- public string Type { get; set; }
-
- public string SeriesId { get; set; }
-
- public int SeasonIndex { get; set; }
- }
-} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/SeasonInfo.cs b/MediaBrowser.Controller/Providers/SeasonInfo.cs
index 17bcd3f772..2c785d7d71 100644
--- a/MediaBrowser.Controller/Providers/SeasonInfo.cs
+++ b/MediaBrowser.Controller/Providers/SeasonInfo.cs
@@ -1,15 +1,10 @@
using System;
using System.Collections.Generic;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
namespace MediaBrowser.Controller.Providers
{
- public class SeasonInfo : ItemLookupInfo, IHasIdentities<SeasonIdentity>
+ public class SeasonInfo : ItemLookupInfo
{
- private List<SeasonIdentity> _identities = new List<SeasonIdentity>();
-
public Dictionary<string, string> SeriesProviderIds { get; set; }
public int? AnimeSeriesIndex { get; set; }
@@ -17,16 +12,5 @@ namespace MediaBrowser.Controller.Providers
{
SeriesProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
}
-
- public IEnumerable<SeasonIdentity> Identities
- {
- get { return _identities; }
- }
-
- public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken)
- {
- var identifier = new ItemIdentifier<SeasonInfo, SeasonIdentity>();
- _identities = (await identifier.FindIdentities(this, providerManager, cancellationToken)).ToList();
- }
}
} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/SeriesIdentity.cs b/MediaBrowser.Controller/Providers/SeriesIdentity.cs
deleted file mode 100644
index 326d340275..0000000000
--- a/MediaBrowser.Controller/Providers/SeriesIdentity.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace MediaBrowser.Controller.Providers
-{
- public class SeriesIdentity : IItemIdentity
- {
- public string Type { get; set; }
-
- public string Id { get; set; }
- }
-} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/SeriesInfo.cs b/MediaBrowser.Controller/Providers/SeriesInfo.cs
index fc1119cd25..387865de23 100644
--- a/MediaBrowser.Controller/Providers/SeriesInfo.cs
+++ b/MediaBrowser.Controller/Providers/SeriesInfo.cs
@@ -1,25 +1,7 @@
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-
namespace MediaBrowser.Controller.Providers
{
- public class SeriesInfo : ItemLookupInfo, IHasIdentities<SeriesIdentity>
+ public class SeriesInfo : ItemLookupInfo
{
- private List<SeriesIdentity> _identities = new List<SeriesIdentity>();
-
public int? AnimeSeriesIndex { get; set; }
-
- public IEnumerable<SeriesIdentity> Identities
- {
- get { return _identities; }
- }
-
- public async Task FindIdentities(IProviderManager providerManager, CancellationToken cancellationToken)
- {
- var identifier = new ItemIdentifier<SeriesInfo, SeriesIdentity>();
- _identities = (await identifier.FindIdentities(this, providerManager, cancellationToken)).ToList();
- }
}
} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Resolvers/IItemResolver.cs b/MediaBrowser.Controller/Resolvers/IItemResolver.cs
index fec6be55c9..f747c055e1 100644
--- a/MediaBrowser.Controller/Resolvers/IItemResolver.cs
+++ b/MediaBrowser.Controller/Resolvers/IItemResolver.cs
@@ -3,6 +3,8 @@ using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using System.Collections.Generic;
using System.IO;
+using CommonIO;
+using MediaBrowser.Common.IO;
namespace MediaBrowser.Controller.Resolvers
{
@@ -26,8 +28,8 @@ namespace MediaBrowser.Controller.Resolvers
public interface IMultiItemResolver
{
- MultiItemResolverResult ResolveMultiple(Folder parent,
- List<FileSystemInfo> files,
+ MultiItemResolverResult ResolveMultiple(Folder parent,
+ List<FileSystemMetadata> files,
string collectionType,
IDirectoryService directoryService);
}
@@ -35,12 +37,12 @@ namespace MediaBrowser.Controller.Resolvers
public class MultiItemResolverResult
{
public List<BaseItem> Items { get; set; }
- public List<FileSystemInfo> ExtraFiles { get; set; }
+ public List<FileSystemMetadata> ExtraFiles { get; set; }
public MultiItemResolverResult()
{
Items = new List<BaseItem>();
- ExtraFiles = new List<FileSystemInfo>();
+ ExtraFiles = new List<FileSystemMetadata>();
}
}
}
diff --git a/MediaBrowser.Controller/Themes/IAppThemeManager.cs b/MediaBrowser.Controller/Themes/IAppThemeManager.cs
deleted file mode 100644
index 1a7c2aaabc..0000000000
--- a/MediaBrowser.Controller/Themes/IAppThemeManager.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using MediaBrowser.Model.Themes;
-using System.Collections.Generic;
-
-namespace MediaBrowser.Controller.Themes
-{
- public interface IAppThemeManager
- {
- /// <summary>
- /// Gets the themes.
- /// </summary>
- /// <param name="applicationName">Name of the application.</param>
- /// <returns>IEnumerable{AppThemeInfo}.</returns>
- IEnumerable<AppThemeInfo> GetThemes(string applicationName);
-
- /// <summary>
- /// Gets the theme.
- /// </summary>
- /// <param name="applicationName">Name of the application.</param>
- /// <param name="name">The name.</param>
- /// <returns>AppTheme.</returns>
- AppTheme GetTheme(string applicationName, string name);
-
- /// <summary>
- /// Saves the theme.
- /// </summary>
- /// <param name="theme">The theme.</param>
- void SaveTheme(AppTheme theme);
-
- /// <summary>
- /// Gets the image image information.
- /// </summary>
- /// <param name="applicationName">Name of the application.</param>
- /// <param name="themeName">Name of the theme.</param>
- /// <param name="imageName">Name of the image.</param>
- /// <returns>InternalThemeImage.</returns>
- InternalThemeImage GetImageImageInfo(string applicationName, string themeName, string imageName);
- }
-}
diff --git a/MediaBrowser.Controller/Themes/InternalThemeImage.cs b/MediaBrowser.Controller/Themes/InternalThemeImage.cs
deleted file mode 100644
index 2b676c25b7..0000000000
--- a/MediaBrowser.Controller/Themes/InternalThemeImage.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-using System;
-
-namespace MediaBrowser.Controller.Themes
-{
- public class InternalThemeImage
- {
- /// <summary>
- /// Gets or sets the name.
- /// </summary>
- /// <value>The name.</value>
- public string Name { get; set; }
-
- /// <summary>
- /// Gets or sets the cache tag.
- /// </summary>
- /// <value>The cache tag.</value>
- public string CacheTag { get; set; }
-
- /// <summary>
- /// Gets or sets the path.
- /// </summary>
- /// <value>The path.</value>
- public string Path { get; set; }
-
- /// <summary>
- /// Gets or sets the date modified.
- /// </summary>
- /// <value>The date modified.</value>
- public DateTime DateModified { get; set; }
- }
-}
diff --git a/MediaBrowser.Controller/packages.config b/MediaBrowser.Controller/packages.config
index 8846b5a064..a0aacbc958 100644
--- a/MediaBrowser.Controller/packages.config
+++ b/MediaBrowser.Controller/packages.config
@@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
+ <package id="CommonIO" version="1.0.0.5" targetFramework="net45" />
<package id="Interfaces.IO" version="1.0.0.5" targetFramework="net45" />
- <package id="morelinq" version="1.1.0" targetFramework="net45" />
+ <package id="morelinq" version="1.1.1" targetFramework="net45" />
+ <package id="Patterns.Logging" version="1.0.0.2" targetFramework="net45" />
</packages> \ No newline at end of file