diff --git a/src/Decho/Converters/StringConverters.cs b/src/Decho/Converters/StringConverters.cs new file mode 100644 index 0000000..b358c1c --- /dev/null +++ b/src/Decho/Converters/StringConverters.cs @@ -0,0 +1,23 @@ +using Avalonia.Data.Converters; + +using System.Globalization; + +namespace Decho.Converters; + +public static class StringConverters +{ + public static readonly IValueConverter IsNotNullOrEmpty = new IsNotNullOrEmptyConverter(); + + private sealed class IsNotNullOrEmptyConverter : IValueConverter + { + public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + { + return value is string s && !string.IsNullOrEmpty(s); + } + + public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) + { + throw new NotSupportedException(); + } + } +} \ No newline at end of file diff --git a/src/Decho/Models/MessageModel.cs b/src/Decho/Models/MessageModel.cs index f25ffb1..87fe10c 100644 --- a/src/Decho/Models/MessageModel.cs +++ b/src/Decho/Models/MessageModel.cs @@ -10,7 +10,8 @@ public sealed class MessageModel( string channelName, string? serverUrl = null, List? attachments = null, - ReplyRefDto? replyTo = null) + ReplyRefDto? replyTo = null, + List? embeds = null) { public string Id { get; } = id; @@ -27,4 +28,6 @@ public sealed class MessageModel( public List Attachments { get; } = attachments ?? []; public ReplyRefDto? ReplyTo { get; } = replyTo; + + public List Embeds { get; } = embeds ?? []; } \ No newline at end of file diff --git a/src/Decho/Services/ChannelService.cs b/src/Decho/Services/ChannelService.cs index e7f3b2e..78b1561 100644 --- a/src/Decho/Services/ChannelService.cs +++ b/src/Decho/Services/ChannelService.cs @@ -334,6 +334,7 @@ internal sealed class ChannelService : IChannelService dto.ChannelName, entry.Server.ServerUrl, attachments, - dto.ReplyTo); + dto.ReplyTo, + dto.Embeds); } } \ No newline at end of file diff --git a/src/Decho/Services/ConnectionService.cs b/src/Decho/Services/ConnectionService.cs index d5f9732..9a5a107 100644 --- a/src/Decho/Services/ConnectionService.cs +++ b/src/Decho/Services/ConnectionService.cs @@ -1,6 +1,3 @@ -using Avalonia; -using Avalonia.Controls.ApplicationLifetimes; - using Decho.Models; using EchoHub.Client.Config; @@ -9,10 +6,6 @@ using EchoHub.Client.UI.Dialogs; using EchoHub.Core.Constants; using EchoHub.Core.DTOs; -using MsBox.Avalonia; -using MsBox.Avalonia.Base; -using MsBox.Avalonia.Enums; - using System.Collections.ObjectModel; using System.Diagnostics; @@ -167,7 +160,8 @@ public sealed class ConnectionService : IConnectionService dto.ChannelName, entry.Server.ServerUrl, attachments, - dto.ReplyTo); + dto.ReplyTo, + dto.Embeds ?? []); } internal ServerConnection? GetConnection(string serverUrl) diff --git a/src/Decho/Services/IChannelService.cs b/src/Decho/Services/IChannelService.cs index e1d416d..f084142 100644 --- a/src/Decho/Services/IChannelService.cs +++ b/src/Decho/Services/IChannelService.cs @@ -45,4 +45,4 @@ public interface IChannelService Task SendUrlAsync(string serverUrl, string channelName, string url, string? size); Task> GetHistoryAsync(string serverUrl, string channelName, int count = 50, int offset = 0); -} +} \ No newline at end of file diff --git a/src/Decho/ViewModels/MessageViewModel.cs b/src/Decho/ViewModels/MessageViewModel.cs index 36ddd64..fed3b66 100644 --- a/src/Decho/ViewModels/MessageViewModel.cs +++ b/src/Decho/ViewModels/MessageViewModel.cs @@ -54,6 +54,10 @@ public sealed class MessageViewModel(MessageModel model) : ViewModelBase public bool HasAttachments => Attachments.Count > 0; + public IReadOnlyList Embeds => Model.Embeds; + + public bool HasEmbeds => Embeds.Count > 0; + public bool ShowContent => !string.IsNullOrEmpty(Content); public string TimeText diff --git a/src/Decho/Views/MessageItemView.axaml b/src/Decho/Views/MessageItemView.axaml index 1bccc34..5cea08a 100644 --- a/src/Decho/Views/MessageItemView.axaml +++ b/src/Decho/Views/MessageItemView.axaml @@ -2,6 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:vm="using:Decho.ViewModels" xmlns:dto="using:EchoHub.Core.DTOs" + xmlns:conv="using:Decho.Converters" x:Class="Decho.Views.MessageItemView" x:DataType="vm:MessageViewModel"> @@ -67,6 +68,35 @@ + + + + + + + + + + + + + diff --git a/src/Decho/Views/MessageItemView.axaml.cs b/src/Decho/Views/MessageItemView.axaml.cs index 7dc2b25..31c0b09 100644 --- a/src/Decho/Views/MessageItemView.axaml.cs +++ b/src/Decho/Views/MessageItemView.axaml.cs @@ -267,7 +267,7 @@ public partial class MessageItemView : UserControl } catch { - // Image failed to load — filename is shown as fallback + // Image failed to load filename is shown as fallback } }