• R/O
  • HTTP
  • SSH
  • HTTPS

open-tween: 提交

開発に使用するリポジトリ


Commit MetaInfo

修訂056b345bed365dcd7ce61589c394c729bf69900e (tree)
時間2022-07-30 15:58:48
作者Kimura Youichi <kim.upsilon@bucy...>
CommiterKimura Youichi

Log Message

Merge branch 'develop' into release

Change Summary

差異

--- a/OpenTween.Tests/OTBaseFormTest.cs
+++ b/OpenTween.Tests/OTBaseFormTest.cs
@@ -43,6 +43,65 @@ namespace OpenTween
4343 => WindowsFormsSynchronizationContext.AutoInstall = false;
4444
4545 [Fact]
46+ public async Task InvokeAsync_Test()
47+ {
48+ using var form = new TestForm();
49+ await Task.Run(async () =>
50+ {
51+ await form.InvokeAsync(() => form.Text = "hoge");
52+ });
53+
54+ Assert.Equal("hoge", form.Text);
55+ }
56+
57+ [Fact]
58+ public async Task InvokeAsync_ReturnValueTest()
59+ {
60+ using var form = new TestForm();
61+ form.Text = "hoge";
62+
63+ await Task.Run(async () =>
64+ {
65+ var ret = await form.InvokeAsync(() => form.Text);
66+ Assert.Equal("hoge", ret);
67+ });
68+ }
69+
70+ [Fact]
71+ public async Task InvokeAsync_TaskTest()
72+ {
73+ using var form = new TestForm();
74+ await Task.Run(async () =>
75+ {
76+ await form.InvokeAsync(async () =>
77+ {
78+ await Task.Delay(1);
79+ form.Text = "hoge";
80+ });
81+ });
82+
83+ Assert.Equal("hoge", form.Text);
84+ }
85+
86+ [Fact]
87+ public async Task InvokeAsync_TaskWithValueTest()
88+ {
89+ using var form = new TestForm();
90+ form.Text = "hoge";
91+
92+ await Task.Run(async () =>
93+ {
94+ var ret = await form.InvokeAsync(async () =>
95+ {
96+ await Task.Delay(1);
97+ return form.Text;
98+ });
99+
100+ Assert.Equal("hoge", ret);
101+ });
102+ }
103+
104+ [Fact]
46105 public void ScaleChildControl_ListViewTest()
47106 {
48107 using var listview = new ListView { Width = 200, Height = 200 };
--- a/OpenTween/Api/DataModel/TwitterV2TweetIds.cs
+++ b/OpenTween/Api/DataModel/TwitterV2TweetIds.cs
@@ -29,6 +29,6 @@ namespace OpenTween.Api.DataModel
2929 public class TwitterV2TweetIds
3030 {
3131 [DataMember(Name = "data")]
32- public TwitterV2TweetId[] Data { get; set; }
32+ public TwitterV2TweetId[]? Data { get; set; }
3333 }
3434 }
--- a/OpenTween/Extensions.cs
+++ b/OpenTween/Extensions.cs
@@ -46,43 +46,6 @@ namespace OpenTween
4646 return selectedText;
4747 }
4848
49- public static Task InvokeAsync(this Control control, Action x)
50- {
51- return control.InvokeAsync(new Func<int>(() =>
52- {
53- x();
54- return 0;
55- }));
56- }
57-
58- public static Task InvokeAsync(this Control control, Func<Task> x)
59- => control.InvokeAsync<Task>(x).Unwrap();
60-
61- public static Task<T> InvokeAsync<T>(this Control control, Func<Task<T>> x)
62- => control.InvokeAsync<Task<T>>(x).Unwrap();
63-
64- /// <summary>
65- /// <see cref="Control.Invoke"/> メソッドのTask版みたいなやつ
66- /// </summary>
67- public static Task<T> InvokeAsync<T>(this Control control, Func<T> x)
68- {
69- var tcs = new TaskCompletionSource<T>();
70- control.BeginInvoke(() =>
71- {
72- try
73- {
74- var ret = x();
75- tcs.SetResult(ret);
76- }
77- catch (Exception ex)
78- {
79- tcs.SetException(ex);
80- }
81- });
82-
83- return tcs.Task;
84- }
85-
8649 public static ReadLockTransaction BeginReadTransaction(this ReaderWriterLockSlim lockObj)
8750 => new(lockObj);
8851
--- a/OpenTween/OTBaseForm.cs
+++ b/OpenTween/OTBaseForm.cs
@@ -54,9 +54,12 @@ namespace OpenTween
5454 /// </remarks>
5555 public SizeF CurrentScaleFactor { get; private set; }
5656
57+ private readonly SynchronizationContext synchronizationContext;
58+
5759 protected OTBaseForm()
5860 {
5961 this.CurrentScaleFactor = new SizeF(1.0f, 1.0f);
62+ this.synchronizationContext = SynchronizationContext.Current;
6063
6164 this.Load += (o, e) =>
6265 {
@@ -66,6 +69,44 @@ namespace OpenTween
6669 };
6770 }
6871
72+ public Task InvokeAsync(Action x)
73+ {
74+ return this.InvokeAsync(new Func<int>(() =>
75+ {
76+ x();
77+ return 0;
78+ }));
79+ }
80+
81+ public Task InvokeAsync(Func<Task> x)
82+ => this.InvokeAsync<Task>(x).Unwrap();
83+
84+ public Task<T> InvokeAsync<T>(Func<Task<T>> x)
85+ => this.InvokeAsync<Task<T>>(x).Unwrap();
86+
87+ /// <summary>
88+ /// <see cref="Control.Invoke"/> メソッドのTask版みたいなやつ
89+ /// </summary>
90+ public Task<T> InvokeAsync<T>(Func<T> x)
91+ {
92+ var tcs = new TaskCompletionSource<T>();
93+ this.synchronizationContext.Post(_ =>
94+ {
95+ try
96+ {
97+ var ret = x();
98+ tcs.SetResult(ret);
99+ }
100+ catch (Exception ex)
101+ {
102+ tcs.SetException(ex);
103+ }
104+ },
105+ null);
106+
107+ return tcs.Task;
108+ }
109+
69110 /// <summary>
70111 /// source で指定されたフォントのスタイルを維持しつつ GlobalFont に置き換えた Font を返します
71112 /// </summary>
--- a/OpenTween/Properties/AssemblyInfo.cs
+++ b/OpenTween/Properties/AssemblyInfo.cs
@@ -22,7 +22,7 @@ using System.Runtime.InteropServices;
2222 // 次の GUID は、このプロジェクトが COM に公開される場合の、typelib の ID です
2323 [assembly: Guid("2d0ae0ba-adac-49a2-9b10-26fd69e695bf")]
2424
25-[assembly: AssemblyVersion("2.6.0.0")]
25+[assembly: AssemblyVersion("2.7.0.0")]
2626
2727 [assembly: InternalsVisibleTo("OpenTween.Tests")]
2828 [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] // for Moq
--- a/OpenTween/Properties/Resources.Designer.cs
+++ b/OpenTween/Properties/Resources.Designer.cs
@@ -571,17 +571,18 @@ namespace OpenTween.Properties {
571571 /// <summary>
572572 /// 更新履歴
573573 ///
574- ///==== Ver 2.6.0(2022/07/24)
575- /// * NEW: Recentタブの発言の取得に Twitter API v2 を使用
576- /// - 従来の API v1.1 と比べて、15分間に取得できる回数の制限が15→180回に緩和、一度に取得できる件数が200→100件になります
577- /// * NEW: RTしたユーザーのプロフィール・タイムラインを表示する機能をメニューに追加 (thx @kzlogos!)
578- /// * NEW: 発言詳細欄の名前やアイコンのクリックによるプロフィール表示に対応
579- /// * NEW: クリップボード経由での複数枚の画像ファイル添付に対応
580- /// * NEW: 画面上に表示する解像度に応じたプロフィール画像の取得に対応
581- /// - 高DPI環境で表示した場合により高解像度のプロフィール画像が取得されるようになります
582- /// - リストのアイコンサイズを none に設定した場合、発言が選択されるまでプロフィール画像のダウンロードを行わなくなります
583- /// * NEW: 発言のダブルクリック時の動作に「Reply All」(@返信ALL)を追加
584- /// * NEW: 関連発言表 [残りの文字列は切り詰められました]&quot;; に類似しているローカライズされた文字列を検索します。
574+ ///==== Ver 2.7.0(2022/07/30)
575+ /// * NEW: 発言詳細部の日時ラベルをクリックするとWebブラウザを起動してツイートを表示する機能を追加
576+ /// * NEW: 設定画面に「Twitter API v2 の使用を有効にする」のチェックボックスを追加
577+ /// - デフォルトで API v2 が有効となり、通常は変更する必要はありません
578+ /// - Twitter の API キーを独自に書き換えている場合で、Project への移行を完了できていない等の理由で API v2 を使用できない時はチェックを外してください
579+ /// * CHG: 発言詳細部の名前ラベルを投稿者とRTしたユーザーで分けずに表示するように変更
580+ /// * FIX: タブの移動後に発言一覧が空の表示になる不具合を修正
581+ /// * FIX: 読み込み中の待機ダイアログを表示する際にエラーが発生する不具合を修正
582+ /// * FIX: Recentタブの読み込み時にエラーダイアログが表示される場合がある不具合を修正
583+ /// * FIX: タブ名変更後にタイムラインを取得するとエラーが発生する不具合を修正
584+ ///
585+ ///==== Ver 2 [残りの文字列は切り詰められました]&quot;; に類似しているローカライズされた文字列を検索します。
585586 /// </summary>
586587 internal static string ChangeLog {
587588 get {
--- a/OpenTween/Resources/ChangeLog.txt
+++ b/OpenTween/Resources/ChangeLog.txt
@@ -1,5 +1,16 @@
11 更新履歴
22
3+==== Ver 2.7.0(2022/07/30)
4+ * NEW: 発言詳細部の日時ラベルをクリックするとWebブラウザを起動してツイートを表示する機能を追加
5+ * NEW: 設定画面に「Twitter API v2 の使用を有効にする」のチェックボックスを追加
6+ - デフォルトで API v2 が有効となり、通常は変更する必要はありません
7+ - Twitter の API キーを独自に書き換えている場合で、Project への移行を完了できていない等の理由で API v2 を使用できない時はチェックを外してください
8+ * CHG: 発言詳細部の名前ラベルを投稿者とRTしたユーザーで分けずに表示するように変更
9+ * FIX: タブの移動後に発言一覧が空の表示になる不具合を修正
10+ * FIX: 読み込み中の待機ダイアログを表示する際にエラーが発生する不具合を修正
11+ * FIX: Recentタブの読み込み時にエラーダイアログが表示される場合がある不具合を修正
12+ * FIX: タブ名変更後にタイムラインを取得するとエラーが発生する不具合を修正
13+
314 ==== Ver 2.6.0(2022/07/24)
415 * NEW: Recentタブの発言の取得に Twitter API v2 を使用
516 - 従来の API v1.1 と比べて、15分間に取得できる回数の制限が15→180回に緩和、一度に取得できる件数が200→100件になります
--- a/OpenTween/Setting/Panel/ActionPanel.Designer.cs
+++ b/OpenTween/Setting/Panel/ActionPanel.Designer.cs
@@ -51,6 +51,7 @@
5151 this.CheckCloseToExit = new System.Windows.Forms.CheckBox();
5252 this.CheckMinimizeToTray = new System.Windows.Forms.CheckBox();
5353 this.CheckReadOldPosts = new System.Windows.Forms.CheckBox();
54+ this.CheckEnableTwitterV2Api = new System.Windows.Forms.CheckBox();
5455 this.GroupBox3.SuspendLayout();
5556 this.SuspendLayout();
5657 //
@@ -205,6 +206,12 @@
205206 this.CheckReadOldPosts.Name = "CheckReadOldPosts";
206207 this.CheckReadOldPosts.UseVisualStyleBackColor = true;
207208 //
209+ // CheckEnableTwitterV2Api
210+ //
211+ resources.ApplyResources(this.CheckEnableTwitterV2Api, "CheckEnableTwitterV2Api");
212+ this.CheckEnableTwitterV2Api.Name = "CheckEnableTwitterV2Api";
213+ this.CheckEnableTwitterV2Api.UseVisualStyleBackColor = true;
214+ //
208215 // ActionPanel
209216 //
210217 resources.ApplyResources(this, "$this");
@@ -224,6 +231,7 @@
224231 this.Controls.Add(this.CheckCloseToExit);
225232 this.Controls.Add(this.CheckMinimizeToTray);
226233 this.Controls.Add(this.CheckReadOldPosts);
234+ this.Controls.Add(this.CheckEnableTwitterV2Api);
227235 this.Name = "ActionPanel";
228236 this.GroupBox3.ResumeLayout(false);
229237 this.GroupBox3.PerformLayout();
@@ -256,5 +264,6 @@
256264 internal System.Windows.Forms.CheckBox CheckCloseToExit;
257265 internal System.Windows.Forms.CheckBox CheckMinimizeToTray;
258266 internal System.Windows.Forms.CheckBox CheckReadOldPosts;
267+ private System.Windows.Forms.CheckBox CheckEnableTwitterV2Api;
259268 }
260269 }
--- a/OpenTween/Setting/Panel/ActionPanel.cs
+++ b/OpenTween/Setting/Panel/ActionPanel.cs
@@ -48,6 +48,7 @@ namespace OpenTween.Setting.Panel
4848 this.BrowserPathText.Text = settingLocal.BrowserPath;
4949 this.CheckCloseToExit.Checked = settingCommon.CloseToExit;
5050 this.CheckMinimizeToTray.Checked = settingCommon.MinimizeToTray;
51+ this.CheckEnableTwitterV2Api.Checked = settingCommon.EnableTwitterV2Api;
5152 this.CheckFavRestrict.Checked = settingCommon.RestrictFavCheck;
5253 this.chkReadOwnPost.Checked = settingCommon.ReadOwnPost;
5354 this.CheckReadOldPosts.Checked = settingCommon.ReadOldPosts;
@@ -90,6 +91,7 @@ namespace OpenTween.Setting.Panel
9091 settingLocal.BrowserPath = this.BrowserPathText.Text.Trim();
9192 settingCommon.CloseToExit = this.CheckCloseToExit.Checked;
9293 settingCommon.MinimizeToTray = this.CheckMinimizeToTray.Checked;
94+ settingCommon.EnableTwitterV2Api = this.CheckEnableTwitterV2Api.Checked;
9395 settingCommon.RestrictFavCheck = this.CheckFavRestrict.Checked;
9496 settingCommon.ReadOwnPost = this.chkReadOwnPost.Checked;
9597 settingCommon.ReadOldPosts = this.CheckReadOldPosts.Checked;
--- a/OpenTween/Setting/Panel/ActionPanel.en.resx
+++ b/OpenTween/Setting/Panel/ActionPanel.en.resx
@@ -8,6 +8,8 @@
88 <data name="Button3.Text"><value>Open...</value></data>
99 <data name="CheckCloseToExit.Size" type="System.Drawing.Size, System.Drawing"><value>150, 16</value></data>
1010 <data name="CheckCloseToExit.Text"><value>Close to Exit application</value></data>
11+ <data name="CheckEnableTwitterV2Api.Size" type="System.Drawing.Size, System.Drawing"><value>172, 16</value></data>
12+ <data name="CheckEnableTwitterV2Api.Text"><value>Enable use of Twitter API v2</value></data>
1113 <data name="CheckFavRestrict.Size" type="System.Drawing.Size, System.Drawing"><value>149, 16</value></data>
1214 <data name="CheckFavRestrict.Text"><value>Check fav result strictly</value></data>
1315 <data name="CheckMinimizeToTray.Size" type="System.Drawing.Size, System.Drawing"><value>106, 16</value></data>
--- a/OpenTween/Setting/Panel/ActionPanel.resx
+++ b/OpenTween/Setting/Panel/ActionPanel.resx
@@ -24,6 +24,10 @@
2424 <data name="&gt;&gt;CheckCloseToExit.Parent"><value>$this</value></data>
2525 <data name="&gt;&gt;CheckCloseToExit.Type"><value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
2626 <data name="&gt;&gt;CheckCloseToExit.ZOrder"><value>12</value></data>
27+ <data name="&gt;&gt;CheckEnableTwitterV2Api.Name"><value>CheckEnableTwitterV2Api</value></data>
28+ <data name="&gt;&gt;CheckEnableTwitterV2Api.Parent"><value>$this</value></data>
29+ <data name="&gt;&gt;CheckEnableTwitterV2Api.Type"><value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
30+ <data name="&gt;&gt;CheckEnableTwitterV2Api.ZOrder"><value>15</value></data>
2731 <data name="&gt;&gt;CheckFavRestrict.Name"><value>CheckFavRestrict</value></data>
2832 <data name="&gt;&gt;CheckFavRestrict.Parent"><value>$this</value></data>
2933 <data name="&gt;&gt;CheckFavRestrict.Type"><value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
@@ -100,53 +104,59 @@
100104 <data name="&gt;&gt;UReadMng.Parent"><value>$this</value></data>
101105 <data name="&gt;&gt;UReadMng.Type"><value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
102106 <data name="&gt;&gt;UReadMng.ZOrder"><value>10</value></data>
103- <data name="BrowserPathText.Location" type="System.Drawing.Point, System.Drawing"><value>185, 101</value></data>
107+ <data name="BrowserPathText.Location" type="System.Drawing.Point, System.Drawing"><value>180, 113</value></data>
104108 <data name="BrowserPathText.Size" type="System.Drawing.Size, System.Drawing"><value>228, 19</value></data>
105- <data name="BrowserPathText.TabIndex" type="System.Int32, mscorlib"><value>24</value></data>
109+ <data name="BrowserPathText.TabIndex" type="System.Int32, mscorlib"><value>5</value></data>
106110 <data name="Button3.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"><value>NoControl</value></data>
107- <data name="Button3.Location" type="System.Drawing.Point, System.Drawing"><value>419, 100</value></data>
111+ <data name="Button3.Location" type="System.Drawing.Point, System.Drawing"><value>414, 112</value></data>
108112 <data name="Button3.Size" type="System.Drawing.Size, System.Drawing"><value>75, 21</value></data>
109- <data name="Button3.TabIndex" type="System.Int32, mscorlib"><value>25</value></data>
113+ <data name="Button3.TabIndex" type="System.Int32, mscorlib"><value>6</value></data>
110114 <data name="Button3.Text"><value>参照</value></data>
111115 <data name="CheckCloseToExit.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
112116 <data name="CheckCloseToExit.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"><value>NoControl</value></data>
113- <data name="CheckCloseToExit.Location" type="System.Drawing.Point, System.Drawing"><value>23, 57</value></data>
117+ <data name="CheckCloseToExit.Location" type="System.Drawing.Point, System.Drawing"><value>23, 63</value></data>
114118 <data name="CheckCloseToExit.Size" type="System.Drawing.Size, System.Drawing"><value>171, 16</value></data>
115- <data name="CheckCloseToExit.TabIndex" type="System.Int32, mscorlib"><value>21</value></data>
119+ <data name="CheckCloseToExit.TabIndex" type="System.Int32, mscorlib"><value>2</value></data>
116120 <data name="CheckCloseToExit.Text"><value>×ボタンを押したときに終了する</value></data>
121+ <data name="CheckEnableTwitterV2Api.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
122+ <data name="CheckEnableTwitterV2Api.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"><value>NoControl</value></data>
123+ <data name="CheckEnableTwitterV2Api.Location" type="System.Drawing.Point, System.Drawing"><value>21, 142</value></data>
124+ <data name="CheckEnableTwitterV2Api.Size" type="System.Drawing.Size, System.Drawing"><value>197, 16</value></data>
125+ <data name="CheckEnableTwitterV2Api.TabIndex" type="System.Int32, mscorlib"><value>7</value></data>
126+ <data name="CheckEnableTwitterV2Api.Text"><value>Twitter API v2 の使用を有効にする</value></data>
117127 <data name="CheckFavRestrict.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
118128 <data name="CheckFavRestrict.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"><value>NoControl</value></data>
119- <data name="CheckFavRestrict.Location" type="System.Drawing.Point, System.Drawing"><value>23, 126</value></data>
129+ <data name="CheckFavRestrict.Location" type="System.Drawing.Point, System.Drawing"><value>21, 167</value></data>
120130 <data name="CheckFavRestrict.Size" type="System.Drawing.Size, System.Drawing"><value>183, 16</value></data>
121- <data name="CheckFavRestrict.TabIndex" type="System.Int32, mscorlib"><value>26</value></data>
131+ <data name="CheckFavRestrict.TabIndex" type="System.Int32, mscorlib"><value>8</value></data>
122132 <data name="CheckFavRestrict.Text"><value>Fav操作結果を厳密にチェックする</value></data>
123133 <data name="CheckMinimizeToTray.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
124134 <data name="CheckMinimizeToTray.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"><value>NoControl</value></data>
125- <data name="CheckMinimizeToTray.Location" type="System.Drawing.Point, System.Drawing"><value>23, 79</value></data>
135+ <data name="CheckMinimizeToTray.Location" type="System.Drawing.Point, System.Drawing"><value>21, 88</value></data>
126136 <data name="CheckMinimizeToTray.Size" type="System.Drawing.Size, System.Drawing"><value>170, 16</value></data>
127- <data name="CheckMinimizeToTray.TabIndex" type="System.Int32, mscorlib"><value>22</value></data>
137+ <data name="CheckMinimizeToTray.TabIndex" type="System.Int32, mscorlib"><value>3</value></data>
128138 <data name="CheckMinimizeToTray.Text"><value>最小化したときにアイコン化する</value></data>
129139 <data name="CheckOpenUserTimeline.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
130140 <data name="CheckOpenUserTimeline.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"><value>NoControl</value></data>
131- <data name="CheckOpenUserTimeline.Location" type="System.Drawing.Point, System.Drawing"><value>23, 165</value></data>
141+ <data name="CheckOpenUserTimeline.Location" type="System.Drawing.Point, System.Drawing"><value>21, 212</value></data>
132142 <data name="CheckOpenUserTimeline.Size" type="System.Drawing.Size, System.Drawing"><value>180, 16</value></data>
133- <data name="CheckOpenUserTimeline.TabIndex" type="System.Int32, mscorlib"><value>28</value></data>
143+ <data name="CheckOpenUserTimeline.TabIndex" type="System.Int32, mscorlib"><value>10</value></data>
134144 <data name="CheckOpenUserTimeline.Text"><value>ユーザーのホームURLをタブで開く</value></data>
135145 <data name="CheckReadOldPosts.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
136146 <data name="CheckReadOldPosts.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"><value>NoControl</value></data>
137- <data name="CheckReadOldPosts.Location" type="System.Drawing.Point, System.Drawing"><value>23, 35</value></data>
147+ <data name="CheckReadOldPosts.Location" type="System.Drawing.Point, System.Drawing"><value>23, 38</value></data>
138148 <data name="CheckReadOldPosts.Size" type="System.Drawing.Size, System.Drawing"><value>145, 16</value></data>
139- <data name="CheckReadOldPosts.TabIndex" type="System.Int32, mscorlib"><value>20</value></data>
149+ <data name="CheckReadOldPosts.TabIndex" type="System.Int32, mscorlib"><value>1</value></data>
140150 <data name="CheckReadOldPosts.Text"><value>新着時に未読をクリアする</value></data>
141151 <data name="chkReadOwnPost.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
142152 <data name="chkReadOwnPost.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"><value>NoControl</value></data>
143- <data name="chkReadOwnPost.Location" type="System.Drawing.Point, System.Drawing"><value>23, 187</value></data>
153+ <data name="chkReadOwnPost.Location" type="System.Drawing.Point, System.Drawing"><value>21, 237</value></data>
144154 <data name="chkReadOwnPost.Size" type="System.Drawing.Size, System.Drawing"><value>143, 16</value></data>
145- <data name="chkReadOwnPost.TabIndex" type="System.Int32, mscorlib"><value>29</value></data>
155+ <data name="chkReadOwnPost.TabIndex" type="System.Int32, mscorlib"><value>11</value></data>
146156 <data name="chkReadOwnPost.Text"><value>自分の発言を既読にする</value></data>
147- <data name="GroupBox3.Location" type="System.Drawing.Point, System.Drawing"><value>24, 257</value></data>
157+ <data name="GroupBox3.Location" type="System.Drawing.Point, System.Drawing"><value>23, 316</value></data>
148158 <data name="GroupBox3.Size" type="System.Drawing.Size, System.Drawing"><value>473, 43</value></data>
149- <data name="GroupBox3.TabIndex" type="System.Int32, mscorlib"><value>33</value></data>
159+ <data name="GroupBox3.TabIndex" type="System.Int32, mscorlib"><value>15</value></data>
150160 <data name="GroupBox3.Text"><value>ホットキー</value></data>
151161 <data name="HotkeyAlt.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
152162 <data name="HotkeyAlt.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"><value>NoControl</value></data>
@@ -190,22 +200,22 @@
190200 <data name="HotkeyWin.Text"><value>Win</value></data>
191201 <data name="Label38.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
192202 <data name="Label38.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"><value>NoControl</value></data>
193- <data name="Label38.Location" type="System.Drawing.Point, System.Drawing"><value>24, 212</value></data>
203+ <data name="Label38.Location" type="System.Drawing.Point, System.Drawing"><value>18, 265</value></data>
194204 <data name="Label38.Size" type="System.Drawing.Size, System.Drawing"><value>142, 12</value></data>
195- <data name="Label38.TabIndex" type="System.Int32, mscorlib"><value>30</value></data>
205+ <data name="Label38.TabIndex" type="System.Int32, mscorlib"><value>12</value></data>
196206 <data name="Label38.Text"><value>発言をダブルクリック時の動作</value></data>
197207 <data name="Label44.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
198208 <data name="Label44.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"><value>NoControl</value></data>
199- <data name="Label44.Location" type="System.Drawing.Point, System.Drawing"><value>23, 104</value></data>
209+ <data name="Label44.Location" type="System.Drawing.Point, System.Drawing"><value>18, 116</value></data>
200210 <data name="Label44.Size" type="System.Drawing.Size, System.Drawing"><value>60, 12</value></data>
201- <data name="Label44.TabIndex" type="System.Int32, mscorlib"><value>23</value></data>
211+ <data name="Label44.TabIndex" type="System.Int32, mscorlib"><value>4</value></data>
202212 <data name="Label44.Text"><value>ブラウザパス</value></data>
203213 <data name="Label57.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
204214 <data name="Label57.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"><value>NoControl</value></data>
205- <data name="Label57.Location" type="System.Drawing.Point, System.Drawing"><value>23, 145</value></data>
215+ <data name="Label57.Location" type="System.Drawing.Point, System.Drawing"><value>23, 189</value></data>
206216 <data name="Label57.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms"><value>3, 0, 3, 5</value></data>
207217 <data name="Label57.Size" type="System.Drawing.Size, System.Drawing"><value>340, 12</value></data>
208- <data name="Label57.TabIndex" type="System.Int32, mscorlib"><value>27</value></data>
218+ <data name="Label57.TabIndex" type="System.Int32, mscorlib"><value>9</value></data>
209219 <data name="Label57.Text"><value>発言を再取得してFav結果を検証します。通信量が増えるのでOff推奨</value></data>
210220 <data name="ListDoubleClickActionComboBox.Items"><value>なし</value></data>
211221 <data name="ListDoubleClickActionComboBox.Items1"><value>Reply</value></data>
@@ -216,19 +226,19 @@
216226 <data name="ListDoubleClickActionComboBox.Items6"><value>関連発言表示</value></data>
217227 <data name="ListDoubleClickActionComboBox.Items7"><value>ユーザーのHomeを開く</value></data>
218228 <data name="ListDoubleClickActionComboBox.Items8"><value>ステータスをWebで開く</value></data>
219- <data name="ListDoubleClickActionComboBox.Location" type="System.Drawing.Point, System.Drawing"><value>263, 209</value></data>
229+ <data name="ListDoubleClickActionComboBox.Location" type="System.Drawing.Point, System.Drawing"><value>257, 262</value></data>
220230 <data name="ListDoubleClickActionComboBox.Size" type="System.Drawing.Size, System.Drawing"><value>232, 20</value></data>
221- <data name="ListDoubleClickActionComboBox.TabIndex" type="System.Int32, mscorlib"><value>31</value></data>
231+ <data name="ListDoubleClickActionComboBox.TabIndex" type="System.Int32, mscorlib"><value>13</value></data>
222232 <data name="TabMouseLockCheck.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
223233 <data name="TabMouseLockCheck.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"><value>NoControl</value></data>
224- <data name="TabMouseLockCheck.Location" type="System.Drawing.Point, System.Drawing"><value>23, 235</value></data>
234+ <data name="TabMouseLockCheck.Location" type="System.Drawing.Point, System.Drawing"><value>21, 291</value></data>
225235 <data name="TabMouseLockCheck.Size" type="System.Drawing.Size, System.Drawing"><value>164, 16</value></data>
226- <data name="TabMouseLockCheck.TabIndex" type="System.Int32, mscorlib"><value>32</value></data>
236+ <data name="TabMouseLockCheck.TabIndex" type="System.Int32, mscorlib"><value>14</value></data>
227237 <data name="TabMouseLockCheck.Text"><value>マウスでのタブ移動を禁止する</value></data>
228238 <data name="UReadMng.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
229239 <data name="UReadMng.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"><value>NoControl</value></data>
230240 <data name="UReadMng.Location" type="System.Drawing.Point, System.Drawing"><value>23, 13</value></data>
231241 <data name="UReadMng.Size" type="System.Drawing.Size, System.Drawing"><value>100, 16</value></data>
232- <data name="UReadMng.TabIndex" type="System.Int32, mscorlib"><value>19</value></data>
242+ <data name="UReadMng.TabIndex" type="System.Int32, mscorlib"><value>0</value></data>
233243 <data name="UReadMng.Text"><value>未読管理を行う</value></data>
234244 </root>
--- a/OpenTween/Setting/SettingCommon.cs
+++ b/OpenTween/Setting/SettingCommon.cs
@@ -156,6 +156,12 @@ namespace OpenTween
156156 public bool TinyUrlResolve = true;
157157 public bool StartupVersion = true;
158158 public bool StartupFollowers = true;
159+
160+ /// <summary>
161+ /// Twitter API v2 の使用を有効にする
162+ /// </summary>
163+ public bool EnableTwitterV2Api { get; set; } = true;
164+
159165 public bool RestrictFavCheck = false;
160166 public bool AlwaysTop = false;
161167 public string CultureCode = "";
--- a/OpenTween/TimelineListViewDrawer.cs
+++ b/OpenTween/TimelineListViewDrawer.cs
@@ -69,6 +69,7 @@ namespace OpenTween
6969 };
7070
7171 private readonly DetailsListView listView;
72+ private readonly OTBaseForm parentForm;
7273 private readonly TabModel tab;
7374 private readonly TimelineListViewCache listViewCache;
7475 private readonly ImageCache iconCache;
@@ -84,6 +85,7 @@ namespace OpenTween
8485 )
8586 {
8687 this.listView = listView;
88+ this.parentForm = (OTBaseForm)listView.FindForm();
8789 this.tab = tab;
8890 this.listViewCache = listViewCache;
8991 this.iconCache = iconCache;
@@ -202,7 +204,7 @@ namespace OpenTween
202204 return;
203205 }
204206
205- await this.listView.InvokeAsync(() =>
207+ await this.parentForm.InvokeAsync(() =>
206208 {
207209 if (this.listView.IsDisposed)
208210 return;
--- a/OpenTween/Tween.cs
+++ b/OpenTween/Tween.cs
@@ -5929,6 +5929,10 @@ namespace OpenTween
59295929
59305930 this.statuses.RenameTab(origTabName, newTabName);
59315931
5932+ var state = this.listViewState[origTabName];
5933+ this.listViewState.Remove(origTabName);
5934+ this.listViewState[newTabName] = state;
5935+
59325936 this.SaveConfigsCommon();
59335937 this.SaveConfigsTabs();
59345938 this.rclickTabName = newTabName;
@@ -6038,6 +6042,11 @@ namespace OpenTween
60386042
60396043 using (ControlTransaction.Layout(this.ListTab))
60406044 {
6045+ // 選択中のタブを Remove メソッドで取り外すと選択状態が変化して Selecting イベントが発生するが、
6046+ // この時 TabInformations と TabControl の並び順が不一致なままで ListTabSelect メソッドが呼ばれてしまう。
6047+ // これを防ぐために、Remove メソッドを呼ぶ前に選択中のタブを切り替えておく必要がある
6048+ this.ListTab.SelectedIndex = targetIndex == 0 ? 1 : 0;
6049+
60416050 var tab = this.statuses.Tabs[targetIndex];
60426051 var tabPage = this.ListTab.TabPages[targetIndex];
60436052
--- a/OpenTween/TweetDetailsView.Designer.cs
+++ b/OpenTween/TweetDetailsView.Designer.cs
@@ -45,9 +45,7 @@
4545 this.IconNameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
4646 this.ReloadIconToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
4747 this.SaveIconPictureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
48- this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
49- this.AuthorNameLinkLabel = new System.Windows.Forms.LinkLabel();
50- this.RetweetedByLinkLabel = new System.Windows.Forms.LinkLabel();
48+ this.NameLinkLabel = new System.Windows.Forms.LinkLabel();
5149 this.PostBrowser = new System.Windows.Forms.WebBrowser();
5250 this.ContextMenuPostBrowser = new System.Windows.Forms.ContextMenuStrip(this.components);
5351 this.SelectionSearchContextMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -75,7 +73,7 @@
7573 this.UseHashtagMenuItem = new System.Windows.Forms.ToolStripMenuItem();
7674 this.SelectionTranslationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
7775 this.TranslationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
78- this.DateTimeLabel = new System.Windows.Forms.Label();
76+ this.DateTimeLabel = new System.Windows.Forms.LinkLabel();
7977 this.SourceLinkLabel = new System.Windows.Forms.LinkLabel();
8078 this.ContextMenuSource = new System.Windows.Forms.ContextMenuStrip(this.components);
8179 this.SourceCopyMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -83,7 +81,6 @@
8381 this.TableLayoutPanel1.SuspendLayout();
8482 ((System.ComponentModel.ISupportInitialize)(this.UserPicture)).BeginInit();
8583 this.ContextMenuUserPicture.SuspendLayout();
86- this.flowLayoutPanel1.SuspendLayout();
8784 this.ContextMenuPostBrowser.SuspendLayout();
8885 this.ContextMenuSource.SuspendLayout();
8986 this.SuspendLayout();
@@ -92,7 +89,7 @@
9289 //
9390 resources.ApplyResources(this.TableLayoutPanel1, "TableLayoutPanel1");
9491 this.TableLayoutPanel1.Controls.Add(this.UserPicture, 0, 0);
95- this.TableLayoutPanel1.Controls.Add(this.flowLayoutPanel1, 1, 0);
92+ this.TableLayoutPanel1.Controls.Add(this.NameLinkLabel, 1, 0);
9693 this.TableLayoutPanel1.Controls.Add(this.PostBrowser, 1, 1);
9794 this.TableLayoutPanel1.Controls.Add(this.DateTimeLabel, 2, 0);
9895 this.TableLayoutPanel1.Controls.Add(this.SourceLinkLabel, 3, 0);
@@ -201,34 +198,16 @@
201198 resources.ApplyResources(this.SaveIconPictureToolStripMenuItem, "SaveIconPictureToolStripMenuItem");
202199 this.SaveIconPictureToolStripMenuItem.Click += new System.EventHandler(this.SaveIconPictureToolStripMenuItem_Click);
203200 //
204- // flowLayoutPanel1
201+ // NameLinkLabel
205202 //
206- resources.ApplyResources(this.flowLayoutPanel1, "flowLayoutPanel1");
207- this.flowLayoutPanel1.Controls.Add(this.AuthorNameLinkLabel);
208- this.flowLayoutPanel1.Controls.Add(this.RetweetedByLinkLabel);
209- this.flowLayoutPanel1.Name = "flowLayoutPanel1";
210- //
211- // AuthorNameLinkLabel
212- //
213- this.AuthorNameLinkLabel.ActiveLinkColor = System.Drawing.SystemColors.ControlText;
214- resources.ApplyResources(this.AuthorNameLinkLabel, "AuthorNameLinkLabel");
215- this.AuthorNameLinkLabel.AutoEllipsis = true;
216- this.AuthorNameLinkLabel.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;
217- this.AuthorNameLinkLabel.LinkColor = System.Drawing.SystemColors.ControlText;
218- this.AuthorNameLinkLabel.Name = "AuthorNameLinkLabel";
219- this.AuthorNameLinkLabel.TabStop = true;
220- this.AuthorNameLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.AuthorNameLinkLabel_LinkClicked);
221- //
222- // RetweetedByLinkLabel
223- //
224- this.RetweetedByLinkLabel.ActiveLinkColor = System.Drawing.SystemColors.ControlText;
225- resources.ApplyResources(this.RetweetedByLinkLabel, "RetweetedByLinkLabel");
226- this.RetweetedByLinkLabel.AutoEllipsis = true;
227- this.RetweetedByLinkLabel.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;
228- this.RetweetedByLinkLabel.LinkColor = System.Drawing.SystemColors.ControlText;
229- this.RetweetedByLinkLabel.Name = "RetweetedByLinkLabel";
230- this.RetweetedByLinkLabel.TabStop = true;
231- this.RetweetedByLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.RetweetedByLinkLabel_LinkClicked);
203+ this.NameLinkLabel.ActiveLinkColor = System.Drawing.SystemColors.ControlText;
204+ resources.ApplyResources(this.NameLinkLabel, "NameLinkLabel");
205+ this.NameLinkLabel.AutoEllipsis = true;
206+ this.NameLinkLabel.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;
207+ this.NameLinkLabel.LinkColor = System.Drawing.SystemColors.ControlText;
208+ this.NameLinkLabel.Name = "NameLinkLabel";
209+ this.NameLinkLabel.TabStop = true;
210+ this.NameLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.NameLinkLabel_LinkClicked);
232211 //
233212 // PostBrowser
234213 //
@@ -422,9 +401,14 @@
422401 //
423402 // DateTimeLabel
424403 //
404+ this.DateTimeLabel.ActiveLinkColor = System.Drawing.SystemColors.ControlText;
425405 resources.ApplyResources(this.DateTimeLabel, "DateTimeLabel");
426406 this.DateTimeLabel.AutoEllipsis = true;
407+ this.DateTimeLabel.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;
408+ this.DateTimeLabel.LinkColor = System.Drawing.SystemColors.ControlText;
427409 this.DateTimeLabel.Name = "DateTimeLabel";
410+ this.DateTimeLabel.TabStop = true;
411+ this.DateTimeLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.DateTimeLabel_LinkClicked);
428412 //
429413 // SourceLinkLabel
430414 //
@@ -469,8 +453,6 @@
469453 this.TableLayoutPanel1.PerformLayout();
470454 ((System.ComponentModel.ISupportInitialize)(this.UserPicture)).EndInit();
471455 this.ContextMenuUserPicture.ResumeLayout(false);
472- this.flowLayoutPanel1.ResumeLayout(false);
473- this.flowLayoutPanel1.PerformLayout();
474456 this.ContextMenuPostBrowser.ResumeLayout(false);
475457 this.ContextMenuSource.ResumeLayout(false);
476458 this.ResumeLayout(false);
@@ -481,11 +463,7 @@
481463
482464 internal System.Windows.Forms.TableLayoutPanel TableLayoutPanel1;
483465 internal OTPictureBox UserPicture;
484- private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
485- private System.Windows.Forms.LinkLabel AuthorNameLinkLabel;
486- private System.Windows.Forms.LinkLabel RetweetedByLinkLabel;
487466 internal System.Windows.Forms.WebBrowser PostBrowser;
488- internal System.Windows.Forms.Label DateTimeLabel;
489467 internal System.Windows.Forms.LinkLabel SourceLinkLabel;
490468 internal System.Windows.Forms.ContextMenuStrip ContextMenuPostBrowser;
491469 internal System.Windows.Forms.ToolStripMenuItem SelectionSearchContextMenuItem;
@@ -529,5 +507,7 @@
529507 internal System.Windows.Forms.ContextMenuStrip ContextMenuSource;
530508 internal System.Windows.Forms.ToolStripMenuItem SourceCopyMenuItem;
531509 internal System.Windows.Forms.ToolStripMenuItem SourceUrlCopyMenuItem;
510+ private System.Windows.Forms.LinkLabel DateTimeLabel;
511+ private System.Windows.Forms.LinkLabel NameLinkLabel;
532512 }
533513 }
--- a/OpenTween/TweetDetailsView.cs
+++ b/OpenTween/TweetDetailsView.cs
@@ -94,8 +94,7 @@ namespace OpenTween
9494 this.TabStop = false;
9595
9696 // 発言詳細部の初期化
97- this.AuthorNameLinkLabel.Text = "";
98- this.RetweetedByLinkLabel.Text = "";
97+ this.NameLinkLabel.Text = "";
9998 this.DateTimeLabel.Text = "";
10099 this.SourceLinkLabel.Text = "";
101100
@@ -140,18 +139,10 @@ namespace OpenTween
140139 nameText = "";
141140 }
142141 nameText += post.ScreenName + "/" + post.Nickname;
143- this.AuthorNameLinkLabel.Text = nameText;
144-
145142 if (post.RetweetedId != null)
146- {
147- this.RetweetedByLinkLabel.Visible = true;
148- this.RetweetedByLinkLabel.Text = $"(RT:{post.RetweetedBy})";
149- }
150- else
151- {
152- this.RetweetedByLinkLabel.Visible = false;
153- this.RetweetedByLinkLabel.Text = "";
154- }
143+ nameText += $" (RT:{post.RetweetedBy})";
144+
145+ this.NameLinkLabel.Text = nameText;
155146
156147 var nameForeColor = SystemColors.ControlText;
157148 if (post.IsOwl && (SettingManager.Instance.Common.OneWayLove || post.IsDm))
@@ -161,10 +152,8 @@ namespace OpenTween
161152 if (post.IsFav)
162153 nameForeColor = this.Theme.ColorFav;
163154
164- this.AuthorNameLinkLabel.LinkColor = nameForeColor;
165- this.AuthorNameLinkLabel.ActiveLinkColor = nameForeColor;
166- this.RetweetedByLinkLabel.LinkColor = nameForeColor;
167- this.RetweetedByLinkLabel.ActiveLinkColor = nameForeColor;
155+ this.NameLinkLabel.LinkColor = nameForeColor;
156+ this.NameLinkLabel.ActiveLinkColor = nameForeColor;
168157
169158 loadTasks.Add(this.SetUserPictureAsync(post.ImageUrl));
170159
@@ -479,9 +468,8 @@ namespace OpenTween
479468 private void TweetDetailsView_FontChanged(object sender, EventArgs e)
480469 {
481470 // OTBaseForm.GlobalFont による UI フォントの変更に対応
482- var origFont = this.AuthorNameLinkLabel.Font;
483- this.AuthorNameLinkLabel.Font = new Font(this.Font.Name, origFont.Size, origFont.Style);
484- this.RetweetedByLinkLabel.Font = new Font(this.Font.Name, origFont.Size, origFont.Style);
471+ var origFont = this.NameLinkLabel.Font;
472+ this.NameLinkLabel.Font = new Font(this.Font.Name, origFont.Size, origFont.Style);
485473 }
486474
487475 #region TableLayoutPanel1
@@ -1111,18 +1099,20 @@ namespace OpenTween
11111099
11121100 #endregion
11131101
1114- private async void AuthorNameLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
1102+ private async void NameLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
11151103 {
11161104 var screenName = this.CurrentPost?.ScreenName;
11171105 if (screenName != null)
11181106 await this.Owner.ShowUserStatus(screenName, showInputDialog: false);
11191107 }
11201108
1121- private async void RetweetedByLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
1109+ private async void DateTimeLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
11221110 {
1123- var screenName = this.CurrentPost?.RetweetedBy;
1124- if (screenName != null)
1125- await this.Owner.ShowUserStatus(screenName, showInputDialog: false);
1111+ if (this.CurrentPost == null)
1112+ return;
1113+
1114+ var statusUrl = MyCommon.GetStatusUrl(this.CurrentPost);
1115+ await MyCommon.OpenInBrowserAsync(this, statusUrl);
11261116 }
11271117 }
11281118
--- a/OpenTween/TweetDetailsView.resx
+++ b/OpenTween/TweetDetailsView.resx
@@ -12,10 +12,6 @@
1212 <data name="$this.Size" type="System.Drawing.Size, System.Drawing"><value>511, 85</value></data>
1313 <data name="&gt;&gt;$this.Name"><value>TweetDetailsView</value></data>
1414 <data name="&gt;&gt;$this.Type"><value>System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
15- <data name="&gt;&gt;AuthorNameLinkLabel.Name"><value>AuthorNameLinkLabel</value></data>
16- <data name="&gt;&gt;AuthorNameLinkLabel.Parent"><value>flowLayoutPanel1</value></data>
17- <data name="&gt;&gt;AuthorNameLinkLabel.Type"><value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
18- <data name="&gt;&gt;AuthorNameLinkLabel.ZOrder"><value>0</value></data>
1915 <data name="&gt;&gt;ContextMenuPostBrowser.Name"><value>ContextMenuPostBrowser</value></data>
2016 <data name="&gt;&gt;ContextMenuPostBrowser.Type"><value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
2117 <data name="&gt;&gt;ContextMenuSource.Name"><value>ContextMenuSource</value></data>
@@ -26,12 +22,8 @@
2622 <data name="&gt;&gt;CurrentTabToolStripMenuItem.Type"><value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
2723 <data name="&gt;&gt;DateTimeLabel.Name"><value>DateTimeLabel</value></data>
2824 <data name="&gt;&gt;DateTimeLabel.Parent"><value>TableLayoutPanel1</value></data>
29- <data name="&gt;&gt;DateTimeLabel.Type"><value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
25+ <data name="&gt;&gt;DateTimeLabel.Type"><value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
3026 <data name="&gt;&gt;DateTimeLabel.ZOrder"><value>3</value></data>
31- <data name="&gt;&gt;flowLayoutPanel1.Name"><value>flowLayoutPanel1</value></data>
32- <data name="&gt;&gt;flowLayoutPanel1.Parent"><value>TableLayoutPanel1</value></data>
33- <data name="&gt;&gt;flowLayoutPanel1.Type"><value>System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
34- <data name="&gt;&gt;flowLayoutPanel1.ZOrder"><value>4</value></data>
3527 <data name="&gt;&gt;FollowContextMenuItem.Name"><value>FollowContextMenuItem</value></data>
3628 <data name="&gt;&gt;FollowContextMenuItem.Type"><value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
3729 <data name="&gt;&gt;FollowToolStripMenuItem.Name"><value>FollowToolStripMenuItem</value></data>
@@ -48,6 +40,10 @@
4840 <data name="&gt;&gt;ListManageUserContextToolStripMenuItem.Type"><value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
4941 <data name="&gt;&gt;ListManageUserContextToolStripMenuItem3.Name"><value>ListManageUserContextToolStripMenuItem3</value></data>
5042 <data name="&gt;&gt;ListManageUserContextToolStripMenuItem3.Type"><value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
43+ <data name="&gt;&gt;NameLinkLabel.Name"><value>NameLinkLabel</value></data>
44+ <data name="&gt;&gt;NameLinkLabel.Parent"><value>TableLayoutPanel1</value></data>
45+ <data name="&gt;&gt;NameLinkLabel.Type"><value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
46+ <data name="&gt;&gt;NameLinkLabel.ZOrder"><value>1</value></data>
5147 <data name="&gt;&gt;PostBrowser.Name"><value>PostBrowser</value></data>
5248 <data name="&gt;&gt;PostBrowser.Parent"><value>TableLayoutPanel1</value></data>
5349 <data name="&gt;&gt;PostBrowser.Type"><value>System.Windows.Forms.WebBrowser, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
@@ -56,10 +52,6 @@
5652 <data name="&gt;&gt;ReloadIconToolStripMenuItem.Type"><value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
5753 <data name="&gt;&gt;RemoveContextMenuItem.Name"><value>RemoveContextMenuItem</value></data>
5854 <data name="&gt;&gt;RemoveContextMenuItem.Type"><value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
59- <data name="&gt;&gt;RetweetedByLinkLabel.Name"><value>RetweetedByLinkLabel</value></data>
60- <data name="&gt;&gt;RetweetedByLinkLabel.Parent"><value>flowLayoutPanel1</value></data>
61- <data name="&gt;&gt;RetweetedByLinkLabel.Type"><value>System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
62- <data name="&gt;&gt;RetweetedByLinkLabel.ZOrder"><value>1</value></data>
6355 <data name="&gt;&gt;SaveIconPictureToolStripMenuItem.Name"><value>SaveIconPictureToolStripMenuItem</value></data>
6456 <data name="&gt;&gt;SaveIconPictureToolStripMenuItem.Type"><value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value></data>
6557 <data name="&gt;&gt;SearchAtPostsDetailNameToolStripMenuItem.Name"><value>SearchAtPostsDetailNameToolStripMenuItem</value></data>
@@ -128,15 +120,6 @@
128120 <data name="&gt;&gt;UserPicture.Parent"><value>TableLayoutPanel1</value></data>
129121 <data name="&gt;&gt;UserPicture.Type"><value>OpenTween.OTPictureBox, OpenTween, Version=0.1.0.0, Culture=neutral, PublicKeyToken=null</value></data>
130122 <data name="&gt;&gt;UserPicture.ZOrder"><value>0</value></data>
131- <data name="AuthorNameLinkLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms"><value>Bottom</value></data>
132- <data name="AuthorNameLinkLabel.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
133- <data name="AuthorNameLinkLabel.Font" type="System.Drawing.Font, System.Drawing"><value>MS UI Gothic, 9pt, style=Bold</value></data>
134- <data name="AuthorNameLinkLabel.Location" type="System.Drawing.Point, System.Drawing"><value>3, 3</value></data>
135- <data name="AuthorNameLinkLabel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms"><value>3, 3, 0, 0</value></data>
136- <data name="AuthorNameLinkLabel.Size" type="System.Drawing.Size, System.Drawing"><value>135, 12</value></data>
137- <data name="AuthorNameLinkLabel.TabIndex" type="System.Int32, mscorlib"><value>0</value></data>
138- <data name="AuthorNameLinkLabel.Text"><value>AuthorNameLinkLabel</value></data>
139- <data name="AuthorNameLinkLabel.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing"><value>MiddleLeft</value></data>
140123 <data name="ContextMenuPostBrowser.Size" type="System.Drawing.Size, System.Drawing"><value>232, 386</value></data>
141124 <metadata name="ContextMenuPostBrowser.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"><value>17, 17</value></metadata>
142125 <data name="ContextMenuSource.Size" type="System.Drawing.Size, System.Drawing"><value>168, 48</value></data>
@@ -147,21 +130,12 @@
147130 <data name="CurrentTabToolStripMenuItem.Text"><value>現在のタブ(&amp;L)</value></data>
148131 <data name="DateTimeLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms"><value>Top, Bottom, Right</value></data>
149132 <data name="DateTimeLabel.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
150- <data name="DateTimeLabel.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"><value>Off</value></data>
151133 <data name="DateTimeLabel.Location" type="System.Drawing.Point, System.Drawing"><value>405, 3</value></data>
152134 <data name="DateTimeLabel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms"><value>3, 3, 3, 0</value></data>
153135 <data name="DateTimeLabel.Size" type="System.Drawing.Size, System.Drawing"><value>38, 12</value></data>
154136 <data name="DateTimeLabel.TabIndex" type="System.Int32, mscorlib"><value>1</value></data>
155137 <data name="DateTimeLabel.Text"><value>Label1</value></data>
156138 <data name="DateTimeLabel.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing"><value>MiddleRight</value></data>
157- <data name="flowLayoutPanel1.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
158- <data name="flowLayoutPanel1.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms"><value>GrowAndShrink</value></data>
159- <data name="flowLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms"><value>Fill</value></data>
160- <data name="flowLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing"><value>56, 0</value></data>
161- <data name="flowLayoutPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms"><value>0, 0, 0, 0</value></data>
162- <data name="flowLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing"><value>346, 15</value></data>
163- <data name="flowLayoutPanel1.TabIndex" type="System.Int32, mscorlib"><value>0</value></data>
164- <data name="flowLayoutPanel1.WrapContents" type="System.Boolean, mscorlib"><value>False</value></data>
165139 <data name="FollowContextMenuItem.Size" type="System.Drawing.Size, System.Drawing"><value>231, 22</value></data>
166140 <data name="FollowContextMenuItem.Text"><value>フォローする(&amp;F)</value></data>
167141 <data name="FollowToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing"><value>231, 22</value></data>
@@ -178,6 +152,14 @@
178152 <data name="ListManageUserContextToolStripMenuItem.Text"><value>リスト管理(&amp;L)</value></data>
179153 <data name="ListManageUserContextToolStripMenuItem3.Size" type="System.Drawing.Size, System.Drawing"><value>231, 22</value></data>
180154 <data name="ListManageUserContextToolStripMenuItem3.Text"><value>リスト管理(&amp;L)</value></data>
155+ <data name="NameLinkLabel.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms"><value>Fill</value></data>
156+ <data name="NameLinkLabel.Font" type="System.Drawing.Font, System.Drawing"><value>MS UI Gothic, 9pt, style=Bold</value></data>
157+ <data name="NameLinkLabel.Location" type="System.Drawing.Point, System.Drawing"><value>59, 3</value></data>
158+ <data name="NameLinkLabel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms"><value>3, 3, 3, 0</value></data>
159+ <data name="NameLinkLabel.Size" type="System.Drawing.Size, System.Drawing"><value>340, 12</value></data>
160+ <data name="NameLinkLabel.TabIndex" type="System.Int32, mscorlib"><value>0</value></data>
161+ <data name="NameLinkLabel.Text"><value>NameLinkLabel</value></data>
162+ <data name="NameLinkLabel.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing"><value>MiddleLeft</value></data>
181163 <data name="PostBrowser.AccessibleName"><value>発言本文</value></data>
182164 <data name="PostBrowser.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms"><value>Fill</value></data>
183165 <data name="PostBrowser.Location" type="System.Drawing.Point, System.Drawing"><value>59, 20</value></data>
@@ -187,16 +169,6 @@
187169 <data name="ReloadIconToolStripMenuItem.Text"><value>再読み込み(&amp;R)</value></data>
188170 <data name="RemoveContextMenuItem.Size" type="System.Drawing.Size, System.Drawing"><value>231, 22</value></data>
189171 <data name="RemoveContextMenuItem.Text"><value>フォロー解除(&amp;N)</value></data>
190- <data name="RetweetedByLinkLabel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms"><value>Bottom</value></data>
191- <data name="RetweetedByLinkLabel.AutoSize" type="System.Boolean, mscorlib"><value>True</value></data>
192- <data name="RetweetedByLinkLabel.Font" type="System.Drawing.Font, System.Drawing"><value>MS UI Gothic, 9pt, style=Bold</value></data>
193- <data name="RetweetedByLinkLabel.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms"><value>NoControl</value></data>
194- <data name="RetweetedByLinkLabel.Location" type="System.Drawing.Point, System.Drawing"><value>141, 3</value></data>
195- <data name="RetweetedByLinkLabel.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms"><value>3, 3, 0, 0</value></data>
196- <data name="RetweetedByLinkLabel.Size" type="System.Drawing.Size, System.Drawing"><value>141, 12</value></data>
197- <data name="RetweetedByLinkLabel.TabIndex" type="System.Int32, mscorlib"><value>1</value></data>
198- <data name="RetweetedByLinkLabel.Text"><value>RetweetedByLinkLabel</value></data>
199- <data name="RetweetedByLinkLabel.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing"><value>MiddleLeft</value></data>
200172 <data name="SaveIconPictureToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing"><value>231, 22</value></data>
201173 <data name="SaveIconPictureToolStripMenuItem.Text"><value>保存(&amp;I)...</value></data>
202174 <data name="SearchAtPostsDetailNameToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing"><value>231, 22</value></data>
@@ -244,7 +216,7 @@
244216 <data name="TableLayoutPanel1.AccessibleName"><value /></data>
245217 <data name="TableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib"><value>4</value></data>
246218 <data name="TableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms"><value>Fill</value></data>
247- <data name="TableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms"><value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="UserPicture" Row="0" RowSpan="2" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="flowLayoutPanel1" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="PostBrowser" Row="1" RowSpan="1" Column="1" ColumnSpan="3" /&gt;&lt;Control Name="DateTimeLabel" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /&gt;&lt;Control Name="SourceLinkLabel" Row="0" RowSpan="1" Column="3" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Absolute,56,Percent,100,AutoSize,0,AutoSize,0" /&gt;&lt;Rows Styles="AutoSize,0,Percent,100" /&gt;&lt;/TableLayoutSettings&gt;</value></data>
219+ <data name="TableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms"><value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="UserPicture" Row="0" RowSpan="2" Column="0" ColumnSpan="1" /&gt;&lt;Control Name="NameLinkLabel" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /&gt;&lt;Control Name="PostBrowser" Row="1" RowSpan="1" Column="1" ColumnSpan="3" /&gt;&lt;Control Name="DateTimeLabel" Row="0" RowSpan="1" Column="2" ColumnSpan="1" /&gt;&lt;Control Name="SourceLinkLabel" Row="0" RowSpan="1" Column="3" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Absolute,56,Percent,100,AutoSize,0,AutoSize,0" /&gt;&lt;Rows Styles="AutoSize,0,Percent,100,Absolute,20" /&gt;&lt;/TableLayoutSettings&gt;</value></data>
248220 <data name="TableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing"><value>0, 0</value></data>
249221 <data name="TableLayoutPanel1.RowCount" type="System.Int32, mscorlib"><value>2</value></data>
250222 <data name="TableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing"><value>511, 85</value></data>
--- a/OpenTween/Twitter.cs
+++ b/OpenTween/Twitter.cs
@@ -510,19 +510,33 @@ namespace OpenTween
510510
511511 var count = GetApiResultCount(MyCommon.WORKERTYPE.Timeline, more, startup);
512512
513- var request = new GetTimelineRequest(this.UserId)
513+ TwitterStatus[] statuses;
514+ if (SettingManager.Instance.Common.EnableTwitterV2Api)
514515 {
515- MaxResults = count,
516- UntilId = more ? tab.OldestId.ToString() : null,
517- };
516+ var request = new GetTimelineRequest(this.UserId)
517+ {
518+ MaxResults = count,
519+ UntilId = more ? tab.OldestId.ToString() : null,
520+ };
518521
519- var response = await request.Send(this.Api.Connection)
520- .ConfigureAwait(false);
522+ var response = await request.Send(this.Api.Connection)
523+ .ConfigureAwait(false);
521524
522- var tweetIds = response.Data.Select(x => x.Id).ToList();
525+ if (response.Data == null || response.Data.Length == 0)
526+ return;
523527
524- var statuses = await this.Api.StatusesLookup(tweetIds)
525- .ConfigureAwait(false);
528+ var tweetIds = response.Data.Select(x => x.Id).ToList();
529+
530+ statuses = await this.Api.StatusesLookup(tweetIds)
531+ .ConfigureAwait(false);
532+ }
533+ else
534+ {
535+ var maxId = more ? tab.OldestId : (long?)null;
536+
537+ statuses = await this.Api.StatusesHomeTimeline(count, maxId)
538+ .ConfigureAwait(false);
539+ }
526540
527541 var minimumId = this.CreatePostsFromJson(statuses, MyCommon.WORKERTYPE.Timeline, tab, read);
528542 if (minimumId != null)
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,4 +1,4 @@
1-version: 2.5.0.{build}
1+version: 2.6.0.{build}
22
33 os: Visual Studio 2022
44
@@ -21,7 +21,6 @@ matrix:
2121 branches:
2222 only:
2323 - develop
24- - release
2524 - /^OpenTween.+/ # release tag
2625
2726 for:
Show on old repository browser