Improved avatar generator
This commit is contained in:
parent
567d146b0e
commit
c910e82a0a
48
jobs/avatars/FileSystem.go
Normal file
48
jobs/avatars/FileSystem.go
Normal file
@ -0,0 +1,48 @@
|
||||
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,
|
||||
}
|
||||
}
|
@ -54,6 +54,9 @@ func main() {
|
||||
&MyAnimeList{
|
||||
RequestLimiter: time.NewTicker(250 * time.Millisecond),
|
||||
},
|
||||
&FileSystem{
|
||||
Directory: "images/avatars/large/",
|
||||
},
|
||||
}
|
||||
|
||||
// Define the avatar outputs
|
||||
@ -118,7 +121,6 @@ func StartWorkers(queue chan *arn.User, work func(*arn.User)) {
|
||||
|
||||
// Work handles a single user.
|
||||
func Work(user *arn.User) {
|
||||
fmt.Println(user.ID, "|", user.Nick)
|
||||
user.AvatarExtension = ""
|
||||
|
||||
for _, source := range avatarSources {
|
||||
@ -129,6 +131,13 @@ func Work(user *arn.User) {
|
||||
continue
|
||||
}
|
||||
|
||||
sourceType := reflect.TypeOf(source).Elem().Name()
|
||||
|
||||
// Avoid quality loss (if it's on the file system, we don't need to write it again)
|
||||
if sourceType == "FileSystem" {
|
||||
continue
|
||||
}
|
||||
|
||||
for _, writer := range avatarOutputs {
|
||||
err := writer.SaveAvatar(avatar)
|
||||
|
||||
@ -137,7 +146,7 @@ func Work(user *arn.User) {
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Println(color.GreenString("✔"), reflect.TypeOf(source).Elem().Name(), "|", user.Nick, "|", avatar)
|
||||
fmt.Println(color.GreenString("✔"), sourceType, "|", user.Nick, "|", avatar)
|
||||
break
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user