🐛 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