OSDN Git Service

IMediaItem.AltTextを追加, TwitterPhotoクラスで代替テキストのメタデータを送信
authorKimura Youichi <kim.upsilon@bucyou.net>
Fri, 27 May 2016 18:37:41 +0000 (03:37 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Fri, 27 May 2016 19:42:57 +0000 (04:42 +0900)
OpenTween/Connection/IMediaUploadService.cs
OpenTween/Connection/Imgur.cs
OpenTween/Connection/Mobypicture.cs
OpenTween/Connection/TwipplePhoto.cs
OpenTween/Connection/TwitterPhoto.cs
OpenTween/Connection/imgly.cs
OpenTween/Connection/yfrog.cs
OpenTween/MediaItem.cs
OpenTween/Twitter.cs

index 54de9c0..ede832e 100644 (file)
@@ -45,6 +45,11 @@ namespace OpenTween.Connection
         string SupportedFormatsStrForDialog { get; }
 
         /// <summary>
+        /// 代替テキストの設定が可能なサービスであるか
+        /// </summary>
+        bool CanUseAltText { get; }
+
+        /// <summary>
         /// ファイルの拡張子からアップロード可能なフォーマットであるかを判定します
         /// </summary>
         /// <param name="fileExtension">アップロードするファイルの拡張子 (ピリオドを含む)</param>
index 455bbdc..c75ee3f 100644 (file)
@@ -77,6 +77,8 @@ namespace OpenTween.Connection
             }
         }
 
+        public bool CanUseAltText => false;
+
         public bool CheckFileExtension(string fileExtension)
         {
             return SupportedExtensions.Contains(fileExtension, StringComparer.OrdinalIgnoreCase);
index 4c541da..daa2afb 100644 (file)
@@ -108,6 +108,8 @@ namespace OpenTween.Connection
             }
         }
 
+        public bool CanUseAltText => false;
+
         public bool CheckFileExtension(string fileExtension)
         {
             return AllowedExtensions.Contains(fileExtension, StringComparer.OrdinalIgnoreCase);
index 2afa7a5..6e83645 100644 (file)
@@ -88,6 +88,8 @@ namespace OpenTween.Connection
             }
         }
 
+        public bool CanUseAltText => false;
+
         public bool CheckFileExtension(string fileExtension)
         {
             return SupportedPictureExtensions.Contains(fileExtension, StringComparer.OrdinalIgnoreCase);
index 363beb2..ae21f86 100644 (file)
@@ -60,6 +60,8 @@ namespace OpenTween.Connection
             }
         }
 
+        public bool CanUseAltText => true;
+
         public bool CheckFileExtension(string fileExtension)
         {
             return this.pictureExt.Contains(fileExtension.ToLowerInvariant());
@@ -93,7 +95,13 @@ namespace OpenTween.Connection
                     throw new ArgumentException("Err:Media not found.");
             }
 
-            await this.tw.PostStatusWithMultipleMedia(text, inReplyToStatusId, mediaItems)
+            var uploadTasks = from m in mediaItems
+                              select this.UploadMediaItem(m);
+
+            var mediaIds = await Task.WhenAll(uploadTasks)
+                .ConfigureAwait(false);
+
+            await this.tw.PostStatus(text, inReplyToStatusId, mediaIds)
                 .ConfigureAwait(false);
         }
 
@@ -107,5 +115,19 @@ namespace OpenTween.Connection
         {
             this.twitterConfig = config;
         }
+
+        private async Task<long> UploadMediaItem(IMediaItem mediaItem)
+        {
+            var mediaId = await this.tw.UploadMedia(mediaItem)
+                .ConfigureAwait(false);
+
+            if (!string.IsNullOrEmpty(mediaItem.AltText))
+            {
+                await this.tw.Api.MediaMetadataCreate(mediaId, mediaItem.AltText)
+                    .ConfigureAwait(false);
+            }
+
+            return mediaId;
+        }
     }
 }
index fe92d42..1c7f8f7 100644 (file)
@@ -71,6 +71,8 @@ namespace OpenTween.Connection
             }
         }
 
+        public bool CanUseAltText => false;
+
         public bool CheckFileExtension(string fileExtension)
         {
             return this.pictureExt.Contains(fileExtension.ToLowerInvariant());
index 80dc76c..7da90aa 100644 (file)
@@ -71,6 +71,8 @@ namespace OpenTween.Connection
             }
         }
 
+        public bool CanUseAltText => false;
+
         public bool CheckFileExtension(string fileExtension)
         {
             return this.pictureExt.Contains(fileExtension.ToLowerInvariant());
index 5fc7507..aeb98ad 100644 (file)
@@ -60,6 +60,11 @@ namespace OpenTween
         bool IsImage { get; }
 
         /// <summary>
+        /// 代替テキスト (アップロード先が対応している必要がある)
+        /// </summary>
+        string AltText { get; set; }
+
+        /// <summary>
         /// 表示用の MemoryImage を作成する
         /// </summary>
         /// <remarks>
@@ -87,6 +92,7 @@ namespace OpenTween
     public class FileMediaItem : IMediaItem
     {
         public FileInfo FileInfo { get; }
+        public string AltText { get; set; }
 
         public FileMediaItem(string path)
         {
@@ -198,6 +204,7 @@ namespace OpenTween
         }
 
         public string Path { get; }
+        public string AltText { get; set; }
 
         public string Name
         {
index b092c14..170bace 100644 (file)
@@ -423,30 +423,6 @@ namespace OpenTween
             }
         }
 
-        public async Task PostStatusWithMultipleMedia(string postStr, long? reply_to, IMediaItem[] mediaItems)
-        {
-            this.CheckAccountState();
-
-            if (Twitter.DMSendTextRegex.IsMatch(postStr))
-            {
-                await this.SendDirectMessage(postStr)
-                    .ConfigureAwait(false);
-                return;
-            }
-
-            if (mediaItems.Length == 0)
-                throw new WebApiException("Err:Invalid Files!");
-
-            var uploadTasks = from m in mediaItems
-                              select this.UploadMedia(m);
-
-            var mediaIds = await Task.WhenAll(uploadTasks)
-                .ConfigureAwait(false);
-
-            await this.PostStatus(postStr, reply_to, mediaIds)
-                .ConfigureAwait(false);
-        }
-
         public async Task<long> UploadMedia(IMediaItem item)
         {
             this.CheckAccountState();