XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEToolBox

【WPF】XFE工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
namespace XFEToolBox.Core.Chat;

public enum ChatFriendRequestStatus
{
    Pending = 0,
    Accepted = 1,
    Rejected = 2,
    Cancelled = 3
}

public enum ChatGroupVisibility
{
    Private = 0,
    Public = 1
}

public enum ChatGroupRole
{
    Member = 10,
    Administrator = 50,
    Owner = 100
}

public enum ChatGroupInvitationStatus
{
    Pending = 0,
    Accepted = 1,
    Rejected = 2,
    Cancelled = 3,
    Expired = 4
}

public enum ChatConversationKind
{
    Direct = 0,
    Group = 1
}

public enum ChatMessageType
{
    Text = 0,
    Image = 1,
    Video = 2,
    File = 3,
    System = 10,
    GroupInvitation = 11
}

public enum ChatAttachmentStatus
{
    Uploading = 0,
    Complete = 1,
    Rejected = 2
}

public sealed class ChatUserSummary
{
    public string Id { get; init; } = string.Empty;
    public string UserName { get; init; } = string.Empty;
    public string NickName { get; init; } = string.Empty;
    public string Bio { get; init; } = string.Empty;
}

public sealed class ChatFriendInfo
{
    public ChatUserSummary User { get; init; } = new();
    public DateTimeOffset FriendsSinceUtc { get; init; }
    public string ConversationId { get; init; } = string.Empty;
}

public sealed class ChatFriendRequestInfo
{
    public string Id { get; init; } = string.Empty;
    public ChatUserSummary FromUser { get; init; } = new();
    public ChatUserSummary ToUser { get; init; } = new();
    public ChatFriendRequestStatus Status { get; init; }
    public string Message { get; init; } = string.Empty;
    public bool IsIncoming { get; init; }
    public DateTimeOffset CreatedAtUtc { get; init; }
    public DateTimeOffset? RespondedAtUtc { get; init; }
}

public sealed class ChatGroupSummary
{
    public string Id { get; init; } = string.Empty;
    public string GroupNumber { get; init; } = string.Empty;
    public string Name { get; init; } = string.Empty;
    public string Description { get; init; } = string.Empty;
    public string AvatarUrl { get; init; } = string.Empty;
    public ChatGroupVisibility Visibility { get; init; }
    public string OwnerUserId { get; init; } = string.Empty;
    public int MemberCount { get; init; }
    public ChatGroupRole? CurrentUserRole { get; init; }
    public string ConversationId { get; init; } = string.Empty;
    public DateTimeOffset CreatedAtUtc { get; init; }
    public DateTimeOffset UpdatedAtUtc { get; init; }
}

public sealed class ChatGroupMemberInfo
{
    public string GroupId { get; init; } = string.Empty;
    public ChatUserSummary User { get; init; } = new();
    public ChatGroupRole Role { get; init; }
    public DateTimeOffset JoinedAtUtc { get; init; }
}

public sealed class ChatGroupInvitationInfo
{
    public string Id { get; init; } = string.Empty;
    public ChatGroupSummary Group { get; init; } = new();
    public ChatUserSummary InvitedBy { get; init; } = new();
    public ChatUserSummary InvitedUser { get; init; } = new();
    public ChatGroupInvitationStatus Status { get; init; }
    public string Message { get; init; } = string.Empty;
    public DateTimeOffset CreatedAtUtc { get; init; }
    public DateTimeOffset ExpiresAtUtc { get; init; }
    public DateTimeOffset? RespondedAtUtc { get; init; }
}

public sealed class ChatAttachmentInfo
{
    public string Id { get; init; } = string.Empty;
    public string OwnerUserId { get; init; } = string.Empty;
    public string FileName { get; init; } = string.Empty;
    public string ContentType { get; init; } = "application/octet-stream";
    public long TotalBytes { get; init; }
    public long UploadedBytes { get; init; }
    public string Sha256 { get; init; } = string.Empty;
    public ChatAttachmentStatus Status { get; init; }
    public DateTimeOffset CreatedAtUtc { get; init; }
    public DateTimeOffset? CompletedAtUtc { get; init; }
}

public sealed class ChatAttachmentChunkInfo
{
    public string AttachmentId { get; init; } = string.Empty;
    public long Offset { get; init; }
    public long TotalBytes { get; init; }
    public string DataBase64 { get; init; } = string.Empty;
    public bool EndOfFile { get; init; }
}

public sealed class ChatMessageInfo
{
    public string Id { get; init; } = string.Empty;
    public string ConversationId { get; init; } = string.Empty;
    public long Sequence { get; init; }
    public ChatUserSummary Sender { get; init; } = new();
    public ChatMessageType MessageType { get; init; }
    public string Text { get; init; } = string.Empty;
    public ChatAttachmentInfo? Attachment { get; init; }
    public ChatGroupInvitationInfo? GroupInvitation { get; init; }
    public string ClientMessageId { get; init; } = string.Empty;
    public string? ReplyToMessageId { get; init; }
    public DateTimeOffset CreatedAtUtc { get; init; }
    public DateTimeOffset? EditedAtUtc { get; init; }
}

public sealed class ChatMessagePage
{
    public ChatMessageInfo[] Items { get; init; } = [];
    public long? NextBeforeSequence { get; init; }
    public bool HasMore { get; init; }
}

public sealed class ChatConversationInfo
{
    public string Id { get; init; } = string.Empty;
    public ChatConversationKind Kind { get; init; }
    public ChatUserSummary? Friend { get; init; }
    public ChatGroupSummary? Group { get; init; }
    public ChatMessageInfo? LastMessage { get; init; }
    public long UnreadCount { get; init; }
    public DateTimeOffset CreatedAtUtc { get; init; }
    public DateTimeOffset UpdatedAtUtc { get; init; }
}