Ver código fonte

finish removing ChannelFolderItem

Luke Pulverenti 9 anos atrás
pai
commit
7b93b7a33c

+ 8 - 0
MediaBrowser.Controller/Channels/Channel.cs

@@ -3,6 +3,7 @@ using MediaBrowser.Model.Channels;
 using MediaBrowser.Model.Querying;
 using System;
 using System.Linq;
+using System.Runtime.Serialization;
 using System.Threading;
 using System.Threading.Tasks;
 
@@ -30,6 +31,13 @@ namespace MediaBrowser.Controller.Channels
             return base.IsVisible(user);
         }
 
+        [IgnoreDataMember]
+        public override SourceType SourceType
+        {
+            get { return SourceType.Channel; }
+            set { }
+        }
+
         public override async Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query)
         {
             try

+ 6 - 0
MediaBrowser.Controller/Channels/ChannelAudioItem.cs

@@ -37,6 +37,12 @@ namespace MediaBrowser.Controller.Channels
             }
         }
 
+        [IgnoreDataMember]
+        public override SourceType SourceType {
+            get { return SourceType.Channel; }
+            set { }
+        }
+
         public override bool IsSaveLocalMetadataEnabled()
         {
             return false;

+ 0 - 90
MediaBrowser.Controller/Channels/ChannelFolderItem.cs

@@ -1,90 +0,0 @@
-using MediaBrowser.Controller.Entities;
-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.Configuration;
-using MediaBrowser.Model.Entities;
-
-namespace MediaBrowser.Controller.Channels
-{
-    public class ChannelFolderItem : Folder
-    {
-        public ChannelFolderType ChannelFolderType { get; set; }
-
-        protected override bool GetBlockUnratedValue(UserPolicy config)
-        {
-            // Don't block. 
-            return false;
-        }
-
-        public override UnratedItem GetBlockUnratedType()
-        {
-            return UnratedItem.ChannelContent;
-        }
-
-        [IgnoreDataMember]
-        public override bool SupportsLocalMetadata
-        {
-            get
-            {
-                return false;
-            }
-        }
-
-        public override bool IsSaveLocalMetadataEnabled()
-        {
-            return false;
-        }
-
-        protected override string CreateUserDataKey()
-        {
-            return ExternalId;
-        }
-
-        public override async Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query)
-        {
-            try
-            {
-                // Don't blow up here because it could cause parent screens with other content to fail
-                return await ChannelManager.GetChannelItemsInternal(new ChannelItemQuery
-                {
-                    ChannelId = ChannelId,
-                    FolderId = Id.ToString("N"),
-                    Limit = query.Limit,
-                    StartIndex = query.StartIndex,
-                    UserId = query.User.Id.ToString("N"),
-                    SortBy = query.SortBy,
-                    SortOrder = query.SortOrder
-
-                }, new Progress<double>(), CancellationToken.None);
-            }
-            catch
-            {
-                // Already logged at lower levels
-                return new QueryResult<BaseItem>
-                {
-
-                };
-            }
-        }
-
-        protected override string GetInternalMetadataPath(string basePath)
-        {
-            return System.IO.Path.Combine(basePath, "channels", ChannelId, Id.ToString("N"));
-        }
-
-        public override bool CanDelete()
-        {
-            return false;
-        }
-
-        public override bool IsVisibleStandalone(User user)
-        {
-            return IsVisibleStandaloneInternal(user, false) && ChannelVideoItem.IsChannelVisible(this, user);
-        }
-    }
-}

+ 7 - 0
MediaBrowser.Controller/Channels/ChannelVideoItem.cs

@@ -47,6 +47,13 @@ namespace MediaBrowser.Controller.Channels
             return UnratedItem.ChannelContent;
         }
 
+        [IgnoreDataMember]
+        public override SourceType SourceType
+        {
+            get { return SourceType.Channel; }
+            set { }
+        }
+
         [IgnoreDataMember]
         public override bool SupportsLocalMetadata
         {

+ 38 - 1
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -170,7 +170,7 @@ namespace MediaBrowser.Controller.Entities
         public bool IsOffline { get; set; }
 
         [IgnoreDataMember]
-        public SourceType SourceType { get; set; }
+        public virtual SourceType SourceType { get; set; }
 
         /// <summary>
         /// Returns the folder containing the item.
@@ -258,6 +258,11 @@ namespace MediaBrowser.Controller.Entities
         {
             get
             {
+                if (SourceType == SourceType.Channel)
+                {
+                    return false;
+                }
+
                 var locationType = LocationType;
 
                 return locationType != LocationType.Remote && locationType != LocationType.Virtual;
@@ -304,6 +309,11 @@ namespace MediaBrowser.Controller.Entities
 
         public virtual bool CanDelete()
         {
+            if (SourceType == SourceType.Channel)
+            {
+                return false;
+            }
+
             var locationType = LocationType;
             return locationType != LocationType.Remote &&
                    locationType != LocationType.Virtual;
@@ -463,6 +473,11 @@ namespace MediaBrowser.Controller.Entities
 
         protected virtual string GetInternalMetadataPath(string basePath)
         {
+            if (SourceType == SourceType.Channel)
+            {
+                return System.IO.Path.Combine(basePath, "channels", ChannelId, Id.ToString("N"));
+            }
+            
             var idString = Id.ToString("N");
 
             basePath = System.IO.Path.Combine(basePath, "library");
@@ -1035,6 +1050,13 @@ namespace MediaBrowser.Controller.Entities
 
         protected virtual string CreateUserDataKey()
         {
+            if (SourceType == SourceType.Channel)
+            {
+                if (!string.IsNullOrWhiteSpace(ExternalId))
+                {
+                    return ExternalId;
+                }
+            }
             return Id.ToString();
         }
 
@@ -1113,6 +1135,11 @@ namespace MediaBrowser.Controller.Entities
 
         public virtual bool IsSaveLocalMetadataEnabled()
         {
+            if (SourceType == SourceType.Channel)
+            {
+                return false;
+            }
+            
             return ConfigurationManager.Configuration.SaveLocalMeta;
         }
 
@@ -1228,6 +1255,11 @@ namespace MediaBrowser.Controller.Entities
 
         public virtual UnratedItem GetBlockUnratedType()
         {
+            if (SourceType == SourceType.Channel)
+            {
+                return UnratedItem.ChannelContent;
+            }
+
             return UnratedItem.Other;
         }
 
@@ -1271,6 +1303,11 @@ namespace MediaBrowser.Controller.Entities
 
         public virtual bool IsVisibleStandalone(User user)
         {
+            if (SourceType == SourceType.Channel)
+            {
+                return IsVisibleStandaloneInternal(user, false) && ChannelVideoItem.IsChannelVisible(this, user);
+            }
+
             return IsVisibleStandaloneInternal(user, true);
         }
 

+ 30 - 2
MediaBrowser.Controller/Entities/Folder.cs

@@ -15,6 +15,7 @@ using System.Threading;
 using System.Threading.Tasks;
 using CommonIO;
 using MediaBrowser.Common.IO;
+using MediaBrowser.Model.Channels;
 
 namespace MediaBrowser.Controller.Entities
 {
@@ -794,8 +795,35 @@ namespace MediaBrowser.Controller.Entities
             return item;
         }
 
-        public virtual Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query)
+        public virtual async Task<QueryResult<BaseItem>> GetItems(InternalItemsQuery query)
         {
+            if (SourceType == SourceType.Channel)
+            {
+                try
+                {
+                    // Don't blow up here because it could cause parent screens with other content to fail
+                    return await ChannelManager.GetChannelItemsInternal(new ChannelItemQuery
+                    {
+                        ChannelId = ChannelId,
+                        FolderId = Id.ToString("N"),
+                        Limit = query.Limit,
+                        StartIndex = query.StartIndex,
+                        UserId = query.User.Id.ToString("N"),
+                        SortBy = query.SortBy,
+                        SortOrder = query.SortOrder
+
+                    }, new Progress<double>(), CancellationToken.None);
+                }
+                catch
+                {
+                    // Already logged at lower levels
+                    return new QueryResult<BaseItem>
+                    {
+
+                    };
+                }
+            }
+            
             var user = query.User;
 
             Func<BaseItem, bool> filter = i => UserViewBuilder.Filter(i, user, query, UserDataManager, LibraryManager);
@@ -817,7 +845,7 @@ namespace MediaBrowser.Controller.Entities
 
             var result = PostFilterAndSort(items, query);
 
-            return Task.FromResult(result);
+            return result;
         }
 
         protected QueryResult<BaseItem> PostFilterAndSort(IEnumerable<BaseItem> items, InternalItemsQuery query)

+ 2 - 0
MediaBrowser.Controller/Entities/InternalItemsQuery.cs

@@ -115,6 +115,7 @@ namespace MediaBrowser.Controller.Entities
 
         public LocationType[] ExcludeLocationTypes { get; set; }
         public string[] PresetViews { get; set; }
+        public SourceType[] SourceTypes { get; set; }
 
         public InternalItemsQuery()
         {
@@ -141,6 +142,7 @@ namespace MediaBrowser.Controller.Entities
             ExcludeTags = new string[] { };
             ExcludeLocationTypes = new LocationType[] { };
             PresetViews = new string[] { };
+            SourceTypes = new SourceType[] { };
         }
 
         public InternalItemsQuery(User user)

+ 7 - 0
MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs

@@ -39,6 +39,13 @@ namespace MediaBrowser.Controller.LiveTv
         [IgnoreDataMember]
         public bool IsPremiere { get; set; }
 
+        [IgnoreDataMember]
+        public override SourceType SourceType
+        {
+            get { return SourceType.LiveTV; }
+            set { }
+        }
+
         /// <summary>
         /// Gets the user data key.
         /// </summary>

+ 7 - 0
MediaBrowser.Controller/LiveTv/LiveTvChannel.cs

@@ -40,6 +40,13 @@ namespace MediaBrowser.Controller.LiveTv
             }
         }
 
+        [IgnoreDataMember]
+        public override SourceType SourceType
+        {
+            get { return SourceType.LiveTV; }
+            set { }
+        }
+
         /// <summary>
         /// Gets or sets the number.
         /// </summary>

+ 7 - 0
MediaBrowser.Controller/LiveTv/LiveTvProgram.cs

@@ -46,6 +46,13 @@ namespace MediaBrowser.Controller.LiveTv
         [IgnoreDataMember]
         public string ServiceName { get; set; }
 
+        [IgnoreDataMember]
+        public override SourceType SourceType
+        {
+            get { return SourceType.LiveTV; }
+            set { }
+        }
+
         /// <summary>
         /// The start date of the program, in UTC.
         /// </summary>

+ 7 - 0
MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs

@@ -39,6 +39,13 @@ namespace MediaBrowser.Controller.LiveTv
         [IgnoreDataMember]
         public bool IsPremiere { get; set; }
 
+        [IgnoreDataMember]
+        public override SourceType SourceType
+        {
+            get { return SourceType.LiveTV; }
+            set { }
+        }
+
         /// <summary>
         /// Gets the user data key.
         /// </summary>

+ 9 - 1
MediaBrowser.Controller/LiveTv/RecordingGroup.cs

@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.Entities;
+using System.Runtime.Serialization;
+using MediaBrowser.Controller.Entities;
 using MediaBrowser.Model.Configuration;
 using MediaBrowser.Model.Users;
 
@@ -24,5 +25,12 @@ namespace MediaBrowser.Controller.LiveTv
                 return false;
             }
         }
+
+        [IgnoreDataMember]
+        public override SourceType SourceType
+        {
+            get { return SourceType.LiveTV; }
+            set { }
+        }
     }
 }

+ 0 - 1
MediaBrowser.Controller/MediaBrowser.Controller.csproj

@@ -75,7 +75,6 @@
     </Compile>
     <Compile Include="Activity\IActivityManager.cs" />
     <Compile Include="Activity\IActivityRepository.cs" />
-    <Compile Include="Channels\ChannelFolderItem.cs" />
     <Compile Include="Channels\ChannelItemInfo.cs" />
     <Compile Include="Channels\ChannelItemResult.cs" />
     <Compile Include="Channels\ChannelItemType.cs" />

+ 19 - 1
MediaBrowser.Server.Implementations/Channels/ChannelManager.cs

@@ -26,6 +26,7 @@ using System.Net;
 using System.Threading;
 using System.Threading.Tasks;
 using CommonIO;
+using MediaBrowser.Controller.Entities.Audio;
 
 namespace MediaBrowser.Server.Implementations.Channels
 {
@@ -1243,7 +1244,18 @@ namespace MediaBrowser.Server.Implementations.Channels
 
             if (info.Type == ChannelItemType.Folder)
             {
-                item = GetItemById<ChannelFolderItem>(info.Id, channelProvider.Name, channelProvider.DataVersion, out isNew);
+                if (info.FolderType == ChannelFolderType.MusicAlbum)
+                {
+                    item = GetItemById<MusicAlbum>(info.Id, channelProvider.Name, channelProvider.DataVersion, out isNew);
+                }
+                else if (info.FolderType == ChannelFolderType.PhotoAlbum)
+                {
+                    item = GetItemById<PhotoAlbum>(info.Id, channelProvider.Name, channelProvider.DataVersion, out isNew);
+                }
+                else
+                {
+                    item = GetItemById<Folder>(info.Id, channelProvider.Name, channelProvider.DataVersion, out isNew);
+                }
             }
             else if (info.MediaType == ChannelMediaType.Audio)
             {
@@ -1314,6 +1326,12 @@ namespace MediaBrowser.Server.Implementations.Channels
                 item.SetImagePath(ImageType.Primary, info.ImageUrl);
             }
 
+            if (item.SourceType != SourceType.Channel)
+            {
+                item.SourceType = SourceType.Channel;
+                forceUpdate = true;
+            }
+
             if (isNew)
             {
                 await _libraryManager.CreateItem(item, cancellationToken).ConfigureAwait(false);

+ 6 - 2
MediaBrowser.Server.Implementations/Dto/DtoService.cs

@@ -1534,9 +1534,13 @@ namespace MediaBrowser.Server.Implementations.Dto
 
             dto.ChannelId = item.ChannelId;
 
-            if (item.SourceType == SourceType.Channel)
+            if (item.SourceType == SourceType.Channel && !string.IsNullOrWhiteSpace(item.ChannelId))
             {
-                dto.ChannelName = _channelManagerFactory().GetChannel(item.ChannelId).Name;
+                var channel = _libraryManager.GetItemById(item.ChannelId);
+                if (channel != null)
+                {
+                    dto.ChannelName = channel.Name;
+                }
             }
         }
 

+ 8 - 3
MediaBrowser.Server.Implementations/Library/UserViewManager.cs

@@ -80,7 +80,7 @@ namespace MediaBrowser.Server.Implementations.Library
                     list.Add(folder);
                     continue;
                 }
-                
+
                 if (collectionFolder != null && UserView.IsEligibleForGrouping(folder) && user.IsFolderGrouped(folder.Id))
                 {
                     groupedFolders.Add(collectionFolder);
@@ -272,7 +272,11 @@ namespace MediaBrowser.Server.Implementations.Library
                     .ToArray();
             }
 
-            var excludeItemTypes = includeItemTypes.Length == 0 ? new[] { "ChannelItem", "LiveTvItem", typeof(Person).Name, typeof(Studio).Name, typeof(Year).Name, typeof(GameGenre).Name, typeof(MusicGenre).Name, typeof(Genre).Name } : new string[] { };
+            var excludeItemTypes = includeItemTypes.Length == 0 ? new[]
+            {
+                typeof(Person).Name, typeof(Studio).Name, typeof(Year).Name, typeof(GameGenre).Name, typeof(MusicGenre).Name, typeof(Genre).Name
+
+            } : new string[] { };
 
             return _libraryManager.GetItems(new InternalItemsQuery(user)
             {
@@ -282,7 +286,8 @@ namespace MediaBrowser.Server.Implementations.Library
                 IsFolder = includeItemTypes.Length == 0 ? false : (bool?)null,
                 ExcludeItemTypes = excludeItemTypes,
                 ExcludeLocationTypes = new[] { LocationType.Virtual },
-                Limit = limit * 20
+                Limit = limit * 20,
+                SourceTypes = new[] { SourceType.Library }
 
             }, parentIds);
         }

+ 23 - 4
MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs

@@ -223,6 +223,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
             _connection.AddColumn(Logger, "TypedBaseItems", "UnratedType", "Text");
             _connection.AddColumn(Logger, "TypedBaseItems", "TopParentId", "Text");
             _connection.AddColumn(Logger, "TypedBaseItems", "IsItemByName", "BIT");
+            _connection.AddColumn(Logger, "TypedBaseItems", "SourceType", "Text");
 
             PrepareStatements();
 
@@ -353,7 +354,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
             "DateLastSaved",
             "LockedFields",
             "Studios",
-            "Tags"
+            "Tags",
+            "SourceType"
         };
 
         private readonly string[] _mediaStreamSaveColumns =
@@ -453,7 +455,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
                 "IsFolder",
                 "UnratedType",
                 "TopParentId",
-                "IsItemByName"
+                "IsItemByName",
+                "SourceType"
             };
             _saveItemCommand = _connection.CreateCommand();
             _saveItemCommand.CommandText = "replace into TypedBaseItems (" + string.Join(",", saveColumns.ToArray()) + ") values (";
@@ -747,6 +750,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
                     }
                     _saveItemCommand.GetParameter(index++).Value = isByName;
 
+                    _saveItemCommand.GetParameter(index++).Value = item.SourceType.ToString();
+                    
                     _saveItemCommand.Transaction = transaction;
 
                     _saveItemCommand.ExecuteNonQuery();
@@ -1109,6 +1114,11 @@ namespace MediaBrowser.Server.Implementations.Persistence
                 item.Tags = reader.GetString(48).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
             }
 
+            if (!reader.IsDBNull(49))
+            {
+                item.SourceType = (SourceType)Enum.Parse(typeof(SourceType), reader.GetString(49), true);
+            }
+
             return item;
         }
 
@@ -1871,6 +1881,17 @@ namespace MediaBrowser.Server.Implementations.Persistence
                 cmd.Parameters.Add(cmd, "@MaxStartDate", DbType.Date).Value = query.MaxStartDate.Value;
             }
 
+            if (query.SourceTypes.Length == 1)
+            {
+                whereClauses.Add("SourceType=@SourceType");
+                cmd.Parameters.Add(cmd, "@SourceType", DbType.String).Value = query.SourceTypes[0];
+            }
+            else if (query.SourceTypes.Length > 1)
+            {
+                var inClause = string.Join(",", query.SourceTypes.Select(i => "'" + i + "'").ToArray());
+                whereClauses.Add(string.Format("SourceType in ({0})", inClause));
+            }
+            
             if (query.IsAiring.HasValue)
             {
                 if (query.IsAiring.Value)
@@ -2152,8 +2173,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
                 dict[t.Name] = new[] { t.FullName };
             }
 
-            dict["ChannelItem"] = new[] { typeof(ChannelVideoItem).FullName, typeof(ChannelAudioItem).FullName, typeof(ChannelFolderItem).FullName };
-            dict["LiveTvItem"] = new[] { typeof(LiveTvAudioRecording).FullName, typeof(LiveTvVideoRecording).FullName, typeof(LiveTvChannel).FullName, typeof(LiveTvProgram).FullName };
             dict["Recording"] = new[] { typeof(LiveTvAudioRecording).FullName, typeof(LiveTvVideoRecording).FullName };
             dict["Program"] = new[] { typeof(LiveTvProgram).FullName };
             dict["TvChannel"] = new[] { typeof(LiveTvChannel).FullName };