// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschraenkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using System.Collections.Generic; using System.Text; using Microsoft.Extensions.ObjectPool; using Squidex.Domain.Apps.Core.Contents; using Squidex.Infrastructure.Json.Objects; namespace Squidex.Domain.Apps.Entities.Contents.Text { public static class Extensions { private static readonly ObjectPool StringBuilderPool = new DefaultObjectPool(new StringBuilderPooledObjectPolicy()); public static Dictionary ToTexts(this NamedContentData data) { var result = new Dictionary(); if (data != null) { var languages = new Dictionary(); try { foreach (var value in data.Values) { if (value != null) { foreach (var (key, jsonValue) in value) { AppendJsonText(languages, key, jsonValue); } } } foreach (var (key, sb) in languages) { result[key] = sb.ToString(); } } finally { foreach (var (_, sb) in languages) { StringBuilderPool.Return(sb); } } } return result; } private static void AppendJsonText(Dictionary languages, string language, IJsonValue value) { if (value.Type == JsonValueType.String) { AppendText(languages, language, value.ToString()); } else if (value is JsonArray array) { foreach (var item in array) { AppendJsonText(languages, language, item); } } else if (value is JsonObject obj) { foreach (var item in obj.Values) { AppendJsonText(languages, language, item); } } } private static void AppendText(Dictionary languages, string language, string text) { if (!string.IsNullOrWhiteSpace(text)) { if (!languages.TryGetValue(language, out var sb)) { sb = StringBuilderPool.Get(); languages[language] = sb; } if (sb.Length > 0) { sb.Append(" "); } sb.Append(text); } } } }