Files
BotPages/BotPages.Core/Context/PageContext.cs
FrigaT 57b3706241
All checks were successful
CI / build-test (push) Successful in 29s
Release / pack-and-publish (release) Successful in 32s
Выделены отдельные расширения
2025-12-06 07:52:01 +03:00

73 lines
2.3 KiB
C#

using BotPages.Core.Abstractions;
using BotPages.Core.Context;
using BotPages.Core.Messaging;
namespace BotPages.Core;
/// <summary>
/// Контекст страницы, объединяющий пользователя, чат, состояние и адаптер.
/// </summary>
public sealed class PageContext
{
/// <summary>Ключ сессии.</summary>
public required CompositeSessionKey SessionKey { get; init; }
/// <summary>Данные обновления.</summary>
public required UpdateContext Update { get; init; }
/// <summary>Хранилище состояния.</summary>
public required IStateStorage StateStorage { get; init; }
/// <summary>Сервис навигации.</summary>
public required NavigationService Navigation { get; init; }
/// <summary>Адаптер мессенджера.</summary>
public required IMessengerAdapter Adapter { get; init; }
/// <summary>
/// Получить билдер альбомов.
/// </summary>
public IAlbumBuilder Albums => Adapter.CreateAlbumBuilder(this);
/// <summary>
/// Начать прогресс операции.
/// </summary>
public async Task<string?> StartProgressAsync(string title, CancellationToken ct)
{
var messageId = await Adapter.StartProgressAsync(this, title, ct);
if (messageId != null)
{
_progressMessageId = messageId;
_progressTitle = title;
}
return messageId;
}
/// <summary>
/// Обновить прогресс операции.
/// </summary>
public Task UpdateProgressAsync(int percent, CancellationToken ct)
{
if (_progressMessageId != null)
{
return Adapter.UpdateProgressAsync(this, _progressMessageId, _progressTitle ?? "", percent, ct);
}
else
{
return Task.CompletedTask;
}
}
/// <summary>
/// Обновить прогресс операции.
/// </summary>
public Task UpdateProgressAsync(string messageId, int percent, CancellationToken ct)
{
return Adapter.UpdateProgressAsync(this, messageId, _progressTitle ?? "", percent, ct);
}
private string? _progressMessageId = null;
private string? _progressTitle = null;
}