diff --git a/Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs b/Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs
index e025417d13..2ea6789765 100644
--- a/Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs
+++ b/Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs
@@ -27,7 +27,6 @@ namespace Emby.Server.Implementations.Activity
{
///
/// The activity log entry point.
- /// .
///
public sealed class ActivityLogEntryPoint : IServerEntryPoint
{
diff --git a/Emby.Server.Implementations/Activity/ActivityManager.cs b/Emby.Server.Implementations/Activity/ActivityManager.cs
index 2d2dc8e61e..5c04c0e51a 100644
--- a/Emby.Server.Implementations/Activity/ActivityManager.cs
+++ b/Emby.Server.Implementations/Activity/ActivityManager.cs
@@ -6,7 +6,9 @@ using MediaBrowser.Model.Querying;
namespace Emby.Server.Implementations.Activity
{
- ///
+ ///
+ /// The activity log manager.
+ ///
public class ActivityManager : IActivityManager
{
///
diff --git a/Emby.Server.Implementations/Activity/ActivityRepository.cs b/Emby.Server.Implementations/Activity/ActivityRepository.cs
index 697ad7fcc0..3aa1f03976 100644
--- a/Emby.Server.Implementations/Activity/ActivityRepository.cs
+++ b/Emby.Server.Implementations/Activity/ActivityRepository.cs
@@ -13,7 +13,9 @@ using SQLitePCL.pretty;
namespace Emby.Server.Implementations.Activity
{
- ///
+ ///
+ /// The activity log repository.
+ ///
public class ActivityRepository : BaseSqliteRepository, IActivityRepository
{
private static readonly CultureInfo _usCulture = CultureInfo.ReadOnly(new CultureInfo("en-US"));
diff --git a/Emby.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs b/Emby.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs
index c677e9fbc3..3e149cc82c 100644
--- a/Emby.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs
+++ b/Emby.Server.Implementations/Channels/ChannelDynamicMediaSourceProvider.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Controller.Channels;
@@ -30,7 +31,7 @@ namespace Emby.Server.Implementations.Channels
{
return item.SourceType == SourceType.Channel
? _channelManager.GetDynamicMediaSources(item, cancellationToken)
- : Task.FromResult>(new List());
+ : Task.FromResult(Enumerable.Empty());
}
///
diff --git a/Emby.Server.Implementations/Channels/ChannelManager.cs b/Emby.Server.Implementations/Channels/ChannelManager.cs
index 6e1baddfed..8beb5866f1 100644
--- a/Emby.Server.Implementations/Channels/ChannelManager.cs
+++ b/Emby.Server.Implementations/Channels/ChannelManager.cs
@@ -1,5 +1,3 @@
-#pragma warning disable CS1591
-
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
@@ -29,6 +27,9 @@ using Microsoft.Extensions.Logging;
namespace Emby.Server.Implementations.Channels
{
+ ///
+ /// The LiveTV channel manager.
+ ///
public class ChannelManager : IChannelManager
{
internal IChannel[] Channels { get; private set; }
@@ -43,6 +44,18 @@ namespace Emby.Server.Implementations.Channels
private readonly IJsonSerializer _jsonSerializer;
private readonly IProviderManager _providerManager;
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The user manager.
+ /// The dto service.
+ /// The library manager.
+ /// The logger factory.
+ /// The server configuration manager.
+ /// The filesystem.
+ /// The user data manager.
+ /// The JSON serializer.
+ /// The provider manager.
public ChannelManager(
IUserManager userManager,
IDtoService dtoService,
@@ -67,11 +80,13 @@ namespace Emby.Server.Implementations.Channels
private static TimeSpan CacheLength => TimeSpan.FromHours(3);
+ ///
public void AddParts(IEnumerable channels)
{
Channels = channels.ToArray();
}
+ ///
public bool EnableMediaSourceDisplay(BaseItem item)
{
var internalChannel = _libraryManager.GetItemById(item.ChannelId);
@@ -80,15 +95,16 @@ namespace Emby.Server.Implementations.Channels
return !(channel is IDisableMediaSourceDisplay);
}
+ ///
public bool CanDelete(BaseItem item)
{
var internalChannel = _libraryManager.GetItemById(item.ChannelId);
var channel = Channels.FirstOrDefault(i => GetInternalChannelId(i.Name).Equals(internalChannel.Id));
- var supportsDelete = channel as ISupportsDelete;
- return supportsDelete != null && supportsDelete.CanDelete(item);
+ return channel is ISupportsDelete supportsDelete && supportsDelete.CanDelete(item);
}
+ ///
public bool EnableMediaProbe(BaseItem item)
{
var internalChannel = _libraryManager.GetItemById(item.ChannelId);
@@ -97,6 +113,7 @@ namespace Emby.Server.Implementations.Channels
return channel is ISupportsMediaProbe;
}
+ ///
public Task DeleteItem(BaseItem item)
{
var internalChannel = _libraryManager.GetItemById(item.ChannelId);
@@ -123,11 +140,16 @@ namespace Emby.Server.Implementations.Channels
.OrderBy(i => i.Name);
}
+ ///
+ /// Returns an containing installed channel ID's.
+ ///
+ /// An containing installed channel ID's.
public IEnumerable GetInstalledChannelIds()
{
return GetAllChannels().Select(i => GetInternalChannelId(i.Name));
}
+ ///
public QueryResult GetChannelsInternal(ChannelQuery query)
{
var user = query.UserId.Equals(Guid.Empty)
@@ -146,15 +168,13 @@ namespace Emby.Server.Implementations.Channels
{
try
{
- var hasAttributes = GetChannelProvider(i) as IHasFolderAttributes;
-
- return (hasAttributes != null && hasAttributes.Attributes.Contains("Recordings", StringComparer.OrdinalIgnoreCase)) == val;
+ return (GetChannelProvider(i) is IHasFolderAttributes hasAttributes
+ && hasAttributes.Attributes.Contains("Recordings", StringComparer.OrdinalIgnoreCase)) == val;
}
catch
{
return false;
}
-
}).ToList();
}
@@ -171,7 +191,6 @@ namespace Emby.Server.Implementations.Channels
{
return false;
}
-
}).ToList();
}
@@ -188,9 +207,9 @@ namespace Emby.Server.Implementations.Channels
{
return false;
}
-
}).ToList();
}
+
if (query.IsFavorite.HasValue)
{
var val = query.IsFavorite.Value;
@@ -215,7 +234,6 @@ namespace Emby.Server.Implementations.Channels
{
return false;
}
-
}).ToList();
}
@@ -226,6 +244,7 @@ namespace Emby.Server.Implementations.Channels
{
all = all.Skip(query.StartIndex.Value).ToList();
}
+
if (query.Limit.HasValue)
{
all = all.Take(query.Limit.Value).ToList();
@@ -248,6 +267,7 @@ namespace Emby.Server.Implementations.Channels
};
}
+ ///
public QueryResult GetChannels(ChannelQuery query)
{
var user = query.UserId.Equals(Guid.Empty)
@@ -272,6 +292,12 @@ namespace Emby.Server.Implementations.Channels
return result;
}
+ ///
+ /// Refreshes the associated channels.
+ ///
+ /// The progress.
+ /// The cancellation token.
+ /// The completed task.
public async Task RefreshChannels(IProgress progress, CancellationToken cancellationToken)
{
var allChannelsList = GetAllChannels().ToList();
@@ -305,14 +331,7 @@ namespace Emby.Server.Implementations.Channels
private Channel GetChannelEntity(IChannel channel)
{
- var item = GetChannel(GetInternalChannelId(channel.Name));
-
- if (item == null)
- {
- item = GetChannel(channel, CancellationToken.None).Result;
- }
-
- return item;
+ return GetChannel(GetInternalChannelId(channel.Name)) ?? GetChannel(channel, CancellationToken.None).Result;
}
private List GetSavedMediaSources(BaseItem item)
@@ -351,6 +370,7 @@ namespace Emby.Server.Implementations.Channels
_jsonSerializer.SerializeToFile(mediaSources, path);
}
+ ///
public IEnumerable GetStaticMediaSources(BaseItem item, CancellationToken cancellationToken)
{
IEnumerable results = GetSavedMediaSources(item);
@@ -360,6 +380,12 @@ namespace Emby.Server.Implementations.Channels
.ToList();
}
+ ///
+ /// Gets the dynamic media sources based on the provided item.
+ ///
+ /// The item.
+ /// The cancellation token.
+ /// The completed task.
public async Task> GetDynamicMediaSources(BaseItem item, CancellationToken cancellationToken)
{
var channel = GetChannel(item.ChannelId);
@@ -409,7 +435,7 @@ namespace Emby.Server.Implementations.Channels
private static MediaSourceInfo NormalizeMediaSource(BaseItem item, MediaSourceInfo info)
{
- info.RunTimeTicks = info.RunTimeTicks ?? item.RunTimeTicks;
+ info.RunTimeTicks ??= item.RunTimeTicks;
return info;
}
@@ -482,41 +508,43 @@ namespace Emby.Server.Implementations.Channels
private static string GetOfficialRating(ChannelParentalRating rating)
{
- switch (rating)
+ return rating switch
{
- case ChannelParentalRating.Adult:
- return "XXX";
- case ChannelParentalRating.UsR:
- return "R";
- case ChannelParentalRating.UsPG13:
- return "PG-13";
- case ChannelParentalRating.UsPG:
- return "PG";
- default:
- return null;
- }
+ ChannelParentalRating.Adult => "XXX",
+ ChannelParentalRating.UsR => "R",
+ ChannelParentalRating.UsPG13 => "PG-13",
+ ChannelParentalRating.UsPG => "PG",
+ _ => null
+ };
}
+ ///
+ /// Gets a channel with the provided Guid.
+ ///
+ /// The Guid.
+ /// The corresponding channel.
public Channel GetChannel(Guid id)
{
return _libraryManager.GetItemById(id) as Channel;
}
+ ///
public Channel GetChannel(string id)
{
return _libraryManager.GetItemById(id) as Channel;
}
+ ///
public ChannelFeatures[] GetAllChannelFeatures()
{
return _libraryManager.GetItemIds(new InternalItemsQuery
{
IncludeItemTypes = new[] { typeof(Channel).Name },
OrderBy = new[] { (ItemSortBy.SortName, SortOrder.Ascending) }
-
}).Select(i => GetChannelFeatures(i.ToString("N", CultureInfo.InvariantCulture))).ToArray();
}
+ ///
public ChannelFeatures GetChannelFeatures(string id)
{
if (string.IsNullOrEmpty(id))
@@ -530,6 +558,11 @@ namespace Emby.Server.Implementations.Channels
return GetChannelFeaturesDto(channel, channelProvider, channelProvider.GetChannelFeatures());
}
+ ///
+ /// Checks whether the provided Guid supports external transfer.
+ ///
+ /// The Guid.
+ /// Whether or not the provided Guid supports external transfer.
public bool SupportsExternalTransfer(Guid channelId)
{
//var channel = GetChannel(channelId);
@@ -538,6 +571,13 @@ namespace Emby.Server.Implementations.Channels
return channelProvider.GetChannelFeatures().SupportsContentDownloading;
}
+ ///
+ /// Gets the provided channel's supported features.
+ ///
+ /// The channel.
+ /// The provider.
+ /// The features.
+ /// The supported features.
public ChannelFeatures GetChannelFeaturesDto(Channel channel,
IChannel provider,
InternalChannelFeatures features)
@@ -570,6 +610,7 @@ namespace Emby.Server.Implementations.Channels
return _libraryManager.GetNewItemId("Channel " + name, typeof(Channel));
}
+ ///
public async Task> GetLatestChannelItems(InternalItemsQuery query, CancellationToken cancellationToken)
{
var internalResult = await GetLatestChannelItemsInternal(query, cancellationToken).ConfigureAwait(false);
@@ -588,6 +629,7 @@ namespace Emby.Server.Implementations.Channels
return result;
}
+ ///
public async Task> GetLatestChannelItemsInternal(InternalItemsQuery query, CancellationToken cancellationToken)
{
var channels = GetAllChannels().Where(i => i is ISupportsLatestMedia).ToArray();
@@ -662,6 +704,7 @@ namespace Emby.Server.Implementations.Channels
}
}
+ ///
public async Task> GetChannelItemsInternal(InternalItemsQuery query, IProgress progress, CancellationToken cancellationToken)
{
// Get the internal channel entity
@@ -711,7 +754,6 @@ namespace Emby.Server.Implementations.Channels
{
DeleteFileLocation = false,
DeleteFromExternalProvider = false
-
}, parentItem, false);
}
}
@@ -720,6 +762,7 @@ namespace Emby.Server.Implementations.Channels
return _libraryManager.GetItemsResult(query);
}
+ ///
public async Task> GetChannelItems(InternalItemsQuery query, CancellationToken cancellationToken)
{
var internalResult = await GetChannelItemsInternal(query, new SimpleProgress(), cancellationToken).ConfigureAwait(false);
@@ -743,7 +786,7 @@ namespace Emby.Server.Implementations.Channels
bool sortDescending,
CancellationToken cancellationToken)
{
- var userId = user == null ? null : user.Id.ToString("N", CultureInfo.InvariantCulture);
+ var userId = user?.Id.ToString("N", CultureInfo.InvariantCulture);
var cacheLength = CacheLength;
var cachePath = GetChannelDataCachePath(channel, userId, externalFolderId, sortField, sortDescending);
@@ -794,7 +837,7 @@ namespace Emby.Server.Implementations.Channels
var query = new InternalChannelItemQuery
{
- UserId = user == null ? Guid.Empty : user.Id,
+ UserId = user?.Id ?? Guid.Empty,
SortBy = sortField,
SortDescending = sortDescending,
FolderId = externalFolderId
@@ -843,8 +886,7 @@ namespace Emby.Server.Implementations.Channels
var userCacheKey = string.Empty;
- var hasCacheKey = channel as IHasCacheKey;
- if (hasCacheKey != null)
+ if (channel is IHasCacheKey hasCacheKey)
{
userCacheKey = hasCacheKey.GetCacheKey(userId) ?? string.Empty;
}
@@ -919,59 +961,55 @@ namespace Emby.Server.Implementations.Channels
if (info.Type == ChannelItemType.Folder)
{
- if (info.FolderType == ChannelFolderType.MusicAlbum)
+ switch (info.FolderType)
{
- item = GetItemById(info.Id, channelProvider.Name, out isNew);
- }
- else if (info.FolderType == ChannelFolderType.MusicArtist)
- {
- item = GetItemById(info.Id, channelProvider.Name, out isNew);
- }
- else if (info.FolderType == ChannelFolderType.PhotoAlbum)
- {
- item = GetItemById(info.Id, channelProvider.Name, out isNew);
- }
- else if (info.FolderType == ChannelFolderType.Series)
- {
- item = GetItemById(info.Id, channelProvider.Name, out isNew);
- }
- else if (info.FolderType == ChannelFolderType.Season)
- {
- item = GetItemById(info.Id, channelProvider.Name, out isNew);
- }
- else
- {
- item = GetItemById(info.Id, channelProvider.Name, out isNew);
+ case ChannelFolderType.MusicAlbum:
+ item = GetItemById(info.Id, channelProvider.Name, out isNew);
+ break;
+ case ChannelFolderType.MusicArtist:
+ item = GetItemById(info.Id, channelProvider.Name, out isNew);
+ break;
+ case ChannelFolderType.PhotoAlbum:
+ item = GetItemById(info.Id, channelProvider.Name, out isNew);
+ break;
+ case ChannelFolderType.Series:
+ item = GetItemById(info.Id, channelProvider.Name, out isNew);
+ break;
+ case ChannelFolderType.Season:
+ item = GetItemById(info.Id, channelProvider.Name, out isNew);
+ break;
+ default:
+ item = GetItemById(info.Id, channelProvider.Name, out isNew);
+ break;
}
}
else if (info.MediaType == ChannelMediaType.Audio)
{
- if (info.ContentType == ChannelMediaContentType.Podcast)
- {
- item = GetItemById(info.Id, channelProvider.Name, out isNew);
- }
- else
- {
- item = GetItemById