package utils import ( "bytes" "strings" "github.com/gabriel-vasile/mimetype" "maunium.net/go/mautrix" "maunium.net/go/mautrix/event" ) type File struct { Name string Type string MsgType event.MessageType Length int Content []byte } func NewFile(name string, content []byte) *File { file := &File{ Name: name, Content: content, } file.Length = len(content) mtype := mimetype.Detect(content) file.Type = mtype.String() file.MsgType = mimeMsgType(file.Type) return file } func (f *File) Convert() *mautrix.ReqUploadMedia { return &mautrix.ReqUploadMedia{ ContentBytes: f.Content, Content: bytes.NewReader(f.Content), ContentLength: int64(f.Length), ContentType: f.Type, FileName: f.Name, } } func mimeMsgType(mime string) event.MessageType { if mime == "" { return event.MsgFile } if !strings.Contains(mime, "/") { return event.MsgFile } msection := strings.Split(mime, "/")[0] switch msection { case "image": return event.MsgImage case "video": return event.MsgVideo case "audio": return event.MsgAudio default: return event.MsgFile } }