설정창에서 런처 색인 진행률과 남은 시간을 직접 표시하도록 개선
Some checks failed
Release Gate / gate (push) Has been cancelled

- IndexService에 LauncherIndexProgressInfo와 진행 이벤트를 추가해 전체 색인 중 진행률, 상태 문구, 예상 남은 시간을 계산하도록 변경
- 설정창 일반 탭의 인덱싱 속도 아래에 프로그레스바와 상태/상세 문구 패널을 추가하고 실시간으로 바인딩되도록 연결
- 전체 색인 완료 후 최근 색인 완료 요약과 검색 가능 항목 수를 같은 위치에 유지해 런처 하단 완료 문구 의존도를 낮춤
- README와 DEVELOPMENT 문서에 변경 이력 및 반영 시각을 기록

검증
- dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\verify\ -p:IntermediateOutputPath=obj\verify\
- 경고 0 / 오류 0
This commit is contained in:
2026-04-06 19:43:18 +09:00
parent cc12177252
commit 1f52bc1cc3
5 changed files with 148 additions and 5 deletions

View File

@@ -15,6 +15,7 @@ public partial class SettingsWindow : Window
private readonly SettingsViewModel _vm;
private readonly Action<string> _previewCallback;
private readonly Action _revertCallback;
private IndexService? _indexService;
private bool _saved;
private bool _isDisplayModeSyncing;
@@ -59,9 +60,15 @@ public partial class SettingsWindow : Window
catch { /* 인덱싱 실패해도 설정 저장은 완료 */ }
});
};
Closed += (_, _) =>
{
if (_indexService != null)
_indexService.IndexProgressChanged -= IndexService_IndexProgressChanged;
};
Loaded += async (_, _) =>
{
BindIndexProgress();
RefreshHotkeyBadges();
SetVersionText();
EnsureHotkeyInCombo();
@@ -104,6 +111,35 @@ public partial class SettingsWindow : Window
};
}
private void BindIndexProgress()
{
_indexService = (System.Windows.Application.Current as App)?.IndexService;
if (_indexService == null)
return;
_indexService.IndexProgressChanged -= IndexService_IndexProgressChanged;
_indexService.IndexProgressChanged += IndexService_IndexProgressChanged;
ApplyIndexProgress(_indexService.CurrentProgress);
}
private void IndexService_IndexProgressChanged(object? sender, LauncherIndexProgressInfo e)
{
Dispatcher.BeginInvoke(() => ApplyIndexProgress(e));
}
private void ApplyIndexProgress(LauncherIndexProgressInfo progress)
{
if (IndexProgressPanel == null || IndexProgressStatusText == null || IndexProgressBar == null || IndexProgressDetailText == null)
return;
IndexProgressPanel.Visibility = Visibility.Visible;
IndexProgressStatusText.Text = progress.StatusText;
IndexProgressDetailText.Text = progress.DetailText;
IndexProgressBar.IsIndeterminate = progress.IsRunning && progress.ProgressPercent <= 0.01;
if (!IndexProgressBar.IsIndeterminate)
IndexProgressBar.Value = progress.ProgressPercent;
}
private bool HasLegacyAgentTab()
=> MainSettingsTab != null && AgentTabItem != null && MainSettingsTab.Items.Contains(AgentTabItem);