mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	save custom avatar as PNG
This commit is contained in:
		@@ -13,7 +13,7 @@ watch_dirs = [
 | 
				
			|||||||
watch_exts = [".go"]
 | 
					watch_exts = [".go"]
 | 
				
			||||||
build_delay = 1500
 | 
					build_delay = 1500
 | 
				
			||||||
cmds = [
 | 
					cmds = [
 | 
				
			||||||
	["go", "install"], # sqlite redis memcache cert pam tidb
 | 
						["go", "install", "-race"], # sqlite redis memcache cert pam tidb
 | 
				
			||||||
	["go", "build"],
 | 
						["go", "build", "-race"],
 | 
				
			||||||
	["./gogs", "web"]
 | 
						["./gogs", "web"]
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
@@ -14,6 +14,7 @@ import (
 | 
				
			|||||||
	"image"
 | 
						"image"
 | 
				
			||||||
	"image/jpeg"
 | 
						"image/jpeg"
 | 
				
			||||||
	_ "image/jpeg"
 | 
						_ "image/jpeg"
 | 
				
			||||||
 | 
						"image/png"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"path"
 | 
						"path"
 | 
				
			||||||
	"path/filepath"
 | 
						"path/filepath"
 | 
				
			||||||
@@ -253,11 +254,9 @@ func (u *User) ValidatePassword(passwd string) bool {
 | 
				
			|||||||
// UploadAvatar saves custom avatar for user.
 | 
					// UploadAvatar saves custom avatar for user.
 | 
				
			||||||
// FIXME: split uploads to different subdirs in case we have massive users.
 | 
					// FIXME: split uploads to different subdirs in case we have massive users.
 | 
				
			||||||
func (u *User) UploadAvatar(data []byte) error {
 | 
					func (u *User) UploadAvatar(data []byte) error {
 | 
				
			||||||
	u.UseCustomAvatar = true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	img, _, err := image.Decode(bytes.NewReader(data))
 | 
						img, _, err := image.Decode(bytes.NewReader(data))
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return fmt.Errorf("Decode: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m := resize.Resize(234, 234, img, resize.NearestNeighbor)
 | 
						m := resize.Resize(234, 234, img, resize.NearestNeighbor)
 | 
				
			||||||
@@ -268,19 +267,20 @@ func (u *User) UploadAvatar(data []byte) error {
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if _, err = sess.Id(u.Id).AllCols().Update(u); err != nil {
 | 
						u.UseCustomAvatar = true
 | 
				
			||||||
		return err
 | 
						if err = updateUser(sess, u); err != nil {
 | 
				
			||||||
 | 
							return fmt.Errorf("updateUser: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	os.MkdirAll(setting.AvatarUploadPath, os.ModePerm)
 | 
						os.MkdirAll(setting.AvatarUploadPath, os.ModePerm)
 | 
				
			||||||
	fw, err := os.Create(u.CustomAvatarPath())
 | 
						fw, err := os.Create(u.CustomAvatarPath())
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return fmt.Errorf("Create: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	defer fw.Close()
 | 
						defer fw.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err = jpeg.Encode(fw, m, nil); err != nil {
 | 
						if err = png.Encode(fw, m); err != nil {
 | 
				
			||||||
		return err
 | 
							return fmt.Errorf("Encode: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return sess.Commit()
 | 
						return sess.Commit()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,6 +39,8 @@ import (
 | 
				
			|||||||
	"github.com/gogits/gogs/modules/setting"
 | 
						"github.com/gogits/gogs/modules/setting"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//FIXME: remove cache module
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var gravatarSource string
 | 
					var gravatarSource string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func UpdateGravatarSource() {
 | 
					func UpdateGravatarSource() {
 | 
				
			||||||
@@ -153,7 +155,7 @@ func (this *Avatar) Encode(wr io.Writer, size int) (err error) {
 | 
				
			|||||||
	if img, err = decodeImageFile(imgPath); err != nil {
 | 
						if img, err = decodeImageFile(imgPath); err != nil {
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	m := resize.Resize(uint(size), 0, img, resize.NearestNeighbor)
 | 
						m := resize.Resize(uint(size), 0, img, resize.Lanczos3)
 | 
				
			||||||
	return jpeg.Encode(wr, m, nil)
 | 
						return jpeg.Encode(wr, m, nil)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -205,7 +205,7 @@ func Contexter() macaron.Handler {
 | 
				
			|||||||
			Session: sess,
 | 
								Session: sess,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		// Compute current URL for real-time change language.
 | 
							// Compute current URL for real-time change language.
 | 
				
			||||||
		ctx.Data["Link"] = setting.AppSubUrl + ctx.Req.URL.Path
 | 
							ctx.Data["Link"] = setting.AppSubUrl + strings.TrimSuffix(ctx.Req.URL.Path, "/")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ctx.Data["PageStartTime"] = time.Now()
 | 
							ctx.Data["PageStartTime"] = time.Now()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -111,6 +111,7 @@ func Dashboard(ctx *middleware.Context) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Check access of private repositories.
 | 
						// Check access of private repositories.
 | 
				
			||||||
	feeds := make([]*models.Action, 0, len(actions))
 | 
						feeds := make([]*models.Action, 0, len(actions))
 | 
				
			||||||
 | 
						unameAvatars := make(map[string]string)
 | 
				
			||||||
	for _, act := range actions {
 | 
						for _, act := range actions {
 | 
				
			||||||
		if act.IsPrivate {
 | 
							if act.IsPrivate {
 | 
				
			||||||
			// This prevents having to retrieve the repository for each action
 | 
								// This prevents having to retrieve the repository for each action
 | 
				
			||||||
@@ -122,16 +123,22 @@ func Dashboard(ctx *middleware.Context) {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		// FIXME: cache results?
 | 
					
 | 
				
			||||||
		u, err := models.GetUserByName(act.ActUserName)
 | 
							// Cache results to reduce queries.
 | 
				
			||||||
		if err != nil {
 | 
							_, ok := unameAvatars[act.ActUserName]
 | 
				
			||||||
			if models.IsErrUserNotExist(err) {
 | 
							if !ok {
 | 
				
			||||||
				continue
 | 
								u, err := models.GetUserByName(act.ActUserName)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									if models.IsErrUserNotExist(err) {
 | 
				
			||||||
 | 
										continue
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									ctx.Handle(500, "GetUserByName", err)
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			ctx.Handle(500, "GetUserByName", err)
 | 
								unameAvatars[act.ActUserName] = u.AvatarLink()
 | 
				
			||||||
			return
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		act.ActAvatar = u.AvatarLink()
 | 
					
 | 
				
			||||||
 | 
							act.ActAvatar = unameAvatars[act.ActUserName]
 | 
				
			||||||
		feeds = append(feeds, act)
 | 
							feeds = append(feeds, act)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	ctx.Data["Feeds"] = feeds
 | 
						ctx.Data["Feeds"] = feeds
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user