Skip to content

Commit 7fc3ac2

Browse files
committed
v1.50.1: 429休止画面の既定非表示化・各種改善
API制限(429)時の休止画面を既定で非表示に変更し、設定で切替可能に。自動復帰時の強制リロード追加、API関連設定の整理、カラム追加時のフラグ適用修正、メモリ解放ボタン廃止、自己更新の堅牢化、リソース・Readme・バージョン更新などを含む。
1 parent 45ff89a commit 7fc3ac2

16 files changed

Lines changed: 130 additions & 40 deletions

Helpers/Logger.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public static class Logger
1515
/// デバッグログを出力するかどうかのフラグ。
1616
/// リリース時や不要な時は false にします(既定値: false)。
1717
/// </summary>
18-
public static bool EnableDebugLog { get; set; } = false;
18+
public static bool EnableDebugLog { get; set; } = true;
1919

2020
// ===== Public Methods =====
2121

Models/AppSettings.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,11 @@ public class AppSettings
123123
/// </summary>
124124
public bool IgnoreRateLimit429 { get; set; } = false;
125125

126+
/// <summary>
127+
/// API制限(429)検知時に休止画面を表示するか(既定: 非表示)。
128+
/// </summary>
129+
public bool ShowRateLimit429Screen { get; set; } = false;
130+
126131
/// <summary>
127132
/// アプリ全体の音量(0.0~1.0)。
128133
/// </summary>

Models/ColumnData.cs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -333,15 +333,6 @@ private async Task ManualRefreshAsync()
333333
await ReloadWebViewAsync(forceReload: true);
334334
}
335335

336-
/// <summary>
337-
/// メモリ解放のためのクリア(DOM破棄&再ナビゲーション)。
338-
/// </summary>
339-
[RelayCommand]
340-
private async Task ClearAsync()
341-
{
342-
await ResetAndClearAsync();
343-
}
344-
345336
/// <summary>
346337
/// 「戻る」操作。ロック中は無効。実際のWebView操作は View に委譲します。
347338
/// </summary>
@@ -689,6 +680,8 @@ private void OnRateLimitCountdownTick(object? sender, EventArgs e)
689680
_rateLimitCountdownTimer?.Stop();
690681
RateLimitStatus = ColumnRateLimitStatus.Normal; // ※UpdateTimerのStopedガードより前に解除
691682
UpdateTimer(true);
683+
// 429後はX側がエラー画面を表示していることがあり、ソフト更新では復帰できないため強制リロードする
684+
_ = ReloadWebViewAsync(forceReload: true);
692685
Logger.Log($"[Rate Limit] Refresh resumed: {Url}");
693686
}
694687
else
@@ -777,8 +770,10 @@ private void OnRateLimitResumeTick(object? sender, EventArgs e)
777770

778771
IsRateLimited = false;
779772
IsSuspended = false;
780-
//SuspendRequested?.Invoke(this, false); // 元URLへ復帰(手動復帰と同じ経路)
781-
UpdateTimer(true); // 自動更新を再開
773+
UpdateTimer(true); // 自動更新タイマーを再開
774+
// 429休止画面(NavigateToString)でDOMが差し替わっている可能性があるため、
775+
// 復帰時は強制リロードでタイムラインを確実に復元し、即時更新する。
776+
_ = ReloadWebViewAsync(forceReload: true);
782777

783778
Logger.Log($"[Rate Limit] Auto-resumed: {Url}");
784779
}

Properties/Resources.Designer.cs

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Properties/Resources.en.resx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1046,4 +1046,13 @@ Columns keep running during the limit (use at your own risk).</value>
10461046
<data name="Tooltip_RateLimitRemaining" xml:space="preserve">
10471047
<value>API remaining (primary timeline)</value>
10481048
</data>
1049+
<data name="Settings_ShowRateLimit429Screen" xml:space="preserve">
1050+
<value>Show a pause screen when rate-limited (429)</value>
1051+
</data>
1052+
<data name="Tooltip_ShowRateLimit429Screen" xml:space="preserve">
1053+
<value>When off, the timeline stays visible and the column pauses/resumes automatically (recommended).</value>
1054+
</data>
1055+
<data name="Settings_Section_Api" xml:space="preserve">
1056+
<value>API / Rate Limit</value>
1057+
</data>
10491058
</root>

Properties/Resources.resx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,4 +1045,13 @@ X のAPI制限(429)に陥りにくくなるかもしれません。</value>
10451045
<data name="Tooltip_RateLimitRemaining" xml:space="preserve">
10461046
<value>API残数(主タイムライン)</value>
10471047
</data>
1048+
<data name="Settings_ShowRateLimit429Screen" xml:space="preserve">
1049+
<value>API制限(429)時に休止画面を表示する</value>
1050+
</data>
1051+
<data name="Tooltip_ShowRateLimit429Screen" xml:space="preserve">
1052+
<value>OFFのときは、タイムライン表示を保ったまま自動で休止・復帰します(推奨)。</value>
1053+
</data>
1054+
<data name="Settings_Section_Api" xml:space="preserve">
1055+
<value>API / レート制限</value>
1056+
</data>
10481057
</root>

Readme.md

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ TweetDeck(旧)風のシンプルなマルチカラム型クライアント
4646
## 🚀 使い方
4747

4848
### ダウンロード
49-
* [v1.50.0(2026.06.21)](https://github.com/mashersan/XColumn/releases)
49+
* [v1.50.1(2026.06.21)](https://github.com/mashersan/XColumn/releases)
5050
### 基本操作
5151
1. `XColumn.exe` を実行します。
5252
2. **プロファイル**: 必要に応じて「新規」ボタンでプロファイルを作成します(デフォルトでも使用可能です)。
@@ -91,6 +91,14 @@ Chromeウェブストアの拡張機能をXColumnで使用するには、以下
9191
5. ビルドして実行します。
9292

9393
## 更新履歴
94+
### v1.50.1 (2026/06/21)
95+
- 🚀 機能改善: API制限(429)時の休止画面を既定で非表示にしました(設定→動作で表示に切替可)。表示を保ったまま自動で休止・復帰します。
96+
- 🐛 バグ修正: API制限からの自動復帰が行われない場合がある不具合を修正しました。
97+
- 🐛 バグ修正: API残数表示が再起動時・新規カラム追加時に表示されない不具合を修正しました。
98+
- 🐛 バグ修正: 自己更新後に旧実行ファイル(.old)が残っていても次回更新が失敗しないよう改善しました。
99+
- 🎨 UI改善: 設定「動作」のAPI関連項目を「API / レート制限」セクションに整理しました。
100+
- 🎨 UI改善: カラムヘッダーの「メモリ解放(🧹)」ボタンを廃止しました(↻・💤で代替)。
101+
94102
### v1.50.0 (2026/06/21)
95103
- ✨ 機能追加: アプリ内自己更新機能を追加。GitHub Releases から最新版を取得し、ダウンロード→検証→再起動までをアプリ内で完結できます。更新通知ダイアログに「今すぐ更新」を追加しました。
96104
- ✨ 機能追加: メニュー「ヘルプ」→「アップデート確認」を追加。任意のタイミングで最新版を手動確認できます。
@@ -250,7 +258,7 @@ A simple multi-column client inspired by (old) TweetDeck. It does not use the X
250258
## 🚀 How to Use
251259

252260
### Download
253-
* [v1.50.0(2026.06.21)](https://github.com/mashersan/XColumn/releases)
261+
* [v1.50.1(2026.06.21)](https://github.com/mashersan/XColumn/releases)
254262
### Basic Operations
255263
1. Run `XColumn.exe`.
256264
2. **Profiles**: Create a new profile with the "New" button if needed (the Default profile is also available).
@@ -295,6 +303,14 @@ To use Chrome Web Store extensions in XColumn, add them using one of the followi
295303
5. Build and run.
296304

297305
## Update History
306+
### v1.50.1 (2026/06/21)
307+
- 🚀 Improved: The rate-limit (429) pause screen is now hidden by default (switchable in Settings -> Behavior). Columns pause/resume automatically while keeping the timeline visible.
308+
- 🐛 Bug fix: Fixed an issue where a column could fail to auto-resume after a rate limit.
309+
- 🐛 Bug fix: Fixed an issue where the API remaining count did not appear after restart or when adding a new column.
310+
- 🐛 Bug fix: Made self-update more robust when a leftover old executable (.old) remains, so the next update no longer fails.
311+
- 🎨 UI: Grouped API-related options in Settings -> Behavior under a new "API / Rate Limit" section.
312+
- 🎨 UI: Removed the "Clear memory (🧹)" button from the column header (use ↻ or 💤 instead).
313+
298314
### v1.50.0 (2026/06/21)
299315
- ✨ New feature: Added an in-app self-update feature. It fetches the latest release from GitHub Releases and handles download, verification, and restart within the app. An "Update now" choice was added to the update notification dialog.
300316
- ✨ New feature: Added "Help" -> "Check for Updates" to manually check for a newer version anytime.

ViewModels/SettingsViewModel.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,11 @@ public class ProfileComboItem
143143
/// </summary>
144144
[ObservableProperty] private bool ignoreRateLimit429;
145145

146+
/// <summary>
147+
/// 429検知時に警告画面を表示するか。
148+
/// </summary>
149+
[ObservableProperty] private bool showRateLimit429Screen;
150+
146151
/// <summary>
147152
/// 未読位置を保持するか。
148153
/// </summary>
@@ -337,6 +342,7 @@ public SettingsViewModel(AppSettings currentSettings, AppConfig appConfig, strin
337342
UseSoftRefresh = currentSettings.UseSoftRefresh,
338343
UseRefreshJitter = currentSettings.UseRefreshJitter,
339344
IgnoreRateLimit429 = currentSettings.IgnoreRateLimit429,
345+
ShowRateLimit429Screen = currentSettings.ShowRateLimit429Screen,
340346
EnableWindowSnap = currentSettings.EnableWindowSnap,
341347
ScrollTopTolerance = currentSettings.ScrollTopTolerance,
342348
DisableFocusModeOnMediaClick = currentSettings.DisableFocusModeOnMediaClick,
@@ -414,6 +420,7 @@ public SettingsViewModel(AppSettings currentSettings, AppConfig appConfig, strin
414420
UseSoftRefresh = currentSettings.UseSoftRefresh;
415421
UseRefreshJitter = currentSettings.UseRefreshJitter;
416422
IgnoreRateLimit429 = currentSettings.IgnoreRateLimit429;
423+
ShowRateLimit429Screen = currentSettings.ShowRateLimit429Screen;
417424
KeepUnreadPosition = currentSettings.KeepUnreadPosition;
418425
ShowRateLimitRemaining = currentSettings.ShowRateLimitRemaining;
419426
EnableWindowSnap = currentSettings.EnableWindowSnap;
@@ -508,6 +515,7 @@ private void Ok()
508515
_result.UseSoftRefresh = UseSoftRefresh;
509516
_result.UseRefreshJitter = UseRefreshJitter;
510517
_result.IgnoreRateLimit429 = IgnoreRateLimit429;
518+
_result.ShowRateLimit429Screen = ShowRateLimit429Screen;
511519
_result.KeepUnreadPosition = KeepUnreadPosition;
512520
_result.ShowRateLimitRemaining = ShowRateLimitRemaining;
513521
_result.EnableWindowSnap = EnableWindowSnap;

Views/MainWindow.Columns.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@ private void AddListAutoColumn()
109109
/// <param name="newColumn">追加するカラム。</param>
110110
private void AddColumnObject(ColumnData newColumn)
111111
{
112+
// 新規カラムにも実行時の表示/動作フラグを適用(ロード列・設定適用ループと同じ値に揃える)
113+
newColumn.UseSoftRefresh = _useSoftRefresh;
114+
newColumn.KeepUnreadPosition = _keepUnreadPosition;
115+
newColumn.UseRefreshJitter = _useRefreshJitter;
116+
newColumn.ShowRateLimitRemaining = _showRateLimitRemaining;
117+
112118
if (_addColumnToLeft)
113119
{
114120
Columns.Insert(0, newColumn);
@@ -148,6 +154,7 @@ private async void LoadColumnsFromSettings(AppSettings settings)
148154
col.UseSoftRefresh = _useSoftRefresh;
149155
col.KeepUnreadPosition = _keepUnreadPosition;
150156
col.UseRefreshJitter = _useRefreshJitter;
157+
col.ShowRateLimitRemaining = _showRateLimitRemaining;
151158

152159
// Widthが未設定(0)の場合は、保存されていたグローバル設定値(settings.ColumnWidth)を適用
153160
if (col.Width <= 0)

Views/MainWindow.Config.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ private void CollectCurrentSettings(AppSettings settings)
195195
settings.UseSoftRefresh = _useSoftRefresh;
196196
settings.UseRefreshJitter = _useRefreshJitter;
197197
settings.IgnoreRateLimit429 = _ignoreRateLimit429;
198+
settings.ShowRateLimit429Screen = _showRateLimit429Screen;
198199
settings.KeepUnreadPosition = _keepUnreadPosition;
199200
settings.ShowRateLimitRemaining = _showRateLimitRemaining;
200201
settings.EnableWindowSnap = _enableWindowSnap;
@@ -289,6 +290,7 @@ private void ApplySettingsToWindow(AppSettings settings)
289290
_useSoftRefresh = settings.UseSoftRefresh;
290291
_useRefreshJitter = settings.UseRefreshJitter;
291292
_ignoreRateLimit429 = settings.IgnoreRateLimit429;
293+
_showRateLimit429Screen = settings.ShowRateLimit429Screen;
292294
_enableWindowSnap = settings.EnableWindowSnap;
293295

294296
// 自動シャットダウン設定

0 commit comments

Comments
 (0)