string SupportedFormatsStrForDialog { get; }
/// <summary>
+ /// 代替テキストの設定が可能なサービスであるか
+ /// </summary>
+ bool CanUseAltText { get; }
+
+ /// <summary>
/// ファイルの拡張子からアップロード可能なフォーマットであるかを判定します
/// </summary>
/// <param name="fileExtension">アップロードするファイルの拡張子 (ピリオドを含む)</param>
}
}
+ public bool CanUseAltText => false;
+
public bool CheckFileExtension(string fileExtension)
{
return SupportedExtensions.Contains(fileExtension, StringComparer.OrdinalIgnoreCase);
}
}
+ public bool CanUseAltText => false;
+
public bool CheckFileExtension(string fileExtension)
{
return AllowedExtensions.Contains(fileExtension, StringComparer.OrdinalIgnoreCase);
}
}
+ public bool CanUseAltText => false;
+
public bool CheckFileExtension(string fileExtension)
{
return SupportedPictureExtensions.Contains(fileExtension, StringComparer.OrdinalIgnoreCase);
}
}
+ public bool CanUseAltText => true;
+
public bool CheckFileExtension(string fileExtension)
{
return this.pictureExt.Contains(fileExtension.ToLowerInvariant());
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);
}
{
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;
+ }
}
}
}
}
+ public bool CanUseAltText => false;
+
public bool CheckFileExtension(string fileExtension)
{
return this.pictureExt.Contains(fileExtension.ToLowerInvariant());
}
}
+ public bool CanUseAltText => false;
+
public bool CheckFileExtension(string fileExtension)
{
return this.pictureExt.Contains(fileExtension.ToLowerInvariant());
bool IsImage { get; }
/// <summary>
+ /// 代替テキスト (アップロード先が対応している必要がある)
+ /// </summary>
+ string AltText { get; set; }
+
+ /// <summary>
/// 表示用の MemoryImage を作成する
/// </summary>
/// <remarks>
public class FileMediaItem : IMediaItem
{
public FileInfo FileInfo { get; }
+ public string AltText { get; set; }
public FileMediaItem(string path)
{
}
public string Path { get; }
+ public string AltText { get; set; }
public string Name
{
}
}
- 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();