using System.Text; using AIStudio.Tools.PluginSystem; namespace AIStudio.Provider; public static class SourceExtensions { private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(SourceExtensions).Namespace, nameof(SourceExtensions)); /// /// Converts a list of sources to a markdown-formatted string. /// /// The list of sources to convert. /// A markdown-formatted string representing the sources. public static string ToMarkdown(this IList sources) { var sb = new StringBuilder(); sb.Append("## "); sb.AppendLine(TB("Sources")); var sourceNum = 0; foreach (var source in sources) { sb.Append($"- [{++sourceNum}] "); sb.Append('['); sb.Append(source.Title); sb.Append("]("); sb.Append(source.URL); sb.AppendLine(")"); } return sb.ToString(); } /// /// Merges a list of added sources into an existing list of sources, avoiding duplicates based on URL and Title. /// /// The existing list of sources to merge into. /// The list of sources to add. public static void MergeSources(this IList sources, IList addedSources) { foreach (var addedSource in addedSources) if (sources.All(s => s.URL != addedSource.URL && s.Title != addedSource.Title)) sources.Add((Source)addedSource); } }