mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09: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