mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Use a general approach to access custom/static/builtin assets (#24022)
The idea is to use a Layered Asset File-system (modules/assetfs/layered.go) For example: when there are 2 layers: "custom", "builtin", when access to asset "my/page.tmpl", the Layered Asset File-system will first try to use "custom" assets, if not found, then use "builtin" assets. This approach will hugely simplify a lot of code, make them testable. Other changes: * Simplify the AssetsHandlerFunc code * Simplify the `gitea embedded` sub-command code --------- Co-authored-by: Jason Song <i@wolfogre.com> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
		@@ -4,6 +4,7 @@
 | 
			
		||||
package util
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -18,3 +19,30 @@ func StopTimer(t *time.Timer) bool {
 | 
			
		||||
	}
 | 
			
		||||
	return stopped
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Debounce(d time.Duration) func(f func()) {
 | 
			
		||||
	type debouncer struct {
 | 
			
		||||
		mu sync.Mutex
 | 
			
		||||
		t  *time.Timer
 | 
			
		||||
	}
 | 
			
		||||
	db := &debouncer{}
 | 
			
		||||
 | 
			
		||||
	return func(f func()) {
 | 
			
		||||
		db.mu.Lock()
 | 
			
		||||
		defer db.mu.Unlock()
 | 
			
		||||
 | 
			
		||||
		if db.t != nil {
 | 
			
		||||
			db.t.Stop()
 | 
			
		||||
		}
 | 
			
		||||
		var trigger *time.Timer
 | 
			
		||||
		trigger = time.AfterFunc(d, func() {
 | 
			
		||||
			db.mu.Lock()
 | 
			
		||||
			defer db.mu.Unlock()
 | 
			
		||||
			if trigger == db.t {
 | 
			
		||||
				f()
 | 
			
		||||
				db.t = nil
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
		db.t = trigger
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user