You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.7 KiB
99 lines
2.7 KiB
3 years ago
|
package message
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"time"
|
||
|
|
||
|
"github.com/gotd/td/tg"
|
||
|
)
|
||
|
|
||
|
// Video creates new VideoDocumentBuilder to create video attachment.
|
||
|
func (u *UploadedDocumentBuilder) Video() *VideoDocumentBuilder {
|
||
|
b := u
|
||
|
if u.doc.MimeType == "" {
|
||
|
b = u.MIME(DefaultVideoMIME)
|
||
|
}
|
||
|
return &VideoDocumentBuilder{
|
||
|
doc: b,
|
||
|
attr: tg.DocumentAttributeVideo{},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// RoundVideo creates new VideoDocumentBuilder to create round video attachment.
|
||
|
func (u *UploadedDocumentBuilder) RoundVideo() *VideoDocumentBuilder {
|
||
|
return u.Video().Round()
|
||
|
}
|
||
|
|
||
|
// VideoDocumentBuilder is a Video media option.
|
||
|
type VideoDocumentBuilder struct {
|
||
|
doc *UploadedDocumentBuilder
|
||
|
attr tg.DocumentAttributeVideo
|
||
|
}
|
||
|
|
||
|
// Round sets flag to mark this video as round.
|
||
|
func (u *VideoDocumentBuilder) Round() *VideoDocumentBuilder {
|
||
|
u.attr.RoundMessage = true
|
||
|
return u
|
||
|
}
|
||
|
|
||
|
// SupportsStreaming sets flag to mark this video as which supports streaming.
|
||
|
func (u *VideoDocumentBuilder) SupportsStreaming() *VideoDocumentBuilder {
|
||
|
u.attr.SupportsStreaming = true
|
||
|
return u
|
||
|
}
|
||
|
|
||
|
// Resolution sets resolution of this video.
|
||
|
func (u *VideoDocumentBuilder) Resolution(w, h int) *VideoDocumentBuilder {
|
||
|
u.attr.W = w
|
||
|
u.attr.H = h
|
||
|
return u
|
||
|
}
|
||
|
|
||
|
// Duration sets duration of video file.
|
||
|
func (u *VideoDocumentBuilder) Duration(duration time.Duration) *VideoDocumentBuilder {
|
||
|
return u.DurationSeconds(int(duration.Seconds()))
|
||
|
}
|
||
|
|
||
|
// DurationSeconds sets duration in seconds.
|
||
|
func (u *VideoDocumentBuilder) DurationSeconds(duration int) *VideoDocumentBuilder {
|
||
|
u.attr.Duration = duration
|
||
|
return u
|
||
|
}
|
||
|
|
||
|
// apply implements MediaOption.
|
||
|
func (u *VideoDocumentBuilder) apply(ctx context.Context, b *multiMediaBuilder) error {
|
||
|
return u.doc.Attributes(&u.attr).apply(ctx, b)
|
||
|
}
|
||
|
|
||
|
// applyMulti implements MultiMediaOption.
|
||
|
func (u *VideoDocumentBuilder) applyMulti(ctx context.Context, b *multiMediaBuilder) error {
|
||
|
return u.doc.Attributes(&u.attr).applyMulti(ctx, b)
|
||
|
}
|
||
|
|
||
|
// Video adds video attachment.
|
||
|
func Video(file tg.InputFileClass, caption ...StyledTextOption) *VideoDocumentBuilder {
|
||
|
// TODO(tdakkota): better MIME and attributes building.
|
||
|
return UploadedDocument(file, caption...).Video()
|
||
|
}
|
||
|
|
||
|
// RoundVideo adds round video attachment.
|
||
|
func RoundVideo(file tg.InputFileClass, caption ...StyledTextOption) *VideoDocumentBuilder {
|
||
|
return UploadedDocument(file, caption...).RoundVideo()
|
||
|
}
|
||
|
|
||
|
// Video sends video.
|
||
|
func (b *Builder) Video(
|
||
|
ctx context.Context,
|
||
|
file tg.InputFileClass, caption ...StyledTextOption,
|
||
|
) (tg.UpdatesClass, error) {
|
||
|
return b.Media(ctx, Video(file, caption...))
|
||
|
}
|
||
|
|
||
|
// RoundVideo sends round video.
|
||
|
func (b *Builder) RoundVideo(
|
||
|
ctx context.Context,
|
||
|
file tg.InputFileClass, caption ...StyledTextOption,
|
||
|
) (tg.UpdatesClass, error) {
|
||
|
return b.Media(ctx, RoundVideo(file, caption...))
|
||
|
}
|