}
[Fact]
+ public void SelectedMediaItemChange_DisposeTest()
+ {
+ using var twitterApi = new TwitterApi(ApiKey.Create(""), ApiKey.Create(""));
+ using var twitter = new Twitter(twitterApi);
+ using var mediaSelector = new MediaSelector();
+ twitter.Initialize("", "", "", 0L);
+ mediaSelector.InitializeServices(twitter, TwitterConfiguration.DefaultConfiguration());
+ mediaSelector.SelectMediaService("Twitter");
+
+ var images = new[] { "Resources/re.gif", "Resources/re1.png" };
+ mediaSelector.AddMediaItemFromFilePath(images);
+
+ // 1 枚目
+ mediaSelector.SelectedMediaItemIndex = 0;
+ var firstImage = mediaSelector.SelectedMediaItemImage;
+
+ // 2 枚目
+ mediaSelector.SelectedMediaItemIndex = 1;
+ var secondImage = mediaSelector.SelectedMediaItemImage;
+
+ Assert.True(firstImage!.IsDisposed);
+ }
+
+ [Fact]
public void SetSelectedMediaAltText_Test()
{
using var twitterApi = new TwitterApi(ApiKey.Create(""), ApiKey.Create(""));
private readonly BindingList<IMediaItem> mediaItems = new();
private string selectedMediaServiceName = "";
private Guid? selectedMediaItemId = null;
+ private MemoryImage? selectedMediaItemImage = null;
public bool IsDisposed { get; private set; } = false;
public Guid? SelectedMediaItemId
{
get => this.selectedMediaItemId;
- set => this.SetProperty(ref this.selectedMediaItemId, value);
+ set
+ {
+ if (this.selectedMediaItemId == value)
+ return;
+
+ this.SetProperty(ref this.selectedMediaItemId, value);
+ this.LoadSelectedMediaItemImage();
+ }
}
public IMediaItem? SelectedMediaItem
set => this.SelectedMediaItemId = value != -1 ? this.MediaItems[value].Id : null;
}
+ public MemoryImage? SelectedMediaItemImage
+ {
+ get => this.selectedMediaItemImage;
+ set => this.SetProperty(ref this.selectedMediaItemImage, value);
+ }
+
/// <summary>
/// 指定された投稿先名から、作成済みの IMediaUploadService インスタンスを取得する。
/// </summary>
}
}
+ private void LoadSelectedMediaItemImage()
+ {
+ var previousImage = this.selectedMediaItemImage;
+
+ if (this.SelectedMediaItem == null)
+ {
+ this.SelectedMediaItemImage = null;
+ previousImage?.Dispose();
+ return;
+ }
+
+ this.SelectedMediaItemImage = this.CreateMediaItemImage(this.SelectedMediaItem);
+ previousImage?.Dispose();
+ }
+
+ private MemoryImage CreateMediaItemImage(IMediaItem media)
+ {
+ try
+ {
+ return media.CreateImage();
+ }
+ catch (InvalidImageException)
+ {
+ return MemoryImage.CopyFromImage(Properties.Resources.MultiMediaImage);
+ }
+ }
+
public void SetSelectedMediaAltText(string altText)
{
var selectedMedia = this.SelectedMediaItem;
case nameof(MediaSelector.SelectedMediaItemId):
this.UpdateSelectedMedia();
break;
+ case nameof(MediaSelector.SelectedMediaItemImage):
+ this.UpdateSelectedMediaImage();
+ break;
default:
break;
}
{
this.AlternativeTextBox.Text = "";
this.AlternativeTextPanel.Enabled = false;
- this.ImageSelectedPicture.ShowInitialImage();
}
else
{
this.AlternativeTextBox.Text = selectedMedia.AltText;
this.AlternativeTextPanel.Enabled = true;
- this.ImageSelectedPicture.Image = selectedMedia.CreateImage();
}
}
}
+ private void UpdateSelectedMediaImage()
+ => this.ImageSelectedPicture.Image = this.Model.SelectedMediaItemImage;
+
private void ImageServiceCombo_SelectedIndexChanged(object sender, EventArgs e)
=> this.Model.SelectedMediaServiceName = this.ImageServiceCombo.Text;