🐛 Fix embeddable parsing
This commit is contained in:
		@@ -2,6 +2,7 @@ using System.Text.RegularExpressions;
 | 
			
		||||
using DysonNetwork.Shared.Data;
 | 
			
		||||
using DysonNetwork.Shared.Proto;
 | 
			
		||||
using DysonNetwork.Sphere.Chat.Realtime;
 | 
			
		||||
using DysonNetwork.Sphere.WebReader;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using NodaTime;
 | 
			
		||||
 | 
			
		||||
@@ -131,7 +132,7 @@ public partial class ChatService(
 | 
			
		||||
 | 
			
		||||
                // Preview the link
 | 
			
		||||
                var linkEmbed = await webReader.GetLinkPreviewAsync(url);
 | 
			
		||||
                embeds.Add(linkEmbed.ToDictionary());
 | 
			
		||||
                embeds.Add(EmbeddableBase.ToDictionary(linkEmbed));
 | 
			
		||||
                processedLinks++;
 | 
			
		||||
            }
 | 
			
		||||
            catch
 | 
			
		||||
 
 | 
			
		||||
@@ -351,7 +351,7 @@ public class PostController(
 | 
			
		||||
                    existingEmbeds is not List<EmbeddableBase>)
 | 
			
		||||
                    post.Meta["embeds"] = new List<Dictionary<string, object>>();
 | 
			
		||||
                var embeds = (List<Dictionary<string, object>>)post.Meta["embeds"];
 | 
			
		||||
                embeds.Add(pollEmbed.ToDictionary());
 | 
			
		||||
                embeds.Add(EmbeddableBase.ToDictionary(pollEmbed));
 | 
			
		||||
                post.Meta["embeds"] = embeds;
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
@@ -505,7 +505,7 @@ public class PostController(
 | 
			
		||||
                var embeds = (List<Dictionary<string, object>>)post.Meta["embeds"];
 | 
			
		||||
                // Remove all old poll embeds
 | 
			
		||||
                embeds.RemoveAll(e => e.TryGetValue("type", out var type) && type.ToString() == "poll");
 | 
			
		||||
                embeds.Add(pollEmbed.ToDictionary());
 | 
			
		||||
                embeds.Add(EmbeddableBase.ToDictionary(pollEmbed));
 | 
			
		||||
                post.Meta["embeds"] = embeds;
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception ex)
 | 
			
		||||
 
 | 
			
		||||
@@ -68,10 +68,8 @@ public partial class PostService(
 | 
			
		||||
                ? string.Concat(post.Content.AsSpan(0, 97), "...")
 | 
			
		||||
                : post.Content;
 | 
			
		||||
        var title = post.Title ?? (post.Content?.Length >= 10 ? post.Content[..10] + "..." : post.Content);
 | 
			
		||||
        if (content is null)
 | 
			
		||||
            content = localizer["PostOnlyMedia"];
 | 
			
		||||
        if (title is null)
 | 
			
		||||
            title = localizer["PostOnlyMedia"];
 | 
			
		||||
        content ??= localizer["PostOnlyMedia"];
 | 
			
		||||
        title ??= localizer["PostOnlyMedia"];
 | 
			
		||||
        return (title, content);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -329,7 +327,7 @@ public partial class PostService(
 | 
			
		||||
 | 
			
		||||
                // Preview the link
 | 
			
		||||
                var linkEmbed = await reader.GetLinkPreviewAsync(url);
 | 
			
		||||
                embeds.Add(linkEmbed.ToDictionary());
 | 
			
		||||
                embeds.Add(EmbeddableBase.ToDictionary(linkEmbed));
 | 
			
		||||
                processedLinks++;
 | 
			
		||||
            }
 | 
			
		||||
            catch
 | 
			
		||||
@@ -694,7 +692,7 @@ public partial class PostService(
 | 
			
		||||
 | 
			
		||||
            Guid? currentUserId = currentUser is not null ? Guid.Parse(currentUser.Id) : null;
 | 
			
		||||
            var updatedPoll = await polls.LoadPollEmbed(pollId, currentUserId);
 | 
			
		||||
            embeds[pollIndex] = updatedPoll.ToDictionary();
 | 
			
		||||
            embeds[pollIndex] = EmbeddableBase.ToDictionary(updatedPoll);
 | 
			
		||||
            post.Meta["embeds"] = embeds;
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception ex)
 | 
			
		||||
 
 | 
			
		||||
@@ -29,9 +29,9 @@ public abstract class EmbeddableBase
 | 
			
		||||
{
 | 
			
		||||
    public abstract string Type { get; }
 | 
			
		||||
 | 
			
		||||
    public Dictionary<string, object> ToDictionary()
 | 
			
		||||
    public static Dictionary<string, object> ToDictionary(dynamic input)
 | 
			
		||||
    {
 | 
			
		||||
        var jsonRaw = JsonSerializer.Serialize(this, GrpcTypeHelper.SerializerOptions);
 | 
			
		||||
        return JsonSerializer.Deserialize<Dictionary<string, object>>(jsonRaw, GrpcTypeHelper.SerializerOptions) ?? [];
 | 
			
		||||
        var jsonRaw = JsonSerializer.Serialize(input, GrpcTypeHelper.SerializerOptions);
 | 
			
		||||
        return JsonSerializer.Deserialize<Dictionary<string, object>>(jsonRaw, GrpcTypeHelper.SerializerOptions);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user