aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Server.Implementations')
-rw-r--r--Emby.Server.Implementations/Channels/ChannelManager.cs32
-rw-r--r--Emby.Server.Implementations/Collections/CollectionManager.cs4
-rw-r--r--Emby.Server.Implementations/IO/FileRefresher.cs17
-rw-r--r--Emby.Server.Implementations/IO/ManagedFileSystem.cs21
-rw-r--r--Emby.Server.Implementations/Library/LibraryManager.cs19
-rw-r--r--Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs7
-rw-r--r--Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs2
-rw-r--r--Emby.Server.Implementations/Library/UserViewManager.cs10
-rw-r--r--Emby.Server.Implementations/LiveTv/LiveTvManager.cs69
-rw-r--r--Emby.Server.Implementations/Playlists/PlaylistManager.cs6
-rw-r--r--Emby.Server.Implementations/Updates/InstallationManager.cs5
11 files changed, 92 insertions, 100 deletions
diff --git a/Emby.Server.Implementations/Channels/ChannelManager.cs b/Emby.Server.Implementations/Channels/ChannelManager.cs
index d3950929d..0036d1970 100644
--- a/Emby.Server.Implementations/Channels/ChannelManager.cs
+++ b/Emby.Server.Implementations/Channels/ChannelManager.cs
@@ -373,7 +373,7 @@ namespace Emby.Server.Implementations.Channels
private async Task<Channel> GetChannel(IChannel channelInfo, CancellationToken cancellationToken)
{
- var parentFolder = await GetInternalChannelFolder(cancellationToken).ConfigureAwait(false);
+ var parentFolder = GetInternalChannelFolder(cancellationToken);
var parentFolderId = parentFolder.Id;
var id = GetInternalChannelId(channelInfo.Name);
@@ -434,7 +434,7 @@ namespace Emby.Server.Implementations.Channels
}
else if (forceUpdate)
{
- await item.UpdateToRepository(ItemUpdateType.None, cancellationToken).ConfigureAwait(false);
+ item.UpdateToRepository(ItemUpdateType.None, cancellationToken);
}
await item.RefreshMetadata(new MetadataRefreshOptions(_fileSystem), cancellationToken);
@@ -655,14 +655,12 @@ namespace Emby.Server.Implementations.Channels
// Avoid implicitly captured closure
var token = cancellationToken;
- var itemTasks = items.Select(i =>
+ var internalItems = items.Select(i =>
{
var channelProvider = i.Item1;
var internalChannelId = GetInternalChannelId(channelProvider.Name);
return GetChannelItemEntity(i.Item2, channelProvider, internalChannelId, token);
- });
-
- var internalItems = await Task.WhenAll(itemTasks).ConfigureAwait(false);
+ }).ToArray();
internalItems = ApplyFilters(internalItems, query.Filters, user).ToArray();
RefreshIfNeeded(internalItems);
@@ -802,14 +800,12 @@ namespace Emby.Server.Implementations.Channels
// Avoid implicitly captured closure
var token = cancellationToken;
- var itemTasks = items.Select(i =>
+ var internalItems = items.Select(i =>
{
var channelProvider = i.Item1;
var internalChannelId = GetInternalChannelId(channelProvider.Name);
return GetChannelItemEntity(i.Item2, channelProvider, internalChannelId, token);
- });
-
- var internalItems = await Task.WhenAll(itemTasks).ConfigureAwait(false);
+ }).ToArray();
return new QueryResult<BaseItem>
{
@@ -955,9 +951,7 @@ namespace Emby.Server.Implementations.Channels
var providerTotalRecordCount = providerLimit.HasValue ? itemsResult.TotalRecordCount : null;
- var tasks = itemsResult.Items.Select(i => GetChannelItemEntity(i, channelProvider, channel.Id, cancellationToken));
-
- var internalItems = await Task.WhenAll(tasks).ConfigureAwait(false);
+ var internalItems = itemsResult.Items.Select(i => GetChannelItemEntity(i, channelProvider, channel.Id, cancellationToken)).ToArray();
if (user != null)
{
@@ -1234,7 +1228,7 @@ namespace Emby.Server.Implementations.Channels
return item;
}
- private async Task<BaseItem> GetChannelItemEntity(ChannelItemInfo info, IChannel channelProvider, Guid internalChannelId, CancellationToken cancellationToken)
+ private BaseItem GetChannelItemEntity(ChannelItemInfo info, IChannel channelProvider, Guid internalChannelId, CancellationToken cancellationToken)
{
BaseItem item;
bool isNew;
@@ -1399,7 +1393,7 @@ namespace Emby.Server.Implementations.Channels
}
else if (forceUpdate)
{
- await item.UpdateToRepository(ItemUpdateType.None, cancellationToken).ConfigureAwait(false);
+ item.UpdateToRepository(ItemUpdateType.None, cancellationToken);
}
SaveMediaSources(item, info.MediaSources);
@@ -1542,20 +1536,20 @@ namespace Emby.Server.Implementations.Channels
return items;
}
- public async Task<BaseItemDto> GetChannelFolder(string userId, CancellationToken cancellationToken)
+ public BaseItemDto GetChannelFolder(string userId, CancellationToken cancellationToken)
{
var user = string.IsNullOrEmpty(userId) ? null : _userManager.GetUserById(userId);
- var folder = await GetInternalChannelFolder(cancellationToken).ConfigureAwait(false);
+ var folder = GetInternalChannelFolder(cancellationToken);
return _dtoService.GetBaseItemDto(folder, new DtoOptions(), user);
}
- public async Task<Folder> GetInternalChannelFolder(CancellationToken cancellationToken)
+ public Folder GetInternalChannelFolder(CancellationToken cancellationToken)
{
var name = _localization.GetLocalizedString("ViewTypeChannels");
- return await _libraryManager.GetNamedView(name, "channels", "zz_" + name, cancellationToken).ConfigureAwait(false);
+ return _libraryManager.GetNamedView(name, "channels", "zz_" + name, cancellationToken);
}
}
diff --git a/Emby.Server.Implementations/Collections/CollectionManager.cs b/Emby.Server.Implementations/Collections/CollectionManager.cs
index 2e884e729..c8e947fd7 100644
--- a/Emby.Server.Implementations/Collections/CollectionManager.cs
+++ b/Emby.Server.Implementations/Collections/CollectionManager.cs
@@ -203,7 +203,7 @@ namespace Emby.Server.Implementations.Collections
collection.UpdateRatingToContent();
- await collection.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
+ collection.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None);
_providerManager.QueueRefresh(collection.Id, refreshOptions, RefreshPriority.High);
@@ -262,7 +262,7 @@ namespace Emby.Server.Implementations.Collections
collection.UpdateRatingToContent();
- await collection.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
+ collection.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None);
_providerManager.QueueRefresh(collection.Id, new MetadataRefreshOptions(_fileSystem), RefreshPriority.High);
EventHelper.FireEventIfNotNull(ItemsRemovedFromCollection, this, new CollectionModifiedEventArgs
diff --git a/Emby.Server.Implementations/IO/FileRefresher.cs b/Emby.Server.Implementations/IO/FileRefresher.cs
index 315bee103..85b8bddd2 100644
--- a/Emby.Server.Implementations/IO/FileRefresher.cs
+++ b/Emby.Server.Implementations/IO/FileRefresher.cs
@@ -154,20 +154,13 @@ namespace Emby.Server.Implementations.IO
.DistinctBy(i => i.Id)
.ToList();
- //foreach (var p in paths)
- //{
- // Logger.Info(p + " reports change.");
- //}
-
- // If the root folder changed, run the library task so the user can see it
- if (itemsToRefresh.Any(i => i is AggregateFolder))
- {
- LibraryManager.ValidateMediaLibrary(new SimpleProgress<double>(), CancellationToken.None);
- return;
- }
-
foreach (var item in itemsToRefresh)
{
+ if (item is AggregateFolder)
+ {
+ continue;
+ }
+
Logger.Info(item.Name + " (" + item.Path + ") will be refreshed.");
try
diff --git a/Emby.Server.Implementations/IO/ManagedFileSystem.cs b/Emby.Server.Implementations/IO/ManagedFileSystem.cs
index 0d85a977c..125d9e980 100644
--- a/Emby.Server.Implementations/IO/ManagedFileSystem.cs
+++ b/Emby.Server.Implementations/IO/ManagedFileSystem.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
@@ -24,12 +25,14 @@ namespace Emby.Server.Implementations.IO
private string _tempPath;
private SharpCifsFileSystem _sharpCifsFileSystem;
+ private IEnvironmentInfo _environmentInfo;
public ManagedFileSystem(ILogger logger, IEnvironmentInfo environmentInfo, string tempPath)
{
Logger = logger;
_supportsAsyncFileStreams = true;
_tempPath = tempPath;
+ _environmentInfo = environmentInfo;
// On Linux, this needs to be true or symbolic links are ignored
EnableFileSystemRequestConcat = environmentInfo.OperatingSystem != MediaBrowser.Model.System.OperatingSystem.Windows &&
@@ -1051,7 +1054,25 @@ namespace Emby.Server.Implementations.IO
public virtual void SetExecutable(string path)
{
+ if (_environmentInfo.OperatingSystem == MediaBrowser.Model.System.OperatingSystem.OSX)
+ {
+ RunProcess("chmod", "+x \"" + path + "\"", GetDirectoryName(path));
+ }
+ }
+ private void RunProcess(string path, string args, string workingDirectory)
+ {
+ using (var process = Process.Start(new ProcessStartInfo
+ {
+ Arguments = args,
+ FileName = path,
+ CreateNoWindow = true,
+ WorkingDirectory = workingDirectory,
+ WindowStyle = ProcessWindowStyle.Normal
+ }))
+ {
+ process.WaitForExit();
+ }
}
}
}
diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs
index 85b91ac25..a7b85ad42 100644
--- a/Emby.Server.Implementations/Library/LibraryManager.cs
+++ b/Emby.Server.Implementations/Library/LibraryManager.cs
@@ -738,8 +738,7 @@ namespace Emby.Server.Implementations.Library
if (folder.ParentId != rootFolder.Id)
{
folder.ParentId = rootFolder.Id;
- var task = folder.UpdateToRepository(ItemUpdateType.MetadataImport, CancellationToken.None);
- Task.WaitAll(task);
+ folder.UpdateToRepository(ItemUpdateType.MetadataImport, CancellationToken.None);
}
rootFolder.AddVirtualChild(folder);
@@ -1834,12 +1833,12 @@ namespace Emby.Server.Implementations.Library
/// <param name="updateReason">The update reason.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns>
- public async Task UpdateItem(BaseItem item, ItemUpdateType updateReason, CancellationToken cancellationToken)
+ public void UpdateItem(BaseItem item, ItemUpdateType updateReason, CancellationToken cancellationToken)
{
var locationType = item.LocationType;
if (locationType != LocationType.Remote && locationType != LocationType.Virtual)
{
- await _providerManagerFactory().SaveMetadata(item, updateReason).ConfigureAwait(false);
+ _providerManagerFactory().SaveMetadata(item, updateReason);
}
item.DateLastSaved = DateTime.UtcNow;
@@ -2053,7 +2052,7 @@ namespace Emby.Server.Implementations.Library
return GetNamedView(user, name, null, viewType, sortName, cancellationToken);
}
- public async Task<UserView> GetNamedView(string name,
+ public UserView GetNamedView(string name,
string viewType,
string sortName,
CancellationToken cancellationToken)
@@ -2100,7 +2099,7 @@ namespace Emby.Server.Implementations.Library
if (refresh)
{
- await item.UpdateToRepository(ItemUpdateType.MetadataImport, CancellationToken.None).ConfigureAwait(false);
+ item.UpdateToRepository(ItemUpdateType.MetadataImport, CancellationToken.None);
_providerManagerFactory().QueueRefresh(item.Id, new MetadataRefreshOptions(_fileSystem)
{
// Not sure why this is necessary but need to figure it out
@@ -2241,7 +2240,7 @@ namespace Emby.Server.Implementations.Library
return item;
}
- public async Task<UserView> GetNamedView(string name,
+ public UserView GetNamedView(string name,
string parentId,
string viewType,
string sortName,
@@ -2294,7 +2293,7 @@ namespace Emby.Server.Implementations.Library
if (!string.Equals(viewType, item.ViewType, StringComparison.OrdinalIgnoreCase))
{
item.ViewType = viewType;
- await item.UpdateToRepository(ItemUpdateType.MetadataEdit, cancellationToken).ConfigureAwait(false);
+ item.UpdateToRepository(ItemUpdateType.MetadataEdit, cancellationToken);
}
var refresh = isNew || DateTime.UtcNow - item.DateLastRefreshed >= _viewRefreshInterval;
@@ -2822,7 +2821,7 @@ namespace Emby.Server.Implementations.Library
await _providerManagerFactory().SaveImage(item, url, image.Type, imageIndex, CancellationToken.None).ConfigureAwait(false);
- await item.UpdateToRepository(ItemUpdateType.ImageUpdate, CancellationToken.None).ConfigureAwait(false);
+ item.UpdateToRepository(ItemUpdateType.ImageUpdate, CancellationToken.None);
return item.GetImageInfo(image.Type, imageIndex);
}
@@ -2838,7 +2837,7 @@ namespace Emby.Server.Implementations.Library
// Remove this image to prevent it from retrying over and over
item.RemoveImage(image);
- await item.UpdateToRepository(ItemUpdateType.ImageUpdate, CancellationToken.None).ConfigureAwait(false);
+ item.UpdateToRepository(ItemUpdateType.ImageUpdate, CancellationToken.None);
throw new InvalidOperationException();
}
diff --git a/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs b/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs
index 757e67eb4..4830da8fc 100644
--- a/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs
+++ b/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs
@@ -54,7 +54,7 @@ namespace Emby.Server.Implementations.Library
{
cancellationToken.ThrowIfCancellationRequested();
- await AssignTrailers(item, trailers).ConfigureAwait(false);
+ AssignTrailers(item, trailers);
numComplete++;
double percent = numComplete;
@@ -65,7 +65,7 @@ namespace Emby.Server.Implementations.Library
progress.Report(100);
}
- private async Task AssignTrailers(IHasTrailers item, IEnumerable<BaseItem> channelTrailers)
+ private void AssignTrailers(IHasTrailers item, IEnumerable<BaseItem> channelTrailers)
{
if (item is Game)
{
@@ -98,8 +98,7 @@ namespace Emby.Server.Implementations.Library
item.RemoteTrailerIds = trailerIds;
var baseItem = (BaseItem)item;
- await baseItem.UpdateToRepository(ItemUpdateType.MetadataImport, CancellationToken.None)
- .ConfigureAwait(false);
+ baseItem.UpdateToRepository(ItemUpdateType.MetadataImport, CancellationToken.None);
}
}
}
diff --git a/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
index cd1264754..82f42c745 100644
--- a/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
+++ b/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
@@ -147,7 +147,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
Items = videos
};
- var isInMixedFolder = resolverResult.Count > 1;
+ var isInMixedFolder = resolverResult.Count > 1 || (parent != null && parent.IsTopParent);
foreach (var video in resolverResult)
{
diff --git a/Emby.Server.Implementations/Library/UserViewManager.cs b/Emby.Server.Implementations/Library/UserViewManager.cs
index 8c9377291..4ee0f553f 100644
--- a/Emby.Server.Implementations/Library/UserViewManager.cs
+++ b/Emby.Server.Implementations/Library/UserViewManager.cs
@@ -102,7 +102,7 @@ namespace Emby.Server.Implementations.Library
if (_config.Configuration.EnableFolderView)
{
var name = _localizationManager.GetLocalizedString("ViewType" + CollectionType.Folders);
- list.Add(await _libraryManager.GetNamedView(name, CollectionType.Folders, string.Empty, cancellationToken).ConfigureAwait(false));
+ list.Add(_libraryManager.GetNamedView(name, CollectionType.Folders, string.Empty, cancellationToken));
}
if (query.IncludeExternalContent)
@@ -117,7 +117,7 @@ namespace Emby.Server.Implementations.Library
if (_config.Configuration.EnableChannelView && channels.Length > 0)
{
- list.Add(await _channelManager.GetInternalChannelFolder(cancellationToken).ConfigureAwait(false));
+ list.Add(_channelManager.GetInternalChannelFolder(cancellationToken));
}
else
{
@@ -126,7 +126,7 @@ namespace Emby.Server.Implementations.Library
if (_liveTvManager.GetEnabledUsers().Select(i => i.Id.ToString("N")).Contains(query.UserId))
{
- list.Add(await _liveTvManager.GetInternalLiveTvFolder(CancellationToken.None).ConfigureAwait(false));
+ list.Add(_liveTvManager.GetInternalLiveTvFolder(CancellationToken.None));
}
}
@@ -158,14 +158,14 @@ namespace Emby.Server.Implementations.Library
.ToArray();
}
- public Task<UserView> GetUserSubView(string name, string parentId, string type, string sortName, CancellationToken cancellationToken)
+ public UserView GetUserSubView(string name, string parentId, string type, string sortName, CancellationToken cancellationToken)
{
var uniqueId = parentId + "subview" + type;
return _libraryManager.GetNamedView(name, parentId, type, sortName, uniqueId, cancellationToken);
}
- public Task<UserView> GetUserSubView(string parentId, string type, string sortName, CancellationToken cancellationToken)
+ public UserView GetUserSubView(string parentId, string type, string sortName, CancellationToken cancellationToken)
{
var name = _localizationManager.GetLocalizedString("ViewType" + type);
diff --git a/Emby.Server.Implementations/LiveTv/LiveTvManager.cs b/Emby.Server.Implementations/LiveTv/LiveTvManager.cs
index 857afa378..ec2704aa0 100644
--- a/Emby.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/Emby.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -173,11 +173,11 @@ namespace Emby.Server.Implementations.LiveTv
}
}
- public async Task<QueryResult<BaseItem>> GetInternalChannels(LiveTvChannelQuery query, DtoOptions dtoOptions, CancellationToken cancellationToken)
+ public QueryResult<BaseItem> GetInternalChannels(LiveTvChannelQuery query, DtoOptions dtoOptions, CancellationToken cancellationToken)
{
var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId);
- var topFolder = await GetInternalLiveTvFolder(cancellationToken).ConfigureAwait(false);
+ var topFolder = GetInternalLiveTvFolder(cancellationToken);
var internalQuery = new InternalItemsQuery(user)
{
@@ -565,7 +565,7 @@ namespace Emby.Server.Implementations.LiveTv
}
else if (forceUpdate)
{
- await _libraryManager.UpdateItem(item, ItemUpdateType.MetadataImport, cancellationToken).ConfigureAwait(false);
+ _libraryManager.UpdateItem(item, ItemUpdateType.MetadataImport, cancellationToken);
}
await item.RefreshMetadata(new MetadataRefreshOptions(_fileSystem)
@@ -760,7 +760,7 @@ namespace Emby.Server.Implementations.LiveTv
return new Tuple<LiveTvProgram, bool, bool>(item, isNew, isUpdated);
}
- private async Task<Guid> CreateRecordingRecord(RecordingInfo info, string serviceName, Guid parentFolderId, CancellationToken cancellationToken)
+ private Guid CreateRecordingRecord(RecordingInfo info, string serviceName, Guid parentFolderId, CancellationToken cancellationToken)
{
var isNew = false;
@@ -892,7 +892,7 @@ namespace Emby.Server.Implementations.LiveTv
else if (dataChanged || info.DateLastUpdated > recording.DateLastSaved || statusChanged)
{
metadataRefreshMode = MetadataRefreshMode.FullRefresh;
- await _libraryManager.UpdateItem(item, ItemUpdateType.MetadataImport, cancellationToken).ConfigureAwait(false);
+ _libraryManager.UpdateItem(item, ItemUpdateType.MetadataImport, cancellationToken);
}
if (info.Status != RecordingStatus.InProgress)
@@ -928,7 +928,7 @@ namespace Emby.Server.Implementations.LiveTv
{
var user = string.IsNullOrEmpty(query.UserId) ? null : _userManager.GetUserById(query.UserId);
- var topFolder = await GetInternalLiveTvFolder(cancellationToken).ConfigureAwait(false);
+ var topFolder = GetInternalLiveTvFolder(cancellationToken);
if (query.OrderBy.Length == 0)
{
@@ -1007,11 +1007,11 @@ namespace Emby.Server.Implementations.LiveTv
return result;
}
- public async Task<QueryResult<BaseItem>> GetRecommendedProgramsInternal(RecommendedProgramQuery query, DtoOptions options, CancellationToken cancellationToken)
+ public QueryResult<BaseItem> GetRecommendedProgramsInternal(RecommendedProgramQuery query, DtoOptions options, CancellationToken cancellationToken)
{
var user = _userManager.GetUserById(query.UserId);
- var topFolder = await GetInternalLiveTvFolder(cancellationToken).ConfigureAwait(false);
+ var topFolder = GetInternalLiveTvFolder(cancellationToken);
var internalQuery = new InternalItemsQuery(user)
{
@@ -1072,11 +1072,11 @@ namespace Emby.Server.Implementations.LiveTv
return result;
}
- public async Task<QueryResult<BaseItemDto>> GetRecommendedPrograms(RecommendedProgramQuery query, DtoOptions options, CancellationToken cancellationToken)
+ public QueryResult<BaseItemDto> GetRecommendedPrograms(RecommendedProgramQuery query, DtoOptions options, CancellationToken cancellationToken)
{
RemoveFields(options);
- var internalResult = await GetRecommendedProgramsInternal(query, options, cancellationToken).ConfigureAwait(false);
+ var internalResult = GetRecommendedProgramsInternal(query, options, cancellationToken);
var user = _userManager.GetUserById(query.UserId);
@@ -1302,7 +1302,7 @@ namespace Emby.Server.Implementations.LiveTv
var list = new List<LiveTvChannel>();
var numComplete = 0;
- var parentFolder = await GetInternalLiveTvFolder(cancellationToken).ConfigureAwait(false);
+ var parentFolder = GetInternalLiveTvFolder(cancellationToken);
var parentFolderId = parentFolder.Id;
foreach (var channelInfo in allChannelsList)
@@ -1425,7 +1425,7 @@ namespace Emby.Server.Implementations.LiveTv
// TODO: Do this in bulk
foreach (var program in updatedPrograms)
{
- await _libraryManager.UpdateItem(program, ItemUpdateType.MetadataImport, cancellationToken).ConfigureAwait(false);
+ _libraryManager.UpdateItem(program, ItemUpdateType.MetadataImport, cancellationToken);
}
currentChannel.IsMovie = isMovie;
@@ -1434,7 +1434,7 @@ namespace Emby.Server.Implementations.LiveTv
currentChannel.IsKids = isKids;
currentChannel.IsSeries = iSSeries;
- await currentChannel.UpdateToRepository(ItemUpdateType.MetadataImport, cancellationToken).ConfigureAwait(false);
+ currentChannel.UpdateToRepository(ItemUpdateType.MetadataImport, cancellationToken);
}
catch (OperationCanceledException)
{
@@ -1549,9 +1549,8 @@ namespace Emby.Server.Implementations.LiveTv
var results = await Task.WhenAll(tasks).ConfigureAwait(false);
- var recordingTasks = results.SelectMany(i => i.ToList()).Select(i => CreateRecordingRecord(i.Item1, i.Item2.Name, internalLiveTvFolderId, cancellationToken));
-
- var idList = await Task.WhenAll(recordingTasks).ConfigureAwait(false);
+ var idList = results.SelectMany(i => i.ToList()).Select(i => CreateRecordingRecord(i.Item1, i.Item2.Name, internalLiveTvFolderId, cancellationToken))
+ .ToArray();
await CleanDatabaseInternal(idList, new[] { typeof(LiveTvVideoRecording).Name, typeof(LiveTvAudioRecording).Name }, new SimpleProgress<double>(), cancellationToken).ConfigureAwait(false);
@@ -1726,7 +1725,7 @@ namespace Emby.Server.Implementations.LiveTv
return new QueryResult<BaseItem>();
}
- var folder = await GetInternalLiveTvFolder(cancellationToken).ConfigureAwait(false);
+ var folder = GetInternalLiveTvFolder(cancellationToken);
// TODO: Figure out how to merge emby recordings + service recordings
if (_services.Length == 1)
@@ -2143,18 +2142,6 @@ namespace Emby.Server.Implementations.LiveTv
};
}
- public Task OnRecordingFileDeleted(BaseItem recording)
- {
- var service = GetService(recording);
-
- if (service is EmbyTV.EmbyTV)
- {
- return service.DeleteRecordingAsync(GetItemExternalId(recording), CancellationToken.None);
- }
-
- return Task.FromResult(true);
- }
-
public async Task DeleteRecording(string recordingId)
{
var recording = await GetInternalRecording(recordingId, CancellationToken.None).ConfigureAwait(false);
@@ -2171,13 +2158,17 @@ namespace Emby.Server.Implementations.LiveTv
{
var service = GetService(recording.ServiceName);
- try
- {
- await service.DeleteRecordingAsync(GetItemExternalId(recording), CancellationToken.None).ConfigureAwait(false);
- }
- catch (ResourceNotFoundException)
+ if (service != null)
{
+ // handle the service being uninstalled and the item hanging around in the database
+ try
+ {
+ await service.DeleteRecordingAsync(GetItemExternalId(recording), CancellationToken.None).ConfigureAwait(false);
+ }
+ catch (ResourceNotFoundException)
+ {
+ }
}
_lastRecordingRefreshTime = DateTime.MinValue;
@@ -2387,7 +2378,7 @@ namespace Emby.Server.Implementations.LiveTv
MinEndDate = now,
Limit = channelIds.Length,
OrderBy = new[] { new Tuple<string, SortOrder>(ItemSortBy.StartDate, SortOrder.Ascending) },
- TopParentIds = new[] { GetInternalLiveTvFolder(CancellationToken.None).Result.Id.ToString("N") },
+ TopParentIds = new[] { GetInternalLiveTvFolder(CancellationToken.None).Id.ToString("N") },
DtoOptions = options
}) : new List<BaseItem>();
@@ -2910,11 +2901,11 @@ namespace Emby.Server.Implementations.LiveTv
return service.ResetTuner(parts[1], cancellationToken);
}
- public async Task<BaseItemDto> GetLiveTvFolder(string userId, CancellationToken cancellationToken)
+ public BaseItemDto GetLiveTvFolder(string userId, CancellationToken cancellationToken)
{
var user = string.IsNullOrEmpty(userId) ? null : _userManager.GetUserById(userId);
- var folder = await GetInternalLiveTvFolder(cancellationToken).ConfigureAwait(false);
+ var folder = GetInternalLiveTvFolder(cancellationToken);
return _dtoService.GetBaseItemDto(folder, new DtoOptions(), user);
}
@@ -2930,10 +2921,10 @@ namespace Emby.Server.Implementations.LiveTv
options.Fields = fields.ToArray(fields.Count);
}
- public async Task<Folder> GetInternalLiveTvFolder(CancellationToken cancellationToken)
+ public Folder GetInternalLiveTvFolder(CancellationToken cancellationToken)
{
var name = _localization.GetLocalizedString("ViewTypeLiveTV");
- return await _libraryManager.GetNamedView(name, CollectionType.LiveTv, name, cancellationToken).ConfigureAwait(false);
+ return _libraryManager.GetNamedView(name, CollectionType.LiveTv, name, cancellationToken);
}
public async Task<TunerHostInfo> SaveTunerHost(TunerHostInfo info, bool dataSourceChanged = true)
diff --git a/Emby.Server.Implementations/Playlists/PlaylistManager.cs b/Emby.Server.Implementations/Playlists/PlaylistManager.cs
index 87832e7dd..f268e9c0c 100644
--- a/Emby.Server.Implementations/Playlists/PlaylistManager.cs
+++ b/Emby.Server.Implementations/Playlists/PlaylistManager.cs
@@ -209,7 +209,7 @@ namespace Emby.Server.Implementations.Playlists
newList.AddRange(list);
playlist.LinkedChildren = newList.ToArray(newList.Count);
- await playlist.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
+ playlist.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None);
_providerManager.QueueRefresh(playlist.Id, new MetadataRefreshOptions(_fileSystem)
{
@@ -237,7 +237,7 @@ namespace Emby.Server.Implementations.Playlists
.Select(i => i.Item1)
.ToArray();
- await playlist.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
+ playlist.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None);
_providerManager.QueueRefresh(playlist.Id, new MetadataRefreshOptions(_fileSystem)
{
@@ -281,7 +281,7 @@ namespace Emby.Server.Implementations.Playlists
playlist.LinkedChildren = newList.ToArray(newList.Count);
- await playlist.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
+ playlist.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None);
}
public Folder GetPlaylistsFolder(string userId)
diff --git a/Emby.Server.Implementations/Updates/InstallationManager.cs b/Emby.Server.Implementations/Updates/InstallationManager.cs
index 180463040..772f2338a 100644
--- a/Emby.Server.Implementations/Updates/InstallationManager.cs
+++ b/Emby.Server.Implementations/Updates/InstallationManager.cs
@@ -442,11 +442,6 @@ namespace Emby.Server.Implementations.Updates
/// <returns>Task{IEnumerable{PackageVersionInfo}}.</returns>
public async Task<IEnumerable<PackageVersionInfo>> GetAvailablePluginUpdates(Version applicationVersion, bool withAutoUpdateEnabled, CancellationToken cancellationToken)
{
- if (!_config.CommonConfiguration.EnableAutoUpdate)
- {
- return new PackageVersionInfo[] { };
- }
-
var catalog = await GetAvailablePackagesWithoutRegistrationInfo(cancellationToken).ConfigureAwait(false);
var systemUpdateLevel = GetSystemUpdateLevel();