Luke Pulverenti пре 8 година
родитељ
комит
ffb68b0318

+ 3 - 2
Emby.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs

@@ -87,8 +87,9 @@ namespace Emby.Server.Implementations.HttpServer.SocketSharp
 
         private void ProcessContext(HttpListenerContext context)
         {
-            //Task.Factory.StartNew(() => InitTask(context), TaskCreationOptions.DenyChildAttach | TaskCreationOptions.PreferFairness);
-            Task.Run(() => InitTask(context, _disposeCancellationToken));
+            _logger.Info("thread id {0}", Thread.CurrentThread.ManagedThreadId);
+            InitTask(context, _disposeCancellationToken);
+            //Task.Run(() => InitTask(context, _disposeCancellationToken));
         }
 
         private Task InitTask(HttpListenerContext context, CancellationToken cancellationToken)

+ 6 - 6
Emby.Server.Implementations/IO/FileRefresher.cs

@@ -180,7 +180,7 @@ namespace Emby.Server.Implementations.IO
 
                 try
                 {
-                    await item.ChangedExternally().ConfigureAwait(false);
+                    item.ChangedExternally();
                 }
                 catch (IOException ex)
                 {
@@ -282,11 +282,11 @@ namespace Emby.Server.Implementations.IO
                     return false;
                 }
             }
-            //catch (DirectoryNotFoundException)
-            //{
-            //    // File may have been deleted
-            //    return false;
-            //}
+            catch (DirectoryNotFoundException)
+            {
+                // File may have been deleted
+                return false;
+            }
             catch (FileNotFoundException)
             {
                 // File may have been deleted

+ 21 - 5
Emby.Server.Implementations/Session/HttpSessionController.cs

@@ -66,19 +66,19 @@ namespace Emby.Server.Implementations.Session
             return SendMessage(name, new Dictionary<string, string>(), cancellationToken);
         }
 
-        private async Task SendMessage(string name,
+        private Task SendMessage(string name,
             Dictionary<string, string> args,
             CancellationToken cancellationToken)
         {
             var url = PostUrl + "/" + name + ToQueryString(args);
 
-            await _httpClient.Post(new HttpRequestOptions
+            return _httpClient.Post(new HttpRequestOptions
             {
                 Url = url,
                 CancellationToken = cancellationToken,
                 BufferContent = false
 
-            }).ConfigureAwait(false);
+            });
         }
 
         public Task SendSessionEndedNotification(SessionInfoDto sessionInfo, CancellationToken cancellationToken)
@@ -159,8 +159,24 @@ namespace Emby.Server.Implementations.Session
 
         public Task SendMessage<T>(string name, T data, CancellationToken cancellationToken)
         {
-            // Not supported or needed right now
-            return Task.FromResult(true);
+            var url = PostUrl + "/" + name;
+
+            var options = new HttpRequestOptions
+            {
+                Url = url,
+                CancellationToken = cancellationToken,
+                BufferContent = false
+            };
+
+            options.RequestContent = _json.SerializeToString(data);
+            options.RequestContentType = "application/json";
+
+            return _httpClient.Post(new HttpRequestOptions
+            {
+                Url = url,
+                CancellationToken = cancellationToken,
+                BufferContent = false
+            });
         }
 
         private string ToQueryString(Dictionary<string, string> nvc)

+ 6 - 3
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -1854,10 +1854,13 @@ namespace MediaBrowser.Controller.Entities
         /// Do whatever refreshing is necessary when the filesystem pertaining to this item has changed.
         /// </summary>
         /// <returns>Task.</returns>
-        public virtual Task ChangedExternally()
+        public virtual void ChangedExternally()
         {
-            ProviderManager.QueueRefresh(Id, new MetadataRefreshOptions(FileSystem), RefreshPriority.High);
-            return Task.FromResult(true);
+            ProviderManager.QueueRefresh(Id, new MetadataRefreshOptions(FileSystem)
+            {
+                ValidateChildren = true,
+
+            }, RefreshPriority.High);
         }
 
         /// <summary>

+ 0 - 13
MediaBrowser.Controller/Entities/Folder.cs

@@ -1325,19 +1325,6 @@ namespace MediaBrowser.Controller.Entities
             return false;
         }
 
-        /// <summary>
-        /// Folders need to validate and refresh
-        /// </summary>
-        /// <returns>Task.</returns>
-        public override async Task ChangedExternally()
-        {
-            var progress = new Progress<double>();
-
-            await ValidateChildren(progress, CancellationToken.None).ConfigureAwait(false);
-
-            await base.ChangedExternally().ConfigureAwait(false);
-        }
-
         /// <summary>
         /// Marks the played.
         /// </summary>

+ 1 - 0
MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs

@@ -15,6 +15,7 @@ namespace MediaBrowser.Controller.Providers
         public bool ReplaceAllMetadata { get; set; }
 
         public bool IsPostRecursiveRefresh { get; set; }
+        public bool ValidateChildren { get; set; }
 
         public MetadataRefreshMode MetadataRefreshMode { get; set; }
         public RemoteSearchResult SearchResult { get; set; }

+ 10 - 1
MediaBrowser.Providers/Manager/ProviderManager.cs

@@ -872,7 +872,7 @@ namespace MediaBrowser.Providers.Manager
                 if (!_isProcessingRefreshQueue)
                 {
                     _isProcessingRefreshQueue = true;
-                    Task.Run(() => StartProcessingRefreshQueue());
+                    Task.Run(StartProcessingRefreshQueue);
                 }
             }
         }
@@ -897,6 +897,15 @@ namespace MediaBrowser.Providers.Manager
                         // Try to throttle this a little bit.
                         await Task.Delay(100).ConfigureAwait(false);
 
+                        if (refreshItem.Item2.ValidateChildren)
+                        {
+                            var folder = item as Folder;
+                            if (folder != null)
+                            {
+                                await folder.ValidateChildren(new Progress<double>(), CancellationToken.None).ConfigureAwait(false);
+                            }
+                        }
+
                         var artist = item as MusicArtist;
                         var task = artist == null
                             ? RefreshItem(item, refreshItem.Item2, CancellationToken.None)

+ 3 - 2
MediaBrowser.Providers/Subtitles/SubtitleManager.cs

@@ -163,7 +163,7 @@ namespace MediaBrowser.Providers.Subtitles
                     Provider = provider.Name
 
                 }, _logger);
-                
+
                 throw;
             }
         }
@@ -256,7 +256,8 @@ namespace MediaBrowser.Providers.Subtitles
                 _monitor.ReportFileSystemChangeComplete(path, false);
             }
 
-            return _libraryManager.GetItemById(itemId).ChangedExternally();
+            _libraryManager.GetItemById(itemId).ChangedExternally();
+            return Task.FromResult(true);
         }
 
         public Task<SubtitleResponse> GetRemoteSubtitles(string id, CancellationToken cancellationToken)