diff --git a/source/Cute.Lib/Contentful/BulkActions/Actions/UpsertBulkAction.cs b/source/Cute.Lib/Contentful/BulkActions/Actions/UpsertBulkAction.cs index bae2e68..ef83b6b 100644 --- a/source/Cute.Lib/Contentful/BulkActions/Actions/UpsertBulkAction.cs +++ b/source/Cute.Lib/Contentful/BulkActions/Actions/UpsertBulkAction.cs @@ -428,41 +428,30 @@ private bool ValuesDiffer( var contentDisplayField = _contentType!.DisplayField; - var allFieldNames = localFlatEntry.Keys - .Concat(cloudFlatEntry.Keys) - .Where(fieldName => !fieldName.StartsWith("sys.")) - .ToHashSet(); - - foreach (var fieldName in allFieldNames) + foreach (var (fieldName, value) in localFlatEntry) { - var existsInLocal = localFlatEntry.TryGetValue(fieldName, out var localValue); - var existsInCloud = cloudFlatEntry.TryGetValue(fieldName, out var cloudValue); + if (fieldName.StartsWith("sys.")) continue; + + string? oldValue = null; - if (existsInLocal) + if (cloudFlatEntry.TryGetValue(fieldName, out var oldValueObj)) { - string? oldValue = cloudValue?.ToString(); + oldValue = cloudFlatEntry[fieldName]?.ToString(); + } - var isFieldChanged = serializer.CompareAndUpdateEntry(cloudFlatEntry, fieldName, localValue, _appendFields); + var isFieldChanged = serializer.CompareAndUpdateEntry(cloudFlatEntry, fieldName, value, _appendFields); - if (isFieldChanged) - { - changedFields.Add(fieldName, (oldValue, localValue)); - isChanged = true; - } - } - else if (existsInCloud && !string.IsNullOrEmpty(cloudValue?.ToString())) + if (isFieldChanged) { - changedFields.Add(fieldName, (cloudValue?.ToString(), null)); - cloudFlatEntry.Remove(fieldName); - isChanged = true; + changedFields.Add(fieldName, (oldValue, value)); } + + isChanged = isFieldChanged || isChanged; } if (isChanged) { - var newEntryName = localFlatEntry.ContainsKey($"{contentDisplayField}.{defaultLocale}") - ? localFlatEntry[$"{contentDisplayField}.{defaultLocale}"] - : localFlatEntry[$"{_matchField}.{defaultLocale}"]; + var newEntryName = localFlatEntry.ContainsKey($"{contentDisplayField}.{defaultLocale}") ? localFlatEntry[$"{contentDisplayField}.{defaultLocale}"] : localFlatEntry[$"{_matchField}.{defaultLocale}"]; NotifyUserInterface($"'{_contentTypeId}' - '{newEntryName}' will be updated.", progressUpdater);