Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alist-org
GitHub Repository: alist-org/alist
Path: blob/main/pkg/utils/time.go
1560 views
1
package utils
2
3
import (
4
"sync"
5
"time"
6
)
7
8
var CNLoc = time.FixedZone("UTC", 8*60*60)
9
10
func MustParseCNTime(str string) time.Time {
11
lastOpTime, _ := time.ParseInLocation("2006-01-02 15:04:05 -07", str+" +08", CNLoc)
12
return lastOpTime
13
}
14
15
func NewDebounce(interval time.Duration) func(f func()) {
16
var timer *time.Timer
17
var lock sync.Mutex
18
return func(f func()) {
19
lock.Lock()
20
defer lock.Unlock()
21
if timer != nil {
22
timer.Stop()
23
}
24
timer = time.AfterFunc(interval, f)
25
}
26
}
27
28
func NewDebounce2(interval time.Duration, f func()) func() {
29
var timer *time.Timer
30
var lock sync.Mutex
31
return func() {
32
lock.Lock()
33
defer lock.Unlock()
34
if timer == nil {
35
timer = time.AfterFunc(interval, f)
36
}
37
timer.Reset(interval)
38
}
39
}
40
41
func NewThrottle(interval time.Duration) func(func()) {
42
var lastCall time.Time
43
var lock sync.Mutex
44
return func(fn func()) {
45
lock.Lock()
46
defer lock.Unlock()
47
48
now := time.Now()
49
if now.Sub(lastCall) >= interval {
50
lastCall = now
51
go fn()
52
}
53
}
54
}
55
56
func NewThrottle2(interval time.Duration, fn func()) func() {
57
var lastCall time.Time
58
var lock sync.Mutex
59
return func() {
60
lock.Lock()
61
defer lock.Unlock()
62
63
now := time.Now()
64
if now.Sub(lastCall) >= interval {
65
lastCall = now
66
go fn()
67
}
68
}
69
}
70
71