Seperate changes from #1023

The unrelated changes from #1023 (and more)
This commit is contained in:
Bond-009 2019-03-25 21:27:03 +01:00
parent 5024c52c60
commit 6566c91360
9 changed files with 72 additions and 108 deletions

View File

@ -3,12 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Common.Configuration;
using MediaBrowser.Common.Plugins; using MediaBrowser.Common.Plugins;
using MediaBrowser.Common.Updates; using MediaBrowser.Common.Updates;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Controller.Authentication; using MediaBrowser.Controller.Authentication;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Devices; using MediaBrowser.Controller.Devices;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
@ -29,31 +27,39 @@ namespace Emby.Server.Implementations.Activity
{ {
public class ActivityLogEntryPoint : IServerEntryPoint public class ActivityLogEntryPoint : IServerEntryPoint
{ {
private readonly ILogger _logger;
private readonly IInstallationManager _installationManager; private readonly IInstallationManager _installationManager;
private readonly ISessionManager _sessionManager; private readonly ISessionManager _sessionManager;
private readonly ITaskManager _taskManager; private readonly ITaskManager _taskManager;
private readonly IActivityManager _activityManager; private readonly IActivityManager _activityManager;
private readonly ILocalizationManager _localization; private readonly ILocalizationManager _localization;
private readonly ILibraryManager _libraryManager;
private readonly ISubtitleManager _subManager; private readonly ISubtitleManager _subManager;
private readonly IUserManager _userManager; private readonly IUserManager _userManager;
private readonly IServerConfigurationManager _config;
private readonly IServerApplicationHost _appHost; private readonly IServerApplicationHost _appHost;
private readonly IDeviceManager _deviceManager; private readonly IDeviceManager _deviceManager;
public ActivityLogEntryPoint(ISessionManager sessionManager, IDeviceManager deviceManager, ITaskManager taskManager, IActivityManager activityManager, ILocalizationManager localization, IInstallationManager installationManager, ILibraryManager libraryManager, ISubtitleManager subManager, IUserManager userManager, IServerConfigurationManager config, IServerApplicationHost appHost) public ActivityLogEntryPoint(
ILogger<ActivityLogEntryPoint> logger,
ISessionManager sessionManager,
IDeviceManager deviceManager,
ITaskManager taskManager,
IActivityManager activityManager,
ILocalizationManager localization,
IInstallationManager installationManager,
ISubtitleManager subManager,
IUserManager userManager,
IServerApplicationHost appHost)
{ {
_logger = logger;
_sessionManager = sessionManager; _sessionManager = sessionManager;
_deviceManager = deviceManager;
_taskManager = taskManager; _taskManager = taskManager;
_activityManager = activityManager; _activityManager = activityManager;
_localization = localization; _localization = localization;
_installationManager = installationManager; _installationManager = installationManager;
_libraryManager = libraryManager;
_subManager = subManager; _subManager = subManager;
_userManager = userManager; _userManager = userManager;
_config = config;
_appHost = appHost; _appHost = appHost;
_deviceManager = deviceManager;
} }
public Task RunAsync() public Task RunAsync()
@ -124,7 +130,7 @@ namespace Emby.Server.Implementations.Activity
if (item == null) if (item == null)
{ {
//_logger.LogWarning("PlaybackStopped reported with null media info."); _logger.LogWarning("PlaybackStopped reported with null media info.");
return; return;
} }
@ -155,7 +161,7 @@ namespace Emby.Server.Implementations.Activity
if (item == null) if (item == null)
{ {
//_logger.LogWarning("PlaybackStart reported with null media info."); _logger.LogWarning("PlaybackStart reported with null media info.");
return; return;
} }
@ -203,6 +209,7 @@ namespace Emby.Server.Implementations.Activity
{ {
return NotificationType.AudioPlayback.ToString(); return NotificationType.AudioPlayback.ToString();
} }
if (string.Equals(mediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase)) if (string.Equals(mediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase))
{ {
return NotificationType.VideoPlayback.ToString(); return NotificationType.VideoPlayback.ToString();
@ -217,6 +224,7 @@ namespace Emby.Server.Implementations.Activity
{ {
return NotificationType.AudioPlaybackStopped.ToString(); return NotificationType.AudioPlaybackStopped.ToString();
} }
if (string.Equals(mediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase)) if (string.Equals(mediaType, MediaType.Video, StringComparison.OrdinalIgnoreCase))
{ {
return NotificationType.VideoPlaybackStopped.ToString(); return NotificationType.VideoPlaybackStopped.ToString();
@ -415,6 +423,7 @@ namespace Emby.Server.Implementations.Activity
{ {
vals.Add(e.Result.ErrorMessage); vals.Add(e.Result.ErrorMessage);
} }
if (!string.IsNullOrEmpty(e.Result.LongErrorMessage)) if (!string.IsNullOrEmpty(e.Result.LongErrorMessage))
{ {
vals.Add(e.Result.LongErrorMessage); vals.Add(e.Result.LongErrorMessage);
@ -424,7 +433,7 @@ namespace Emby.Server.Implementations.Activity
{ {
Name = string.Format(_localization.GetLocalizedString("ScheduledTaskFailedWithName"), task.Name), Name = string.Format(_localization.GetLocalizedString("ScheduledTaskFailedWithName"), task.Name),
Type = NotificationType.TaskFailed.ToString(), Type = NotificationType.TaskFailed.ToString(),
Overview = string.Join(Environment.NewLine, vals.ToArray()), Overview = string.Join(Environment.NewLine, vals),
ShortOverview = runningTime, ShortOverview = runningTime,
Severity = LogLevel.Error Severity = LogLevel.Error
}); });
@ -503,6 +512,7 @@ namespace Emby.Server.Implementations.Activity
{ {
values.Add(CreateValueString(span.Hours, "hour")); values.Add(CreateValueString(span.Hours, "hour"));
} }
// Number of minutes // Number of minutes
if (span.Minutes >= 1) if (span.Minutes >= 1)
{ {
@ -526,6 +536,7 @@ namespace Emby.Server.Implementations.Activity
builder.Append(values[i]); builder.Append(values[i]);
} }
// Return result // Return result
return builder.ToString(); return builder.ToString();
} }

View File

@ -831,10 +831,10 @@ namespace Emby.Server.Implementations
DtoService = new DtoService(LoggerFactory, LibraryManager, UserDataManager, ItemRepository, ImageProcessor, ProviderManager, this, () => MediaSourceManager, () => LiveTvManager); DtoService = new DtoService(LoggerFactory, LibraryManager, UserDataManager, ItemRepository, ImageProcessor, ProviderManager, this, () => MediaSourceManager, () => LiveTvManager);
serviceCollection.AddSingleton(DtoService); serviceCollection.AddSingleton(DtoService);
ChannelManager = new ChannelManager(UserManager, DtoService, LibraryManager, LoggerFactory, ServerConfigurationManager, FileSystemManager, UserDataManager, JsonSerializer, LocalizationManager, HttpClient, ProviderManager); ChannelManager = new ChannelManager(UserManager, DtoService, LibraryManager, LoggerFactory, ServerConfigurationManager, FileSystemManager, UserDataManager, JsonSerializer, ProviderManager);
serviceCollection.AddSingleton(ChannelManager); serviceCollection.AddSingleton(ChannelManager);
SessionManager = new SessionManager(UserDataManager, LoggerFactory, LibraryManager, UserManager, musicManager, DtoService, ImageProcessor, JsonSerializer, this, HttpClient, AuthenticationRepository, DeviceManager, MediaSourceManager); SessionManager = new SessionManager(UserDataManager, LoggerFactory, LibraryManager, UserManager, musicManager, DtoService, ImageProcessor, this, AuthenticationRepository, DeviceManager, MediaSourceManager);
serviceCollection.AddSingleton(SessionManager); serviceCollection.AddSingleton(SessionManager);
serviceCollection.AddSingleton<IDlnaManager>( serviceCollection.AddSingleton<IDlnaManager>(
@ -1035,7 +1035,6 @@ namespace Emby.Server.Implementations
Video.LiveTvManager = LiveTvManager; Video.LiveTvManager = LiveTvManager;
Folder.UserViewManager = UserViewManager; Folder.UserViewManager = UserViewManager;
UserView.TVSeriesManager = TVSeriesManager; UserView.TVSeriesManager = TVSeriesManager;
UserView.PlaylistManager = PlaylistManager;
UserView.CollectionManager = CollectionManager; UserView.CollectionManager = CollectionManager;
BaseItem.MediaSourceManager = MediaSourceManager; BaseItem.MediaSourceManager = MediaSourceManager;
CollectionFolder.XmlSerializer = XmlSerializer; CollectionFolder.XmlSerializer = XmlSerializer;

View File

@ -6,7 +6,6 @@ using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Net;
using MediaBrowser.Common.Progress; using MediaBrowser.Common.Progress;
using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Configuration;
@ -20,7 +19,6 @@ using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Channels; using MediaBrowser.Model.Channels;
using MediaBrowser.Model.Dto; using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Globalization;
using MediaBrowser.Model.IO; using MediaBrowser.Model.IO;
using MediaBrowser.Model.Querying; using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
@ -40,11 +38,8 @@ namespace Emby.Server.Implementations.Channels
private readonly IServerConfigurationManager _config; private readonly IServerConfigurationManager _config;
private readonly IFileSystem _fileSystem; private readonly IFileSystem _fileSystem;
private readonly IJsonSerializer _jsonSerializer; private readonly IJsonSerializer _jsonSerializer;
private readonly IHttpClient _httpClient;
private readonly IProviderManager _providerManager; private readonly IProviderManager _providerManager;
private readonly ILocalizationManager _localization;
public ChannelManager( public ChannelManager(
IUserManager userManager, IUserManager userManager,
IDtoService dtoService, IDtoService dtoService,
@ -54,8 +49,6 @@ namespace Emby.Server.Implementations.Channels
IFileSystem fileSystem, IFileSystem fileSystem,
IUserDataManager userDataManager, IUserDataManager userDataManager,
IJsonSerializer jsonSerializer, IJsonSerializer jsonSerializer,
ILocalizationManager localization,
IHttpClient httpClient,
IProviderManager providerManager) IProviderManager providerManager)
{ {
_userManager = userManager; _userManager = userManager;
@ -66,8 +59,6 @@ namespace Emby.Server.Implementations.Channels
_fileSystem = fileSystem; _fileSystem = fileSystem;
_userDataManager = userDataManager; _userDataManager = userDataManager;
_jsonSerializer = jsonSerializer; _jsonSerializer = jsonSerializer;
_localization = localization;
_httpClient = httpClient;
_providerManager = providerManager; _providerManager = providerManager;
} }

View File

@ -89,14 +89,11 @@ namespace Emby.Server.Implementations.Dto
var channelTuples = new List<Tuple<BaseItemDto, LiveTvChannel>>(); var channelTuples = new List<Tuple<BaseItemDto, LiveTvChannel>>();
var index = 0; var index = 0;
var allCollectionFolders = _libraryManager.GetUserRootFolder().Children.OfType<Folder>().ToList();
foreach (var item in items) foreach (var item in items)
{ {
var dto = GetBaseItemDtoInternal(item, options, allCollectionFolders, user, owner); var dto = GetBaseItemDtoInternal(item, options, user, owner);
var tvChannel = item as LiveTvChannel; if (item is LiveTvChannel tvChannel)
if (tvChannel != null)
{ {
channelTuples.Add(new Tuple<BaseItemDto, LiveTvChannel>(dto, tvChannel)); channelTuples.Add(new Tuple<BaseItemDto, LiveTvChannel>(dto, tvChannel));
} }
@ -105,9 +102,7 @@ namespace Emby.Server.Implementations.Dto
programTuples.Add(new Tuple<BaseItem, BaseItemDto>(item, dto)); programTuples.Add(new Tuple<BaseItem, BaseItemDto>(item, dto));
} }
var byName = item as IItemByName; if (item is IItemByName byName)
if (byName != null)
{ {
if (options.ContainsField(ItemFields.ItemCounts)) if (options.ContainsField(ItemFields.ItemCounts))
{ {
@ -130,8 +125,7 @@ namespace Emby.Server.Implementations.Dto
if (programTuples.Count > 0) if (programTuples.Count > 0)
{ {
var task = _livetvManager().AddInfoToProgramDto(programTuples, options.Fields, user); _livetvManager().AddInfoToProgramDto(programTuples, options.Fields, user).GetAwaiter().GetResult();
Task.WaitAll(task);
} }
if (channelTuples.Count > 0) if (channelTuples.Count > 0)
@ -144,8 +138,7 @@ namespace Emby.Server.Implementations.Dto
public BaseItemDto GetBaseItemDto(BaseItem item, DtoOptions options, User user = null, BaseItem owner = null) public BaseItemDto GetBaseItemDto(BaseItem item, DtoOptions options, User user = null, BaseItem owner = null)
{ {
var allCollectionFolders = _libraryManager.GetUserRootFolder().Children.OfType<Folder>().ToList(); var dto = GetBaseItemDtoInternal(item, options, user, owner);
var dto = GetBaseItemDtoInternal(item, options, allCollectionFolders, user, owner);
var tvChannel = item as LiveTvChannel; var tvChannel = item as LiveTvChannel;
if (tvChannel != null) if (tvChannel != null)
{ {
@ -188,7 +181,7 @@ namespace Emby.Server.Implementations.Dto
}); });
} }
private BaseItemDto GetBaseItemDtoInternal(BaseItem item, DtoOptions options, List<Folder> allCollectionFolders, User user = null, BaseItem owner = null) private BaseItemDto GetBaseItemDtoInternal(BaseItem item, DtoOptions options, User user = null, BaseItem owner = null)
{ {
var dto = new BaseItemDto var dto = new BaseItemDto
{ {
@ -312,6 +305,7 @@ namespace Emby.Server.Implementations.Dto
{ {
path = path.TrimStart('.'); path = path.TrimStart('.');
} }
if (!string.IsNullOrEmpty(path) && containers.Contains(path, StringComparer.OrdinalIgnoreCase)) if (!string.IsNullOrEmpty(path) && containers.Contains(path, StringComparer.OrdinalIgnoreCase))
{ {
fileExtensionContainer = path; fileExtensionContainer = path;
@ -325,8 +319,7 @@ namespace Emby.Server.Implementations.Dto
public BaseItemDto GetItemByNameDto(BaseItem item, DtoOptions options, List<BaseItem> taggedItems, User user = null) public BaseItemDto GetItemByNameDto(BaseItem item, DtoOptions options, List<BaseItem> taggedItems, User user = null)
{ {
var allCollectionFolders = _libraryManager.GetUserRootFolder().Children.OfType<Folder>().ToList(); var dto = GetBaseItemDtoInternal(item, options, user);
var dto = GetBaseItemDtoInternal(item, options, allCollectionFolders, user);
if (taggedItems != null && options.ContainsField(ItemFields.ItemCounts)) if (taggedItems != null && options.ContainsField(ItemFields.ItemCounts))
{ {
@ -1051,14 +1044,15 @@ namespace Emby.Server.Implementations.Dto
} }
else else
{ {
mediaStreams = dto.MediaSources.Where(i => string.Equals(i.Id, item.Id.ToString("N"), StringComparison.OrdinalIgnoreCase)) string id = item.Id.ToString("N");
mediaStreams = dto.MediaSources.Where(i => string.Equals(i.Id, id, StringComparison.OrdinalIgnoreCase))
.SelectMany(i => i.MediaStreams) .SelectMany(i => i.MediaStreams)
.ToArray(); .ToArray();
} }
} }
else else
{ {
mediaStreams = _mediaSourceManager().GetStaticMediaSources(item, true).First().MediaStreams.ToArray(); mediaStreams = _mediaSourceManager().GetStaticMediaSources(item, true)[0].MediaStreams.ToArray();
} }
dto.MediaStreams = mediaStreams; dto.MediaStreams = mediaStreams;

View File

@ -15,13 +15,9 @@ namespace Emby.Server.Implementations.Security
{ {
public class AuthenticationRepository : BaseSqliteRepository, IAuthenticationRepository public class AuthenticationRepository : BaseSqliteRepository, IAuthenticationRepository
{ {
private readonly IServerConfigurationManager _config;
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
public AuthenticationRepository(ILoggerFactory loggerFactory, IServerConfigurationManager config) public AuthenticationRepository(ILoggerFactory loggerFactory, IServerConfigurationManager config)
: base(loggerFactory.CreateLogger(nameof(AuthenticationRepository))) : base(loggerFactory.CreateLogger(nameof(AuthenticationRepository)))
{ {
_config = config;
DbFilePath = Path.Combine(config.ApplicationPaths.DataPath, "authentication.db"); DbFilePath = Path.Combine(config.ApplicationPaths.DataPath, "authentication.db");
} }

View File

@ -48,7 +48,7 @@ namespace Emby.Server.Implementations.Services
foreach (var propertyInfo in RestPath.GetSerializableProperties(type)) foreach (var propertyInfo in RestPath.GetSerializableProperties(type))
{ {
var propertySetFn = TypeAccessor.GetSetPropertyMethod(type, propertyInfo); var propertySetFn = TypeAccessor.GetSetPropertyMethod(propertyInfo);
var propertyType = propertyInfo.PropertyType; var propertyType = propertyInfo.PropertyType;
var propertyParseStringFn = GetParseFn(propertyType); var propertyParseStringFn = GetParseFn(propertyType);
var propertySerializer = new PropertySerializerEntry(propertySetFn, propertyParseStringFn, propertyType); var propertySerializer = new PropertySerializerEntry(propertySetFn, propertyParseStringFn, propertyType);
@ -110,9 +110,9 @@ namespace Emby.Server.Implementations.Services
} }
} }
internal class TypeAccessor internal static class TypeAccessor
{ {
public static Action<object, object> GetSetPropertyMethod(Type type, PropertyInfo propertyInfo) public static Action<object, object> GetSetPropertyMethod(PropertyInfo propertyInfo)
{ {
if (!propertyInfo.CanWrite || propertyInfo.GetIndexParameters().Length > 0) if (!propertyInfo.CanWrite || propertyInfo.GetIndexParameters().Length > 0)
{ {

View File

@ -7,7 +7,6 @@ using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Common.Events; using MediaBrowser.Common.Events;
using MediaBrowser.Common.Extensions; using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller; using MediaBrowser.Controller;
using MediaBrowser.Controller.Authentication; using MediaBrowser.Controller.Authentication;
using MediaBrowser.Controller.Devices; using MediaBrowser.Controller.Devices;
@ -25,7 +24,6 @@ using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Events; using MediaBrowser.Model.Events;
using MediaBrowser.Model.Library; using MediaBrowser.Model.Library;
using MediaBrowser.Model.Querying; using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Session; using MediaBrowser.Model.Session;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@ -53,8 +51,6 @@ namespace Emby.Server.Implementations.Session
private readonly IImageProcessor _imageProcessor; private readonly IImageProcessor _imageProcessor;
private readonly IMediaSourceManager _mediaSourceManager; private readonly IMediaSourceManager _mediaSourceManager;
private readonly IHttpClient _httpClient;
private readonly IJsonSerializer _jsonSerializer;
private readonly IServerApplicationHost _appHost; private readonly IServerApplicationHost _appHost;
private readonly IAuthenticationRepository _authRepo; private readonly IAuthenticationRepository _authRepo;
@ -96,9 +92,7 @@ namespace Emby.Server.Implementations.Session
IMusicManager musicManager, IMusicManager musicManager,
IDtoService dtoService, IDtoService dtoService,
IImageProcessor imageProcessor, IImageProcessor imageProcessor,
IJsonSerializer jsonSerializer,
IServerApplicationHost appHost, IServerApplicationHost appHost,
IHttpClient httpClient,
IAuthenticationRepository authRepo, IAuthenticationRepository authRepo,
IDeviceManager deviceManager, IDeviceManager deviceManager,
IMediaSourceManager mediaSourceManager) IMediaSourceManager mediaSourceManager)
@ -110,9 +104,7 @@ namespace Emby.Server.Implementations.Session
_musicManager = musicManager; _musicManager = musicManager;
_dtoService = dtoService; _dtoService = dtoService;
_imageProcessor = imageProcessor; _imageProcessor = imageProcessor;
_jsonSerializer = jsonSerializer;
_appHost = appHost; _appHost = appHost;
_httpClient = httpClient;
_authRepo = authRepo; _authRepo = authRepo;
_deviceManager = deviceManager; _deviceManager = deviceManager;
_mediaSourceManager = mediaSourceManager; _mediaSourceManager = mediaSourceManager;
@ -347,8 +339,7 @@ namespace Emby.Server.Implementations.Session
var runtimeTicks = libraryItem.RunTimeTicks; var runtimeTicks = libraryItem.RunTimeTicks;
MediaSourceInfo mediaSource = null; MediaSourceInfo mediaSource = null;
var hasMediaSources = libraryItem as IHasMediaSources; if (libraryItem is IHasMediaSources hasMediaSources)
if (hasMediaSources != null)
{ {
mediaSource = await GetMediaSource(libraryItem, info.MediaSourceId, info.LiveStreamId).ConfigureAwait(false); mediaSource = await GetMediaSource(libraryItem, info.MediaSourceId, info.LiveStreamId).ConfigureAwait(false);
@ -1841,64 +1832,49 @@ namespace Emby.Server.Implementations.Session
var data = dataFn(); var data = dataFn();
var tasks = sessions.Select(session => Task.Run(async () => IEnumerable<Task> GetTasks()
{ {
try foreach (var session in sessions)
{ {
await SendMessageToSession(session, name, data, cancellationToken).ConfigureAwait(false); yield return SendMessageToSession(session, name, data, cancellationToken);
}
catch (Exception ex)
{
_logger.LogError("Error sending message", ex);
} }
}
}, cancellationToken)).ToArray(); return Task.WhenAll(GetTasks());
return Task.WhenAll(tasks);
} }
public Task SendMessageToUserSessions<T>(List<Guid> userIds, string name, T data, CancellationToken cancellationToken) public Task SendMessageToUserSessions<T>(List<Guid> userIds, string name, T data, CancellationToken cancellationToken)
{ {
CheckDisposed(); CheckDisposed();
var sessions = Sessions.Where(i => userIds.Any(i.ContainsUser)).ToList(); var sessions = Sessions.Where(i => userIds.Any(i.ContainsUser));
var tasks = sessions.Select(session => Task.Run(async () => IEnumerable<Task> GetTasks()
{ {
try foreach (var session in sessions)
{ {
await SendMessageToSession(session, name, data, cancellationToken).ConfigureAwait(false); yield return SendMessageToSession(session, name, data, cancellationToken);
}
catch (Exception ex)
{
_logger.LogError("Error sending message", ex);
} }
}
}, cancellationToken)).ToArray(); return Task.WhenAll(GetTasks());
return Task.WhenAll(tasks);
} }
public Task SendMessageToUserDeviceSessions<T>(string deviceId, string name, T data, CancellationToken cancellationToken) public Task SendMessageToUserDeviceSessions<T>(string deviceId, string name, T data, CancellationToken cancellationToken)
{ {
CheckDisposed(); CheckDisposed();
var sessions = Sessions.Where(i => string.Equals(i.DeviceId, deviceId, StringComparison.OrdinalIgnoreCase)).ToList(); var sessions = Sessions.Where(i => string.Equals(i.DeviceId, deviceId, StringComparison.OrdinalIgnoreCase));
var tasks = sessions.Select(session => Task.Run(async () => IEnumerable<Task> GetTasks()
{ {
try foreach (var session in sessions)
{ {
await SendMessageToSession(session, name, data, cancellationToken).ConfigureAwait(false); yield return SendMessageToSession(session, name, data, cancellationToken);
}
catch (Exception ex)
{
_logger.LogError("Error sending message", ex);
} }
}
}, cancellationToken)).ToArray(); return Task.WhenAll(GetTasks());
return Task.WhenAll(tasks);
} }
public Task SendMessageToUserDeviceAndAdminSessions<T>(string deviceId, string name, T data, CancellationToken cancellationToken) public Task SendMessageToUserDeviceAndAdminSessions<T>(string deviceId, string name, T data, CancellationToken cancellationToken)
@ -1906,23 +1882,17 @@ namespace Emby.Server.Implementations.Session
CheckDisposed(); CheckDisposed();
var sessions = Sessions var sessions = Sessions
.Where(i => string.Equals(i.DeviceId, deviceId, StringComparison.OrdinalIgnoreCase) || IsAdminSession(i)) .Where(i => string.Equals(i.DeviceId, deviceId, StringComparison.OrdinalIgnoreCase) || IsAdminSession(i));
.ToList();
var tasks = sessions.Select(session => Task.Run(async () => IEnumerable<Task> GetTasks()
{ {
try foreach (var session in sessions)
{ {
await SendMessageToSession(session, name, data, cancellationToken).ConfigureAwait(false); yield return SendMessageToSession(session, name, data, cancellationToken);
}
catch (Exception ex)
{
_logger.LogError("Error sending message", ex);
} }
}
}, cancellationToken)).ToArray(); return Task.WhenAll(GetTasks());
return Task.WhenAll(tasks);
} }
private bool IsAdminSession(SessionInfo s) private bool IsAdminSession(SessionInfo s)

View File

@ -2,7 +2,6 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using MediaBrowser.Controller.Playlists;
using MediaBrowser.Controller.TV; using MediaBrowser.Controller.TV;
using MediaBrowser.Model.Querying; using MediaBrowser.Model.Querying;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
@ -17,7 +16,6 @@ namespace MediaBrowser.Controller.Entities
public Guid? UserId { get; set; } public Guid? UserId { get; set; }
public static ITVSeriesManager TVSeriesManager; public static ITVSeriesManager TVSeriesManager;
public static IPlaylistManager PlaylistManager;
[IgnoreDataMember] [IgnoreDataMember]
public string CollectionType => ViewType; public string CollectionType => ViewType;
@ -38,6 +36,7 @@ namespace MediaBrowser.Controller.Entities
{ {
list.Add(Id); list.Add(Id);
} }
return list; return list;
} }
@ -65,7 +64,7 @@ namespace MediaBrowser.Controller.Entities
parent = LibraryManager.GetItemById(ParentId) as Folder ?? parent; parent = LibraryManager.GetItemById(ParentId) as Folder ?? parent;
} }
return new UserViewBuilder(UserViewManager, LibraryManager, Logger, UserDataManager, TVSeriesManager, ConfigurationManager, PlaylistManager) return new UserViewBuilder(UserViewManager, LibraryManager, Logger, UserDataManager, TVSeriesManager, ConfigurationManager)
.GetUserItems(parent, this, CollectionType, query); .GetUserItems(parent, this, CollectionType, query);
} }

View File

@ -5,7 +5,6 @@ using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.Movies;
using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Playlists;
using MediaBrowser.Controller.TV; using MediaBrowser.Controller.TV;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Querying; using MediaBrowser.Model.Querying;
@ -21,9 +20,14 @@ namespace MediaBrowser.Controller.Entities
private readonly IUserDataManager _userDataManager; private readonly IUserDataManager _userDataManager;
private readonly ITVSeriesManager _tvSeriesManager; private readonly ITVSeriesManager _tvSeriesManager;
private readonly IServerConfigurationManager _config; private readonly IServerConfigurationManager _config;
private readonly IPlaylistManager _playlistManager;
public UserViewBuilder(IUserViewManager userViewManager, ILibraryManager libraryManager, ILogger logger, IUserDataManager userDataManager, ITVSeriesManager tvSeriesManager, IServerConfigurationManager config, IPlaylistManager playlistManager) public UserViewBuilder(
IUserViewManager userViewManager,
ILibraryManager libraryManager,
ILogger logger,
IUserDataManager userDataManager,
ITVSeriesManager tvSeriesManager,
IServerConfigurationManager config)
{ {
_userViewManager = userViewManager; _userViewManager = userViewManager;
_libraryManager = libraryManager; _libraryManager = libraryManager;
@ -31,7 +35,6 @@ namespace MediaBrowser.Controller.Entities
_userDataManager = userDataManager; _userDataManager = userDataManager;
_tvSeriesManager = tvSeriesManager; _tvSeriesManager = tvSeriesManager;
_config = config; _config = config;
_playlistManager = playlistManager;
} }
public QueryResult<BaseItem> GetUserItems(Folder queryParent, Folder displayParent, string viewType, InternalItemsQuery query) public QueryResult<BaseItem> GetUserItems(Folder queryParent, Folder displayParent, string viewType, InternalItemsQuery query)
@ -110,6 +113,7 @@ namespace MediaBrowser.Controller.Entities
{ {
return GetResult(GetMediaFolders(user).OfType<Folder>().SelectMany(i => i.GetChildren(user, true)), queryParent, query); return GetResult(GetMediaFolders(user).OfType<Folder>().SelectMany(i => i.GetChildren(user, true)), queryParent, query);
} }
return queryParent.GetItems(query); return queryParent.GetItems(query);
} }
} }