OSDN Git Service

PostClass.CreatedAtの型をDateTimeUtcに変更
[opentween/open-tween.git] / OpenTween / ImageCache.cs
index 806e53f..1f93b3a 100644 (file)
@@ -28,17 +28,13 @@ using System.Net;
 using System.Threading;
 using System.Xml.Serialization;
 using System.Net.Http;
+using OpenTween.Connection;
 
 namespace OpenTween
 {
     public class ImageCache : IDisposable
     {
         /// <summary>
-        /// 画像の取得に使用する HttpClient インスタンス
-        /// </summary>
-        private readonly HttpClient http;
-
-        /// <summary>
         /// キャッシュとして URL と取得した画像を対に保持する辞書
         /// </summary>
         internal LRUCacheDictionary<string, Task<MemoryImage>> innerDictionary;
@@ -58,10 +54,8 @@ namespace OpenTween
         /// </summary>
         private bool disposed = false;
 
-        public ImageCache(HttpClient http)
+        public ImageCache()
         {
-            this.http = http;
-
             this.innerDictionary = new LRUCacheDictionary<string, Task<MemoryImage>>(trimLimit: 300, autoTrimCount: 100);
             this.innerDictionary.CacheRemoved += (s, e) => {
                 // まだ参照されている場合もあるのでDisposeはファイナライザ任せ
@@ -96,21 +90,15 @@ namespace OpenTween
 
             return Task.Run(() =>
             {
-                Task<MemoryImage> cachedImageTask = null;
                 lock (this.lockObject)
                 {
-                    innerDictionary.TryGetValue(address, out cachedImageTask);
+                    innerDictionary.TryGetValue(address, out var cachedImageTask);
 
                     if (cachedImageTask != null)
                     {
                         if (force)
                         {
                             this.innerDictionary.Remove(address);
-
-                            if (cachedImageTask.Status == TaskStatus.RanToCompletion)
-                                cachedImageTask.Result.Dispose();
-
-                            cachedImageTask.Dispose();
                             cachedImageTask = null;
                         }
                         else
@@ -129,13 +117,15 @@ namespace OpenTween
 
         private async Task<MemoryImage> FetchImageAsync(string uri, CancellationToken cancelToken)
         {
-            using (var response = await this.http.GetAsync(uri, cancelToken).ConfigureAwait(false))
+            using (var response = await Networking.Http.GetAsync(uri, cancelToken).ConfigureAwait(false))
             {
-                var imageStream = await response.Content.ReadAsStreamAsync()
-                    .ConfigureAwait(false);
+                response.EnsureSuccessStatusCode();
 
-                return await MemoryImage.CopyFromStreamAsync(imageStream)
-                    .ConfigureAwait(false);
+                using (var imageStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false))
+                {
+                    return await MemoryImage.CopyFromStreamAsync(imageStream)
+                        .ConfigureAwait(false);
+                }
             }
         }
 
@@ -143,8 +133,7 @@ namespace OpenTween
         {
             lock (this.lockObject)
             {
-                Task<MemoryImage> imageTask;
-                if (!this.innerDictionary.TryGetValue(address, out imageTask) ||
+                if (!this.innerDictionary.TryGetValue(address, out var imageTask) ||
                     imageTask.Status != TaskStatus.RanToCompletion)
                     return null;
 
@@ -174,11 +163,10 @@ namespace OpenTween
 
                 lock (this.lockObject)
                 {
-                    foreach (var item in this.innerDictionary)
+                    foreach (var (_, task) in this.innerDictionary)
                     {
-                        var task = item.Value;
-                        if (task.Status == TaskStatus.RanToCompletion && task.Result != null)
-                            task.Result.Dispose();
+                        if (task.Status == TaskStatus.RanToCompletion)
+                            task.Result?.Dispose();
                     }
 
                     this.innerDictionary.Clear();
@@ -196,8 +184,6 @@ namespace OpenTween
         }
 
         ~ImageCache()
-        {
-            this.Dispose(false);
-        }
+            => this.Dispose(false);
     }
 }