修訂 | aca0e34d49ee7f7c8e896b093e1e70c740b9ef90 (tree) |
---|---|
時間 | 2022-09-03 01:22:30 |
作者 | Kimura Youichi <kim.upsilon@bucy...> |
Commiter | Kimura Youichi |
Merge branch 'develop' into release
@@ -1,3 +1,8 @@ | ||
1 | +[*.csproj] | |
2 | +indent_style = space | |
3 | +indent_size = 2 | |
4 | +tab_width = 2 | |
5 | + | |
1 | 6 | [*.cs] |
2 | 7 | indent_style = space |
3 | 8 | tab_width = 4 |
@@ -40,6 +40,7 @@ | ||
40 | 40 | <PrivateAssets>all</PrivateAssets> |
41 | 41 | <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> |
42 | 42 | </PackageReference> |
43 | + <PackageReference Include="Xunit.StaFact" Version="1.1.11" /> | |
43 | 44 | </ItemGroup> |
44 | 45 | <ItemGroup> |
45 | 46 | <None Update="Resources\re.gif"> |
@@ -104,7 +104,7 @@ namespace OpenTween | ||
104 | 104 | MyCommon.EntryAssembly = mockAssembly.Object; |
105 | 105 | } |
106 | 106 | |
107 | - [Fact] | |
107 | + [WinFormsFact] | |
108 | 108 | public void CreatePictureBoxTest() |
109 | 109 | { |
110 | 110 | using var thumbBox = new TweetThumbnail(); |
@@ -121,7 +121,7 @@ namespace OpenTween | ||
121 | 121 | picbox.Dispose(); |
122 | 122 | } |
123 | 123 | |
124 | - [Fact] | |
124 | + [WinFormsFact] | |
125 | 125 | public async Task CancelAsyncTest() |
126 | 126 | { |
127 | 127 | var post = new PostClass |
@@ -138,7 +138,6 @@ namespace OpenTween | ||
138 | 138 | |
139 | 139 | using var tokenSource = new CancellationTokenSource(); |
140 | 140 | |
141 | - SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); | |
142 | 141 | var task = thumbbox.ShowThumbnailAsync(post, tokenSource.Token); |
143 | 142 | |
144 | 143 | tokenSource.Cancel(); |
@@ -147,7 +146,7 @@ namespace OpenTween | ||
147 | 146 | Assert.True(task.IsCanceled); |
148 | 147 | } |
149 | 148 | |
150 | - [Theory] | |
149 | + [WinFormsTheory] | |
151 | 150 | [InlineData(0)] |
152 | 151 | [InlineData(1)] |
153 | 152 | [InlineData(2)] |
@@ -178,7 +177,7 @@ namespace OpenTween | ||
178 | 177 | Assert.Equal(count - 1, thumbbox.scrollBar.Maximum); |
179 | 178 | } |
180 | 179 | |
181 | - [Fact] | |
180 | + [WinFormsFact] | |
182 | 181 | public async Task ShowThumbnailAsyncTest() |
183 | 182 | { |
184 | 183 | var post = new PostClass |
@@ -193,7 +192,6 @@ namespace OpenTween | ||
193 | 192 | using var thumbbox = new TweetThumbnail(); |
194 | 193 | thumbbox.Initialize(this.CreateThumbnailGenerator()); |
195 | 194 | |
196 | - SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); | |
197 | 195 | await thumbbox.ShowThumbnailAsync(post); |
198 | 196 | |
199 | 197 | Assert.Equal(0, thumbbox.scrollBar.Maximum); |
@@ -211,7 +209,7 @@ namespace OpenTween | ||
211 | 209 | Assert.Equal("", thumbbox.toolTip.GetToolTip(thumbbox.PictureBox[0])); |
212 | 210 | } |
213 | 211 | |
214 | - [Fact] | |
212 | + [WinFormsFact] | |
215 | 213 | public async Task ShowThumbnailAsyncTest2() |
216 | 214 | { |
217 | 215 | var post = new PostClass |
@@ -227,7 +225,6 @@ namespace OpenTween | ||
227 | 225 | using var thumbbox = new TweetThumbnail(); |
228 | 226 | thumbbox.Initialize(this.CreateThumbnailGenerator()); |
229 | 227 | |
230 | - SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); | |
231 | 228 | await thumbbox.ShowThumbnailAsync(post); |
232 | 229 | |
233 | 230 | Assert.Equal(1, thumbbox.scrollBar.Maximum); |
@@ -253,14 +250,12 @@ namespace OpenTween | ||
253 | 250 | Assert.Equal("efgh", thumbbox.toolTip.GetToolTip(thumbbox.PictureBox[1])); |
254 | 251 | } |
255 | 252 | |
256 | - [Fact] | |
253 | + [WinFormsFact] | |
257 | 254 | public async Task ThumbnailLoadingEventTest() |
258 | 255 | { |
259 | 256 | using var thumbbox = new TweetThumbnail(); |
260 | 257 | thumbbox.Initialize(this.CreateThumbnailGenerator()); |
261 | 258 | |
262 | - SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); | |
263 | - | |
264 | 259 | var post = new PostClass |
265 | 260 | { |
266 | 261 | TextFromApi = "てすと", |
@@ -274,8 +269,6 @@ namespace OpenTween | ||
274 | 269 | () => thumbbox.ShowThumbnailAsync(post) |
275 | 270 | ); |
276 | 271 | |
277 | - SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); | |
278 | - | |
279 | 272 | var post2 = new PostClass |
280 | 273 | { |
281 | 274 | TextFromApi = "てすと http://foo.example.com/abcd", |
@@ -292,7 +285,7 @@ namespace OpenTween | ||
292 | 285 | ); |
293 | 286 | } |
294 | 287 | |
295 | - [Fact] | |
288 | + [WinFormsFact] | |
296 | 289 | public async Task ScrollTest() |
297 | 290 | { |
298 | 291 | var post = new PostClass |
@@ -308,7 +301,6 @@ namespace OpenTween | ||
308 | 301 | using var thumbbox = new TweetThumbnail(); |
309 | 302 | thumbbox.Initialize(this.CreateThumbnailGenerator()); |
310 | 303 | |
311 | - SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); | |
312 | 304 | await thumbbox.ShowThumbnailAsync(post); |
313 | 305 | |
314 | 306 | Assert.Equal(0, thumbbox.scrollBar.Minimum); |
@@ -128,7 +128,8 @@ namespace OpenTween.Api | ||
128 | 128 | using var response = await this.Http.SendAsync(request) |
129 | 129 | .ConfigureAwait(false); |
130 | 130 | |
131 | - response.EnsureSuccessStatusCode(); | |
131 | + if (!response.IsSuccessStatusCode) | |
132 | + throw new WebApiException(response.StatusCode.ToString()); | |
132 | 133 | |
133 | 134 | var accessToken = await response.Content.ReadAsStringAsync() |
134 | 135 | .ConfigureAwait(false); |
@@ -91,25 +91,21 @@ namespace OpenTween | ||
91 | 91 | |
92 | 92 | return Task.Run(() => |
93 | 93 | { |
94 | + Task<MemoryImage>? cachedImageTask; | |
94 | 95 | lock (this.lockObject) |
95 | - { | |
96 | - this.InnerDictionary.TryGetValue(address, out var cachedImageTask); | |
96 | + this.InnerDictionary.TryGetValue(address, out cachedImageTask); | |
97 | 97 | |
98 | - if (cachedImageTask != null) | |
99 | - { | |
100 | - if (force) | |
101 | - this.InnerDictionary.Remove(address); | |
102 | - else | |
103 | - return cachedImageTask; | |
104 | - } | |
98 | + if (cachedImageTask != null && !force) | |
99 | + return cachedImageTask; | |
105 | 100 | |
106 | - cancelToken.ThrowIfCancellationRequested(); | |
101 | + cancelToken.ThrowIfCancellationRequested(); | |
107 | 102 | |
108 | - var imageTask = this.FetchImageAsync(address, cancelToken); | |
103 | + var imageTask = this.FetchImageAsync(address, cancelToken); | |
104 | + | |
105 | + lock (this.lockObject) | |
109 | 106 | this.InnerDictionary[address] = imageTask; |
110 | 107 | |
111 | - return imageTask; | |
112 | - } | |
108 | + return imageTask; | |
113 | 109 | }, |
114 | 110 | cancelToken); |
115 | 111 | } |
@@ -112,7 +112,7 @@ namespace OpenTween | ||
112 | 112 | if (useStatusImage) |
113 | 113 | this.ShowInitialImage(); |
114 | 114 | |
115 | - var image = await imageTask(); | |
115 | + var image = await Task.Run(imageTask); | |
116 | 116 | |
117 | 117 | if (id == this.currentImageTaskId) |
118 | 118 | this.Image = image; |
@@ -22,7 +22,7 @@ using System.Runtime.InteropServices; | ||
22 | 22 | // 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です |
23 | 23 | [assembly: Guid("2d0ae0ba-adac-49a2-9b10-26fd69e695bf")] |
24 | 24 | |
25 | -[assembly: AssemblyVersion("2.7.0.0")] | |
25 | +[assembly: AssemblyVersion("2.7.1.0")] | |
26 | 26 | |
27 | 27 | [assembly: InternalsVisibleTo("OpenTween.Tests")] |
28 | 28 | [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] // for Moq |
@@ -571,6 +571,10 @@ namespace OpenTween.Properties { | ||
571 | 571 | /// <summary> |
572 | 572 | /// 更新履歴 |
573 | 573 | /// |
574 | + ///==== Ver 2.7.1(2022/09/03) | |
575 | + /// * FIX: 発言一覧の選択位置を移動した際にデッドロックが発生する場合がある不具合を修正 (thx @Kazuki_Ashiya!) | |
576 | + /// * FIX: 発言本文の翻訳時に発生したエラーが適切に処理されない不具合を修正 | |
577 | + /// | |
574 | 578 | ///==== Ver 2.7.0(2022/07/30) |
575 | 579 | /// * NEW: 発言詳細部の日時ラベルをクリックするとWebブラウザを起動してツイートを表示する機能を追加 |
576 | 580 | /// * NEW: 設定画面に「Twitter API v2 の使用を有効にする」のチェックボックスを追加 |
@@ -578,11 +582,7 @@ namespace OpenTween.Properties { | ||
578 | 582 | /// - Twitter の API キーを独自に書き換えている場合で、Project への移行を完了できていない等の理由で API v2 を使用できない時はチェックを外してください |
579 | 583 | /// * CHG: 発言詳細部の名前ラベルを投稿者とRTしたユーザーで分けずに表示するように変更 |
580 | 584 | /// * FIX: タブの移動後に発言一覧が空の表示になる不具合を修正 |
581 | - /// * FIX: 読み込み中の待機ダイアログを表示する際にエラーが発生する不具合を修正 | |
582 | - /// * FIX: Recentタブの読み込み時にエラーダイアログが表示される場合がある不具合を修正 | |
583 | - /// * FIX: タブ名変更後にタイムラインを取得するとエラーが発生する不具合を修正 | |
584 | - /// | |
585 | - ///==== Ver 2 [残りの文字列は切り詰められました]"; に類似しているローカライズされた文字列を検索します。 | |
585 | + /// * FIX: [残りの文字列は切り詰められました]"; に類似しているローカライズされた文字列を検索します。 | |
586 | 586 | /// </summary> |
587 | 587 | internal static string ChangeLog { |
588 | 588 | get { |
@@ -1,5 +1,9 @@ | ||
1 | 1 | 更新履歴 |
2 | 2 | |
3 | +==== Ver 2.7.1(2022/09/03) | |
4 | + * FIX: 発言一覧の選択位置を移動した際にデッドロックが発生する場合がある不具合を修正 (thx @Kazuki_Ashiya!) | |
5 | + * FIX: 発言本文の翻訳時に発生したエラーが適切に処理されない不具合を修正 | |
6 | + | |
3 | 7 | ==== Ver 2.7.0(2022/07/30) |
4 | 8 | * NEW: 発言詳細部の日時ラベルをクリックするとWebブラウザを起動してツイートを表示する機能を追加 |
5 | 9 | * NEW: 設定画面に「Twitter API v2 の使用を有効にする」のチェックボックスを追加 |
@@ -131,8 +131,8 @@ namespace OpenTween | ||
131 | 131 | private string GetImageSearchUriSauceNao(string imageUri) |
132 | 132 | => @"https://saucenao.com/search.php?url=" + Uri.EscapeDataString(imageUri); |
133 | 133 | |
134 | - protected virtual Task<IEnumerable<ThumbnailInfo>> GetThumbailInfoAsync(PostClass post, CancellationToken token) | |
135 | - => this.ThumbGenerator.GetThumbnailsAsync(post, token); | |
134 | + protected async virtual Task<IEnumerable<ThumbnailInfo>> GetThumbailInfoAsync(PostClass post, CancellationToken token) | |
135 | + => await Task.Run(() => this.ThumbGenerator.GetThumbnailsAsync(post, token)); | |
136 | 136 | |
137 | 137 | /// <summary> |
138 | 138 | /// 表示するサムネイルの数を設定する |
@@ -1,4 +1,4 @@ | ||
1 | -version: 2.6.0.{build} | |
1 | +version: 2.7.0.{build} | |
2 | 2 | |
3 | 3 | os: Visual Studio 2022 |
4 | 4 |