chore: release v2.4
- Add theme system (Dark/Light palettes, ModernTheme, ThemeManager) - Add InputDialog, Spinner common view - Add DuplicatesCsvExportService - Refresh views, dialogs, and view models across tabs - Update localization strings (en/fr) - Tweak services (transfer, permissions, search, user access, ownership elevation, bulk operations) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -45,10 +45,37 @@ public class SharePointGroupResolver : ISharePointGroupResolver
|
||||
|
||||
GraphServiceClient? graphClient = null;
|
||||
|
||||
// Preload the web's SiteGroups catalog once, so we can skip missing
|
||||
// groups without triggering a server round-trip per name (which fills
|
||||
// logs with "Could not resolve SP group" warnings for groups that
|
||||
// live on other sites or were renamed/deleted).
|
||||
var groupTitles = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
|
||||
try
|
||||
{
|
||||
ctx.Load(ctx.Web.SiteGroups, gs => gs.Include(g => g.Title));
|
||||
await ExecuteQueryRetryHelper.ExecuteQueryRetryAsync(ctx, null, ct);
|
||||
foreach (var g in ctx.Web.SiteGroups)
|
||||
groupTitles.Add(g.Title);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Warning("Could not enumerate SiteGroups on {Url}: {Error}", ctx.Url, ex.Message);
|
||||
}
|
||||
|
||||
foreach (var groupName in groupNames.Distinct(StringComparer.OrdinalIgnoreCase))
|
||||
{
|
||||
ct.ThrowIfCancellationRequested();
|
||||
|
||||
if (!groupTitles.Contains(groupName))
|
||||
{
|
||||
// Group not on this web — likely scoped to another site in a
|
||||
// multi-site scan. Keep quiet: log at Debug, return empty.
|
||||
Log.Debug("SP group '{Group}' not present on {Url}; skipping.",
|
||||
groupName, ctx.Url);
|
||||
result[groupName] = Array.Empty<ResolvedMember>();
|
||||
continue;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var group = ctx.Web.SiteGroups.GetByName(groupName);
|
||||
|
||||
Reference in New Issue
Block a user