< Summary

Information
Class: TeleFlow.Telegram.MediaGroup
Assembly: TeleFlow.Framework
File(s): /_/src/TeleFlow.Framework/MediaGroup.cs
Line coverage
100%
Covered lines: 56
Uncovered lines: 0
Coverable lines: 56
Total lines: 124
Line coverage: 100%
Branch coverage
75%
Covered branches: 12
Total branches: 16
Branch coverage: 75%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%11100%
Create()100%11100%
Photo(...)100%22100%
Video(...)50%22100%
Document(...)50%22100%
Audio(...)50%22100%
LivePhoto(...)50%22100%
Item(...)100%11100%
ToMedia()100%66100%

File(s)

/_/src/TeleFlow.Framework/MediaGroup.cs

#LineLine coverage
 1using TeleFlow.Telegram.Schema.Abstractions;
 2using TeleFlow.Telegram.Schema.Types;
 3
 4namespace TeleFlow.Telegram;
 5
 6public sealed class MediaGroup
 7{
 108    private readonly List<InputMediaGroupItem> _items = [];
 9
 10    private MediaGroup()
 11    {
 1012    }
 13
 14    public static MediaGroup Create()
 15    {
 1016        return new MediaGroup();
 17    }
 18
 19    public MediaGroup Photo(
 20        InputFileString media,
 21        string? caption = null,
 22        TelegramParseMode? parseMode = null)
 23    {
 2424        ArgumentNullException.ThrowIfNull(media);
 25
 2426        return Item(
 2427            InputMediaGroupItem.From(
 2428                new InputMediaPhoto
 2429                {
 2430                    Media = media,
 2431                    Caption = caption,
 2432                    ParseMode = parseMode?.Value
 2433                }));
 34    }
 35
 36    public MediaGroup Video(
 37        InputFileString media,
 38        string? caption = null,
 39        TelegramParseMode? parseMode = null)
 40    {
 141        ArgumentNullException.ThrowIfNull(media);
 42
 143        return Item(
 144            InputMediaGroupItem.From(
 145                new InputMediaVideo
 146                {
 147                    Media = media,
 148                    Caption = caption,
 149                    ParseMode = parseMode?.Value
 150                }));
 51    }
 52
 53    public MediaGroup Document(
 54        InputFileString media,
 55        string? caption = null,
 56        TelegramParseMode? parseMode = null)
 57    {
 158        ArgumentNullException.ThrowIfNull(media);
 59
 160        return Item(
 161            InputMediaGroupItem.From(
 162                new InputMediaDocument
 163                {
 164                    Media = media,
 165                    Caption = caption,
 166                    ParseMode = parseMode?.Value
 167                }));
 68    }
 69
 70    public MediaGroup Audio(
 71        InputFileString media,
 72        string? caption = null,
 73        TelegramParseMode? parseMode = null)
 74    {
 175        ArgumentNullException.ThrowIfNull(media);
 76
 177        return Item(
 178            InputMediaGroupItem.From(
 179                new InputMediaAudio
 180                {
 181                    Media = media,
 182                    Caption = caption,
 183                    ParseMode = parseMode?.Value
 184                }));
 85    }
 86
 87    public MediaGroup LivePhoto(
 88        InputFileString media,
 89        InputFileString photo,
 90        string? caption = null,
 91        TelegramParseMode? parseMode = null)
 92    {
 193        ArgumentNullException.ThrowIfNull(media);
 194        ArgumentNullException.ThrowIfNull(photo);
 95
 196        return Item(
 197            InputMediaGroupItem.From(
 198                new InputMediaLivePhoto
 199                {
 1100                    Media = media,
 1101                    Photo = photo,
 1102                    Caption = caption,
 1103                    ParseMode = parseMode?.Value
 1104                }));
 105    }
 106
 107    public MediaGroup Item(InputMediaGroupItem item)
 108    {
 30109        ArgumentNullException.ThrowIfNull(item);
 110
 30111        _items.Add(item);
 30112        return this;
 113    }
 114
 115    public IReadOnlyList<InputMediaGroupItem> ToMedia()
 116    {
 10117        if (_items.Count is < 2 or > 10)
 118        {
 3119            throw new InvalidOperationException("Media group must contain between 2 and 10 items.");
 120        }
 121
 7122        return _items.ToArray();
 123    }
 124}