mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-09-06 13:57:14 -04:00
update people editing
This commit is contained in:
parent
8a780bc023
commit
7bc2a9a081
@ -332,7 +332,13 @@ namespace Emby.Server.Core.IO
|
|||||||
NotifyFilters.Attributes;
|
NotifyFilters.Attributes;
|
||||||
|
|
||||||
newWatcher.Created += watcher_Changed;
|
newWatcher.Created += watcher_Changed;
|
||||||
|
|
||||||
|
// Seeing mono crashes on background threads we can't catch, testing if this might help
|
||||||
|
if (_environmentInfo.OperatingSystem == MediaBrowser.Model.System.OperatingSystem.Windows)
|
||||||
|
{
|
||||||
newWatcher.Deleted += watcher_Changed;
|
newWatcher.Deleted += watcher_Changed;
|
||||||
|
}
|
||||||
|
|
||||||
newWatcher.Renamed += watcher_Changed;
|
newWatcher.Renamed += watcher_Changed;
|
||||||
newWatcher.Changed += watcher_Changed;
|
newWatcher.Changed += watcher_Changed;
|
||||||
|
|
||||||
|
@ -234,6 +234,8 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
|||||||
numberString = null;
|
numberString = null;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
numberString = Path.GetFileNameWithoutExtension(mediaUrl.Split('/').Last());
|
numberString = Path.GetFileNameWithoutExtension(mediaUrl.Split('/').Last());
|
||||||
|
|
||||||
@ -242,6 +244,12 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
|||||||
numberString = null;
|
numberString = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// Seeing occasional argument exception here
|
||||||
|
numberString = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return numberString;
|
return numberString;
|
||||||
|
@ -206,15 +206,16 @@ namespace MediaBrowser.Api
|
|||||||
var newLockData = request.LockData ?? false;
|
var newLockData = request.LockData ?? false;
|
||||||
var isLockedChanged = item.IsLocked != newLockData;
|
var isLockedChanged = item.IsLocked != newLockData;
|
||||||
|
|
||||||
UpdateItem(request, item);
|
// Do this first so that metadata savers can pull the updates from the database.
|
||||||
|
|
||||||
await item.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
|
|
||||||
|
|
||||||
if (request.People != null)
|
if (request.People != null)
|
||||||
{
|
{
|
||||||
await _libraryManager.UpdatePeople(item, request.People.Select(x => new PersonInfo { Name = x.Name, Role = x.Role, Type = x.Type }).ToList());
|
await _libraryManager.UpdatePeople(item, request.People.Select(x => new PersonInfo { Name = x.Name, Role = x.Role, Type = x.Type }).ToList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UpdateItem(request, item);
|
||||||
|
|
||||||
|
await item.UpdateToRepository(ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
|
||||||
|
|
||||||
if (isLockedChanged && item.IsFolder)
|
if (isLockedChanged && item.IsFolder)
|
||||||
{
|
{
|
||||||
var folder = (Folder)item;
|
var folder = (Folder)item;
|
||||||
|
@ -633,14 +633,17 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
if (info.Path.StartsWith("Http", StringComparison.OrdinalIgnoreCase))
|
if (info.Path.StartsWith("Http", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
info.Protocol = MediaProtocol.Http;
|
info.Protocol = MediaProtocol.Http;
|
||||||
|
info.SupportsDirectStream = false;
|
||||||
}
|
}
|
||||||
else if (info.Path.StartsWith("Rtmp", StringComparison.OrdinalIgnoreCase))
|
else if (info.Path.StartsWith("Rtmp", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
info.Protocol = MediaProtocol.Rtmp;
|
info.Protocol = MediaProtocol.Rtmp;
|
||||||
|
info.SupportsDirectStream = false;
|
||||||
}
|
}
|
||||||
else if (info.Path.StartsWith("Rtsp", StringComparison.OrdinalIgnoreCase))
|
else if (info.Path.StartsWith("Rtsp", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
info.Protocol = MediaProtocol.Rtsp;
|
info.Protocol = MediaProtocol.Rtsp;
|
||||||
|
info.SupportsDirectStream = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -13,17 +13,13 @@ using MediaBrowser.Model.Entities;
|
|||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using MediaBrowser.Model.Providers;
|
using MediaBrowser.Model.Providers;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
|
|
||||||
using MediaBrowser.Controller.Dto;
|
using MediaBrowser.Controller.Dto;
|
||||||
using MediaBrowser.Controller.IO;
|
|
||||||
using MediaBrowser.Model.IO;
|
|
||||||
using MediaBrowser.Model.Serialization;
|
using MediaBrowser.Model.Serialization;
|
||||||
using Priority_Queue;
|
using Priority_Queue;
|
||||||
|
|
||||||
@ -69,6 +65,7 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
|
|
||||||
private readonly Func<ILibraryManager> _libraryManagerFactory;
|
private readonly Func<ILibraryManager> _libraryManagerFactory;
|
||||||
private readonly IMemoryStreamFactory _memoryStreamProvider;
|
private readonly IMemoryStreamFactory _memoryStreamProvider;
|
||||||
|
private CancellationTokenSource _disposeCancellationTokenSource = new CancellationTokenSource();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="ProviderManager" /> class.
|
/// Initializes a new instance of the <see cref="ProviderManager" /> class.
|
||||||
@ -882,6 +879,13 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
Tuple<Guid, MetadataRefreshOptions> refreshItem;
|
Tuple<Guid, MetadataRefreshOptions> refreshItem;
|
||||||
var libraryManager = _libraryManagerFactory();
|
var libraryManager = _libraryManagerFactory();
|
||||||
|
|
||||||
|
if (_disposed)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var cancellationToken = _disposeCancellationTokenSource.Token;
|
||||||
|
|
||||||
while (_refreshQueue.TryDequeue(out refreshItem))
|
while (_refreshQueue.TryDequeue(out refreshItem))
|
||||||
{
|
{
|
||||||
if (_disposed)
|
if (_disposed)
|
||||||
@ -902,18 +906,22 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
var folder = item as Folder;
|
var folder = item as Folder;
|
||||||
if (folder != null)
|
if (folder != null)
|
||||||
{
|
{
|
||||||
await folder.ValidateChildren(new Progress<double>(), CancellationToken.None).ConfigureAwait(false);
|
await folder.ValidateChildren(new Progress<double>(), cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var artist = item as MusicArtist;
|
var artist = item as MusicArtist;
|
||||||
var task = artist == null
|
var task = artist == null
|
||||||
? RefreshItem(item, refreshItem.Item2, CancellationToken.None)
|
? RefreshItem(item, refreshItem.Item2, cancellationToken)
|
||||||
: RefreshArtist(artist, refreshItem.Item2);
|
: RefreshArtist(artist, refreshItem.Item2, cancellationToken);
|
||||||
|
|
||||||
await task.ConfigureAwait(false);
|
await task.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch (OperationCanceledException)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.ErrorException("Error refreshing item", ex);
|
_logger.ErrorException("Error refreshing item", ex);
|
||||||
@ -928,14 +936,14 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
|
|
||||||
private async Task RefreshItem(BaseItem item, MetadataRefreshOptions options, CancellationToken cancellationToken)
|
private async Task RefreshItem(BaseItem item, MetadataRefreshOptions options, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
await item.RefreshMetadata(options, CancellationToken.None).ConfigureAwait(false);
|
await item.RefreshMetadata(options, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
// Collection folders don't validate their children so we'll have to simulate that here
|
// Collection folders don't validate their children so we'll have to simulate that here
|
||||||
var collectionFolder = item as CollectionFolder;
|
var collectionFolder = item as CollectionFolder;
|
||||||
|
|
||||||
if (collectionFolder != null)
|
if (collectionFolder != null)
|
||||||
{
|
{
|
||||||
await RefreshCollectionFolderChildren(options, collectionFolder).ConfigureAwait(false);
|
await RefreshCollectionFolderChildren(options, collectionFolder, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -948,25 +956,23 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task RefreshCollectionFolderChildren(MetadataRefreshOptions options, CollectionFolder collectionFolder)
|
private async Task RefreshCollectionFolderChildren(MetadataRefreshOptions options, CollectionFolder collectionFolder, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
foreach (var child in collectionFolder.Children.ToList())
|
foreach (var child in collectionFolder.Children.ToList())
|
||||||
{
|
{
|
||||||
await child.RefreshMetadata(options, CancellationToken.None).ConfigureAwait(false);
|
await child.RefreshMetadata(options, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
if (child.IsFolder)
|
if (child.IsFolder)
|
||||||
{
|
{
|
||||||
var folder = (Folder)child;
|
var folder = (Folder)child;
|
||||||
|
|
||||||
await folder.ValidateChildren(new Progress<double>(), CancellationToken.None, options, true).ConfigureAwait(false);
|
await folder.ValidateChildren(new Progress<double>(), cancellationToken, options, true).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task RefreshArtist(MusicArtist item, MetadataRefreshOptions options)
|
private async Task RefreshArtist(MusicArtist item, MetadataRefreshOptions options, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var cancellationToken = CancellationToken.None;
|
|
||||||
|
|
||||||
var albums = _libraryManagerFactory()
|
var albums = _libraryManagerFactory()
|
||||||
.GetItemList(new InternalItemsQuery
|
.GetItemList(new InternalItemsQuery
|
||||||
{
|
{
|
||||||
@ -991,7 +997,7 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await item.RefreshMetadata(options, CancellationToken.None).ConfigureAwait(false);
|
await item.RefreshMetadata(options, cancellationToken).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -1009,6 +1015,11 @@ namespace MediaBrowser.Providers.Manager
|
|||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
_disposed = true;
|
_disposed = true;
|
||||||
|
|
||||||
|
if (!_disposeCancellationTokenSource.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
_disposeCancellationTokenSource.Cancel();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user