diff options
author | Joram Wilander <jwawilander@gmail.com> | 2015-12-28 08:59:23 -0500 |
---|---|---|
committer | Joram Wilander <jwawilander@gmail.com> | 2015-12-28 08:59:23 -0500 |
commit | 0b55c5f86186ee5cce9cf29f3f560b2dd5b15277 (patch) | |
tree | ada7aa42d9102fabbcd0e91979be63de8dfed08f /model/file_info.go | |
parent | f9f6b0cea3e16038aacb454486a7f9fec037127a (diff) | |
parent | cfdc5ab9998a86a8b540d8f5d5a7b429e919e4d6 (diff) | |
download | chat-0b55c5f86186ee5cce9cf29f3f560b2dd5b15277.tar.gz chat-0b55c5f86186ee5cce9cf29f3f560b2dd5b15277.tar.bz2 chat-0b55c5f86186ee5cce9cf29f3f560b2dd5b15277.zip |
Merge pull request #1755 from hmhealey/plt1108
PLT-1108 Refactored ViewImage modal and made it automatically play animated gifs
Diffstat (limited to 'model/file_info.go')
-rw-r--r-- | model/file_info.go | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/model/file_info.go b/model/file_info.go new file mode 100644 index 000000000..741b4e55d --- /dev/null +++ b/model/file_info.go @@ -0,0 +1,72 @@ +// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package model + +import ( + "bytes" + "encoding/json" + "image/gif" + "io" + "mime" + "path/filepath" +) + +type FileInfo struct { + Filename string `json:"filename"` + Size int `json:"size"` + Extension string `json:"extension"` + MimeType string `json:"mime_type"` + HasPreviewImage bool `json:"has_preview_image"` +} + +func GetInfoForBytes(filename string, data []byte) (*FileInfo, *AppError) { + size := len(data) + + var mimeType string + extension := filepath.Ext(filename) + isImage := IsFileExtImage(extension) + if isImage { + mimeType = GetImageMimeType(extension) + } else { + mimeType = mime.TypeByExtension(extension) + } + + hasPreviewImage := isImage + if mimeType == "image/gif" { + // just show the gif itself instead of a preview image for animated gifs + if gifImage, err := gif.DecodeAll(bytes.NewReader(data)); err != nil { + return nil, NewAppError("GetInfoForBytes", "Could not decode gif.", "filename="+filename) + } else { + hasPreviewImage = len(gifImage.Image) == 1 + } + } + + return &FileInfo{ + Filename: filename, + Size: size, + Extension: extension[1:], + MimeType: mimeType, + HasPreviewImage: hasPreviewImage, + }, nil +} + +func (info *FileInfo) ToJson() string { + b, err := json.Marshal(info) + if err != nil { + return "" + } else { + return string(b) + } +} + +func FileInfoFromJson(data io.Reader) *FileInfo { + decoder := json.NewDecoder(data) + + var info FileInfo + if err := decoder.Decode(&info); err != nil { + return nil + } else { + return &info + } +} |