|  | @@ -47,6 +47,7 @@ func HashEmail(email string) string {
 | 
	
		
			
				|  |  |  	return hex.EncodeToString(h.Sum(nil))
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// Avatar represents the avatar object.
 | 
	
		
			
				|  |  |  type Avatar struct {
 | 
	
		
			
				|  |  |  	Hash           string
 | 
	
		
			
				|  |  |  	AlterImage     string // image path
 | 
	
	
		
			
				|  | @@ -96,8 +97,8 @@ func (this *Avatar) Encode(wr io.Writer, size int) (err error) {
 | 
	
		
			
				|  |  |  			return
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		defer fd.Close()
 | 
	
		
			
				|  |  | -		img, err = jpeg.Decode(fd)
 | 
	
		
			
				|  |  | -		if err != nil {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if img, err = jpeg.Decode(fd); err != nil {
 | 
	
		
			
				|  |  |  			fd.Seek(0, os.SEEK_SET)
 | 
	
		
			
				|  |  |  			img, err = png.Decode(fd)
 | 
	
		
			
				|  |  |  		}
 | 
	
	
		
			
				|  | @@ -110,8 +111,8 @@ func (this *Avatar) Encode(wr io.Writer, size int) (err error) {
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		imgPath = this.AlterImage
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	img, err = decodeImageFile(imgPath)
 | 
	
		
			
				|  |  | -	if err != nil {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if img, err = decodeImageFile(imgPath); err != nil {
 | 
	
		
			
				|  |  |  		return
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	m := resize.Resize(uint(size), 0, img, resize.Lanczos3)
 | 
	
	
		
			
				|  | @@ -124,8 +125,7 @@ func (this *Avatar) Update() {
 | 
	
		
			
				|  |  |  		this.imagePath)
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -func (this *Avatar) UpdateTimeout(timeout time.Duration) error {
 | 
	
		
			
				|  |  | -	var err error
 | 
	
		
			
				|  |  | +func (this *Avatar) UpdateTimeout(timeout time.Duration) (err error) {
 | 
	
		
			
				|  |  |  	select {
 | 
	
		
			
				|  |  |  	case <-time.After(timeout):
 | 
	
		
			
				|  |  |  		err = fmt.Errorf("get gravatar image %s timeout", this.Hash)
 | 
	
	
		
			
				|  | @@ -140,8 +140,7 @@ type service struct {
 | 
	
		
			
				|  |  |  	altImage string
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -func (this *service) mustInt(r *http.Request, defaultValue int, keys ...string) int {
 | 
	
		
			
				|  |  | -	var v int
 | 
	
		
			
				|  |  | +func (this *service) mustInt(r *http.Request, defaultValue int, keys ...string) (v int) {
 | 
	
		
			
				|  |  |  	for _, k := range keys {
 | 
	
		
			
				|  |  |  		if _, err := fmt.Sscanf(r.FormValue(k), "%d", &v); err == nil {
 | 
	
		
			
				|  |  |  			defaultValue = v
 | 
	
	
		
			
				|  | @@ -176,8 +175,8 @@ func (this *service) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 | 
	
		
			
				|  |  |  		w.Header().Set("ETag", etag)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	w.Header().Set("Content-Type", "image/jpeg")
 | 
	
		
			
				|  |  | -	err := avatar.Encode(w, size)
 | 
	
		
			
				|  |  | -	if err != nil {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if err := avatar.Encode(w, size); err != nil {
 | 
	
		
			
				|  |  |  		log.Warn("avatar encode error: %v", err)
 | 
	
		
			
				|  |  |  		w.WriteHeader(500)
 | 
	
		
			
				|  |  |  	}
 |