diff --git a/AvatarExplorer.Core/Services/Items/ItemNavigationService.cs b/AvatarExplorer.Core/Services/Items/ItemNavigationService.cs index 61aa1567..083a07a2 100644 --- a/AvatarExplorer.Core/Services/Items/ItemNavigationService.cs +++ b/AvatarExplorer.Core/Services/Items/ItemNavigationService.cs @@ -307,7 +307,9 @@ private void HandleFile(string hash) } /// - /// 現在選択されているアイテム内のファイルを検索します。アイテムが選択されていない場合は空の配列を返します。 + /// 現在選択されているアイテム内のファイルを検索します。 + /// フォルダが選択されている場合はそのフォルダ内で、フォルダが選択されていない場合はアイテム全体で検索を行います。 + /// アイテムが選択されていない場合は空の配列を返します。 /// /// 検索クエリ(ファイル名の一部や拡張子など)。 /// 条件に一致した として格納した配列。 @@ -316,10 +318,17 @@ public IIdentifiable[] SearchFilesForCurrentItem(string query) var itemId = GetCurrentItemId(); if (itemId == null) return []; + // フォルダーが選択されていたら、そのフォルダー内で検索をかける + var folderState = _state.FirstOrDefault(FolderPrefix)?.Value; + var folderPath = folderState != null && TryParseState(folderState, out _, out var folderHash) + ? ResolvePathInternal(folderHash) + : null; + var itemFiles = PopulatePathCache(itemId); var searchResults = _items.ItemRepository.SearchItemFiles(itemId, query); return searchResults + .Where(i => folderPath == null || i.ParentFolderPath == folderPath) .NaturalSort(i => i.FileName) .Select(f => itemFiles.FirstOrDefault(i => i.FilePath == f.FilePath)) .Where(f => f != null) diff --git a/docs/02-navigation-system.md b/docs/02-navigation-system.md index 7013dd09..9f736708 100644 --- a/docs/02-navigation-system.md +++ b/docs/02-navigation-system.md @@ -361,7 +361,7 @@ if (targetAuthor != null) ## SearchFilesForCurrentItem() -現在のアイテム内でファイルを検索します。 +現在のアイテム内でファイルを検索します。フォルダが選択されている場合はそのフォルダ内に検索範囲が限定されます。 ```csharp // アイテムを選択した状態で diff --git a/docs/09-search.md b/docs/09-search.md index b12ce752..cf960cd9 100644 --- a/docs/09-search.md +++ b/docs/09-search.md @@ -438,7 +438,7 @@ foreach (var token in query.Tokens) ## SearchFilesForCurrentItem() -アイテム内のファイルを検索: +アイテム内のファイルを検索します。フォルダが選択されている場合はそのフォルダ内で、選択されていない場合はアイテム全体から検索します。 ```csharp var navigation = app.ItemNavigationService;