From a8c4baf43ad523a62e88a12c572c90a2f4bc21ea Mon Sep 17 00:00:00 2001 From: Kevin Jump Date: Tue, 28 Jul 2026 14:32:22 +0100 Subject: [PATCH] Restore backoffice guard and content paging fixes dropped in v17->v18 merge An audit of the v17/main -> v18/main squash-merge (#992) found two v17 fixes that didn't survive the port: - uSyncBackOfficeComposer no longer gated uSync registration behind IsUmbracoBackOfficeEnabled(), so it would run on headless/delivery-only servers where it shouldn't (v17 #962). - ContentHandler lost its concrete-typed paged child fetching when child fetching was centralized into PublishableContentHandlerBase, causing an extra contentService.GetById per descendant item during export/import (v17 #990). MediaHandler already avoids this by overriding GetChildItemsAsync directly; ContentHandler now mirrors that pattern. Co-Authored-By: Claude Sonnet 5 --- .../SyncHandlers/Handlers/ContentHandler.cs | 29 +++++++++++++++++++ uSync.BackOffice/uSyncBackOfficeComposer.cs | 9 +++--- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/uSync.BackOffice/SyncHandlers/Handlers/ContentHandler.cs b/uSync.BackOffice/SyncHandlers/Handlers/ContentHandler.cs index 397d9896..b14cffa6 100644 --- a/uSync.BackOffice/SyncHandlers/Handlers/ContentHandler.cs +++ b/uSync.BackOffice/SyncHandlers/Handlers/ContentHandler.cs @@ -81,6 +81,35 @@ protected override Task HasChildrenAsync(IContent item) protected override IEnumerable GetRootItems() => _contentService.GetRootContent(); + /// + protected override async Task> GetChildItemsAsync(IEntity? parent) + { + if (parent != null) + { + var items = new List(); + const int pageSize = 5000; + var page = 0; + var total = long.MaxValue; + while (page * pageSize < total) + { + items.AddRange(_contentService.GetPagedChildren( + id: parent.Id, + pageIndex: page++, + pageSize: pageSize, + totalRecords: out total, + propertyAliases: null, + filter: null, + ordering: null, + loadTemplates: true)); + } + return items; + } + else + { + return await Task.FromResult(GetRootItems()); + } + } + /// /// Handle the publish events for content /// diff --git a/uSync.BackOffice/uSyncBackOfficeComposer.cs b/uSync.BackOffice/uSyncBackOfficeComposer.cs index abdca6e9..a80f34d1 100644 --- a/uSync.BackOffice/uSyncBackOfficeComposer.cs +++ b/uSync.BackOffice/uSyncBackOfficeComposer.cs @@ -18,10 +18,9 @@ public class uSyncBackOfficeComposer : IComposer /// public void Compose(IUmbracoBuilder builder) { - // uSync core will actually run when their is no back office loaded. - //if (builder.IsUmbracoBackOfficeEnabled() is false) - // return; - - builder.AdduSync(); + if (builder.IsUmbracoBackOfficeEnabled() is true) + { + builder.AdduSync(); + } } }