49 lines
906 B
Go
49 lines
906 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"image"
|
||
|
"io/ioutil"
|
||
|
|
||
|
"github.com/animenotifier/arn"
|
||
|
)
|
||
|
|
||
|
var fileSystemLog = avatarLog.NewChannel("SSD")
|
||
|
|
||
|
// FileSystem loads avatar from the local filesystem.
|
||
|
type FileSystem struct {
|
||
|
Directory string
|
||
|
}
|
||
|
|
||
|
// GetAvatar returns the local image for the user.
|
||
|
func (source *FileSystem) GetAvatar(user *arn.User) *Avatar {
|
||
|
fullPath := arn.FindFileWithExtension(user.ID, source.Directory, arn.OriginalImageExtensions)
|
||
|
|
||
|
if fullPath == "" {
|
||
|
fileSystemLog.Error(user.Nick, "Not found on file system")
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
data, err := ioutil.ReadFile(fullPath)
|
||
|
|
||
|
if err != nil {
|
||
|
fileSystemLog.Error(user.Nick, err)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// Decode
|
||
|
img, format, decodeErr := image.Decode(bytes.NewReader(data))
|
||
|
|
||
|
if decodeErr != nil {
|
||
|
fileSystemLog.Error(user.Nick, decodeErr)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
return &Avatar{
|
||
|
User: user,
|
||
|
Image: img,
|
||
|
Data: data,
|
||
|
Format: format,
|
||
|
}
|
||
|
}
|