Добавьте файлы проекта.

This commit is contained in:
Курнат Андрей
2026-03-13 21:01:04 +03:00
commit b460f17029
111 changed files with 5803 additions and 0 deletions

View File

@@ -0,0 +1,77 @@
using System.Collections.ObjectModel;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Massenger.Client.Pages;
using Massenger.Client.Services;
using Massenger.Shared;
namespace Massenger.Client.ViewModels;
public partial class ChatsViewModel(ApiClient apiClient, RealtimeService realtimeService) : BaseViewModel
{
public ObservableCollection<ChatSummaryDto> Chats { get; } = [];
[ObservableProperty]
private ChatSummaryDto? selectedChat;
public string EmptyState => Chats.Count == 0 ? "No chats yet. Open Discover to start a dialog, group or channel." : string.Empty;
[RelayCommand]
public async Task LoadAsync()
{
await RunBusyAsync(async () =>
{
var chats = await apiClient.GetChatsAsync();
MainThread.BeginInvokeOnMainThread(() =>
{
Chats.Clear();
foreach (var chat in chats)
{
Chats.Add(chat);
}
OnPropertyChanged(nameof(EmptyState));
});
});
}
[RelayCommand]
public async Task OpenChatAsync(ChatSummaryDto? chat)
{
if (chat is null)
{
return;
}
SelectedChat = null;
await Shell.Current.GoToAsync($"{nameof(ChatPage)}?chatId={chat.Id}");
}
public void AttachRealtime()
{
realtimeService.MessageReceived -= OnRealtimeChanged;
realtimeService.MessageUpdated -= OnRealtimeChanged;
realtimeService.ChatCreated -= OnChatCreated;
realtimeService.ChatsChanged -= OnRealtimeChanged;
realtimeService.MessageReceived += OnRealtimeChanged;
realtimeService.MessageUpdated += OnRealtimeChanged;
realtimeService.ChatCreated += OnChatCreated;
realtimeService.ChatsChanged += OnRealtimeChanged;
}
private void OnChatCreated(object? sender, ChatSummaryDto e)
{
MainThread.BeginInvokeOnMainThread(() => _ = LoadAsync());
}
private void OnRealtimeChanged(object? sender, EventArgs e)
{
MainThread.BeginInvokeOnMainThread(() => _ = LoadAsync());
}
private void OnRealtimeChanged(object? sender, MessageDto e)
{
MainThread.BeginInvokeOnMainThread(() => _ = LoadAsync());
}
}